From 612747593b8c36f36ce153ba7c723f643dd860ef Mon Sep 17 00:00:00 2001 From: Adrian Quintana Date: Wed, 2 Oct 2024 13:00:19 +0100 Subject: [PATCH 1/4] Revert "add skeleton structure" --- .babelrc | 33 + .browserslistrc | 5 - .env | 5 - .env.production | 1 - .eslintignore | 2 - .eslintrc.js | 16 + .eslintrc.json | 77 - .githooks/dep-check | 10 - .github/pull_request_template.md | 9 - .github/workflows/main.yml | 47 - .gitignore | 67 +- .husky/.gitignore | 1 - .husky/post-merge | 4 - .husky/pre-push | 4 - .nvmrc | 2 +- .prettierignore | 4 - .prettierrc.js | 8 +- .travis.yml | 41 - .vscode/settings.json | 3 - README.md | 78 +- babel.config.js | 3 - config/config.template.json | 4 + config/fileMock.js | 3 - config/setup.js | 25 + config/styleMock.js | 3 - config/testHelpers.js | 8 - config/testSetup.ts | 13 - i18n/en.pot | 30 - i18n/es.po | 30 - .../MaterialIcons-Regular.eot | Bin .../MaterialIcons-Regular.ttf | Bin .../MaterialIcons-Regular.woff | Bin .../MaterialIcons-Regular.woff2 | Bin .../material-design-icons/material-icons.css | 38 + includes/roboto-font.css | 36 + index.html | 25 +- LICENSE => license.txt | 8 +- metadata/attributes.json | 203 + package.json | 220 +- public/favicon.ico | Bin 4286 -> 0 bytes .../material-design-icons/material-icons.css | 37 - public/includes/roboto-font.css | 47 - public/manifest.json | 15 - .../customjscss/data-entry-contentscript.js | 37 + resources/customjscss/nrc.css | 390 + .../check-duplicate-group-sets-items.js | 42 + resources/scripts/fix-duplicated-uids.sh | 65 + src/App/App.component.js | 68 + src/App/App.scss | 53 + .../app.theme.js} | 33 +- .../dhis2.theme.ts => App/dhis2.theme.js} | 12 +- src/CompositionRoot.ts | 35 - src/DataSets/DataSetPeriods.js | 142 + src/DataSets/DataSets.component.js | 661 + src/DataSets/DetailsBox.component.js | 257 + src/DataSets/DetailsBox.scss | 30 + .../DetailsBoxWithScroll.component.js | 43 + src/DataSets/FormSteps.component.js | 225 + src/DataSets/Forms/CoreSections.component.js | 8 + .../Forms/Disaggregation.component.js | 145 + .../Forms/GeneralInformation.component.js | 178 + src/DataSets/Forms/GreyFields.component.js | 39 + src/DataSets/Forms/InitialConfig.component.js | 165 + .../Forms/NonCoreSections.component.js | 6 + .../Forms/OrganisationUnit.component.js | 73 + src/DataSets/Forms/Save.component.js | 154 + src/DataSets/Forms/Sections.component.js | 640 + src/DataSets/Forms/Sharing.component.js | 88 + src/DataSets/List.scss | 27 + src/DataSets/PeriodsDialog.js | 200 + src/DataSets/context.actions.js | 136 + src/DataSets/delete.store.js | 31 + src/DataSets/details.store.js | 3 + src/DataSets/list.actions.js | 30 + src/DataSets/log.js | 125 + src/DataSets/logs.store.js | 3 + src/DataSets/orgUnits.store.js | 3 + src/DataSets/periods.store.js | 3 + src/DataSets/sharing.store.js | 3 + src/ListActionBar/ListActionBar.component.js | 44 + src/LoadingMask/LoadingMask.component.js | 15 + src/LoadingStatus/LoadingStatus.component.js | 24 + .../MultipleDataTable.component.js | 243 + .../MultipleDataTableContextMenu.component.js | 107 + .../MultipleDataTableRow.component.js | 174 + .../MultipleDataTableRow.scss | 4 + src/MultipleDataTable/PopoverNoFlicker.js | 109 + src/Pagination/Pagination.scss | 37 + src/SearchBox/SearchBox.component.js | 65 + src/SessionDialog/SessionDialog.component.js | 61 + src/Settings/Settings.component.js | 240 + src/Snackbar/SnackbarContainer.component.js | 71 + src/Snackbar/snack.actions.js | 40 + src/Snackbar/snack.store.js | 3 + src/Wizard/Wizard.component.js | 182 + src/app-config.ts | 30 - src/app.js | 106 + .../collapsible-box/CollapsibleBox.js | 73 + .../collapsible-box/CollapsibleBox.scss | 32 + src/components/sharing-dialog/Access.jsx | 165 + .../sharing-dialog/AutoComplete.jsx | 157 + .../sharing-dialog/ConfirmationDialog.jsx | 64 + .../sharing-dialog/PermissionOption.jsx | 41 + .../sharing-dialog/PermissionPicker.jsx | 167 + src/components/sharing-dialog/Sharing.jsx | 222 + .../sharing-dialog/SharingDialog.jsx | 41 + .../sharing-dialog/SharingDialogMultiple.jsx | 63 + src/components/sharing-dialog/UserSearch.jsx | 165 + src/components/sharing-dialog/i18n.js | 12 + src/components/sharing-dialog/utils.js | 149 + src/config/periodTypes.json | 13 + src/data/api-futures.ts | 20 - src/data/repositories/UserD2Repository.ts | 40 - src/data/repositories/UserTestRepository.ts | 11 - src/domain/entities/Ref.ts | 9 - src/domain/entities/User.ts | 24 - src/domain/entities/__tests__/User.spec.ts | 37 - src/domain/entities/__tests__/userFixtures.ts | 31 - src/domain/entities/generic/Collection.ts | 328 - src/domain/entities/generic/Either.ts | 86 - src/domain/entities/generic/Future.ts | 193 - src/domain/entities/generic/HashMap.ts | 128 - src/domain/entities/generic/Rec.ts | 67 - src/domain/entities/generic/Struct.ts | 45 - .../generic/__tests/Collection.spec.ts | 336 - .../entities/generic/__tests/Future.spec.ts | 280 - .../entities/generic/__tests/HashMap.spec.ts | 189 - .../entities/generic/__tests/Rec.spec.ts | 43 - .../entities/generic/__tests/Struct.spec.ts | 19 - src/domain/repositories/UserRepository.ts | 6 - src/domain/usecases/GetCurrentUserUseCase.ts | 11 - .../__tests__/GetCurrentUserUseCase.spec.ts | 11 - src/forms/DataInputPeriods.component.js | 234 + ...tCategoryComboSelectionDialog.component.js | 199 + src/forms/Dropdown.component.js | 226 + src/forms/FormHelpers.js | 186 + src/forms/GreyFieldsTable.component.js | 410 + src/forms/MultiSelect.component.js | 88 + src/forms/RichDropdown.component.js | 244 + src/forms/TimePeriodSelector.component.js | 90 + src/forms/YearlyDateSelector.component.js | 102 + src/forms/form-fields/check-box.js | 57 + src/forms/form-fields/date-select.js | 108 + src/forms/form-fields/drop-down-async.js | 190 + src/forms/form-fields/drop-down.js | 226 + .../helpers/QuickAddLink.component.js | 46 + .../helpers/RefreshMask.component.js | 31 + src/forms/form-fields/icon-picker.js | 20 + src/forms/form-fields/multi-select.js | 373 + src/forms/form-fields/multi-toggle.js | 79 + src/forms/form-fields/text-field.js | 96 + src/i18n/i18n_module_ar.properties | 249 + src/i18n/i18n_module_en.properties | 249 + src/i18n/i18n_module_es.properties | 249 + src/i18n/i18n_module_fr.properties | 249 + src/models/CustomForm.js | 240 + src/models/DataSetStore.js | 969 + src/models/ProjectService.js | 66 + src/models/Section.js | 649 + src/models/Settings.js | 295 + src/models/Sharing.js | 38 + src/models/custom-form-resources/script.js | 393 + .../custom-form-resources/sectionForm.vm | 275 + src/models/custom-form-resources/style.css | 217 + src/models/data-periods.js | 338 + src/models/dataset.js | 46 + src/router.js | 30 + src/scripts/README.md | 5 + src/scripts/example.ts | 27 - src/scripts/migrate-datasets-input-periods.ts | 306 + src/scripts/tsconfig.json | 22 - src/tests/setup.js | 9 - src/types/d2-api.ts | 7 - src/types/d2-ui.d.ts | 3 - src/types/d2.d.ts | 6 - src/types/declarations.d.ts | 4 - src/types/i18n.d.ts | 5 - src/utils/Dhis2Helpers.js | 633 + src/utils/ObservedEvents.mixin.js | 45 + src/utils/ObserverRegistry.mixin.js | 15 + src/utils/i18n-typed.ts | 38 - src/utils/i18n.ts | 3 - src/utils/lodash-mixins.js | 64 + src/utils/tests.tsx | 25 - src/utils/ts-utils.ts | 76 - src/utils/uid.ts | 52 - src/vite-env.d.ts | 1 - src/webapp/components/card-grid/CardGrid.tsx | 50 - src/webapp/components/card-grid/MenuCard.tsx | 76 - .../components/page-header/PageHeader.tsx | 72 - src/webapp/components/share/Share.tsx | 140 - .../components/share/logo-eyeseetea.png | Bin 16196 -> 0 bytes src/webapp/contexts/app-context.ts | 19 - src/webapp/main.tsx | 7 - src/webapp/pages/Router.tsx | 20 - src/webapp/pages/app/App.css | 13 - src/webapp/pages/app/App.tsx | 60 - src/webapp/pages/app/Dhis2App.tsx | 97 - src/webapp/pages/app/__tests__/App.spec.tsx | 25 - .../__tests__/__snapshots__/App.spec.tsx.snap | 48 - src/webapp/pages/example/ExamplePage.tsx | 30 - .../example/__tests__/ExamplePage.spec.tsx | 15 - .../__snapshots__/ExamplePage.spec.tsx.snap | 40 - src/webapp/pages/landing/LandingPage.tsx | 40 - test/app/App.test.js | 58 + test/tests.js | 11 + tsconfig.json | 26 - tsconfig.node.json | 9 - vite.config.ts | 73 - webpack.config.js | 133 + yarn.lock | 14751 +++++----------- 211 files changed, 21218 insertions(+), 13649 deletions(-) create mode 100644 .babelrc delete mode 100644 .browserslistrc delete mode 100644 .env delete mode 100644 .env.production delete mode 100644 .eslintignore create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json delete mode 100644 .githooks/dep-check delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/main.yml delete mode 100644 .husky/.gitignore delete mode 100755 .husky/post-merge delete mode 100755 .husky/pre-push delete mode 100644 .prettierignore delete mode 100644 .travis.yml delete mode 100644 .vscode/settings.json delete mode 100644 babel.config.js create mode 100644 config/config.template.json delete mode 100644 config/fileMock.js create mode 100644 config/setup.js delete mode 100644 config/styleMock.js delete mode 100644 config/testHelpers.js delete mode 100644 config/testSetup.ts delete mode 100644 i18n/en.pot delete mode 100644 i18n/es.po rename {public/includes => includes}/material-design-icons/MaterialIcons-Regular.eot (100%) rename {public/includes => includes}/material-design-icons/MaterialIcons-Regular.ttf (100%) rename {public/includes => includes}/material-design-icons/MaterialIcons-Regular.woff (100%) rename {public/includes => includes}/material-design-icons/MaterialIcons-Regular.woff2 (100%) create mode 100644 includes/material-design-icons/material-icons.css create mode 100644 includes/roboto-font.css rename LICENSE => license.txt (99%) create mode 100644 metadata/attributes.json delete mode 100644 public/favicon.ico delete mode 100644 public/includes/material-design-icons/material-icons.css delete mode 100644 public/includes/roboto-font.css delete mode 100644 public/manifest.json create mode 100644 resources/customjscss/data-entry-contentscript.js create mode 100644 resources/customjscss/nrc.css create mode 100644 resources/scripts/check-duplicate-group-sets-items.js create mode 100644 resources/scripts/fix-duplicated-uids.sh create mode 100644 src/App/App.component.js create mode 100644 src/App/App.scss rename src/{webapp/pages/app/themes/dhis2-legacy.theme.ts => App/app.theme.js} (68%) rename src/{webapp/pages/app/themes/dhis2.theme.ts => App/dhis2.theme.js} (92%) delete mode 100644 src/CompositionRoot.ts create mode 100644 src/DataSets/DataSetPeriods.js create mode 100644 src/DataSets/DataSets.component.js create mode 100644 src/DataSets/DetailsBox.component.js create mode 100644 src/DataSets/DetailsBox.scss create mode 100644 src/DataSets/DetailsBoxWithScroll.component.js create mode 100644 src/DataSets/FormSteps.component.js create mode 100644 src/DataSets/Forms/CoreSections.component.js create mode 100644 src/DataSets/Forms/Disaggregation.component.js create mode 100644 src/DataSets/Forms/GeneralInformation.component.js create mode 100644 src/DataSets/Forms/GreyFields.component.js create mode 100644 src/DataSets/Forms/InitialConfig.component.js create mode 100644 src/DataSets/Forms/NonCoreSections.component.js create mode 100644 src/DataSets/Forms/OrganisationUnit.component.js create mode 100644 src/DataSets/Forms/Save.component.js create mode 100644 src/DataSets/Forms/Sections.component.js create mode 100644 src/DataSets/Forms/Sharing.component.js create mode 100644 src/DataSets/List.scss create mode 100644 src/DataSets/PeriodsDialog.js create mode 100644 src/DataSets/context.actions.js create mode 100644 src/DataSets/delete.store.js create mode 100644 src/DataSets/details.store.js create mode 100644 src/DataSets/list.actions.js create mode 100644 src/DataSets/log.js create mode 100644 src/DataSets/logs.store.js create mode 100644 src/DataSets/orgUnits.store.js create mode 100644 src/DataSets/periods.store.js create mode 100644 src/DataSets/sharing.store.js create mode 100644 src/ListActionBar/ListActionBar.component.js create mode 100644 src/LoadingMask/LoadingMask.component.js create mode 100644 src/LoadingStatus/LoadingStatus.component.js create mode 100644 src/MultipleDataTable/MultipleDataTable.component.js create mode 100644 src/MultipleDataTable/MultipleDataTableContextMenu.component.js create mode 100644 src/MultipleDataTable/MultipleDataTableRow.component.js create mode 100644 src/MultipleDataTable/MultipleDataTableRow.scss create mode 100644 src/MultipleDataTable/PopoverNoFlicker.js create mode 100644 src/Pagination/Pagination.scss create mode 100644 src/SearchBox/SearchBox.component.js create mode 100644 src/SessionDialog/SessionDialog.component.js create mode 100644 src/Settings/Settings.component.js create mode 100644 src/Snackbar/SnackbarContainer.component.js create mode 100644 src/Snackbar/snack.actions.js create mode 100644 src/Snackbar/snack.store.js create mode 100644 src/Wizard/Wizard.component.js delete mode 100644 src/app-config.ts create mode 100644 src/app.js create mode 100644 src/components/collapsible-box/CollapsibleBox.js create mode 100644 src/components/collapsible-box/CollapsibleBox.scss create mode 100644 src/components/sharing-dialog/Access.jsx create mode 100644 src/components/sharing-dialog/AutoComplete.jsx create mode 100644 src/components/sharing-dialog/ConfirmationDialog.jsx create mode 100644 src/components/sharing-dialog/PermissionOption.jsx create mode 100644 src/components/sharing-dialog/PermissionPicker.jsx create mode 100644 src/components/sharing-dialog/Sharing.jsx create mode 100644 src/components/sharing-dialog/SharingDialog.jsx create mode 100644 src/components/sharing-dialog/SharingDialogMultiple.jsx create mode 100644 src/components/sharing-dialog/UserSearch.jsx create mode 100644 src/components/sharing-dialog/i18n.js create mode 100644 src/components/sharing-dialog/utils.js create mode 100644 src/config/periodTypes.json delete mode 100644 src/data/api-futures.ts delete mode 100644 src/data/repositories/UserD2Repository.ts delete mode 100644 src/data/repositories/UserTestRepository.ts delete mode 100644 src/domain/entities/Ref.ts delete mode 100644 src/domain/entities/User.ts delete mode 100644 src/domain/entities/__tests__/User.spec.ts delete mode 100644 src/domain/entities/__tests__/userFixtures.ts delete mode 100644 src/domain/entities/generic/Collection.ts delete mode 100644 src/domain/entities/generic/Either.ts delete mode 100644 src/domain/entities/generic/Future.ts delete mode 100644 src/domain/entities/generic/HashMap.ts delete mode 100644 src/domain/entities/generic/Rec.ts delete mode 100644 src/domain/entities/generic/Struct.ts delete mode 100644 src/domain/entities/generic/__tests/Collection.spec.ts delete mode 100644 src/domain/entities/generic/__tests/Future.spec.ts delete mode 100644 src/domain/entities/generic/__tests/HashMap.spec.ts delete mode 100644 src/domain/entities/generic/__tests/Rec.spec.ts delete mode 100644 src/domain/entities/generic/__tests/Struct.spec.ts delete mode 100644 src/domain/repositories/UserRepository.ts delete mode 100644 src/domain/usecases/GetCurrentUserUseCase.ts delete mode 100644 src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts create mode 100644 src/forms/DataInputPeriods.component.js create mode 100644 src/forms/DataSetElementCategoryComboSelectionDialog.component.js create mode 100644 src/forms/Dropdown.component.js create mode 100644 src/forms/FormHelpers.js create mode 100644 src/forms/GreyFieldsTable.component.js create mode 100644 src/forms/MultiSelect.component.js create mode 100644 src/forms/RichDropdown.component.js create mode 100644 src/forms/TimePeriodSelector.component.js create mode 100644 src/forms/YearlyDateSelector.component.js create mode 100644 src/forms/form-fields/check-box.js create mode 100644 src/forms/form-fields/date-select.js create mode 100644 src/forms/form-fields/drop-down-async.js create mode 100644 src/forms/form-fields/drop-down.js create mode 100644 src/forms/form-fields/helpers/QuickAddLink.component.js create mode 100644 src/forms/form-fields/helpers/RefreshMask.component.js create mode 100644 src/forms/form-fields/icon-picker.js create mode 100644 src/forms/form-fields/multi-select.js create mode 100644 src/forms/form-fields/multi-toggle.js create mode 100644 src/forms/form-fields/text-field.js create mode 100644 src/i18n/i18n_module_ar.properties create mode 100644 src/i18n/i18n_module_en.properties create mode 100644 src/i18n/i18n_module_es.properties create mode 100644 src/i18n/i18n_module_fr.properties create mode 100644 src/models/CustomForm.js create mode 100644 src/models/DataSetStore.js create mode 100644 src/models/ProjectService.js create mode 100644 src/models/Section.js create mode 100644 src/models/Settings.js create mode 100644 src/models/Sharing.js create mode 100644 src/models/custom-form-resources/script.js create mode 100644 src/models/custom-form-resources/sectionForm.vm create mode 100644 src/models/custom-form-resources/style.css create mode 100644 src/models/data-periods.js create mode 100644 src/models/dataset.js create mode 100644 src/router.js create mode 100644 src/scripts/README.md delete mode 100644 src/scripts/example.ts create mode 100644 src/scripts/migrate-datasets-input-periods.ts delete mode 100644 src/scripts/tsconfig.json delete mode 100644 src/tests/setup.js delete mode 100644 src/types/d2-api.ts delete mode 100644 src/types/d2-ui.d.ts delete mode 100644 src/types/d2.d.ts delete mode 100644 src/types/declarations.d.ts delete mode 100644 src/types/i18n.d.ts create mode 100644 src/utils/Dhis2Helpers.js create mode 100644 src/utils/ObservedEvents.mixin.js create mode 100644 src/utils/ObserverRegistry.mixin.js delete mode 100644 src/utils/i18n-typed.ts delete mode 100644 src/utils/i18n.ts create mode 100644 src/utils/lodash-mixins.js delete mode 100644 src/utils/tests.tsx delete mode 100644 src/utils/ts-utils.ts delete mode 100644 src/utils/uid.ts delete mode 100644 src/vite-env.d.ts delete mode 100644 src/webapp/components/card-grid/CardGrid.tsx delete mode 100644 src/webapp/components/card-grid/MenuCard.tsx delete mode 100644 src/webapp/components/page-header/PageHeader.tsx delete mode 100644 src/webapp/components/share/Share.tsx delete mode 100644 src/webapp/components/share/logo-eyeseetea.png delete mode 100644 src/webapp/contexts/app-context.ts delete mode 100644 src/webapp/main.tsx delete mode 100644 src/webapp/pages/Router.tsx delete mode 100644 src/webapp/pages/app/App.css delete mode 100644 src/webapp/pages/app/App.tsx delete mode 100644 src/webapp/pages/app/Dhis2App.tsx delete mode 100644 src/webapp/pages/app/__tests__/App.spec.tsx delete mode 100644 src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap delete mode 100644 src/webapp/pages/example/ExamplePage.tsx delete mode 100644 src/webapp/pages/example/__tests__/ExamplePage.spec.tsx delete mode 100644 src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap delete mode 100644 src/webapp/pages/landing/LandingPage.tsx create mode 100644 test/app/App.test.js create mode 100644 test/tests.js delete mode 100644 tsconfig.json delete mode 100644 tsconfig.node.json delete mode 100644 vite.config.ts create mode 100644 webpack.config.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000..2a6c007de --- /dev/null +++ b/.babelrc @@ -0,0 +1,33 @@ +{ + "presets": ["stage-0", "react"], + "plugins": [ + "transform-class-properties", + "transform-es2015-template-literals", + "transform-es2015-literals", + "transform-es2015-function-name", + "transform-es2015-arrow-functions", + "transform-es2015-block-scoped-functions", + "transform-es2015-classes", + "transform-es2015-object-super", + "transform-es2015-shorthand-properties", + "transform-es2015-computed-properties", + "transform-es2015-for-of", + "transform-es2015-sticky-regex", + "transform-es2015-unicode-regex", + "check-es2015-constants", + "transform-es2015-spread", + "transform-es2015-parameters", + "transform-es2015-destructuring", + "transform-es2015-block-scoping", + "transform-es2015-typeof-symbol", + ["transform-regenerator", { "async": false, "asyncGenerators": false }] + ], + "env": { + "test": { + "presets": ["stage-0", "react", "es2015"], + "plugins": [ + "transform-class-properties" + ] + } + } +} diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index cedbd17b4..000000000 --- a/.browserslistrc +++ /dev/null @@ -1,5 +0,0 @@ -> 0.5% -last 2 versions -Firefox ESR -ie 11 -not dead diff --git a/.env b/.env deleted file mode 100644 index f03229f7d..000000000 --- a/.env +++ /dev/null @@ -1,5 +0,0 @@ -BROWSER=false -VITE_PORT=8081 - -VITE_DHIS2_BASE_URL=https://dev.eyeseetea.com/play -VITE_DHIS2_AUTH='admin:district' diff --git a/.env.production b/.env.production deleted file mode 100644 index ba7cc18de..000000000 --- a/.env.production +++ /dev/null @@ -1 +0,0 @@ -GENERATE_SOURCEMAP=false diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index f00f19ece..000000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -/**/*.d.ts -/src/locales diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..aa9a5d7f4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,16 @@ +/** @format */ + +module.exports = { + extends: ["react-app", "prettier"], + rules: { + "no-console": "off", + "no-unused-vars": ["error", { argsIgnorePattern: "^_", ignoreRestSiblings: true }], + "jsx-a11y/anchor-is-valid": "off", + }, + settings: { + react: { + pragma: "React", + version: "16.6.0", + }, + }, +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index f6eeb38aa..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "extends": [ - "react-app", - "eslint:recommended", - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:testing-library/react" - ], - "parser": "@typescript-eslint/parser", - "ignorePatterns": ["src/**/snapshots/*.ts"], - "rules": { - "no-console": ["warn", { "allow": ["debug", "warn", "error"] }], - "prefer-const": "warn", - "@typescript-eslint/camelcase": "off", - "@typescript-eslint/explicit-function-return-type": ["off"], - "@typescript-eslint/no-this-alias": ["off"], - "@typescript-eslint/no-unnecessary-type-constraint": ["off"], - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "caughtErrorsIgnorePattern": "^_" - } - ], - "@typescript-eslint/no-unused-expressions": ["warn"], - "react/prop-types": "off", - "react/display-name": "off", - "react/react-in-jsx-scope": "off", - "no-unused-expressions": "off", - "no-useless-concat": "off", - "no-useless-constructor": "off", - "no-unexpected-multiline": "off", - "default-case": "off", - "array-callback-return": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/ban-ts-ignore": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/indent": "off", - "@typescript-eslint/member-delimiter-style": "off", - "@typescript-eslint/type-annotation-spacing": "off", - "@typescript-eslint/no-misused-promises": "warn", - "no-use-before-define": "off", - "no-debugger": "warn", - "no-extra-semi": "off", - "no-mixed-spaces-and-tabs": "off", - "no-useless-rename": "off", - "react-hooks/rules-of-hooks": "warn", - "react-hooks/exhaustive-deps": "warn", - "testing-library/await-async-query": "error", - "testing-library/no-await-sync-query": "error", - "testing-library/prefer-screen-queries": "off", - "testing-library/no-debugging-utils": "off", - "testing-library/no-dom-import": "off", - "no-relative-import-paths/no-relative-import-paths": [ - "error", - { "allowSameFolder": true, "rootDir": "src", "prefix": "$" } - ] - }, - "plugins": ["@typescript-eslint", "react-hooks", "no-relative-import-paths", "unused-imports"], - "env": {}, - "parserOptions": { - "project": "./tsconfig.json" - }, - "settings": { - "react": { - "pragma": "React", - "version": "16.6.0" - } - } -} diff --git a/.githooks/dep-check b/.githooks/dep-check deleted file mode 100644 index fcfd4bac6..000000000 --- a/.githooks/dep-check +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -function changed { - git diff --name-only HEAD@{1} HEAD | grep "^$1" > /dev/null 2>&1 -} - -if changed 'yarn.lock'; then - echo "Lockfile changes detected. Installing updates..." - yarn install -fi diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index a23025388..000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,9 +0,0 @@ -### :pushpin: References - -- **Issue:** Closes #? - -### :memo: Implementation - -### :video_camera: Screenshots/Screen capture - -### :fire: Notes to the tester diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 87034eea3..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Application testing -on: - push: - workflow_dispatch: -jobs: - unit-tests: - name: Unit tests - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Install apt libraries - run: sudo apt install gettext -y - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: "18" - - - name: Install yarn - run: npm install -g yarn - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache yarn dependencies - uses: actions/cache@v2 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Install dependencies - run: yarn install --frozen-lockfile --silent - - - name: Install translations - run: yarn localize - - - name: Run jest tests - run: yarn test - - - name: Build typescript - run: npx tsc diff --git a/.gitignore b/.gitignore index 59a6f1762..d41d25089 100644 --- a/.gitignore +++ b/.gitignore @@ -1,42 +1,31 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules - -# testing -/coverage - -# production -manifest.webapp -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local +.DS_STORE +node_modules +*~ +*.pyc +static +.grunt +_SpecRunner.html +__benchmarks__ +build/ +coverage/ +.module-cache +*.gem +docs/.bundle +docs/code +docs/_site +docs/.sass-cache +docs/js/* +docs/downloads +docs/vendor/bundle +examples/shared/*.js +examples/**/bundle.js +test/the-files-to-test.generated.js +*.log* +chrome-user-data *.sublime-project *.sublime-workspace +.idea +*.iml +.vscode *.code-workspace -*.zip - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -src/locales/ -src/react-app.d.ts -src/react-app-env.d.ts -bak -.eslintcache - -# cypress -cypress/screenshots/ -cypress/videos/ -cypress/fixtures/ - -# IntelliJ -.idea/* - -docs/ +manifest.webapp diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec13..000000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/post-merge b/.husky/post-merge deleted file mode 100755 index d3b6c1092..000000000 --- a/.husky/post-merge +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -./.githooks/dep-check diff --git a/.husky/pre-push b/.husky/pre-push deleted file mode 100755 index 085ecbb8c..000000000 --- a/.husky/pre-push +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -yarn prettify && yarn lint && yarn update-po && yarn test diff --git a/.nvmrc b/.nvmrc index 07c7cf304..9e64b9019 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.14.2 +v8.17.0 diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index b6fcbefa8..000000000 --- a/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -build -node_modules -*.min.js -*.min.css diff --git a/.prettierrc.js b/.prettierrc.js index ad031f4ac..adab4fdae 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -6,13 +6,13 @@ module.exports = { useTabs: false, semi: true, singleQuote: false, - trailingComma: "es5", + trailingComma: 'es5', bracketSpacing: true, jsxBracketSameLine: false, - arrowParens: "avoid", + arrowParens: 'avoid', rangeStart: 0, rangeEnd: Infinity, - proseWrap: "preserve", + proseWrap: 'preserve', requirePragma: false, insertPragma: false, -}; +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3a97d81d2..000000000 --- a/.travis.yml +++ /dev/null @@ -1,41 +0,0 @@ -language: node_js -node_js: - - 12.13.0 -dist: bionic -cache: - directories: - - "$HOME/.cache" -before_install: - - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - # Install python dependencies - - sudo apt-get update - - sudo apt-get install python3 python python3-setuptools docker.io docker-compose - # Install d2-docker - - git clone https://github.com/EyeSeeTea/d2-docker.git - - cd d2-docker/ - - sudo python3 setup.py install - - d2-docker --help - # Hack to not be prompted in the terminal - - sudo apt-get remove golang-docker-credential-helpers - # Start docker service - - sudo systemctl unmask docker.service - - sudo systemctl unmask docker.socket - - sudo systemctl start docker.service - # Login to docker - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - # Start docker service - - d2-docker start eyeseetea/dhis2-data:2.30-sierra-leone -d --port 8080 -install: - - yarn install --frozen-lockfile - - yarn cy:verify - - yarn build -script: - - PORT=8081 REACT_APP_DHIS2_BASE_URL=http://localhost:8080 REACT_APP_CYPRESS=true yarn start & - - yarn wait-on http-get://localhost:8081 - - yarn wait-on http-get://localhost:8080 - - CYPRESS_EXTERNAL_API=http://localhost:8080 CYPRESS_ROOT_URL=http://localhost:8081 yarn cy:e2e:run --record --key $CYPRESS_KEY - - kill $(jobs -p) || true -addons: - apt: - packages: - - libgconf-2-4 diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index be9f93bd7..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "typescript.preferences.importModuleSpecifier": "non-relative" -} diff --git a/README.md b/README.md index 44ef380e0..4d282f5df 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,77 @@ +# dataset-configuration + +A DHIS2 webapp for managing dataset objects. + ## Setup ``` -$ nvm use # uses node version in .nvmrc +$ nvm use $ yarn install ``` ## Build -Build a production distributable DHIS2 zip file: +Create DHIS2 app zip: ``` $ yarn build ``` -## Development +## Start a development server -Copy `.env` to `.env.local` and configure DHIS2 instance to use. Then start the development server: +Clone the repository and execute: ``` $ yarn start ``` -Now in your browser, go to `http://localhost:8081`. +## Use the development version of d2-ui -## Tests +Clone the d2-ui repository, checkout the branch you want to test and create a link using `yarn`: ``` -$ yarn test +$ git clone https://github.com/eyeseetea/d2-ui +$ cd d2-ui +$ git checkout BRANCH_TO_TEST +$ yarn install && yarn build +$ yarn link ``` -## Some development tips +And now, on `dataset-configuration`, run: -### Clean architecture folder structure +``` +$ yarn link d2-ui +``` -- `src/domain`: Domain layer of the app (entities, use cases, repository definitions) -- `src/data`: Data of the app (repository implementations) -- `src/webapp/pages`: Main React components. -- `src/webapp/components`: React components. -- `src/utils`: Misc utilities. -- `i18n/`: Contains literal translations (gettext format) -- `public/`: General non-React webapp resources. +## Enable CORS -## Data structures +To set up your DHIS2 instance to work with the development service you will need to add the development servers address to the CORS whitelist. You can do this within the DHIS2 Settings app under the _access_ tab. On the access tab add `http://localhost:8081` to the CORS Whitelist. -- `Future.ts`: Async values, similar to promises, but cancellables and with type-safe errors. -- `Collection.ts`: Similar to Lodash, provides a wrapper over JS arrays. -- `Obj.ts`: Similar to Lodash, provides a wrapper over JS objects. -- `HashMap.ts`: Similar to ES6 map, but immutable. -- `Struct.ts`: Base class for typical classes with attributes. Features: create, update. -- `Either.ts`: Either a success value or an error. +The starter app will look for a DHIS 2 development instance configuration in +`$DHIS2_HOME/config`. So for example if your `DHIS2_HOME` environment variable is +set to `~/.dhis2`, the starter app will look for `~/.dhis2/config.js` and then +`~/.dhis2/config.json` and load the first one it can find. You can use `config/config.template.json` as reference. -## Docs +The config should export an object with the properties `baseUrl` and +`authorization`, where authorization is the base64 encoding of your username and +password. You can obtain this value by opening the console in your browser and +typing `btoa('user:pass')`. -We use [TypeDoc](https://typedoc.org/example/): +If no config is found, the default `baseUrl` is `http://localhost:8080/` and +the default username and password is `admin` and `district`, respectively. -``` -$ yarn generate-docs -``` - -### i18n +See `webpack.config.js` for details. -Update i18n .po files from `i18n.t(...)` calls in the source code: +## Frameworks/libraries -``` -$ yarn localize -``` +### React -### Scripts +[React](https://facebook.github.io/react/) is the _view_ part of the front-end applications, it has a component based architecture. At DHIS2 we also use JSX syntax that is generally used with React. -Check the example script, entry `"script-example"`in `package.json`->scripts and `src/scripts/example.ts`. +### d2 / d2-ui -### Misc Notes +[d2](https://github.com/dhis2/d2) is the DHIS2 abstraction library that allows you to communicate with the DHIS2 api in a programatic way. [d2-ui](https://github.com/dhis2/d2-ui) is the ui component library that is build on top of d2 to allow reuse of common components that are used within DHIS2 applications. d2-ui also contains our own application wiring code through its _stores_ and _actions_. -- Requests to DHIS2 will be transparently proxied (see `vite.config.ts` -> `server.proxy`) from `http://localhost:8081/dhis2/xyz` to `${VITE_DHIS2_BASE_URL}/xyz`. This prevents CORS and cross-domain problems. +### material-ui -- You can use `.env` variables within the React app: `const value = import.meta.env.NAME;` +d2-ui makes use of [material-ui](http://www.material-ui.com) for rendering more basic components like TextFields and Lists. It is therefore quite useful to look into this library too when building DHIS2 apps and making use of d2-ui. diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 5824cd5e7..000000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ["@babel/typescript", ["babel-preset-react-app", { runtime: "automatic" }]], -}; diff --git a/config/config.template.json b/config/config.template.json new file mode 100644 index 000000000..52f6faacf --- /dev/null +++ b/config/config.template.json @@ -0,0 +1,4 @@ +{ + "baseUrl": "http://localhost:8080", + "authorization": "Basic YWRtaW46ZGlzdHJpY3Q=" +} diff --git a/config/fileMock.js b/config/fileMock.js deleted file mode 100644 index e92956518..000000000 --- a/config/fileMock.js +++ /dev/null @@ -1,3 +0,0 @@ -// Turns file imports into dummy objects - -module.exports = "test-file-stub"; diff --git a/config/setup.js b/config/setup.js new file mode 100644 index 000000000..b4ac84ed5 --- /dev/null +++ b/config/setup.js @@ -0,0 +1,25 @@ +/* istanbul ignore next */ +global.chai = require("chai"); +global.sinon = require("sinon"); + +// Chai plugins +global.chai.use(require("sinon-chai")); + +global.expect = global.chai.expect; + +var jsdom = require("jsdom").jsdom; + +var exposedProperties = ["window", "navigator", "document"]; + +global.document = jsdom(""); +global.window = document.defaultView; +Object.keys(document.defaultView).forEach(property => { + if (typeof global[property] === "undefined") { + exposedProperties.push(property); + global[property] = document.defaultView[property]; + } +}); + +global.navigator = { + userAgent: "node.js", +}; diff --git a/config/styleMock.js b/config/styleMock.js deleted file mode 100644 index efa0d3ce9..000000000 --- a/config/styleMock.js +++ /dev/null @@ -1,3 +0,0 @@ -// Turns style imports into empty objects - -module.exports = {}; diff --git a/config/testHelpers.js b/config/testHelpers.js deleted file mode 100644 index 6735d324a..000000000 --- a/config/testHelpers.js +++ /dev/null @@ -1,8 +0,0 @@ -export function getD2Stub() { - return { - system: { - systemInfo: {}, - }, - currentUser: {}, - }; -} diff --git a/config/testSetup.ts b/config/testSetup.ts deleted file mode 100644 index 16018ff64..000000000 --- a/config/testSetup.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TextDecoder, TextEncoder } from "util"; - -global.console = { - error: console.error, - info: console.info, - log: jest.fn(), - warn: jest.fn(), - debug: jest.fn(), -}; - -// Polyfill for encoding which isn't present globally in jsdom -global.TextEncoder = TextEncoder; -global.TextDecoder = TextDecoder; diff --git a/i18n/en.pot b/i18n/en.pot deleted file mode 100644 index 759b1931f..000000000 --- a/i18n/en.pot +++ /dev/null @@ -1,30 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: i18next-conv\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-06-26T10:58:19.149Z\n" -"PO-Revision-Date: 2024-06-26T10:58:19.149Z\n" - -msgid "Add" -msgstr "" - -msgid "List" -msgstr "" - -msgid "Back" -msgstr "" - -msgid "Help" -msgstr "" - -msgid "Hello {{name}}" -msgstr "" - -msgid "Detail page" -msgstr "" - -msgid "Section" -msgstr "" diff --git a/i18n/es.po b/i18n/es.po deleted file mode 100644 index 416c26cb0..000000000 --- a/i18n/es.po +++ /dev/null @@ -1,30 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-06-26T10:58:19.149Z\n" -"PO-Revision-Date: 2018-10-25T09:02:35.143Z\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" - -msgid "Add" -msgstr "Añadir" - -msgid "List" -msgstr "Listar" - -msgid "Back" -msgstr "Volver" - -msgid "Help" -msgstr "Ayuda" - -msgid "Hello {{name}}" -msgstr "Hola {{name}}" - -msgid "Detail page" -msgstr "" - -msgid "Section" -msgstr "Sección" diff --git a/public/includes/material-design-icons/MaterialIcons-Regular.eot b/includes/material-design-icons/MaterialIcons-Regular.eot similarity index 100% rename from public/includes/material-design-icons/MaterialIcons-Regular.eot rename to includes/material-design-icons/MaterialIcons-Regular.eot diff --git a/public/includes/material-design-icons/MaterialIcons-Regular.ttf b/includes/material-design-icons/MaterialIcons-Regular.ttf similarity index 100% rename from public/includes/material-design-icons/MaterialIcons-Regular.ttf rename to includes/material-design-icons/MaterialIcons-Regular.ttf diff --git a/public/includes/material-design-icons/MaterialIcons-Regular.woff b/includes/material-design-icons/MaterialIcons-Regular.woff similarity index 100% rename from public/includes/material-design-icons/MaterialIcons-Regular.woff rename to includes/material-design-icons/MaterialIcons-Regular.woff diff --git a/public/includes/material-design-icons/MaterialIcons-Regular.woff2 b/includes/material-design-icons/MaterialIcons-Regular.woff2 similarity index 100% rename from public/includes/material-design-icons/MaterialIcons-Regular.woff2 rename to includes/material-design-icons/MaterialIcons-Regular.woff2 diff --git a/includes/material-design-icons/material-icons.css b/includes/material-design-icons/material-icons.css new file mode 100644 index 000000000..43c889d6f --- /dev/null +++ b/includes/material-design-icons/material-icons.css @@ -0,0 +1,38 @@ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(MaterialIcons-Regular.woff2) format('woff2'), + url(MaterialIcons-Regular.woff) format('woff'), + url(MaterialIcons-Regular.ttf) format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + width: 1em; + height: 1em; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; +} diff --git a/includes/roboto-font.css b/includes/roboto-font.css new file mode 100644 index 000000000..0f1191af7 --- /dev/null +++ b/includes/roboto-font.css @@ -0,0 +1,36 @@ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v15/Jzo62I39jc0gQRrbndN6nfesZW2xOQ-xsNqO47m55DA.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v15/RxZJdnzeo3R5zSexge8UUaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIqCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); +} diff --git a/index.html b/index.html index cce181620..3014df45f 100644 --- a/index.html +++ b/index.html @@ -2,28 +2,19 @@ - - + DataSet Configuration - - - - - - - - Project Configuration app + + - -
- +
+ + + diff --git a/LICENSE b/license.txt similarity index 99% rename from LICENSE rename to license.txt index f288702d2..20d40b6bc 100644 --- a/LICENSE +++ b/license.txt @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. \ No newline at end of file diff --git a/metadata/attributes.json b/metadata/attributes.json new file mode 100644 index 000000000..6e20c16ef --- /dev/null +++ b/metadata/attributes.json @@ -0,0 +1,203 @@ +{ + "attributes": [ + { + "categoryAttribute": false, + "categoryOptionAttribute": false, + "categoryOptionComboAttribute": false, + "categoryOptionGroupAttribute": false, + "categoryOptionGroupSetAttribute": false, + "code": "GL_CREATED_BY_DATASET_CONFIGURATION", + "constantAttribute": false, + "created": "2018-05-24T10:15:13.784", + "dataElementAttribute": false, + "dataElementGroupAttribute": false, + "dataElementGroupSetAttribute": false, + "dataSetAttribute": true, + "documentAttribute": false, + "id": "wA748YSs3Qk", + "indicatorAttribute": false, + "indicatorGroupAttribute": false, + "lastUpdated": "2018-05-24T10:15:13.784", + "legendSetAttribute": false, + "mandatory": false, + "name": "Created by Dataset Configuration", + "optionAttribute": false, + "optionSetAttribute": false, + "organisationUnitAttribute": false, + "organisationUnitGroupAttribute": false, + "organisationUnitGroupSetAttribute": false, + "programAttribute": false, + "programIndicatorAttribute": false, + "programStageAttribute": false, + "sectionAttribute": false, + "sharing": { + "external": false, + "userGroups": {}, + "users": {} + }, + "sqlViewAttribute": false, + "trackedEntityAttributeAttribute": false, + "trackedEntityTypeAttribute": false, + "translations": [], + "unique": false, + "userAttribute": false, + "userGroupAttribute": false, + "validationRuleAttribute": false, + "validationRuleGroupAttribute": false, + "valueType": "BOOLEAN" + }, + { + "categoryAttribute": false, + "categoryOptionAttribute": false, + "categoryOptionComboAttribute": false, + "categoryOptionGroupAttribute": false, + "categoryOptionGroupSetAttribute": false, + "code": "GL_INTERVAL_DATES", + "constantAttribute": false, + "created": "2021-11-29T13:27:34.662", + "createdBy": { + "displayName": "Adrian Quintana", + "id": "GiwOigBRBoc", + "name": "Adrian Quintana", + "username": "EyeSeeTea" + }, + "dataElementAttribute": false, + "dataElementGroupAttribute": false, + "dataElementGroupSetAttribute": false, + "dataSetAttribute": true, + "description": "Format: YYYYYMMDD-YYYYMMDD", + "documentAttribute": false, + "id": "YyqT5dfIwL7", + "indicatorAttribute": false, + "indicatorGroupAttribute": false, + "lastUpdated": "2021-11-29T13:27:34.662", + "lastUpdatedBy": { + "displayName": "Adrian Quintana", + "id": "GiwOigBRBoc", + "name": "Adrian Quintana", + "username": "EyeSeeTea" + }, + "legendSetAttribute": false, + "mandatory": false, + "name": "Data Input Dates", + "optionAttribute": false, + "optionSetAttribute": false, + "organisationUnitAttribute": false, + "organisationUnitGroupAttribute": false, + "organisationUnitGroupSetAttribute": false, + "programAttribute": false, + "programIndicatorAttribute": false, + "programStageAttribute": false, + "sectionAttribute": false, + "sharing": { + "external": false, + "owner": "GiwOigBRBoc", + "public": "rw------", + "userGroups": {}, + "users": {} + }, + "sqlViewAttribute": false, + "trackedEntityAttributeAttribute": false, + "trackedEntityTypeAttribute": false, + "translations": [], + "unique": false, + "userAttribute": false, + "userGroupAttribute": false, + "validationRuleAttribute": false, + "validationRuleGroupAttribute": false, + "valueType": "TEXT" + }, + { + "categoryAttribute": false, + "categoryOptionAttribute": false, + "categoryOptionComboAttribute": false, + "categoryOptionGroupAttribute": false, + "categoryOptionGroupSetAttribute": false, + "code": "GL_OUTCOME_DATES", + "constantAttribute": false, + "created": "2019-05-07T09:10:04.923", + "dataElementAttribute": false, + "dataElementGroupAttribute": false, + "dataElementGroupSetAttribute": false, + "dataSetAttribute": true, + "documentAttribute": false, + "id": "mrpeo3N3qcy", + "indicatorAttribute": false, + "indicatorGroupAttribute": false, + "lastUpdated": "2019-08-05T01:20:50.492", + "legendSetAttribute": false, + "mandatory": false, + "name": "Outcome Dates", + "optionAttribute": false, + "optionSetAttribute": false, + "organisationUnitAttribute": false, + "organisationUnitGroupAttribute": false, + "organisationUnitGroupSetAttribute": false, + "programAttribute": false, + "programIndicatorAttribute": false, + "programStageAttribute": false, + "sectionAttribute": false, + "sharing": { + "external": false, + "userGroups": {}, + "users": {} + }, + "sqlViewAttribute": false, + "trackedEntityAttributeAttribute": false, + "trackedEntityTypeAttribute": false, + "translations": [], + "unique": false, + "userAttribute": false, + "userGroupAttribute": false, + "validationRuleAttribute": false, + "validationRuleGroupAttribute": false, + "valueType": "TEXT" + }, + { + "categoryAttribute": false, + "categoryOptionAttribute": false, + "categoryOptionComboAttribute": false, + "categoryOptionGroupAttribute": false, + "categoryOptionGroupSetAttribute": false, + "code": "GL_OUTPUT_DATES", + "constantAttribute": false, + "created": "2019-05-07T09:09:26.574", + "dataElementAttribute": false, + "dataElementGroupAttribute": false, + "dataElementGroupSetAttribute": false, + "dataSetAttribute": true, + "documentAttribute": false, + "id": "fhTYUbHAWiX", + "indicatorAttribute": false, + "indicatorGroupAttribute": false, + "lastUpdated": "2019-08-05T01:20:50.492", + "legendSetAttribute": false, + "mandatory": false, + "name": "Output Dates", + "optionAttribute": false, + "optionSetAttribute": false, + "organisationUnitAttribute": false, + "organisationUnitGroupAttribute": false, + "organisationUnitGroupSetAttribute": false, + "programAttribute": false, + "programIndicatorAttribute": false, + "programStageAttribute": false, + "sectionAttribute": false, + "sharing": { + "external": false, + "userGroups": {}, + "users": {} + }, + "sqlViewAttribute": false, + "trackedEntityAttributeAttribute": false, + "trackedEntityTypeAttribute": false, + "translations": [], + "unique": false, + "userAttribute": false, + "userGroupAttribute": false, + "validationRuleAttribute": false, + "validationRuleGroupAttribute": false, + "valueType": "TEXT" + } + ] +} diff --git a/package.json b/package.json index b0d2a339c..e016602d7 100644 --- a/package.json +++ b/package.json @@ -1,128 +1,122 @@ { "name": "d2-dataset-configuration", - "description": "Project Configuration app", "version": "2.6.4", - "license": "GPL-3.0", - "author": "EyeSeeTea team", - "homepage": ".", - "repository": { - "type": "git", - "url": "git+https://github.com/EyeSeeTea/dataset-configuration.git" + "description": "Dataset Configuration User Interface", + "main": "src/index.html", + "scripts": { + "coverage": "babel-node node_modules/.bin/isparta cover --root ./src --report text --report html --report lcov node_modules/mocha/bin/_mocha -- --reporter dot --require config/setup.js --recursive test", + "prebuild": "rm -rf build && mkdir build && d2-manifest package.json manifest.webapp", + "build": "webpack && cp -a includes build/ && cp -a src/i18n build/ && cp index.html build/ && cp icon.png build/ && cp node_modules/jquery/dist/jquery.min.js build/ && cp node_modules/babel-polyfill/dist/polyfill.min.js build/ && cp manifest.webapp build/ && rm -f dataset-configuration.zip && cd build && zip --quiet -r ../dataset-configuration.zip *", + "test": "mocha --reporter spec --compilers js:babel-core/register --require config/setup.js --recursive test", + "test-watch": "mocha --reporter spec --compilers js:babel-core/register --require config/setup.js --recursive test --watch", + "lint": "eslint --fix src", + "validate": "npm ls", + "prettify": "prettier \"{src,config}/**/*.{js,jsx,ts,tsx,json,css}\" --write", + "prestart": "d2-manifest package.json manifest.webapp", + "start": "webpack-dev-server" + }, + "keywords": [ + "DHIS2", + "App" + ], + "author": { + "name": "EyeSeeTea Team", + "email": "hello@eyeseetea.com", + "url": "https://github.com/EyeSeeTea/dataset-configuration" }, + "license": "GPL-3.0", "dependencies": { - "$": "link:./src", - "@dhis2/app-runtime": "2.8.0", - "@dhis2/d2-i18n": "1.1.0", - "@dhis2/d2-i18n-extract": "1.0.8", - "@dhis2/d2-i18n-generate": "1.2.0", - "@dhis2/ui": "6.12.0", - "@eyeseetea/d2-api": "1.16.0-beta.9", - "@eyeseetea/d2-ui-components": "2.9.0-beta.3", - "@eyeseetea/feedback-component": "0.1.3-beta.1", - "@material-ui/core": "4.12.4", - "@material-ui/icons": "4.11.3", - "@material-ui/lab": "4.0.0-alpha.60", - "@material-ui/styles": "4.11.5", - "classnames": "2.3.1", - "d2": "31.10.2", - "d2-manifest": "1.0.0", - "eslint-plugin-no-relative-import-paths": "^1.5.3", - "font-awesome": "4.7.0", - "purify-ts": "1.2.0", - "purify-ts-extra-codec": "0.6.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router-dom": "5.2.0", - "real-cancellable-promise": "^1.1.2", - "styled-components": "6.1.11", - "styled-jsx": "^5.1.6", - "typed-immutable-map": "^0.1.1", - "zustand": "^4.3.7" + "@material-ui/core": "^4.6.0", + "@material-ui/icons": "^4.5.1", + "@material-ui/styles": "^4.6.0", + "bluebird": "^3.5.0", + "downshift": "^3.3.4", + "htmlencode": "^0.0.4", + "jquery": "^3.3.1", + "json-loader": "^0.5.4", + "nano-memoize": "^1.1.3", + "prop-types": "^15.7.1", + "raw-loader": "^0.5.1", + "react-router": "^3.2.5", + "react-scroll-to-component": "^1.0.2", + "rxjs-compat": "^6.5.3", + "susy": "^2.2.12", + "velocityjs": "^1.0.0" }, "devDependencies": { - "@babel/core": "^7.0.0-0", - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^14.0.0", - "@types/classnames": "2.3.1", - "@types/isomorphic-fetch": "^0.0.36", - "@types/material-ui": "^0.21.12", - "@types/node": "18", - "@types/node-localstorage": "^1.3.0", - "@types/prettier": "^2.7.3", - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@types/react-router-dom": "5.3.3", - "@types/styled-components": "5.1.24", - "@vitejs/plugin-react": "^3.1.0", - "@vitest/coverage-v8": "^0.32.4", - "bundle-phobia-cli": "^0.14.14", - "cmd-ts": "^0.12.1", - "eslint": "^8.37.0", - "eslint-config-react-app": "7.1.0-next.14", - "eslint-plugin-testing-library": "^5.11.1", - "eslint-plugin-unused-imports": "^2.0.0", - "expect-type": "^0.15.0", - "graceful-fs": "^4.2.11", - "husky": "7.0.4", - "jsdom": "^21.1.1", - "node-stdlib-browser": "^1.2.0", - "prettier": "^2.8.7", - "sanitize-filename": "^1.6.3", - "source-map-explorer": "^2.5.3", - "ts-node": "^10.9.1", - "ts-prune": "^0.10.3", - "typedoc": "^0.25.1", - "typescript": "5.2.2", - "vite": "^4.2.0", - "vite-bundle-visualizer": "^0.6.0", - "vite-plugin-checker": "^0.6.2", - "vite-plugin-eslint": "^1.8.1", - "vite-plugin-node-stdlib-browser": "^0.2.1", - "vitest": "^0.32.2" + "babel-core": "^6.7.2", + "babel-eslint": "9.x", + "babel-loader": "^6.2.4", + "babel-polyfill": "^6.7.2", + "babel-preset-es2015": "^6.6.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-0": "^6.5.0", + "chai": "^3.5.0", + "classnames": "^2.2.5", + "css-loader": "^0.23.1", + "d2": "26.2.2", + "d2-manifest": "^1.0.0", + "d2-ui": "github:EyeSeeTea/d2-ui#dataset-configuration", + "d2-utilizr": "^0.2.9", + "d3-color": "1.0.2", + "eslint": "^5.12.1", + "eslint-config-prettier": "^3.6.0", + "eslint-config-react-app": "^3.0.8", + "eslint-plugin-flowtype": "2.x", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-jsx-a11y": "^6.2.0", + "eslint-plugin-react": "^7.12.4", + "http-proxy": "git+https://github.com/nicolayr/node-http-proxy.git", + "immutability-helper": "^2.1.2", + "isparta": "^4.0.0", + "jsdom": "^9.0.0", + "loglevel": "^1.4.0", + "material-ui": "^0.20.2", + "material-ui-scrollable-tabs": "^2.0.0", + "mocha": "^3.2.0", + "moment": "^2.18.1", + "node-sass": "^4.5.3", + "prettier": "^1.16.4", + "react": "16.12.0", + "react-dom": "^16.9.0", + "react-json-view": "^1.19.1", + "react-router-dom": "^5.0.1", + "react-steps": "^0.0.5", + "request": "^2.34", + "request-promise": "^4.2.2", + "rx": "^4.1.0", + "sass-loader": "^3.2.0", + "sinon": "^1.17.3", + "sinon-chai": "^2.8.0", + "style-loader": "^0.13.0", + "webpack": "^1.12.14", + "webpack-dev-server": "^1.14.1", + "webpack-visualizer-plugin": "^0.1.5" }, - "scripts": { - "build-dependencies-visualizer": "vite-bundle-visualizer", - "check-code": "yarn lint && yarn test", - "generate-docs": "typedoc --entryPointStrategy expand ./src", - "lint": "eslint src", - "lint-unused": "ts-prune --ignore 'ts-utils.ts'", - "lint-all": "yarn lint && yarn lint-unused", - "run-script": "ts-node -P src/scripts", - "source-map-explorer": "yarn build --sourcemap=true && source-map-explorer --no-border-checks --only-mapped build/assets/*js", - "start": "vite --strictPort", - "test": "yarn test-unit", - "test-fixtures-generate": "yarn run-script src/tests/manage.ts generate-fixtures", - "test-snapshots-delete": "yarn run-script src/tests/manage.ts delete", - "test-unit": "vitest run --reporter=basic", - "test-unit-watch": "vitest watch", - "postinstall": "yarn localize", - "prebuild": "yarn localize && yarn test", - "manifest": "d2-manifest package.json build/manifest.webapp", - "build-folder": "rm -rf build/ && d2-manifest package.json manifest.webapp && tsc && vite build --outDir=build && yarn run manifest && cp -r i18n icon.png build", - "build": "VITE_DHIS2_BASE_URL='' VITE_DHIS2_AUTH='' yarn build-folder && rm -f $npm_package_name.zip && cd build && zip --quiet -r ../$npm_package_name.zip *", - "prettify": "prettier \"./**/*.{js,jsx,json,css,ts,tsx}\" --write", - "extract-pot": "yarn d2-i18n-extract -p src/ -o i18n/", - "localize": "yarn update-po && d2-i18n-generate -n d2-dataset-configuration -p ./i18n/ -o ./src/locales/", - "update-po": "yarn extract-pot && find i18n/ -name '*.po' -exec msgmerge --backup=off -U {} i18n/en.pot \\;", - "prepare": "husky install", - "script-example": "npx ts-node src/scripts/example.ts" + "resolutions": { + "node-sass/**/fstream": "^1.0.12", + "node-sass/**/tar": "^2.2.2" + }, + "pre-commit": [ + "test", + "lint", + "validate" + ], + "directories": { + "test": "test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/EyeSeeTea/dataset-configuration.git" + }, + "bugs": { + "url": "https://github.com/EyeSeeTea/dataset-configuration/issues" }, + "homepage": "https://github.com/EyeSeeTea/dataset-configuration", "manifest.webapp": { - "name": "Project Configuration app", - "description": "Project Configuration app", + "name": "Dataset Configuration", "icons": { "48": "icon.png" - }, - "developer": { - "url": "https://www.eyeseetea.com/", - "name": "EyeSeeTea team" - }, - "activities": { - "dhis": { - "href": "*" - } } } } diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 1712927cdd231c01c91bfc06f8052078a7c2f320..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeI0ZAep57{~7_Ln1*!!VeW@QGUp@iCCmzCJ__Nz8HqloHLXxXGxLOoY|7lN_)|n zROF_)sTF0GqkL&AwUuO{Emm4lZEBWIO-`;lKTJ2P_r~hDLvbYG=ce)pGb> zJ&sU?6ymxv7&w{tu#MGehR7jyCoXMDF4AFNkqqs!_uXG{JrudXsG;1cDg}$u;;*=0X@|+>diJvgXWY9U#horK6 zE8A1dM^IWk7DWZ4tM><8x~ftEQ9>YggmOqHpi*QoLE7Xtb?C7&Er!+*BuM}#+>iFc z>f31l(1rl+eE9p!MWWCTqPVpf`qgh!gK40>+lcs*T)0FATKQ=uGUS|1fuA=)dj_e| z-1nU+>aY3KeScr4K|qy7yZsmqanNsO1eI#%w<@#0jqO6c^u@gdgwrH^mI zDTD);Z3|HUs*W`-1^V3i39h__n75gr-95q$Mi!rqnW|&hkmw6v!5VOd-Ut$LAypn> zWe@rWe`3X6XDo>!uvEaITdKcY=tMpbOb*v@w@GPbQrz)gRFm&;{)_j|aNtTb)`{F{ z_AY(htm0na~9{7zsmpJ_~?lVOjXhuGq9>@SPLKGja}j7T&$O3fIO4gu-W=uHXCbo1atEL0c?-|0A`lQ`~Uy| diff --git a/public/includes/material-design-icons/material-icons.css b/public/includes/material-design-icons/material-icons.css deleted file mode 100644 index 46caa138a..000000000 --- a/public/includes/material-design-icons/material-icons.css +++ /dev/null @@ -1,37 +0,0 @@ -@font-face { - font-family: "Material Icons"; - font-style: normal; - font-weight: 400; - src: url(MaterialIcons-Regular.eot); /* For IE6-8 */ - src: local("Material Icons"), local("MaterialIcons-Regular"), - url(MaterialIcons-Regular.woff2) format("woff2"), - url(MaterialIcons-Regular.woff) format("woff"), - url(MaterialIcons-Regular.ttf) format("truetype"); -} - -.material-icons { - font-family: "Material Icons"; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - width: 1em; - height: 1em; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: "liga"; -} diff --git a/public/includes/roboto-font.css b/public/includes/roboto-font.css deleted file mode 100644 index e0d1d5161..000000000 --- a/public/includes/roboto-font.css +++ /dev/null @@ -1,47 +0,0 @@ -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 100; - src: local("Roboto Thin"), local("Roboto-Thin"), - url(https://fonts.gstatic.com/s/roboto/v15/Jzo62I39jc0gQRrbndN6nfesZW2xOQ-xsNqO47m55DA.ttf) - format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 300; - src: local("Roboto Light"), local("Roboto-Light"), - url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) - format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 400; - src: local("Roboto"), local("Roboto-Regular"), - url(https://fonts.gstatic.com/s/roboto/v15/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 500; - src: local("Roboto Medium"), local("Roboto-Medium"), - url(https://fonts.gstatic.com/s/roboto/v15/RxZJdnzeo3R5zSexge8UUaCWcynf_cDxXwCLxiixG1c.ttf) - format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 700; - src: local("Roboto Bold"), local("Roboto-Bold"), - url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) - format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: normal; - font-weight: 900; - src: local("Roboto Black"), local("Roboto-Black"), - url(https://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIqCWcynf_cDxXwCLxiixG1c.ttf) - format("truetype"); -} diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index dfeed37d6..000000000 --- a/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "Project Configuration app", - "name": "Project Configuration app", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/resources/customjscss/data-entry-contentscript.js b/resources/customjscss/data-entry-contentscript.js new file mode 100644 index 000000000..3f959a718 --- /dev/null +++ b/resources/customjscss/data-entry-contentscript.js @@ -0,0 +1,37 @@ +(function() { + var fixActionsBox = function() { + // Button does not fit in the box, add some more width. + $("#completenessDiv").css("width", "+=25px"); + }; + + var applyChangesToForm = function() { + fixActionsBox(); + }; + + var selectProjectFromDataset = function(ev) { + var dataSetName = $("#selectedDataSetId option:selected").text(); + + var projectSelect = $(".selectionLabel") + .filter(function() { return $(this).text() === "Project" }) + .siblings("select"); + var optionToSelect = projectSelect + .find("option") + .filter(function() { return dataSetName.indexOf($(this).text()) >= 0; }); + if (optionToSelect.get(0)) { + optionToSelect.prop("selected", true); + } else { + projectSelect.find("option:first").prop("selected", true); + } + }; + + var autoselectProject = function() { + $("#selectedDataSetId, #selectedPeriodId").change(selectProjectFromDataset); + }; + + var init = function() { + $(document).on("dhis2.de.event.formLoaded", applyChangesToForm); + autoselectProject(); + }; + + $(init); +})(); \ No newline at end of file diff --git a/resources/customjscss/nrc.css b/resources/customjscss/nrc.css new file mode 100644 index 000000000..faaf5dfaa --- /dev/null +++ b/resources/customjscss/nrc.css @@ -0,0 +1,390 @@ +#header +{ + background-color: #3c3c3c; + height: 44px; + position: fixed; + z-index: 1200; + top: 0px; + left: 0px; + right: 0px; + box-shadow: 0 0 3px #000000; +} + +.header-bar +{ + background-color: #3c3c3c; +} + +#headerBanner +{ + position: absolute; + top: 5px; + left: 25px; +} + +#headerText { + position: absolute; + top: 12px; + left: 75px; + font-weight: bold; + color: #fff; + font-size: 16px; +} + + +.loginPage { + +background-color: #3c3c3c; + +} + +.loginPage #footerArea { +border-top: 1px solid #ff7602; + +} + +.loginPage #leftFooterArea.innerFooterArea +{ +color: #ff7602; + +} + +/* Styling of the data entry page */ + +.formSection { + border: 1px solid #cacaca; + border-radius: 3px; + margin: 0; + padding: 1px 4px 1px 4px ; +} + +.formSection h3 { + + color: #000; + font-size: 16px; + text-align: left; + font-weight: bold; + padding: 0; +} + +.formSection td { + +text-align: center; +min-width: 75px; +padding: 1; + +} + +.formSection th { + +font-weight: normal; +font-size: 14px; +text-align: center; +white-space: normal !important; /* normal might be better. break word will break the work up to fit*/ +max-width: 75px; +background-color: #eaf7fb; +max-width: 200px; + +/* These colour the header - didn't look very good +padding: 1px 2px 1px 2px; +color: #fff; + +border-color: #fff; +*/ + +} + +.indicatorArea { + margin-top: 0px; + margin-bottom: 5px; + border-top: none; +} + +.indicatorArea td { + width: 100% !important; + text-align: left !important; +} + +.entryfield, +.indicator +{ + +max-width: 75px; + +} + +.entryarea { + max-width: 300px; +} + +/* input criteria at top of the data entry page */ + +.inputCriteria { + + background-color: #f3f3f3; + border-color: #c3c3c3; + +} + +div.inputCriteria { + + background-color: #f3f3f3; + border-color: #c3c3c3; + +} +/*pivot table layout - align left */ + +table.pivot { + font-family: sans-serif; + font-size: 14px; + border: 0 !important; + color: #000; +} + +td.pivot-dim.td-sortable { + background-color: #DEE2E4 !important; + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + text-align: center !important; + font-weight: bold; +} + +td.pivot-dim-total.td-sortable { + background-color: #DEE2E4 !important; + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + text-align: center !important; + font-weight: bold; +} + +td.pivot-dim-subtotal { + + background-color: #DEE2E4 !important; + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + text-align: center !important; + font-weight: bold; +} + + +td.pivot-dim-label { + background-color: #DEE2E4 !important; + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + text-align: center !important; +} + + +td.pivot-dim.td-nobreak { + background-color: #eaf7fb !important; + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + color: #000 !important; +} + +td.pivot-dim { + background-color: #DEE2E4 !important; + border-style: solid; + border-width: 1px !important; + border-color: #fff !important; + text-align: left !important; + font-weight: bold !important; +} + +td.pivot-empty { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + background-color: #DEE2E4 !important; +} + + +td.pivot-value { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px !important; + background-color: #eaf7fb; + text-align: right; +} + +td.pivot-value-subtotal { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px; + background-color: #eaf7fb; + text-align: right; + font-weight: bold !important; + text-decoration: underline; +} + +td.pivot-dim-total { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px; + background-color: #eaf7fb; + font-weight: bold !important; + text-align: left; +} + +td.pivot-value-total { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px; + background-color: #eaf7fb; + font-weight: bold !important; + text-align: right; + text-decoration: underline; +} + +td.pivot-value-total-subgrandtotal { + + + border-style: solid !important; + border-color: #fff !important; + border-width: 1px; + background-color: #eaf7fb; + font-weight: bold !important; + text-align: right; + text-decoration: underline; +} + +td.pivot-value-grandtotal { + border-style: solid !important; + border-color: #fff !important; + border-width: 1px; + background-color: #eaf7fb; + font-weight: bold !important; + text-align: right; + text-decoration: underline; +} + +/* NRC clours dark grey #3c3c3c; light blue #eaf7fb; NRC orange #ff7602 */ + +/* This changes background of the widgets... +.item.ui-draggable.ui-droppable { +background-color: grey; +} */ + +/* NRC web-dataentry */ + +#contentDiv .nrcsubsection { + background-color: #fff; + height: 5px; +} + +#contentDiv input.entryfield { + width: 70px; + height: 18px; + padding: 2px; +} + +#contentDiv input.dataelementtotal { + width: 70px; + height: 16px; + padding: 2px; +} + +#contentDiv input.indicator { + width: 70px; + height: 18px; + padding: 2px; +} + +#contentDiv tr.derow { + background-color: #FFF; + transition: background-color 500ms; +} + +#contentDiv tr.focus { + background-color: #e5f5e5; + transition: background-color 500ms; +} + +#contentDiv tr.hover { + background-color: #e5e5e5; + transition: background-color 500ms; +} + +#contentDiv th { + border-style: hidden !important; +} + +#contentDiv td { + padding: 2px !important; + height: 16px; + text-align: center; + border-style: none !important; +} + +#contentDiv .panel { + margin-bottom: 7px; +} + +#contentDiv .panel-body { + padding-top: 0; + padding-left: 8px; + padding-right: 8px; + padding-bottom: 4px; +} + +#contentDiv .panel-default > .panel-heading { + background-color: #3c3c3c; + border-color: #3c3c3c; + padding: 7px; + margin-bottom: 5px; + cursor: pointer; +} + +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { + color: #053e21; +} + +.ui-widget-header { + background: none; + background-color: #2f3867; +} + +#contentDiv a.nrc-panel-title { + color: white; + cursor: pointer; +} + +#contentDiv .accordion-toggle:after { + font-family: FontAwesome; + content: "\f077"; + float: right; + color: white !important; +} + +#contentDiv .panel-heading.collapsed .accordion-toggle:after { + content: "\f078"; +} + +#contentDiv .sectionTable { + margin-bottom: 0px !important; + margin-top: 5px; +} + +/* From light_blue.css */ + +.page p,.page td,.page th,.page input,.page select,.page textarea +{ + font-size: 9pt; +} + +.page th +{ + text-align: left; + color: #39547d; + padding: 3px 0 3px 1px; + font-size: 13px; + font-weight: bold; + border-collapse: collapse; + border-bottom: 1px solid #cad5e5; + min-height: 28px; +} \ No newline at end of file diff --git a/resources/scripts/check-duplicate-group-sets-items.js b/resources/scripts/check-duplicate-group-sets-items.js new file mode 100644 index 000000000..c12783251 --- /dev/null +++ b/resources/scripts/check-duplicate-group-sets-items.js @@ -0,0 +1,42 @@ +const _ = require('lodash'); +const path = require('path'); +const request_promise = require('request-promise'); + +const getDuplicates = (model) => { + const plural = model + "s"; + const response$ = request_promise({ + method: "GET", + uri: `http://localhost:9026/api/${plural}.json` + + `?paging=false&fields=id,name,${model}Groups[id,name,${model}GroupSet[id,name]]`, + headers: {'Authorization': 'Basic YWRtaW46ZGlzdHJpY3Q='}, + json: true, + }); + + return response$.then(response => { + return _(response[plural]).map(item => { + const groupSetWithDuplicates = _(item[model + "Groups"]) + .groupBy(group => group[model + "GroupSet"] && group[model + "GroupSet"].name) + .toPairs() + .filter(([itemGroupName, itemGroupSets]) => itemGroupName !== "undefined" && itemGroupSets.length > 1) + .map(([itemGroupName, itemGroupSets]) => itemGroupName) + .value(); + + if (!_.isEmpty(groupSetWithDuplicates)) { + return `${model}[${item.id} - ${item.name.slice(0, 20)}] has duplicate references to sets: ${groupSetWithDuplicates}`; + } + }).compact().join("\n"); + }) +}; + +const main = (args) => { + if (_(args).isEmpty()) { + const scriptname = path.basename(__filename); + console.error(`Usage: ${scriptname} SERVER_URL`) + process.exit(1); + } else { + Promise.all([getDuplicates("dataElement"), getDuplicates("indicator")]) + .then(duplicates => console.log(duplicates.join("\n"))); + } +} + +main(process.argv); diff --git a/resources/scripts/fix-duplicated-uids.sh b/resources/scripts/fix-duplicated-uids.sh new file mode 100644 index 000000000..604bfa5b9 --- /dev/null +++ b/resources/scripts/fix-duplicated-uids.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# +# Depedencies: curl, jq +set -e -u -o pipefail + +debug() { + echo "$@" >&2 +} + +main() { local indicator_uids=$1 dhisurl=$2 + local indicator_id filter data_entry_form_ids records_found + + for indicator_uid in $indicator_uids; do + debug "Process indicator: $indicator_uid" + + records_found=$( + curl -f -sS -X GET "$dhisurl/api/indicators?filter=id:eq:$indicator_uid" | + jq '.pager | .total' + ) + + if test $records_found -ne 1; then + debug " Indicator not found: $indicator_uid" + continue + fi + + new_indicator_uid=$(curl -f -sS "$dhisurl/api/system/id.json" | jq -r '.codes[0]') + debug " Replace indicator UID: $indicator_uid -> $new_indicator_uid" + + filter="htmlCode:like:indicator${indicator_uid}" + data_entry_form_ids=$( + curl -f -sS -X GET "$dhisurl/api/dataEntryForms.json?paging=false&filter=$filter" | + jq -r '.dataEntryForms[] | .id' + ) + + for data_entry_form_id in $data_entry_form_ids; do + debug " Update custom form: $data_entry_form_id" + curl -f -sS -X GET "$dhisurl/api/dataEntryForms/$data_entry_form_id.json?fields=htmlCode" | + sed " + # Update custom form, example: + s/indicator$indicator_uid/indicator$new_indicator_uid/g; + s/indicatorid=\\\\\"$indicator_uid\\\\\"/indicatorid=\\\\\"$new_indicator_uid\\\\\"/g; + " > htmlcode.json + curl -f -sS -X PATCH "$dhisurl/api/dataEntryForms/${data_entry_form_id}.json" \ + -H "Content-Type: application/json" -d @htmlcode.json + done + + debug " Update indicator UID: $new_indicator_uid" + curl -f -sS -X PATCH "$dhisurl/api/indicators/$indicator_uid.json" \ + -H "Content-Type: application/json" \ + -d "{\"id\": \"$new_indicator_uid\"}" + done +} + +# curl -sS -u admin:district 'http://localhost:9026/api/dataElements?paging=false' | jq -r '.dataElements[] | .id' | sort > dataElements.json +# curl -sS -u admin:district 'http://localhost:9026/api/indicators?paging=false' | jq -r '.indicators[] | .id' | sort > indicators.json +# comm -12 dataElements.json indicators.json | xargs + +indicator_uids="XMRmqF9reP5 UzT7DSkkbxH ZDONOAJJNBV wFrRdK9XyIM" + +if test $# -ne 1; then + debug "Usage: fix-duplicated-uids.sh http://admin:district@localhost:8080" + exit 2 +else + main "$indicator_uids" "$@" +fi diff --git a/src/App/App.component.js b/src/App/App.component.js new file mode 100644 index 000000000..353998e8e --- /dev/null +++ b/src/App/App.component.js @@ -0,0 +1,68 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import headerBarStore$ from "d2-ui/lib/app-header/headerBar.store"; +import withStateFrom from "d2-ui/lib/component-helpers/withStateFrom"; +import HeaderBarComponent from "d2-ui/lib/app-header/HeaderBar"; +import AppWithD2 from "d2-ui/lib/app/AppWithD2.component"; +import LoadingMask from "../LoadingMask/LoadingMask.component"; +import MainContent from "d2-ui/lib/layout/main-content/MainContent.component"; +import SinglePanelLayout from "d2-ui/lib/layout/SinglePanel.component"; +import { getInstance } from "d2/lib/d2"; +import OldMuiThemeProvider from "material-ui/styles/MuiThemeProvider"; +import appTheme from "./app.theme"; +import SnackbarContainer from "../Snackbar/SnackbarContainer.component"; +import SessionDialog from "../SessionDialog/SessionDialog.component"; +import { MuiThemeProvider } from "@material-ui/core/styles"; +import { createGenerateClassName, StylesProvider } from "@material-ui/styles"; +import { muiTheme } from "./dhis2.theme"; + +const HeaderBar = withStateFrom(headerBarStore$, HeaderBarComponent); + +const generateClassName = createGenerateClassName({ + productionPrefix: "c", +}); + +class App extends AppWithD2 { + getChildContext() { + return super.getChildContext(); + } + + childContextTypes = { + d2: PropTypes.object, + }; + + render() { + if (!this.state.d2) { + return ; + } + return ( + + + +
+ + + + {this.props.children} + + + + + +
+
+
+
+ ); + } +} + +App.defaultProps = { + d2: getInstance(), +}; + +export default App; diff --git a/src/App/App.scss b/src/App/App.scss new file mode 100644 index 000000000..d01a15942 --- /dev/null +++ b/src/App/App.scss @@ -0,0 +1,53 @@ +@import "../../node_modules/d2-ui/lib/css/HeaderBar.css"; + +$left-bar-width: 295px; + +html { + background-color: #f3f3f3; + font-family: Roboto, Arial, sans-serif; +} + +.app-wrapper { + margin-top: 4rem; +} + +.main-content { + margin-left: $left-bar-width + 30; +} + +.simple-checkbox { + display: none; +} + +.simple-checkbox + span { + width: 16px; + display: inline-block; +} + +.simple-checkbox + span:before { + border: 1px solid #333; + content: "\00a0"; + display: inline-block; + font: 16px/1em sans-serif; + height: 16px; + margin: 0 0.25em 0 0; + padding: 0; + vertical-align: top; + width: 16px; +} + +.simple-checkbox:checked + span:before { + border-color: transparent; + background: #29f; + color: #fff; + content: "\2713"; + font-size: 1.3em; + text-align: center; +} + +.simple-checkbox:checked + span:after { + font-weight: bold; +} + +@import "../DataSets/DetailsBox"; +@import "../DataSets/List"; diff --git a/src/webapp/pages/app/themes/dhis2-legacy.theme.ts b/src/App/app.theme.js similarity index 68% rename from src/webapp/pages/app/themes/dhis2-legacy.theme.ts rename to src/App/app.theme.js index 7d4ed0d42..8f0ab4087 100644 --- a/src/webapp/pages/app/themes/dhis2-legacy.theme.ts +++ b/src/App/app.theme.js @@ -1,26 +1,25 @@ import { - cyan100, - cyan500, - cyan700, - darkBlack, - grey100, - grey400, - grey500, + blue500, + blue700, + blue100, orange500, + grey100, + darkBlack, white, + grey500, + grey400, } from "material-ui/styles/colors"; import { fade } from "material-ui/utils/colorManipulator"; import Spacing from "material-ui/styles/spacing"; import getMuiTheme from "material-ui/styles/getMuiTheme"; -import { MuiTheme } from "material-ui/styles"; const theme = { spacing: Spacing, fontFamily: "Roboto, sans-serif", palette: { - primary1Color: cyan500, - primary2Color: cyan700, - primary3Color: cyan100, + primary1Color: blue500, + primary2Color: blue700, + primary3Color: blue100, accent1Color: orange500, accent2Color: grey100, accent3Color: grey500, @@ -32,13 +31,13 @@ const theme = { }, }; -function createAppTheme(style: MuiTheme) { +function createAppTheme(style) { return { sideBar: { backgroundColor: "#F3F3F3", backgroundColorItem: "transparent", - backgroundColorItemActive: style.palette?.accent2Color, - textColor: style.palette?.textColor, + backgroundColorItemActive: style.palette.accent2Color, + textColor: style.palette.textColor, textColorActive: "#276696", borderStyle: "1px solid #e1e1e1", }, @@ -47,12 +46,10 @@ function createAppTheme(style: MuiTheme) { maxWidth: 900, }, formFields: { - secondaryColor: style.palette?.accent3Color, + secondaryColor: style.palette.accent4Color, }, tabs: { - backgroundColor: "#E4E4E4", - inkBarColor: style.palette?.accent1Color, - textColor: "#666666", + backgroundColor: "#e4e4e4", }, }; } diff --git a/src/webapp/pages/app/themes/dhis2.theme.ts b/src/App/dhis2.theme.js similarity index 92% rename from src/webapp/pages/app/themes/dhis2.theme.ts rename to src/App/dhis2.theme.js index 29bddb6af..0f264f688 100644 --- a/src/webapp/pages/app/themes/dhis2.theme.ts +++ b/src/App/dhis2.theme.js @@ -1,7 +1,7 @@ -import { createTheme } from "@material-ui/core/styles"; +import { createMuiTheme } from "@material-ui/core/styles"; // Color palette from https://projects.invisionapp.com/share/A7LT4TJYETS#/screens/302550228_Color -const colors = { +export const colors = { accentPrimary: "#1976d2", accentPrimaryDark: "#004BA0", accentPrimaryLight: "#63A4FF", @@ -26,7 +26,7 @@ const colors = { info: "#EAF4FF", }; -const palette = { +export const palette = { common: { white: colors.white, black: colors.black, @@ -74,12 +74,12 @@ const palette = { shadow: colors.grey, }; -export const muiTheme = createTheme({ - // colors, +export const muiTheme = createMuiTheme({ + colors, palette, typography: { fontFamily: "Roboto, Helvetica, Arial, sans-serif", - // useNextVariants: true, + useNextVariants: true, }, overrides: { MuiDivider: { diff --git a/src/CompositionRoot.ts b/src/CompositionRoot.ts deleted file mode 100644 index c6eda97d6..000000000 --- a/src/CompositionRoot.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { UserD2Repository } from "./data/repositories/UserD2Repository"; -import { UserTestRepository } from "./data/repositories/UserTestRepository"; -import { UserRepository } from "./domain/repositories/UserRepository"; -import { GetCurrentUserUseCase } from "./domain/usecases/GetCurrentUserUseCase"; -import { D2Api } from "./types/d2-api"; - -export type CompositionRoot = ReturnType; - -type Repositories = { - usersRepository: UserRepository; -}; - -function getCompositionRoot(repositories: Repositories) { - return { - users: { - getCurrent: new GetCurrentUserUseCase(repositories.usersRepository), - }, - }; -} - -export function getWebappCompositionRoot(api: D2Api) { - const repositories: Repositories = { - usersRepository: new UserD2Repository(api), - }; - - return getCompositionRoot(repositories); -} - -export function getTestCompositionRoot() { - const repositories: Repositories = { - usersRepository: new UserTestRepository(), - }; - - return getCompositionRoot(repositories); -} diff --git a/src/DataSets/DataSetPeriods.js b/src/DataSets/DataSetPeriods.js new file mode 100644 index 000000000..317dff205 --- /dev/null +++ b/src/DataSets/DataSetPeriods.js @@ -0,0 +1,142 @@ +import React from "react"; +import PropTypes from "prop-types"; +import moment from "moment"; +import _ from "lodash"; +import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; + +import FormHelpers from "../forms/FormHelpers"; +import { currentUserHasAdminRole } from "../utils/Dhis2Helpers"; + +export default class DataSetPeriods extends React.Component { + static propTypes = { + store: PropTypes.object.isRequired, + onFieldChange: PropTypes.func.isRequired, + endYear: PropTypes.number, + }; + + static contextTypes = { + d2: PropTypes.any, + }; + + styles = { + dateFieldWrapStyle: { float: "left", marginRight: 20 }, + applyToAll: { marginLeft: 20, marginTop: 25, marginBottom: -15 }, + periodYearLabel: { float: "left", marginLeft: 20, marginTop: 41, marginRight: 20 }, + }; + + constructor(props, context) { + super(props); + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + this.currentUserHasAdminRole = currentUserHasAdminRole(context.d2); + } + + getPeriodFields(years) { + const { store, onFieldChange, endYear } = this.props; + const { currentUserHasAdminRole } = this; + const { associations } = this.props.store; + const { getFormLabel, getDateField, getBooleanField, separator } = FormHelpers; + const t = this.getTranslation; + const startDate = associations.dataInputStartDate; + const periodDates = store.getPeriodDates(); + const periodYears = store.getPeriodYears(); + + if (!currentUserHasAdminRole || _.isEmpty(periodYears)) return []; + + const generateDateFieldPairs = type => { + return _.flatMap(years, (year, index) => { + const disabled = !endYear && index > 0 && associations.periodDatesApplyToAll[type]; + const showApplyToAllYearsCheckbox = !endYear && index === 0 && years.length > 1; + const validators = [ + { + validator: value => { + const startDate = associations.dataInputStartDate; + const startDateM = startDate ? moment(startDate).startOf("day") : null; + return !value || !startDateM || moment(value).isSameOrAfter(startDateM); + }, + message: t("start_date_before_project_start"), + }, + ]; + + return _.compact([ + showApplyToAllYearsCheckbox + ? getBooleanField({ + name: `associations.periodDatesApplyToAll.${type}`, + label: t("apply_periods_to_all"), + value: associations.periodDatesApplyToAll[type], + onChange: onFieldChange, + style: this.styles.applyToAll, + }) + : null, + !endYear && + getFormLabel({ + value: year, + forSection: type, + style: this.styles.periodYearLabel, + }), + !endYear && + getDateField({ + name: `associations.periodDates.${type}.${year}.start`, + value: _(periodDates).get([type, year, "start"]), + label: t(`${type}_start_date`) + " " + year, + minDate: startDate, + disabled, + validators, + wrapStyle: this.styles.dateFieldWrapStyle, + }), + (!endYear || year === endYear) && + getDateField({ + name: `associations.periodDates.${type}.${year}.end`, + value: _(periodDates).get([type, year, "end"]), + label: t(`${type}_end_date`) + " " + year, + minDate: startDate, + disabled, + wrapStyle: this.styles.dateFieldWrapStyle, + }), + separator(`${type}-${year}-end`), + ]); + }); + }; + + return [ + getFormLabel({ value: t("output_dates") }), + separator("output-dates"), + ...generateDateFieldPairs("output"), + getFormLabel({ value: t("outcome_dates") }), + separator("outcome-dates"), + ...generateDateFieldPairs("outcome"), + ]; + } + + render() { + const { store, onFieldChange, endYear } = this.props; + const { associations } = store; + const years = store.getPeriodYears(); + const formKey = JSON.stringify([years, store.associations.periodDatesApplyToAll]); + + const fields = [ + !endYear && + FormHelpers.getDateField({ + name: "associations.dataInputStartDate", + value: associations.dataInputStartDate, + label: FormHelpers.getLabel(this.getTranslation("data_input_start_date")), + wrapStyle: this.styles.dateFieldWrapStyle, + }), + + !endYear && + FormHelpers.getDateField({ + name: "associations.dataInputEndDate", + value: associations.dataInputEndDate, + label: FormHelpers.getLabel(this.getTranslation("data_input_end_date")), + wrapStyle: this.styles.dateFieldWrapStyle, + }), + + FormHelpers.separator("period-fields"), + + ...this.getPeriodFields(years), + ]; + + return ( + + ); + } +} diff --git a/src/DataSets/DataSets.component.js b/src/DataSets/DataSets.component.js new file mode 100644 index 000000000..c0b0b7fab --- /dev/null +++ b/src/DataSets/DataSets.component.js @@ -0,0 +1,661 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import fp from "lodash/fp"; +import _ from "lodash"; + +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import ObserverRegistry from "../utils/ObserverRegistry.mixin"; +import LoadingStatus from "../LoadingStatus/LoadingStatus.component"; +import ListActionBar from "../ListActionBar/ListActionBar.component"; +import SearchBox from "../SearchBox/SearchBox.component"; +import Pagination from "d2-ui/lib/pagination/Pagination.component"; +import OrgUnitsDialog from "d2-ui/lib/org-unit-dialog/OrgUnitsDialog.component"; +import SharingDialogMultiple from "../components/sharing-dialog/SharingDialogMultiple"; +import "../Pagination/Pagination.scss"; +import snackActions from "../Snackbar/snack.actions"; + +// import DataTable from 'd2-ui/lib/data-table/DataTable.component'; +import MultipleDataTable from "../MultipleDataTable/MultipleDataTable.component"; + +import DetailsBoxWithScroll from "./DetailsBoxWithScroll.component"; +import listActions from "./list.actions"; +import { + contextActions, + contextMenuIcons, + endDateForYearStore, + isContextActionAllowed, + actions, +} from "./context.actions"; +import detailsStore from "./details.store"; +import logsStore from "./logs.store"; +import deleteStore from "./delete.store"; +import orgUnitsStore from "./orgUnits.store"; +import sharingStore from "./sharing.store"; +import "d2-ui/scss/DataTable.scss"; +import { log, getLogs, LogEntry } from "./log"; + +import SettingsDialog from "../Settings/Settings.component"; +import IconButton from "material-ui/IconButton"; +import SettingsIcon from "material-ui/svg-icons/action/settings"; +import Checkbox from "material-ui/Checkbox/Checkbox"; +import Dialog from "material-ui/Dialog/Dialog"; +import FlatButton from "material-ui/FlatButton/FlatButton"; +import HelpOutlineIcon from "material-ui/svg-icons/action/help-outline"; +import ListIcon from "material-ui/svg-icons/action/list"; +import FormHelpers from "../forms/FormHelpers"; +import { + currentUserHasAdminRole, + canCreate, + getFilteredDatasets, + currentUserIsSuperuser, +} from "../utils/Dhis2Helpers"; +import * as sharing from "../models/Sharing"; +import Settings from "../models/Settings"; +import periodsStore from "./periods.store"; +import PeriodsDialog from "./PeriodsDialog"; +import { save } from "../components/sharing-dialog/utils"; +import { ProjectsService } from "../models/ProjectService"; + +const { SimpleCheckBox } = FormHelpers; + +export function calculatePageValue(pager) { + const pageSize = 50; // TODO: Make the page size dynamic + const { total, pageCount, page } = pager; + const pageCalculationValue = total - (total - (pageCount - (pageCount - page)) * pageSize); + const startItem = 1 + pageCalculationValue - pageSize; + const endItem = pageCalculationValue; + + return `${startItem} - ${endItem > total ? total : endItem}`; +} + +const sharingMeta = { allowPublicAccess: true, allowExternalAccess: false }; + +const DataSets = createReactClass({ + propTypes: { + name: PropTypes.string, + }, + + contextTypes: { + d2: PropTypes.object.isRequired, + }, + + mixins: [ObserverRegistry, Translate], + + childContextTypes: { + d2: PropTypes.object, + }, + + getChildContext() { + return { + d2: this.context.d2, + }; + }, + + tr(text, namespace = {}) { + return this.getTranslation(text, namespace); + }, + + getInitialState() { + return { + config: null, + isLoading: true, + page: 1, + pager: { total: 0 }, + dataRows: [], + d2: this.context.d2, + currentUserHasAdminRole: currentUserHasAdminRole(this.context.d2), + currentUserIsSuperuser: currentUserIsSuperuser(this.context.d2), + settingsOpen: false, + sorting: null, + searchValue: null, + orgUnits: null, + periods: null, + endDateForYear: null, + helpOpen: false, + logs: null, + logsHasMore: null, + logsFilter: _log => true, + logsPageLast: 0, + logsOldestDate: null, + sharing: null, + showOnlyCreatedByApp: false, + }; + }, + + componentDidMount() { + const d2 = this.context.d2; + + new Settings(d2).get().then(config => { + this.setState({ config }, this.getDataSets); + }); + + this.registerDisposable( + detailsStore.subscribe(detailsObject => this.setState({ detailsObject })) + ); + + this.registerDisposable(deleteStore.subscribe(_deleteObjects => this.getDataSets())); + this.registerDisposable(logsStore.subscribe(datasets => this.openLogs(datasets))); + + this.registerDisposable(this.subscribeToModelStore(sharingStore, "sharing")); + this.registerDisposable(this.subscribeToModelStore(orgUnitsStore, "orgUnits")); + this.registerDisposable(this.subscribeToModelStore(periodsStore, "periods")); + this.registerDisposable(this.subscribeToModelStore(endDateForYearStore, "endDateForYear")); + }, + + subscribeToModelStore(store, modelName) { + const d2 = this.context.d2; + + return store.subscribe(async data => { + const { datasets, options } = data || {}; + + if (datasets) { + const d2Datasets = await getDataSetsWithOwnerFields(d2, datasets); + this.setState({ [modelName]: { models: d2Datasets, options } }); + } else { + this.setState({ [modelName]: null }); + } + }); + }, + + getDataSetsOnCurrentPage() { + this.getDataSets({ clearPage: false }); + }, + + async getDataSets({ clearPage = true } = {}) { + const { page, sorting, searchValue, showOnlyCreatedByApp, config } = this.state; + const newPage = clearPage ? 1 : page; + const filters = { searchValue, showOnlyCreatedByApp }; + const dataSetsCollection = await getFilteredDatasets( + this.context.d2, + config, + newPage, + sorting, + filters + ); + const formatDate = isoDate => new Date(isoDate).toLocaleString(); + const dataRows = dataSetsCollection + .toArray() + .map(dr => + _.merge(dr, { selected: false, lastUpdatedHuman: formatDate(dr.lastUpdated) }) + ); + + this.setState({ + isLoading: false, + pager: dataSetsCollection.pager, + dataRows: dataRows, + page: newPage, + }); + }, + + searchListByName(searchObserver) { + //bind key search listener + const searchListByNameDisposable = searchObserver.subscribe(value => { + this.setState( + { + isLoading: true, + searchValue: value, + }, + this.getDataSets + ); + }); + + this.registerDisposable(searchListByNameDisposable); + }, + + openSettings() { + this.setState({ settingsOpen: true }); + }, + + closeSettings() { + this.setState({ settingsOpen: false }); + }, + + openAllLogs() { + const title = `${this.tr("logs")} (${this.tr("all")})`; + this.setState({ + logsFilter: _log => true, + logsObject: title, + logs: null, + }); + this.addLogs([0, 1]); + }, + + openLogs(datasets) { + // Set this.state.logs to the logs that include any of the given + // datasets, this.state.logsObject to a description of their contents + // and this.state.logsFilter so it selects only the relevant logs. + if (datasets === null) { + this.setState({ logsObject: null }); + } else { + const ids = datasets.map(ds => ds.id); + const idsSet = new Set(ids); + const title = `${this.tr("logs")} (${ids.join(", ")})`; + const logsFilter = log => log.datasets.some(ds => idsSet.has(ds.id)); + + this.setState({ + logsObject: title, + logs: null, + logsFilter, + }); + this.addLogs([0, 1]); // load the last two log pages + } + }, + + addNextLog() { + return this.addLogs([this.state.logsPageLast + 1]); + }, + + addLogs(pages) { + return getLogs(pages).then(res => { + if (res === null) { + this.setState({ + logsPageLast: -1, + logs: this.state.logs || [], + }); + } else { + const { logs, hasMore: logsHasMore } = res; + const logsOldestDate = logs.length > 0 ? logs[logs.length - 1].date : null; + const filteredLogs = _(logs) + .filter(this.state.logsFilter) + .value(); + + this.setState({ + logsHasMore: logsHasMore, + logs: _([this.state.logs, filteredLogs]) + .compact() + .flatten() + .value(), + logsPageLast: _.max(pages), + logsOldestDate: logsOldestDate, + }); + } + }); + }, + + onSelectToggle(ev, dataset) { + ev.preventDefault(); + ev.stopPropagation(); + this.setState({ + dataRows: this.state.dataRows.map(dr => + dr.id === dataset.id ? _.merge(dr, { selected: !dr.selected }) : dr + ), + }); + }, + + onSelectAllToggle(value) { + this.setState({ + dataRows: this.state.dataRows.map(dr => _.merge(dr, { selected: !value })), + }); + }, + + onActiveRowsChange(datasets) { + const selectedIds = new Set(datasets.map(ds => ds.id)); + + this.setState({ + dataRows: this.state.dataRows.map(dr => + _.merge(dr, { selected: selectedIds.has(dr.id) }) + ), + }); + }, + + _onColumnSort(sorting) { + this.setState({ sorting }, this.getDataSets); + }, + + _openHelp() { + this.setState({ helpOpen: true }); + }, + + _closeHelp() { + this.setState({ helpOpen: false }); + }, + + _onSharingClose() { + const { updated } = sharing.getChanges(this.state.dataRows, this.state.sharing.models); + + if (!_(updated).isEmpty()) { + log("change sharing settings", "success", updated); + this.getDataSets({ clearPage: false }); + } + listActions.hideSharingBox(); + }, + + _onSharingSearch(key) { + return this.context.d2.Api.getApi().get("sharing/search", { key }); + }, + + async _onSharingSave(attributes, strategy) { + const { d2 } = this.context; + const currentDataSets = this.state.sharing.models; + const { status, dataSets } = await save(d2, currentDataSets, attributes, strategy); + + if (status) { + this.setState({ sharing: { models: dataSets } }); + } else { + snackActions.show({ message: "Error" }); + } + }, + + _onShowOnlyCreatedByAppCheck(ev) { + this.setState({ showOnlyCreatedByApp: ev.target.checked }, this.getDataSets); + }, + + async postOrgUnitsSave(dataSets) { + const api = this.context.d2.Api.getApi(); + const service = new ProjectsService(api, this.state.config); + + try { + await service.updateOrgUnitsFromDataSets(dataSets); + log("change organisation units", "success", dataSets); + } catch (err) { + snackActions.show({ message: err.message || err.toString() }); + } + }, + + render() { + if (!this.state.config) return null; + + const currentlyShown = calculatePageValue(this.state.pager); + + const paginationProps = { + hasNextPage: () => + Boolean(this.state.pager.hasNextPage) && this.state.pager.hasNextPage(), + hasPreviousPage: () => + Boolean(this.state.pager.hasPreviousPage) && this.state.pager.hasPreviousPage(), + onNextPageClick: () => { + this.setState( + { isLoading: true, page: this.state.pager.page + 1 }, + this.getDataSetsOnCurrentPage + ); + }, + onPreviousPageClick: () => { + this.setState( + { isLoading: true, page: this.state.pager.page - 1 }, + this.getDataSetsOnCurrentPage + ); + }, + total: this.state.pager.total, + currentlyShown, + }; + + const styles = { + dataTableWrap: { + display: "flex", + flexDirection: "column", + flex: 2, + }, + + detailsBoxWrap: { + flex: 1, + marginLeft: "1rem", + marginRight: "1rem", + opacity: 1, + flexGrow: 0, + }, + + listDetailsWrap: { + flex: 1, + display: "flex", + flexOrientation: "row", + }, + dialogContentStyle: { + width: "1150px", + maxWidth: "none", + }, + dialogBodyStyle: { + minHeight: "440px", + maxHeight: "600px", + }, + }; + + const rows = this.state.dataRows.map(dr => + fp.merge(dr, { + selected: ( + this.onSelectToggle(ev, dr)} + checked={dr.selected} + /> + ), + }) + ); + const selectedHeaderChecked = + !_.isEmpty(this.state.dataRows) && this.state.dataRows.every(row => row.selected); + const selectedColumnContents = ( + this.onSelectAllToggle(selectedHeaderChecked)} + iconStyle={{ width: "auto" }} + /> + ); + + const columns = [ + { + name: "selected", + style: { width: 20 }, + text: "", + sortable: false, + contents: selectedColumnContents, + }, + { name: "name", sortable: true }, + { name: "publicAccess", sortable: true }, + { name: "lastUpdated", sortable: true, value: "lastUpdatedHuman" }, + ]; + + const activeRows = _(rows) + .keyBy("id") + .at(this.state.dataRows.filter(dr => dr.selected).map(dr => dr.id)) + .value(); + + const renderSettingsButton = () => ( +
+ + + +
+ ); + + const renderLogsButton = () => ( +
+ + + +
+ ); + + const { d2 } = this.context; + const { + config, + logsPageLast, + logsOldestDate, + logsHasMore, + showOnlyCreatedByApp, + periods, + endDateForYear, + } = this.state; + + const showCreatedByAppCheck = !!config.createdByDataSetConfigurationAttributeId; + const olderLogLiteral = logsPageLast < 0 ? this.tr("logs_no_older") : this.tr("logs_older"); + const dateString = new Date(logsOldestDate || new Date()).toLocaleString(); + const label = olderLogLiteral + " " + dateString; + + const logLoadMoreButton = logsHasMore ? ( + + ) : null; + + const logActions = []; + + const renderLogs = () => { + const { logs } = this.state; + + if (!logs) return this.tr("logs_loading"); + else if (_(logs).isEmpty()) return this.tr("logs_none"); + else return logs.map(LogEntry); + }; + + const helpActions = []; + + const renderHelp = () => ( +
+ + + +
+ ); + + const { detailsObject, dataRows } = this.state; + const detailsObjectToShow = detailsObject + ? dataRows.find(dataRow => dataRow.id === detailsObject.id) || detailsObject + : null; + + return ( +
+ + {this.tr("help_landing_page")} + + + {this.state.orgUnits ? ( + + ) : null} + + {this.state.periods ? ( + log("set period dates", "success", datasets)} + onRequestClose={() => periodsStore.setState(null)} + contentStyle={styles.dialogContentStyle} + bodyStyle={styles.dialogBodyStyle} + /> + ) : null} + + {this.state.endDateForYear ? ( + log("set end date for year", "success", datasets)} + onRequestClose={() => endDateForYearStore.setState(null)} + contentStyle={styles.dialogContentStyle} + bodyStyle={styles.dialogBodyStyle} + /> + ) : null} + + {this.state.sharing ? ( + + ) : null} + +
+
+ +
+ + {showCreatedByAppCheck && ( + + )} + + {this.tr("help_landing_page") !== "" && renderHelp()} + + {this.state.currentUserHasAdminRole && renderLogsButton()} + + {this.state.currentUserIsSuperuser && renderSettingsButton()} + +
+ +
+ +
+
+ +
+
+ + isContextActionAllowed(d2, ...args) + } + activeRows={activeRows} + onActiveRowsChange={this.onActiveRowsChange} + isMultipleSelectionAllowed={true} + /> + {this.state.dataRows.length || this.state.isLoading ? null : ( +
No results found
+ )} +
+ {this.state.detailsObject ? ( + + ) : null} + {this.state.logsObject ? ( + + {renderLogs()} +
{logLoadMoreButton}
+
+ ) : null} +
+ + {canCreate(d2) && } +
+ ); + }, +}); + +function getDataSetsWithOwnerFields(d2, dataSets) { + const dataSetIds = dataSets.map(o => o.id).join(","); + return ( + d2.models.dataSets + // access fields are not in :owner anymore (2.36), ask for them explictly + .list({ + fields: ":owner,publicAccess,userAccesses,userGroupAccesses", + filter: `id:in:[${dataSetIds}]`, + }) + .then(c => c.toArray()) + ); +} + +export default DataSets; diff --git a/src/DataSets/DetailsBox.component.js b/src/DataSets/DetailsBox.component.js new file mode 100644 index 000000000..d5377308f --- /dev/null +++ b/src/DataSets/DetailsBox.component.js @@ -0,0 +1,257 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import classes from "classnames"; +import FontIcon from "material-ui/FontIcon"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; +import _ from "lodash"; +import moment from "moment"; + +import { mapPromise, accesses } from "../utils/Dhis2Helpers"; +import { getCoreCompetencies, getProject } from "../models/dataset"; + +export default createReactClass({ + propTypes: { + fields: PropTypes.array, + showDetailBox: PropTypes.bool, + source: PropTypes.object, + onClose: PropTypes.func, + config: PropTypes.object, + }, + + mixins: [Translate], + + styles: { + ul: { marginTop: 3, paddingLeft: 20 }, + ulSharing: { marginTop: 3, paddingLeft: 0, listStyleType: "none" }, + liSharing: { fontStyle: "italic", fontWeight: 500 }, + }, + + virtualFields: new Set(["sharing", "dataInputPeriod"]), + + getInitialState() { + this.asyncFields = this.getAsyncFields(); + + return _(this.asyncFields) + .keys() + .map(asyncField => [asyncField, { loaded: false, value: null }]) + .fromPairs() + .value(); + }, + + getDefaultProps() { + return { + fields: [ + "name", + "shortName", + "code", + "displayDescription", + "created", + "lastUpdated", + "id", + "href", + "linkedProject", + "dataInputPeriod", + "coreCompetencies", + "sharing", + ], + showDetailBox: false, + onClose: () => {}, + }; + }, + + UNSAFE_componentWillReceiveProps(newProps) { + const datasetChanged = this.props.source.id !== newProps.source.id; + + if (datasetChanged) { + this.setState(this.getInitialState()); + this.componentDidMount(); + } + }, + + componentDidMount() { + mapPromise(_.toPairs(this.asyncFields), async ([asyncField, getValue]) => { + const value = await getValue.bind(this)(asyncField); + this.setState({ [asyncField]: { loaded: true, value } }); + }); + }, + + getDataInputPeriod(dataSet) { + const { openingDate, closingDate } = (dataSet.dataInputPeriods || [])[0] || {}; + const format = isoDate => (isoDate ? moment(isoDate).format("L") : "-"); + return openingDate || closingDate + ? [format(openingDate), format(closingDate)].join(" -> ") + : null; + }, + + getAsyncFields() { + const { d2 } = this.context; + + return { + coreCompetencies: () => + getCoreCompetencies(d2, this.props.config, this.props.source).then( + coreCompetencies => + _(coreCompetencies) + .toArray() + .map("name") + .join(", ") || "-" + ), + linkedProject: () => + getProject(d2, this.props.config, this.props.source).then(project => + project ? project.displayName : this.getTranslation("no_project_linked") + ), + }; + }, + + getValues() { + const getRawValue = fieldName => { + if (_(this.asyncFields).has(fieldName)) { + return this.state[fieldName].loaded + ? this.state[fieldName].value + : this.getTranslation("loading"); + } else if (this.virtualFields.has(fieldName)) { + return this.props.source; + } else { + return this.props.source[fieldName]; + } + }; + + return _(this.props.fields) + .map(fieldName => { + const rawValue = getRawValue(fieldName); + return rawValue + ? { fieldName, valueToRender: this.getValueToRender(fieldName, rawValue) } + : null; + }) + .compact() + .value(); + }, + + getDetailBoxContent() { + if (!this.props.source) { + return
Loading details...
; + } + + return this.getValues().map(({ fieldName, valueToRender }) => { + const classNameLabel = `detail-field__label detail-field__${fieldName}-label`; + const classNameValue = `detail-field__value detail-field__${fieldName}`; + + return ( +
+
+ {this.getTranslation(camelCaseToUnderscores(fieldName))} +
+ +
{valueToRender}
+
+ ); + }); + }, + + renderSharing(object) { + const i18nSubKeys = { + [accesses.none]: "none", + [accesses.read]: "can_view", + [accesses.write]: "can_edit", + }; + const i18nSubKey = i18nSubKeys[object.publicAccess]; + const publicAccess = i18nSubKey ? this.getTranslation(`public_${i18nSubKey}`) : null; + const getNames = objs => + _(objs) + .map("displayName") + .join(", ") || this.getTranslation("none"); + + return [ +
+ {this.getTranslation("public_access")}:{" "} + {publicAccess} +
, +
+ {this.getTranslation("user_access")}:{" "} + {getNames(object.userAccesses)} +
, +
+ + {this.getTranslation("user_group_access")} + + : {getNames(object.userGroupAccesses)} +
, + ]; + }, + + getValueToRender(fieldName, value) { + const getDateString = dateValue => { + return moment(dateValue).format("LLLL"); + }; + + if (fieldName === "sharing") { + const sharingItems = this.renderSharing(value).map((sharingItem, index) => { + return
  • {sharingItem}
  • ; + }); + return
      {sharingItems}
    ; + } + + if (fieldName === "dataInputPeriod") { + return this.getDataInputPeriod(this.props.source) || "-"; + } + + if (fieldName === "created" || fieldName === "lastUpdated") { + return getDateString(value); + } + + if (fieldName === "href") { + // Suffix the url with the .json extension to always get the json representation of the api resource + return ( + + {value} + + ); + } + + if (_.isPlainObject(value) || value.modelDefinition) { + return value.displayName || value.name || "-"; + } + + if (Array.isArray(value) && value.length) { + const namesToDisplay = value + .map(v => (v.displayName ? v.displayName : v.name)) + .filter(name => name); + + return ( +
      + {namesToDisplay.map(name => ( +
    • {name}
    • + ))} +
    + ); + } + + return value; + }, + + render() { + const classList = classes("details-box"); + + if (this.props.showDetailBox === false) { + return null; + } + + return ( +
    + + close + +
    {this.getDetailBoxContent()}
    +
    + ); + }, +}); diff --git a/src/DataSets/DetailsBox.scss b/src/DataSets/DetailsBox.scss new file mode 100644 index 000000000..2f6c8eaee --- /dev/null +++ b/src/DataSets/DetailsBox.scss @@ -0,0 +1,30 @@ +$detail-box--field-value--color: #333; + +.details-box { + padding: 1.5rem; +} + +.details-box__close-button { + cursor: pointer; + float: right; +} + +.detail-field__label { + font-weight: bold; +} + +.detail-field__value { + color: $detail-box--field-value--color; + padding-top: 4px; + min-width: 100%; + overflow: hidden; + text-overflow: ellipsis; +} + +.detail-field { + padding-bottom: 1rem; +} + +.detail-field:last-child { + padding-bottom: 0; +} diff --git a/src/DataSets/DetailsBoxWithScroll.component.js b/src/DataSets/DetailsBoxWithScroll.component.js new file mode 100644 index 000000000..72707242b --- /dev/null +++ b/src/DataSets/DetailsBoxWithScroll.component.js @@ -0,0 +1,43 @@ +import React, { Component } from "react"; +import { Observable } from "rx"; +import DetailsBox from "./DetailsBox.component"; +import Paper from "material-ui/Paper"; + +export default class DetailsBoxWithScroll extends Component { + componentDidMount() { + this.disposable = Observable.fromEvent(global, "scroll") + .debounce(200) + .subscribe(() => this.props.scroll && this.forceUpdate()); + } + + componentWillUnmount() { + this.disposable && this.disposable.dispose(); + } + + render() { + let marginTop; + if (this.props.scroll) { + const appOffsetTop = document.querySelector("main").offsetTop; + marginTop = Math.max(document.scrollingElement.scrollTop - appOffsetTop, 0); + } else { + marginTop = 0; + } + + return ( +
    + + + +
    + ); + } +} diff --git a/src/DataSets/FormSteps.component.js b/src/DataSets/FormSteps.component.js new file mode 100644 index 000000000..e81fd6162 --- /dev/null +++ b/src/DataSets/FormSteps.component.js @@ -0,0 +1,225 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import Wizard from "../Wizard/Wizard.component"; +import { goToRoute } from "../router"; +import InitialConfig from "./Forms/InitialConfig.component"; +import GeneralInformation from "./Forms/GeneralInformation.component"; +import OrganisationUnit from "./Forms/OrganisationUnit.component"; +import CoreSections from "./Forms/CoreSections.component"; +import NonCoreSections from "./Forms/NonCoreSections.component"; +import Disaggregation from "./Forms/Disaggregation.component"; +import Sharing from "./Forms/Sharing.component"; +import GreyFields from "./Forms/GreyFields.component"; +import Save from "./Forms/Save.component"; +import snackActions from "../Snackbar/snack.actions"; +import LoadingMask from "../LoadingMask/LoadingMask.component"; +import Heading from "d2-ui/lib/headings/Heading.component"; +import DataSetStore from "../models/DataSetStore"; +import Settings from "../models/Settings"; + +const DataSetFormSteps = createReactClass({ + mixins: [Translate], + propTypes: {}, + + getInitialState() { + return { + store: null, + active: 0, + doneUntil: 0, + validating: false, + saving: false, + }; + }, + + componentDidMount() { + const { d2 } = this.context; + const settings = new Settings(d2); + const { action, id: datasetId } = this.props; + + const getStore = config => { + if (action === "add") { + return DataSetStore.add(d2, config); + } else if (action === "edit") { + return DataSetStore.edit(d2, config, datasetId); + } else if (action === "clone") { + return DataSetStore.clone(d2, config, datasetId); + } else { + throw new Error(`Unknown action: ${action}`); + } + }; + + settings + .get() + .then(config => { + return getStore(config) + .then(store => this.setState({ store })) + .catch(err => { + console.error(err); + snackActions.show({ + route: "/", + message: `Cannot edit dataset: ${err.message || JSON.stringify(err)}`, + }); + }); + }) + .catch(err => { + snackActions.show({ route: "/", message: `Error: settings not found: ${err}` }); + }); + }, + + _onFieldsChange(stepId, fieldPath, newValue, update = true) { + this.state.store.updateField(fieldPath, newValue); + if (update) { + this.forceUpdate(); + } + }, + + _afterSave() { + goToRoute("/"); + }, + + _onCancel() { + if (window.confirm(this.getTranslation("confirm_wizard_cancel"))) { + goToRoute("/"); + } + }, + + _onStepChange(newIndex) { + if (newIndex > this.state.active) { + this.setState({ stepAfterValidation: newIndex }); + } else { + this.setState({ active: newIndex, doneUntil: newIndex }); + } + }, + + _showButtonFunc(step) { + return step.id === "save"; + }, + + _formStatus(isValid) { + const newIndex = this.state.stepAfterValidation; + + if (isValid && newIndex) { + this.setState({ stepAfterValidation: null, active: newIndex, doneUntil: newIndex }); + } else { + this.setState({ stepAfterValidation: null }); + } + }, + + render() { + const { store } = this.state; + if (!store) return ; + + const props = { + config: store.config, + store: store, + validateOnRender: !!this.state.stepAfterValidation, + formStatus: this._formStatus, + }; + + const buttons = [ + { + id: "cancel", + label: this.getTranslation("cancel"), + onClick: this._onCancel, + }, + { + id: "save", + label: this.getTranslation("save"), + onClick: () => this.setState({ saving: true }), + showFunc: this._showButtonFunc, + }, + ]; + + const steps = [ + { + id: "initialConfig", + title: this.getTranslation("step_initial_configuration"), + component: InitialConfig, + props: props, + help: this.getTranslation("help_initial_configuration"), + }, + { + id: "generalInformation", + title: this.getTranslation("step_general_information"), + component: GeneralInformation, + props: props, + help: this.getTranslation("help_general_information"), + }, + { + id: "organisationUnit", + title: this.getTranslation("organisation_unit"), + component: OrganisationUnit, + props: props, + help: this.getTranslation("help_organisation_unit"), + }, + { + id: "sections", + title: this.getTranslation("step_core_indicators"), + component: CoreSections, + props: props, + help: this.getTranslation("help_core_indicators"), + }, + { + id: "sections", + title: this.getTranslation("step_non_core_indicators"), + component: NonCoreSections, + props: props, + help: this.getTranslation("help_non_core_indicators"), + }, + { + id: "disaggregation", + title: this.getTranslation("step_disaggregation"), + component: Disaggregation, + props: props, + help: this.getTranslation("help_disaggregation"), + }, + { + id: "grey_fields", + title: this.getTranslation("step_grey_fields"), + component: GreyFields, + props: props, + help: this.getTranslation("help_grey_fields"), + }, + { + id: "sharing", + title: this.getTranslation("step_sharing"), + component: Sharing, + visible: store.isSharingStepVisible(), + props: props, + help: this.getTranslation("help_sharing"), + }, + { + id: "save", + title: this.getTranslation("save"), + component: Save, + props: _.merge(props, { saving: this.state.saving, afterSave: this._afterSave }), + help: this.getTranslation("help_save"), + }, + ].filter(step => !step.disabled); + + const { dataset } = this.state.store; + const actionTitle = this.getTranslation("action_" + this.props.action, { + title: dataset.name || "-", + sourceTitle: dataset._sourceName || "-", + }); + + return ( +
    + {actionTitle} + + +
    + ); + }, +}); + +export default DataSetFormSteps; diff --git a/src/DataSets/Forms/CoreSections.component.js b/src/DataSets/Forms/CoreSections.component.js new file mode 100644 index 000000000..f00315726 --- /dev/null +++ b/src/DataSets/Forms/CoreSections.component.js @@ -0,0 +1,8 @@ +import React from "react"; +import Sections from "./Sections.component"; + +const excludeErrors = ["core_competency_no_items"]; + +const CoreSections = props => ; + +export default CoreSections; diff --git a/src/DataSets/Forms/Disaggregation.component.js b/src/DataSets/Forms/Disaggregation.component.js new file mode 100644 index 000000000..2618f6144 --- /dev/null +++ b/src/DataSets/Forms/Disaggregation.component.js @@ -0,0 +1,145 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import ObserverRegistry from "../../utils/ObserverRegistry.mixin"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import DataSetElementCategoryComboSelectionDialog from "../../forms/DataSetElementCategoryComboSelectionDialog.component"; +import { getCategoryCombos, getDisaggregationForCategories, getDseId } from "../../utils/Dhis2Helpers"; +import SearchBox from "../../SearchBox/SearchBox.component"; +import { getSections } from "../../models/Section"; + +const SearchBoxWrapper = props => { + const { debounce, onChange } = props; + + const wrapperStyle = { + display: "inline-block", + width: "40%", + position: "relative", + margin: "5px 0px", + }; + + return ( +
    + +
    + ); +}; + +const Disaggregation = createReactClass({ + mixins: [Translate, ObserverRegistry], + + propTypes: { + validateOnRender: PropTypes.bool, + }, + + getInitialState() { + return { + categoryCombos: null, + dataSetElementsGroups: null, + filter: "", + }; + }, + + async componentDidMount() { + Promise.all([getCategoryCombos(this.context.d2), this._getDataSetElementsGroups()]).then( + ([categoryCombos, dataSetElementsGroups]) => { + this.setState({ + categoryCombos: categoryCombos.toArray(), + dataSetElementsGroups, + }); + } + ); + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) props.formStatus(true); + }, + + async _getDataSetElementsGroups() { + const { d2 } = this.context; + const { config } = this.props; + const { dataset, associations } = this.props.store; + const { coreCompetencies: ccs, initialCoreCompetencies: initialCcs } = associations; + const sections = await getSections(d2, config, dataset, initialCcs, ccs); + + const indicatorIdsByDeId = _(sections) + .flatMap(section => _.values(section.items)) + .filter(item => item.type === "indicator") + .flatMap(indItem => indItem.dataElementsNumeric.map(de => [de.id, indItem.id])) + .fromPairs() + .value(); + + return _(dataset.dataSetElements) + .groupBy(dse => indicatorIdsByDeId[dse.dataElement.id] || `de-${dse.dataElement.id}`) + .values() + .sortBy(dseGroup => dseGroup[0].dataElement.displayName) + .value(); + }, + + _onCategoriesSelected(dataSetElementIds, categories) { + const { d2 } = this.context; + const { dataSetElements } = this.props.store.dataset; + const { categoryCombos } = this.state; + + _(dataSetElementIds).each(dseId => { + const dataSetElementToUpdate = _(dataSetElements).find(dse => getDseId(dse) === dseId); + const customCategoryCombo = getDisaggregationForCategories( + d2, + dataSetElementToUpdate.dataElement, + categoryCombos, + categories + ); + dataSetElementToUpdate.categoryCombo = customCategoryCombo; + }); + + this.forceUpdate(); + }, + + _onSearchChange(searchObserver) { + this.registerDisposable(searchObserver.subscribe(s => this.setState({ filter: s }))); + }, + + _renderForm() { + const d2 = this.context.d2; + const { categoryCombos, filter, dataSetElementsGroups } = this.state; + const isSubstring = (s1, s2) => _.includes(s1.toLowerCase(), s2.toLowerCase()); + const canEdit = d2.currentUser.canCreate(d2.models.categoryCombos); + const dataSetElementsGroupsFiltered = filter + ? dataSetElementsGroups.filter(dseGroup => + dseGroup.some(dse => isSubstring(dse.dataElement.displayName, filter)) + ) + : dataSetElementsGroups; + + return ( +
    + {canEdit ? null : ( +

    + {this.getTranslation("cannot_disaggregate")} +

    + )} + + + + +
    + ); + }, + + render() { + return !this.state.categoryCombos || !this.state.dataSetElementsGroups ? ( + + ) : ( +
    {this._renderForm()}
    + ); + }, +}); + +export default Disaggregation; diff --git a/src/DataSets/Forms/GeneralInformation.component.js b/src/DataSets/Forms/GeneralInformation.component.js new file mode 100644 index 000000000..dffdc63b1 --- /dev/null +++ b/src/DataSets/Forms/GeneralInformation.component.js @@ -0,0 +1,178 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; +import Validators from "d2-ui/lib/forms/Validators"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import FormHelpers from "../../forms/FormHelpers"; +import { currentUserHasAdminRole } from "../../utils/Dhis2Helpers"; +import DataSetPeriods from "../DataSetPeriods"; +import snackActions from "../../Snackbar/snack.actions"; +import { getPeriodsValidationsErrors } from "../../models/data-periods"; + +const GeneralInformation = createReactClass({ + mixins: [Translate], + + styles: { + error: { color: "red" }, + }, + + propTypes: { + config: PropTypes.object, + store: PropTypes.object, + onFieldsChange: PropTypes.func, + validateOnRender: PropTypes.bool, + }, + + getInitialState() { + return { + error: null, + isLoading: true, + currentUserHasAdminRole: currentUserHasAdminRole(this.context.d2), + isValid: undefined, + }; + }, + + componentDidMount() { + this.context.d2.models.categoryCombos + .list({ + filter: ["dataDimensionType:eq:ATTRIBUTE", "name:eq:default"], + fields: "id,name", + paging: false, + rootJunction: "OR", + }) + .then(collection => collection.toArray()) + .then(categoryCombinations => + this.setState({ + isLoading: false, + categoryCombinations, + }) + ); + }, + + async _validateNameUniqueness(name) { + const { dataset } = this.props.store; + const dataSets = await this.context.d2.models.dataSets.list({ + fields: "id,name", + filter: "name:$ilike:" + name, + }); + const existsDataSetWithName = dataSets + .toArray() + .some(ds => ds.id !== dataset.id && ds.name.toLowerCase() === name.toLowerCase()); + + if (existsDataSetWithName) { + throw this.getTranslation("dataset_name_exists"); + } else { + this.setState({ error: null }); + } + }, + + _renderForm() { + const { store } = this.props; + const { dataset } = store; + const { error } = this.state; + + const fields = _.compact([ + FormHelpers.getTextField({ + name: "dataset.name", + label: this.getTranslation("name"), + value: dataset.name, + isRequired: true, + validators: [ + { + validator: Validators.isRequired, + message: this.getTranslation(Validators.isRequired.message), + }, + ], + asyncValidators: [name => this._validateNameUniqueness(name)], + }), + + FormHelpers.getTextField({ + name: "dataset.description", + label: this.getTranslation("description"), + value: dataset.description, + multiLine: true, + }), + + this.state.currentUserHasAdminRole && + FormHelpers.getTextField({ + name: "dataset.expiryDays", + label: this.getTranslation("expiry_days"), + help: this.getTranslation("expiry_days_help"), + value: dataset.expiryDays, + type: "number", + }), + + this.state.currentUserHasAdminRole && + FormHelpers.getTextField({ + name: "dataset.openFuturePeriods", + label: this.getTranslation("open_future_periods"), + value: dataset.openFuturePeriods, + type: "number", + }), + + FormHelpers.getBooleanField({ + name: "dataset.notifyCompletingUser", + label: this.getTranslation("notify_completing_user"), + value: dataset.notifyCompletingUser, + onChange: this._onUpdateField, + }), + ]); + + return ( +
    + {error &&

    {error}

    } + + + + +
    + ); + }, + + _onUpdateField(fieldPath, newValue) { + this.props.onFieldsChange(fieldPath, newValue); + }, + + getErrorMessage() { + const messages = getPeriodsValidationsErrors(this.props.store, { + validateOutputOutcome: this.state.currentUserHasAdminRole, + }); + return messages.join("\n"); + }, + + _onUpdateFormStatus(status) { + const statusIsValid = Boolean(!status.validating && status.valid); + const isValid = statusIsValid && !this.getErrorMessage(); + + this.setState({ isValid: statusIsValid }); + this.props.formStatus(isValid); + }, + + async UNSAFE_componentWillReceiveProps(props) { + if (!props.validateOnRender) return; + + const message = this.getErrorMessage(); + const isValid = this.state.isValid && !message; + + if (message) snackActions.show({ message }); + this.props.formStatus(isValid); + }, + + render() { + if (this.state.isLoading) { + return ; + } else { + return this._renderForm(); + } + }, +}); + +export default GeneralInformation; diff --git a/src/DataSets/Forms/GreyFields.component.js b/src/DataSets/Forms/GreyFields.component.js new file mode 100644 index 000000000..0f9a70d15 --- /dev/null +++ b/src/DataSets/Forms/GreyFields.component.js @@ -0,0 +1,39 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import GreyFieldsTable from "../../forms/GreyFieldsTable.component"; +import { collectionToArray } from "../../utils/Dhis2Helpers"; + +const GreyFields = createReactClass({ + mixins: [Translate], + + propTypes: { + validateOnRender: PropTypes.bool, + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) props.formStatus(true); + }, + + _save(greyedFields) { + this.props.store.setGreyedFields(greyedFields); + }, + + render() { + const { dataset } = this.props.store; + const sections = collectionToArray(dataset.sections); + + return ( +
    + +
    + ); + }, +}); + +export default GreyFields; diff --git a/src/DataSets/Forms/InitialConfig.component.js b/src/DataSets/Forms/InitialConfig.component.js new file mode 100644 index 000000000..c5726e398 --- /dev/null +++ b/src/DataSets/Forms/InitialConfig.component.js @@ -0,0 +1,165 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import FormHelpers from "../../forms/FormHelpers"; +import snackActions from "../../Snackbar/snack.actions"; +import moment from "moment"; + +const InitialConfig = createReactClass({ + mixins: [Translate], + + propTypes: { + config: PropTypes.object, + store: PropTypes.object, + onFieldsChange: PropTypes.func, + }, + + getDefaultProps: function() { + return { onFieldsChange: _.identity }; + }, + + getInitialState() { + return { isLoading: true, errors: {} }; + }, + + _getCategoryOptions(categoryId, fields = [":all"]) { + return this.context.d2.models.categoryOptions + .filter() + .on("categories.id") + .equals(categoryId) + .list({ fields: `id,${fields.join(",")}`, paging: false }) + .then(collection => _.keyBy(collection.toArray(), "id")); + }, + + _getDataElementGroups(dataElementGroupSetId, fields = [":all"]) { + return this.context.d2.models.dataElementGroups + .filter() + .on("groupSets.id") + .equals(dataElementGroupSetId) + .list({ fields: `id,${fields.join(",")}`, paging: false }) + .then(collection => _.keyBy(collection.toArray(), "id")); + }, + + _getProjects() { + const fields = [ + "code", + "displayName", + "startDate", + "endDate", + "organisationUnits[id,path,displayName]", + ]; + return this._getCategoryOptions(this.props.config.categoryProjectsId, fields); + }, + + _getCoreCompetencies() { + const fields = ["name", "displayName", "code"]; + const degsId = this.props.config.dataElementGroupSetCoreCompetencyId; + return this._getDataElementGroups(degsId, fields); + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) { + const { coreCompetencies, project } = this.props.store.associations; + + if (_.isEmpty(coreCompetencies)) { + props.formStatus(false); + const error = this.getTranslation("select_one_core_competency"); + this.setState({ errors: { coreCompetencies: [error] } }); + } else { + if (!project) { + snackActions.show({ message: this.getTranslation("no_project_selected") }); + } + props.formStatus(true); + this.setState({ errors: {} }); + } + } + }, + + componentDidMount() { + Promise.all([this._getProjects(), this._getCoreCompetencies()]).then( + ([projects, coreCompetencies]) => { + this.setState({ + isLoading: false, + projects: projects, + coreCompetencies: coreCompetencies, + }); + } + ); + }, + + _filterProjects(projectOptions, controls) { + const today = moment().startOf("day"); + const isProjectOpen = project => + project && (!project.endDate || moment(project.endDate) >= today); + return projectOptions.filter( + projectOption => + controls.seeAllProjects || isProjectOpen(this.state.projects[projectOption.value]) + ); + }, + + _getOptionsFromIndexedObjects(objects) { + return _(objects) + .values() + .map(obj => ({ value: obj.id, text: obj.displayName })) + .value(); + }, + + render() { + if (this.state.isLoading) { + return ; + } else { + return this._renderForm(); + } + }, + + _renderForm() { + const { associations } = this.props.store; + const fields = [ + FormHelpers.getRichSelectField({ + name: "associations.project", + label: this.getTranslation("linked_project"), + value: associations.project ? associations.project.id : null, + options: this._getOptionsFromIndexedObjects(this.state.projects), + filterOptions: this._filterProjects, + controls: [ + { + name: "seeAllProjects", + label: this.getTranslation("show_closed_projects"), + value: false, + }, + ], + }), + + FormHelpers.getMultiSelect({ + name: "associations.coreCompetencies", + options: this._getOptionsFromIndexedObjects(this.state.coreCompetencies), + onChange: this._onCoreCompetenciesUpdate, + label: this.getTranslation("core_competencies"), + selected: _.map(associations.coreCompetencies, "id"), + errors: this.state.errors.coreCompetencies, + }), + ]; + + return ; + }, + + _onCoreCompetenciesUpdate(newIds) { + const newCoreCompetencies = _.at(this.state.coreCompetencies, newIds); + this.props.onFieldsChange("associations.coreCompetencies", newCoreCompetencies); + }, + + _onUpdateField(fieldPath, newValue) { + if (fieldPath === "associations.project") { + const project = this.state.projects[newValue]; + this.props.onFieldsChange(fieldPath, project); + } else { + this.props.onFieldsChange(fieldPath, newValue); + } + }, +}); + +export default InitialConfig; diff --git a/src/DataSets/Forms/NonCoreSections.component.js b/src/DataSets/Forms/NonCoreSections.component.js new file mode 100644 index 000000000..6abe277f8 --- /dev/null +++ b/src/DataSets/Forms/NonCoreSections.component.js @@ -0,0 +1,6 @@ +import React from "react"; +import Sections from "./Sections.component"; + +const NonCoreSections = props => ; + +export default NonCoreSections; diff --git a/src/DataSets/Forms/OrganisationUnit.component.js b/src/DataSets/Forms/OrganisationUnit.component.js new file mode 100644 index 000000000..d497c64a3 --- /dev/null +++ b/src/DataSets/Forms/OrganisationUnit.component.js @@ -0,0 +1,73 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import OrganisationUnitTreeMultiSelect from "d2-ui/lib/org-unit-select/orgunit-tree-multi-select"; +import scrollToComponent from "react-scroll-to-component"; +import { collectionToArray } from "../../utils/Dhis2Helpers"; + +const OrganisationUnit = createReactClass({ + mixins: [Translate], + + propTypes: { + config: PropTypes.object, + store: PropTypes.object, + }, + + getInitialState() { + return { errors: null }; + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) { + const organisationUnits = collectionToArray(this.props.store.dataset.organisationUnits); + if (_(organisationUnits).isEmpty()) { + this.setState({ errors: this.getTranslation("select_one_organisation_unit") }); + scrollToComponent(this.refs.errors); + } else { + props.formStatus(true); + } + } + }, + + _renderSharingWarning() { + const { project, countries } = this.props.store.associations; + if (!project && !_.isEmpty(countries)) { + return

    {this.getTranslation("sharing_warning")}

    ; + } + }, + + _renderErrors() { + return ( +

    + {this.state.errors} +

    + ); + }, + + _onChange(orgUnits) { + this.props.onFieldsChange("associations.organisationUnits", orgUnits, false); + }, + + render() { + const modelDefinition = { plural: "dataSets" }; + const model = this.props.store.dataset; + + return ( +
    + {this._renderSharingWarning()} + {this._renderErrors()} + +
    + ); + }, +}); + +export default OrganisationUnit; diff --git a/src/DataSets/Forms/Save.component.js b/src/DataSets/Forms/Save.component.js new file mode 100644 index 000000000..1f78af4c9 --- /dev/null +++ b/src/DataSets/Forms/Save.component.js @@ -0,0 +1,154 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import snackActions from "../../Snackbar/snack.actions"; +import { collectionString } from "../../utils/Dhis2Helpers"; +import { log } from "../log"; + +const Save = createReactClass({ + mixins: [Translate], + + propTypes: { + config: PropTypes.object, + store: PropTypes.object, + state: PropTypes.string, + errors: PropTypes.arrayOf(PropTypes.string), + afterSave: PropTypes.func.isRequired, + }, + + saveStates: { + SHOW: "SHOW", + SAVING: "SAVING", + SAVE_ERROR: "SAVE_ERROR", + }, + + UNSAFE_componentWillReceiveProps(nextProps) { + if (nextProps.saving) { + this._save(); + } + }, + + getInitialState() { + return { saveState: this.saveStates.SHOW, errors: [] }; + }, + + _getLoggingMessage() { + if (this.props.store.action === "add") { + return "create new dataset"; + } else if (this.props.store.action === "edit") { + return "edit dataset"; + } else if (this.props.store.action === "clone") { + return "clone dataset"; + } else { + return "unknown action"; + } + }, + + _redirectAfterSave() { + const { dataset } = this.props.store; + log(this._getLoggingMessage(), "success", dataset); + snackActions.show({ message: "dataset_saved", action: "ok", translate: true }); + this.props.afterSave(); + }, + + _saveErrors(error) { + const { dataset } = this.props.store; + log(this._getLoggingMessage(), "failed", dataset); + console.trace(error); + const message = _.isEmpty(error) ? error.toString() : JSON.stringify(error, null, 2); + this.setState({ saveState: this.saveStates.SAVE_ERROR, errors: [message] }); + }, + + _save() { + this.setState({ saveState: this.saveStates.SAVING }); + this.props.store + .save() + .then(this._redirectAfterSave) + .catch(this._saveErrors); + }, + + render() { + const { d2 } = this.context; + const { dataset, associations } = this.props.store; + const { saveState, errors } = this.state; + const ListItem = ({ field, value }) => { + return ( +
  • + + {value || "-"} +
  • + ); + }; + + const projectName = associations.project ? ( + associations.project.displayName + ) : ( + + - + [{this.getTranslation("select_a_project")}] + + ); + + if (saveState === this.saveStates.SHOW || saveState === this.saveStates.SAVING) { + return ( +
    +
    + {saveState === "SAVING" ? ( +
    + +

    + {this.getTranslation("wizard_save_message")} +

    +
    + ) : ( + this.getTranslation("wizard_presave_message") + )} +
    + +
      + + + cc.name).join(", ")} + /> + + + c.displayName) + .join(", ")} + /> +
    +
    + ); + } else if (saveState === this.saveStates.SAVE_ERROR) { + return ( +
    +

    + {this.getTranslation("wizard_save_error_message")} +

    + {errors.map((error, idx) => ( +
    {error}
    + ))} +
    + ); + } + }, +}); + +export default Save; diff --git a/src/DataSets/Forms/Sections.component.js b/src/DataSets/Forms/Sections.component.js new file mode 100644 index 000000000..f342f15a0 --- /dev/null +++ b/src/DataSets/Forms/Sections.component.js @@ -0,0 +1,640 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import SearchBox from "../../SearchBox/SearchBox.component"; +import MultipleDataTable from "../../MultipleDataTable/MultipleDataTable.component"; +import ObserverRegistry from "../../utils/ObserverRegistry.mixin"; +import Action from "d2-ui/lib/action/Action"; +import Sidebar from "d2-ui/lib/sidebar/Sidebar.component"; +import Paper from "material-ui/Paper/Paper"; +import { Tabs, Tab } from "material-ui-scrollable-tabs/Tabs"; +import SelectField from "material-ui/SelectField/SelectField"; +import MenuItem from "material-ui/MenuItem/MenuItem"; +import Checkbox from "material-ui/Checkbox/Checkbox"; +import CollapsibleBox from "../../components/collapsible-box/CollapsibleBox"; +import Chip from "material-ui/Chip/Chip"; +import fp from "lodash/fp"; +import Popover from "material-ui/Popover/Popover"; +import MoreVert from "material-ui/svg-icons/navigation/more-vert"; +import IconButton from "material-ui/IconButton/IconButton"; +import { getSections, getItemStatus, sectionSelectedItemsCount } from "../../models/Section"; +import Divider from "material-ui/Divider/Divider"; +import snackActions from "../../Snackbar/snack.actions"; +import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; + +const FilterSelectField = ({ label, value, onChange, items, styles = {}, emptyLabel = "" }) => { + const defaultItem = { value: null, text: emptyLabel }; + const allItems = [defaultItem].concat(items); + const selectStyle = { marginRight: 5, ...styles }; + + return ( + onChange(value)} + > + {allItems.map((item, idx) => ( + {item.text}} /> + ))} + + ); +}; + +const SectionsSearchBox = props => { + const { name, debounce, onChange } = props; + + const wrapperStyle = { + display: "inline-block", + width: "20%", + position: "relative", + margin: "5px 0px", + }; + + return ( +
    + +
    + ); +}; + +const SectionsSidebar = props => { + if (props.visible === false) return null; + const { open, sections, currentSection, width, onSectionChange, onCollapsibleToggle } = props; + const sidebarSections = sections.map(section => ({ + key: section, + label: section, + })); + + return ( + + + + ); +}; + +const SectionConfig = createReactClass({ + mixins: [Translate, ObserverRegistry], + + _onOpen(ev) { + ev.preventDefault(); + this.setState({ open: true, anchorEl: ev.currentTarget }); + }, + + getInitialState() { + return { open: false, anchorEl: null }; + }, + + render() { + const { sections, onChange, onGroupSectionsChange, dataset } = this.props; + const { open, anchorEl } = this.state; + const sectionForCurrentValues = _.first(sections); + const sectionNames = sections.map(section => section.name); + if (!sectionForCurrentValues) return; + + return ( +
    + + + + + this.setState({ open: false })} + style={{ width: 350, padding: 15, overflowY: "hidden" }} + > + onGroupSectionsChange(value)} + /> + + + + onChange(sectionNames, "showRowTotals", value)} + /> + + onChange(sectionNames, "showColumnTotals", value)} + /> + +
    + ); + }, +}); + +const ThemeTabs = ({ title, items, allLabel, onSelected, visible = true }) => { + if (!visible) return null; + + const renderTabs = items => { + const themesFromItems = _(items) + .map("theme") + .uniq() + .compact() + .map(s => ({ key: s, label: s })) + .sortBy("label") + .value(); + const themes = [{ key: "", label: allLabel }, ...themesFromItems]; + + if (_(themesFromItems).isEmpty()) { + return null; + } else { + return ( + + {themes.map(theme => ( + onSelected(theme.key)} + isMultiLine={true} + /> + ))} + + ); + } + }; + + return ( +
    + {title && {title}} + {renderTabs(items)} +
    + ); +}; + +const Sections = createReactClass({ + mixins: [Translate, ObserverRegistry], + + propTypes: { + validateOnRender: PropTypes.bool, + type: PropTypes.oneOf(["all", "core", "nonCore"]), + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) { + const isValid = this._processDatasetSections({ showErrors: true }); + props.formStatus(isValid); + } + }, + + componentWillUnmount() { + // Save state on back button (forward button saves state in UNSAFE_componentWillReceiveProps) + if (!this.props.validateOnRender) { + this._processDatasetSections({ showErrors: false }); + } + }, + + getInitialState() { + return { + isLoading: true, + sections: null, // loaded on componentDidMount + sidebarOpen: true, + filters: {}, + filterName: null, + sorting: null, + }; + }, + + componentDidMount() { + const { d2 } = this.context; + const { config } = this.props; + const { dataset, associations } = this.props.store; + const { coreCompetencies, initialCoreCompetencies } = associations; + + getSections(d2, config, dataset, initialCoreCompetencies, coreCompetencies).then( + sectionsArray => { + const sections = _.keyBy(sectionsArray, "name"); + const sectionNames = sectionsArray.map(section => section.name); + this.setState({ + isLoading: false, + sections: sections, + sectionNames: sectionNames, + currentSectionName: _.isEmpty(sectionsArray) ? null : sectionsArray[0].name, + }); + } + ); + }, + + _processDatasetSections({ showErrors }) { + const { store } = this.props; + const getErrorMessage = (errors, maxMessages = 10) => { + const errorsLimited = _.take(errors, maxMessages); + const diff = errors.length - errorsLimited.length; + const items = [ + errorsLimited, + diff > 0 ? [this.getTranslation("more_errors", { n: diff })] : [], + ]; + return _(items) + .flatten() + .map("message") + .join("\n"); + }; + + if (!this.state.sections) { + // Component did not mount, but if the dataset has sections, the user may go to the next step + return store.hasSections(); + } else { + const { errors, dataset } = store.processDatasetSections( + store.dataset, + this.state.sections + ); + store.dataset = dataset; + + const errorsToShow = errors.filter( + error => !_(this.props.excludeErrors || []).includes(error.key) + ); + + const isValid = _(errorsToShow).isEmpty(); + if (showErrors && !isValid) { + snackActions.show({ message: getErrorMessage(errorsToShow) }); + } + return isValid; + } + }, + + _setFilterName(searchObserver) { + this.registerDisposable(searchObserver.subscribe(s => this.setState({ filterName: s }))); + }, + + _getFilteredItems(items) { + const { filters, filterName, sorting } = this.state; + + const getFiltered = items => + _.reduce( + filters, + (items_, val, key) => + items_.filter( + de => !key || val === null || val === undefined || de[key] === val + ), + items + ); + const getFilteredByName = items => + !filterName + ? items + : items.filter(de => + _.includes(de.displayName.toLowerCase(), filterName.toLowerCase()) + ); + const getDefaultOrder = items => + _(items) + .sortBy(item => [ + !item.selectedOnLoad, + getItemStatus(item) === "phased-out", + item.name, + ]) + .value(); + const getSorted = items => + !sorting + ? getDefaultOrder(items) + : _(items) + .orderBy([sorting[0]], [sorting[1]]) + .value(); + return getSorted(getFilteredByName(getFiltered(items))); + }, + + _onColumnSort(sorting) { + this.setState({ sorting }); + }, + + _onFilter(key, value) { + const newFilters = _({}) + .assign(this.state.filters) + .set(key, value) + .pickBy((value, _key) => value || value === false) + .value(); + this.setState({ filters: newFilters }); + }, + + _renderSelectFilter(itemsAll, column, _styles) { + const label = this.getTranslation(camelCaseToUnderscores(column)); + const items = _(itemsAll) + .values() + .map(column) + .uniq() + .compact() + .map(value => ({ value: value, text: value })) + .value(); + + return ( + this._onFilter(column, value)} + items={items} + /> + ); + }, + + _selectRows(visibleItems, selectedHeaderChecked) { + const newState = visibleItems.reduce((state, item) => { + const path = ["sections", item.sectionName, "items", item.id, "selected"]; + return fp.set(path, selectedHeaderChecked, state); + }, this.state); + this.setState(newState); + }, + + _onSelectedToggled(item) { + const path = ["sections", item.sectionName, "items", item.id, "selected"]; + const oldValue = fp.get(path, this.state); + this.setState(fp.set(path, !oldValue, this.state)); + }, + + _onChangeSection(sectionName) { + this.setState({ + currentSectionName: sectionName, + filters: {}, + filterName: null, + }); + }, + + _onChangeSectionsConfig(sectionNames, key, value) { + const newState = _.reduce( + sectionNames, + (state, sectionName) => fp.set(["sections", sectionName, key], value, state), + this.state + ); + this.setState(newState); + }, + + _onGroupSectionsChange(value) { + this.props.onFieldsChange("dataset.renderAsTabs", !value); + }, + + _sectionsVisible() { + return this.props.store.dataset.renderAsTabs; + }, + + _getVisibleSections() { + const { currentSectionName, sections, sectionNames } = this.state; + const currentSection = sections[currentSectionName]; + return this._sectionsVisible() ? [currentSection] : _.at(sections, sectionNames); + }, + + _getItems() { + const { type } = this.props; + + const itemPredicate = { + core: item => item.isCore, + nonCore: item => !item.isCore, + all: _item => true, + }[type || "all"]; + + return _.flatMap(this._getVisibleSections(), section => + _.values(section.items).filter(itemPredicate) + ); + }, + + _getCellValue(value, column, item) { + switch (column) { + case "selected": + // When there are many rows, material-ui's rich slows down the rendering, + // use a more simple checkbox and try to mimic the look as much as possible. + return ( +
    this._onSelectedToggled(item)}> + + +
    + ); + case "status": + if (getItemStatus(item) === "phased-out") { + return ( + + {value} + + ); + } else { + return value; + } + default: + return value; + } + }, + + _renderForm() { + const { sections } = this.state; + const itemsCount = sectionSelectedItemsCount(sections); + const warningItemsCount = 300; + const style = { + lineHeight: "40px", + margin: 20, + textAlign: "center", + fontWeight: "bold", + backgroundColor: "#eac5c5", + }; + + if (itemsCount > warningItemsCount) { + return ( +
    + + {this.getTranslation("sections_many_items_selected", { + itemsCount, + warningItemsCount, + })} + + {this._renderTable()} +
    + ); + } else { + return this._renderTable(); + } + }, + + _renderTable() { + const { type } = this.props; + const { sidebarOpen, currentSectionName, sections, filters } = this.state; + const { dataset } = this.props.store; + const currentSection = this.state.sections[currentSectionName]; + if (!currentSection) { + return
    {this.getTranslation("no_elements_found")}
    ; + } + + const itemsAll = this._getItems(); + const items = this._getFilteredItems(itemsAll); + const selectedHeaderChecked = !_.isEmpty(items) && items.every(dr => dr.selected); + const rows = _.map(items, item => + _(item) + .mapValues((k, v) => this._getCellValue(k, v, item)) + .set( + "_style", + getItemStatus(item) === "phased-out" ? { backgroundColor: "#FEE" } : {} + ) + .value() + ); + const selectedColumnContents = ( + this._selectRows(items, !selectedHeaderChecked)} + iconStyle={{ width: "auto" }} + /> + ); + const columns = _.compact([ + { + name: "selected", + style: { width: 20 }, + text: "", + sortable: false, + contents: selectedColumnContents, + }, + { + name: "displayName", + sortable: true, + style: { width: "33%" }, + }, + this._sectionsVisible() + ? null + : { + name: "coreCompetency", + sortable: true, + }, + filters.theme && this._sectionsVisible() + ? null + : { + name: "theme", + sortable: true, + }, + { + name: "group", + sortable: true, + }, + type === "core" + ? null + : { + name: "origin", + sortable: true, + }, + { + name: "status", + sortable: true, + }, + currentSection.type === "output" + ? { + name: "disaggregation", + sortable: true, + } + : null, + ]); + + const visibleSections = this._getVisibleSections(); + + return ( +
    + this.setState({ sidebarOpen: isOpen })} + /> + +
    + this._onFilter("theme", themeKey)} + items={itemsAll} + allLabel={this.getTranslation("all")} + /> + + + +
    +
    + +
    +
    + {!this._sectionsVisible() && + this._renderSelectFilter(itemsAll, "coreCompetency", { + width: "20%", + })} + + {!this._sectionsVisible() && + this._renderSelectFilter(itemsAll, "theme", { width: "20%" })} + + {this._renderSelectFilter(itemsAll, "group", { width: "20%" })} + + {type !== "core" && + this._renderSelectFilter(itemsAll, "origin", { width: "20%" })} + + this._onFilter("selected", value)} + items={[ + { value: true, text: this.getTranslation("yes") }, + { value: false, text: this.getTranslation("no") }, + ]} + /> +
    +
    + + {rows.length === 0 ? ( +
    {this.getTranslation("no_elements_found")}
    + ) : ( + {}} + isContextActionAllowed={(_model, _action) => true} + isMultipleSelectionAllowed={true} + /> + )} +
    +
    + ); + }, + + render() { + return this.state.isLoading ? : this._renderForm(); + }, +}); + +export default Sections; diff --git a/src/DataSets/Forms/Sharing.component.js b/src/DataSets/Forms/Sharing.component.js new file mode 100644 index 000000000..da6be47f3 --- /dev/null +++ b/src/DataSets/Forms/Sharing.component.js @@ -0,0 +1,88 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; +import FormHelpers from "../../forms/FormHelpers"; +import { getCountryCode } from "../../utils/Dhis2Helpers"; + +const Sharing = createReactClass({ + mixins: [Translate], + + getInitialState() { + this.countriesByCode = this.props.store.countriesByCode; + + return { + errors: {}, + }; + }, + + propTypes: { + validateOnRender: PropTypes.bool, + }, + + UNSAFE_componentWillReceiveProps(props) { + if (props.validateOnRender) { + const { countries } = this.props.store.associations; + + if (_.isEmpty(countries)) { + props.formStatus(false); + const error = this.getTranslation("select_at_least_one_country"); + this.setState({ errors: { countries: [error] } }); + } else { + props.formStatus(true); + this.setState({ errors: {} }); + } + } + }, + + _getCurrentUserCountryCode() { + // d2.currentUser contains no userGroups, get the info + return this.context.d2.models.users + .list({ + fields: "id,userGroups[id,displayName]", + filter: "id:eq:" + this.context.d2.currentUser.id, + order: "displayName:asc", + paging: false, + }) + .then(usersCollection => + _(usersCollection.toArray()) + .flatMap(user => user.userGroups.toArray()) + .find(userGroup => userGroup.displayName.match(/_users$/i)) + ) + .then(userGroup => (userGroup ? userGroup.displayName.split("_")[0] : null)); + }, + + countrySelected(value) { + const selectedCountry = this.countriesByCode[value]; + this.props.onFieldsChange("associations.country", selectedCountry); + }, + + _onCountriesUpdate(codes) { + const countries = _.at(this.countriesByCode, codes); + this.props.onFieldsChange("associations.countries", countries); + }, + + render() { + const selectedCountries = this.props.store.associations.countries.map(getCountryCode); + const countryOptions = _(this.countriesByCode) + .map((country, code) => ({ value: code, text: country.displayName })) + .value(); + + const fields = [ + FormHelpers.getMultiSelect({ + name: "associations.countries", + options: countryOptions, + onChange: this._onCountriesUpdate, + label: this.getTranslation("sharing_countries_description"), + selected: selectedCountries, + errors: this.state.errors.countries, + }), + ]; + + return {}} />; + }, +}); + +export default Sharing; diff --git a/src/DataSets/List.scss b/src/DataSets/List.scss new file mode 100644 index 000000000..0c0deaaa0 --- /dev/null +++ b/src/DataSets/List.scss @@ -0,0 +1,27 @@ +.list { + color: inherit; +} + +.data-table-wrap { + display: flex; + flex: 2; + transition: width .2s linear; + transition-delay: .1s; +} + +.details-box-wrap.show-as-column { + flex: 1; + margin-left: 1rem; + margin-right: 1rem; + opacity: 1; +} + +.list-details-wrap { + flex: 1; + display: flex; + flex-orientation: row; +} + +.list-search-field input[type="search"]::-webkit-search-decoration { + display: none; +} diff --git a/src/DataSets/PeriodsDialog.js b/src/DataSets/PeriodsDialog.js new file mode 100644 index 000000000..d39be26cf --- /dev/null +++ b/src/DataSets/PeriodsDialog.js @@ -0,0 +1,200 @@ +import React from "react"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Dialog from "material-ui/Dialog"; +import FlatButton from "material-ui/FlatButton/FlatButton"; +import RaisedButton from "material-ui/RaisedButton/RaisedButton"; +import DataSetPeriods from "./DataSetPeriods"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import snackActions from "../Snackbar/snack.actions"; +import { + getDataSetsForPeriods, + getDataSetsForPeriodsEndDate, + saveDataSets, + saveDataSetsEndDate, + getPeriodsValidationsErrors, +} from "../models/data-periods"; + +export default class PeriodsDialog extends React.Component { + static propTypes = { + onRequestClose: PropTypes.func.isRequired, + endYear: PropTypes.number, + }; + + static contextTypes = { + d2: PropTypes.any, + }; + + state = { + saving: false, + dataSets: null, + store: null, + warning: null, + error: null, + }; + + styles = { + warning: { color: "rgb(255, 152, 0)", marginBottom: -10 }, + error: { fontSize: "1m", color: "red", marginTop: 15 }, + noMaxWidth: { maxWidth: "none" }, + }; + + constructor(props, context) { + super(props); + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + + const { endYear } = props; + this.getDataSetsForPeriods = endYear ? getDataSetsForPeriodsEndDate : getDataSetsForPeriods; + this.saveDataSets = endYear ? saveDataSetsEndDate : saveDataSets; + } + + async componentDidMount() { + const { dataSets, store, warning, error } = await this.getDataSetsForPeriods( + this.context.d2, + this.props.dataSets.map(ds => ds.id), + this.props.endYear + ).catch(err => ({ error: err.message })); + + if (error) { + snackActions.show({ message: error }); + this.props.onRequestClose(); + } else { + this.setState({ dataSets, store, warning }); + } + } + + getActions(validationErrors) { + const { onRequestClose } = this.props; + const { saving } = this.state; + + return [ + , + 0} + onClick={this.save} + />, + ]; + } + + save = async () => { + const { d2 } = this.context; + const { onRequestClose, endYear } = this.props; + const { store, dataSets } = this.state; + + this.setState({ saving: true, error: null }); + + try { + const response = _.first(await this.saveDataSets(d2, store, dataSets, endYear)); + if (response && response.status === "OK") { + onRequestClose(); + snackActions.show({ message: this.getTranslation("dataset_saved") }); + } else { + this.setState({ error: JSON.stringify(response, null, 2) }); + } + } catch (err) { + console.error(err); + this.setState({ error: (err && err.message) || "Error" }); + } finally { + this.setState({ saving: false }); + } + }; + + onUpdateField = (fieldPath, newValue) => { + const { store } = this.state; + + store.updateField(fieldPath, newValue); + this.forceUpdate(); + }; + + render() { + const { onRequestClose, endYear } = this.props; + const { saving, dataSets, store, warning } = this.state; + + if (!store) return ; + + const validationErrors = this.getValidationErrors(); + const errors = _.compact([this.state.error, ...validationErrors]); + const actions = this.getActions(validationErrors); + + const baseTitle = endYear + ? this.getTranslation("period_dates_for_year", { year: endYear }) + : this.getTranslation("period_dates"); + + const title = baseTitle + ": " + this.getNames(dataSets); + + return ( + + {saving && } + {warning &&

    {warning}

    } + + + +
    + {errors.map(error => ( +
    {error}
    + ))} +
    + + {this.renderEndYearWarnings()} +
    + ); + } + + getValidationErrors() { + return getPeriodsValidationsErrors(this.state.store, { + validateOutputOutcome: !this.props.endYear, + }); + } + + renderEndYearWarnings() { + const { store } = this.state; + const { endYear } = this.props; + const { associations } = store; + if (!endYear) return null; + + const outputEndYear = associations.periodDates.output[endYear]; + const outcomeEndYear = associations.periodDates.outcome[endYear]; + const someEmptyValues = !outputEndYear.end || !outcomeEndYear.end; + if (!someEmptyValues) return null; + + return ( +
    + {this.getTranslation("end_dates_empty")} +
    + ); + } + + getNames(dataSets) { + const maxShown = 5; + const remanining = dataSets.length - maxShown; + + const baseNames = _(dataSets) + .take(maxShown) + .map(ds => ds.displayName) + .join(", "); + + return remanining > 0 + ? this.getTranslation("this_and_n_others", { this: baseNames, n: remanining }) + : baseNames; + } +} diff --git a/src/DataSets/context.actions.js b/src/DataSets/context.actions.js new file mode 100644 index 000000000..607a212d2 --- /dev/null +++ b/src/DataSets/context.actions.js @@ -0,0 +1,136 @@ +import Action from "d2-ui/lib/action/Action"; +import detailsStore from "./details.store"; +import deleteStore from "./delete.store"; +import orgUnitsStore from "./orgUnits.store"; +import logsStore from "./logs.store"; +import sharingStore from "./sharing.store"; +import { goToRoute } from "../router"; +import { + currentUserHasAdminRole, + canManage, + canCreate, + canDelete, + canUpdate, +} from "../utils/Dhis2Helpers"; +import _ from "lodash"; +import periodsStore from "./periods.store"; +import Store from "d2-ui/lib/store/Store"; + +export const endDateForYearStore = Store.create(); + +const setupActions = actions => { + const actionsByName = _.keyBy(actions, "name"); + const contextActions = Action.createActionsFromNames(actions.map(a => a.name)); + const contextMenuIcons = _(actions) + .map(a => [a.name, a.icon || a.name]) + .fromPairs() + .value(); + + const isContextActionAllowed = function(d2, selection, actionName) { + const action = actionsByName[actionName]; + const arg = action && !action.multiple && _.isArray(selection) ? selection[0] : selection; + + if (!action || !selection || selection.length === 0) { + return false; + } else if (!action.multiple && selection.length !== 1) { + return false; + } else if (action.isActive && !action.isActive(d2, arg)) { + return false; + } else { + return true; + } + }; + + actions + .filter(a => a.onClick) + .forEach(action => { + contextActions[action.name].subscribe(({ data }) => { + const { selected, options } = data; + + let arg; + if (action.multiple) { + arg = _.isArray(selected) ? selected : [selected]; + } else { + arg = _.isArray(selected) ? selected[0] : selected; + } + + if (arg) action.onClick(arg, options); + }); + }); + + return { contextActions, contextMenuIcons, isContextActionAllowed, actions: actionsByName }; +}; + +const currentYear = new Date().getFullYear(); + +const { contextActions, contextMenuIcons, isContextActionAllowed, actions } = setupActions([ + { + name: "edit", + multiple: false, + icon: "edit", + isActive: (d2, dataset) => canUpdate(d2, [dataset]), + onClick: dataset => goToRoute(`/datasets/edit/${dataset.id}`), + }, + { + name: "share", + multiple: true, + icon: "share", + isActive: canManage, + onClick: datasets => sharingStore.setState({ datasets }), + }, + { + name: "define_associations", + multiple: true, + icon: "business", + isActive: canUpdate, + onClick: datasets => orgUnitsStore.setState({ datasets }), + }, + { + name: "period_dates", + multiple: true, + icon: "timeline", + isActive: (d2, datasets) => + canUpdate(d2, datasets) && (currentUserHasAdminRole(d2) || datasets.length === 1), + onClick: datasets => periodsStore.setState({ datasets }), + }, + { + name: "end_date_for_year", + multiple: true, + icon: "timeline", + isActive: (d2, datasets) => canUpdate(d2, datasets) && currentUserHasAdminRole(d2), + onClick: (datasets, options) => endDateForYearStore.setState({ datasets, options }), + options: _.range(currentYear - 1, currentYear + 2 + 1), + }, + { + name: "details", + multiple: false, + icon: "details", + onClick: dataset => detailsStore.setState(dataset), + }, + { + name: "clone", + multiple: false, + icon: "content_copy", + isActive: canCreate, + onClick: dataset => goToRoute(`/datasets/clone/${dataset.id}`), + }, + { + name: "delete", + multiple: true, + icon: "delete", + isActive: canDelete, + onClick: datasets => deleteStore.delete(datasets), + }, + { + name: "logs", + multiple: true, + icon: "list", + isActive: currentUserHasAdminRole, + onClick: datasets => logsStore.setState(datasets), + }, +]); + +exports.contextActions = contextActions; +exports.contextMenuIcons = contextMenuIcons; +exports.isContextActionAllowed = isContextActionAllowed; +exports.actions = actions; diff --git a/src/DataSets/delete.store.js b/src/DataSets/delete.store.js new file mode 100644 index 000000000..0f220afb3 --- /dev/null +++ b/src/DataSets/delete.store.js @@ -0,0 +1,31 @@ +import { getInstance as getD2 } from "d2/lib/d2"; +import snackActions from "../Snackbar/snack.actions"; +import Store from "d2-ui/lib/store/Store"; +import { log } from "./log"; + +export default Store.create({ + delete(datasets) { + getD2().then(d2 => { + snackActions.show({ + message: d2.i18n.getTranslation("confirm_delete_dataset"), + action: "confirm", + onActionClick: () => { + const payload = { dataSets: datasets.map(ds => ({ id: ds.id })) }; + d2.Api.getApi() + .post(`metadata?importStrategy=DELETE`, payload) + .then(response => { + log("delete", "success", datasets); + snackActions.show({ + message: d2.i18n.getTranslation("dataset_deleted"), + }); + this.setState(response); + }) + .catch(response => { + log("delete", "failed", datasets); + snackActions.show({ message: response.message || "Error" }); + }); + }, + }); + }); + }, +}); diff --git a/src/DataSets/details.store.js b/src/DataSets/details.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/DataSets/details.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/DataSets/list.actions.js b/src/DataSets/list.actions.js new file mode 100644 index 000000000..00e4f0565 --- /dev/null +++ b/src/DataSets/list.actions.js @@ -0,0 +1,30 @@ +import Action from "d2-ui/lib/action/Action"; +import detailsStore from "./details.store"; +import sharingStore from "./sharing.store"; +import orgUnitsStore from "./orgUnits.store"; +import logsStore from "./logs.store"; + +const listActions = Action.createActionsFromNames([ + "hideDetailsBox", + "hideSharingBox", + "hideOrgUnitsBox", + "hideLogs", +]); + +listActions.hideDetailsBox.subscribe(() => { + detailsStore.setState(null); +}); + +listActions.hideSharingBox.subscribe(() => { + sharingStore.setState(null); +}); + +listActions.hideOrgUnitsBox.subscribe(() => { + orgUnitsStore.setState(null); +}); + +listActions.hideLogs.subscribe(() => { + logsStore.setState(null); +}); + +export default listActions; diff --git a/src/DataSets/log.js b/src/DataSets/log.js new file mode 100644 index 000000000..d657e3d25 --- /dev/null +++ b/src/DataSets/log.js @@ -0,0 +1,125 @@ +import React from "react"; +import _ from "lodash"; +import { getInstance as getD2 } from "d2/lib/d2"; + +const maxLogsPerPage = 200; // TODO: maybe make it readable from the dataStore +const maxLogPages = 100; + +async function log(actionName, status, datasets) { + // Log the name of the action that has been executed, its status + // ("success", "failed"), by whom and on which datasets. + const logs = ((await getLogs([0])) || { logs: [] }).logs; + logs.push(await makeEntry(actionName, status, datasets)); + return setLogs(logs); +} + +async function makeEntry(actionName, status, datasets) { + // Return an object (a "dictionary") with the information we want to log. + datasets = Array.isArray(datasets) ? datasets : [datasets]; + const user = await getD2().then(d2 => d2.currentUser); + return { + date: new Date().toISOString(), + action: actionName, + status: status, + user: { + displayName: user.name, + username: user.username, + id: user.id, + }, + datasets: datasets.map(ds => ({ + displayName: ds.name, + id: ds.id, + })), + }; +} + +async function getLogs(pages = [0, 1]) { + // Return the concatenated logs for the given pages (relative to + // currentPage) if they exist, or an empty list otherwise. + // It returns null when there are no more log pages. + if (pages.every(n => n >= maxLogPages)) return null; + + const store = await getStore(); + const currentPage = await getCurrentPage(store); + const pagesNames = pages.map(n => "logs-page-" + mod(currentPage - n, maxLogPages)); + const storeKeys = new Set(await store.getKeys()); + const existingPageNames = pagesNames.filter(name => storeKeys.has(name)); + + if (_(existingPageNames).isEmpty()) { + return null; + } else { + const existingPages = _(Array.from(storeKeys)) + .map(key => key.match(/^logs-page-(\d+)$/)) + .map(match => (match ? parseInt(match[1]) : null)) + .reject(_.isNull) + .value(); + const nextPage = _.max(pages) + 1; + const nextPageIndex = mod(currentPage - nextPage, maxLogPages); + const hasMore = nextPage < maxLogPages && existingPages.includes(nextPageIndex); + const logs = await Promise.all(existingPageNames.map(name => store.get(name))); + const orderedLogs = _(logs) + .filter() + .flatten() + .orderBy("date", "desc") + .value(); + + return { logs: orderedLogs, hasMore }; + } +} + +function getCurrentPage(store) { + return store.get("logs-page-current").catch(err => { + if (err.httpStatusCode === 404) { + return store.set("logs-page-current", 0).then(() => 0); + } else { + throw err; + } + }); +} + +async function setLogs(logs) { + // Save the given list of logs in the current page index and update the page index. + const store = await getStore(); + const currentPage = await getCurrentPage(store); + const nextCurrentPage = + logs.length < maxLogsPerPage ? currentPage : mod(currentPage + 1, maxLogPages); + + return Promise.all([ + store.set("logs-page-" + currentPage, logs), + ...(nextCurrentPage === currentPage + ? [] + : [ + store.set("logs-page-current", nextCurrentPage), + store.set(`logs-page-${nextCurrentPage}`, []), + ]), + ]); +} + +async function getStore() { + const d2 = await getD2(); + return d2.dataStore.get("dataset-configuration"); +} + +function mod(n, m) { + return ((n % m) + m) % m; // the modulo operation can be negative otherwise... +} + +function formatDate(isoDate) { + return new Date(isoDate).toLocaleString(); +} + +// Simple component to show a log entry. +function LogEntry(props) { + return ( +
    + Date: {formatDate(props.date)}
    + Action: {props.action}
    + Status: {props.status}
    + User: {props.user.displayName} ({props.user.username})
    + Datasets: {props.datasets.map(ds => `${ds.displayName} (${ds.id})`).join(", ")}{" "} +
    +
    + ); +} + +export { log, getLogs, LogEntry }; diff --git a/src/DataSets/logs.store.js b/src/DataSets/logs.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/DataSets/logs.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/DataSets/orgUnits.store.js b/src/DataSets/orgUnits.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/DataSets/orgUnits.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/DataSets/periods.store.js b/src/DataSets/periods.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/DataSets/periods.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/DataSets/sharing.store.js b/src/DataSets/sharing.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/DataSets/sharing.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/ListActionBar/ListActionBar.component.js b/src/ListActionBar/ListActionBar.component.js new file mode 100644 index 000000000..05bd12256 --- /dev/null +++ b/src/ListActionBar/ListActionBar.component.js @@ -0,0 +1,44 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import FloatingActionButton from "material-ui/FloatingActionButton"; +import FontIcon from "material-ui/FontIcon"; +import Auth from "d2-ui/lib/auth/Auth.mixin"; +import { goToRoute } from "../router"; + +const ListActionBar = createReactClass({ + propTypes: { + route: PropTypes.string, + }, + + contextTypes: { + d2: PropTypes.object.isRequired, + }, + + mixins: [Auth], + + _addClick() { + goToRoute(this.props.route); + }, + + render() { + const cssStyles = { + textAlign: "right", + marginTop: "1rem", + bottom: "1.5rem", + right: "1.5rem", + position: "fixed", + zIndex: 10, + }; + + return ( +
    + + add + +
    + ); + }, +}); + +export default ListActionBar; diff --git a/src/LoadingMask/LoadingMask.component.js b/src/LoadingMask/LoadingMask.component.js new file mode 100644 index 000000000..68c037967 --- /dev/null +++ b/src/LoadingMask/LoadingMask.component.js @@ -0,0 +1,15 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import { CircularProgress } from "@material-ui/core"; + +export default createReactClass({ + render() { + const style = { + left: "45%", + position: "fixed", + top: "45%", + }; + + return ; + }, +}); diff --git a/src/LoadingStatus/LoadingStatus.component.js b/src/LoadingStatus/LoadingStatus.component.js new file mode 100644 index 000000000..8ef0f33d4 --- /dev/null +++ b/src/LoadingStatus/LoadingStatus.component.js @@ -0,0 +1,24 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import LinearProgress from "material-ui/LinearProgress"; + +export default createReactClass({ + propTypes: { + isLoading: PropTypes.bool.isRequired, + }, + + getDefaultProps() { + return { + isLoading: false, + }; + }, + + render() { + if (!this.props.isLoading) { + return null; + } + + return ; + }, +}); diff --git a/src/MultipleDataTable/MultipleDataTable.component.js b/src/MultipleDataTable/MultipleDataTable.component.js new file mode 100644 index 000000000..c3bb1b9b7 --- /dev/null +++ b/src/MultipleDataTable/MultipleDataTable.component.js @@ -0,0 +1,243 @@ +import isIterable from "d2-utilizr/lib/isIterable"; +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import update from "immutability-helper"; +import MultipleDataTableRow from "./MultipleDataTableRow.component"; +import DataTableHeader from "d2-ui/lib/data-table/DataTableHeader.component"; +import MultipleDataTableContextMenu, { + propTypesActionsDefinition, +} from "./MultipleDataTableContextMenu.component"; +import _ from "../utils/lodash-mixins"; + +const MultipleDataTable = createReactClass({ + propTypes: { + actionsDefinition: propTypesActionsDefinition.isRequired, + contextMenuActions: PropTypes.object, + contextMenuIcons: PropTypes.object, + primaryAction: PropTypes.func, + isContextActionAllowed: PropTypes.func, + isMultipleSelectionAllowed: PropTypes.bool, + columns: PropTypes.arrayOf(PropTypes.object), + hideRowsActionsIcon: PropTypes.bool, + onColumnSort: PropTypes.func, + styles: PropTypes.shape({ + table: PropTypes.object, + header: PropTypes.object, + }), + activeRows: PropTypes.arrayOf(PropTypes.object), + onActiveRowsChange: PropTypes.func, + }, + + getDefaultProps() { + return { + styles: {}, + activeRows: [], + onActiveRowsChange: () => {}, + }; + }, + + getInitialState() { + return this.getStateFromProps(this.props); + }, + + UNSAFE_componentWillReceiveProps(newProps) { + this.setState(this.getStateFromProps(newProps)); + }, + + getStateFromProps(props) { + let dataRows = []; + + if (isIterable(props.rows)) { + dataRows = props.rows instanceof Map ? Array.from(props.rows.values()) : props.rows; + } + + return { + columns: props.columns || [{ name: "name" }, { name: "lastUpdated" }], + activeRows: props.activeRows, + dataRows, + }; + }, + + renderContextMenu() { + const actionAccessChecker = this.props.isContextActionAllowed + ? this.props.isContextActionAllowed.bind(null, this.state.activeRows) + : () => true; + + const actionsToShow = Object.keys(this.props.contextMenuActions || {}) + .filter(actionAccessChecker) + .reduce((availableActions, actionKey) => { + availableActions[actionKey] = this.props.contextMenuActions[actionKey]; + return availableActions; + }, {}); + + const hasActions = Object.keys(actionsToShow).length > 0; + + return ( + + ); + }, + + _onColumnSortingToggle(headerName) { + const newSortingDirection = + this.state.sorting && this.state.sorting[0] === headerName + ? this.state.sorting[1] === "asc" + ? "desc" + : "asc" + : "asc"; + const newSorting = [headerName, newSortingDirection]; + this.setState({ sorting: newSorting }); + this.props.onColumnSort && this.props.onColumnSort(newSorting); + }, + + renderHeaders() { + const [currentSortedColumn, currentSortedDirection] = this.state.sorting || []; + + return this.state.columns.map((column, index) => ( + + )); + }, + + renderRows() { + return this.state.dataRows.map((dataRowsSource, dataRowsId) => { + return ( + c.value || c.name)} + hideActionsIcon={this.props.hideRowsActionsIcon} + isActive={this.isRowActive(dataRowsSource)} + itemClicked={this.handleRowClick} + primaryClick={this.handlePrimaryClick} + style={dataRowsSource._style} + /> + ); + }); + }, + + render() { + const defaultStyles = { + table: {}, + header: {}, + }; + const styles = _.deepMerge(defaultStyles, this.props.styles); + + return ( +
    +
    + {this.renderHeaders()} + +
    +
    {this.renderRows()}
    + {this.renderContextMenu()} +
    + ); + }, + + isRowActive(rowSource) { + if (!this.state.activeRows) { + return false; + } + return _.includes(this.state.activeRows, rowSource); + }, + + isEventCtrlClick(event) { + return this.props.isMultipleSelectionAllowed && event && event.ctrlKey; + }, + + notifyActiveRows() { + this.props.onActiveRowsChange(this.state.activeRows); + }, + + handleRowClick(event, rowSource, isIconMenuClick) { + //Update activeRows according to click|ctlr+click + var newActiveRows; + if (isIconMenuClick) { + newActiveRows = [rowSource]; + } else if (this.isEventCtrlClick(event) || this.isRowActive(rowSource)) { + //Remain selection + rowSource if not already selected + newActiveRows = this.updateContextSelection(rowSource); + } else { + //Context click just selects current row + newActiveRows = [rowSource]; + } + + //Update state + this.setState( + { + contextMenuTarget: event.currentTarget, + showContextMenu: true, + activeRows: newActiveRows, + }, + this.notifyActiveRows + ); + }, + + handlePrimaryClick(event, rowSource) { + //Click -> Clears selection, Invoke external action (passing event) + if (!this.isEventCtrlClick(event)) { + this.setState({ activeRows: [] }, this.notifyActiveRows); + this.props.primaryAction({ selected: rowSource }); + return; + } + + //Ctrl + Click -> Update selection + const newActiveRows = this.updatePrimarySelection(rowSource); + this.setState( + { + activeRows: newActiveRows, + showContextMenu: false, + }, + this.notifyActiveRows + ); + }, + + _hideContextMenu() { + this.setState({ showContextMenu: false }, this.notifyActiveRows); + }, + + updateContextSelection(rowSource) { + return this.updateSelection(rowSource, true); + }, + + updatePrimarySelection(rowSource) { + return this.updateSelection(rowSource, false); + }, + + updateSelection(rowSource, isContextClick) { + const alreadySelected = this.isRowActive(rowSource); + + //ctx click + Already selected -> Same selection + if (isContextClick && alreadySelected) { + return this.state.activeRows; + } + + //click + Already selected -> Remove from selection + if (alreadySelected) { + return this.state.activeRows.filter(nRow => nRow !== rowSource); + } + + //!already selected -> Add to selection + return update(this.state.activeRows ? this.state.activeRows : [], { $push: [rowSource] }); + }, +}); + +export default MultipleDataTable; diff --git a/src/MultipleDataTable/MultipleDataTableContextMenu.component.js b/src/MultipleDataTable/MultipleDataTableContextMenu.component.js new file mode 100644 index 000000000..8ab26dd62 --- /dev/null +++ b/src/MultipleDataTable/MultipleDataTableContextMenu.component.js @@ -0,0 +1,107 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import Menu from "material-ui/Menu"; +import MenuItem from "material-ui/MenuItem"; +import FontIcon from "material-ui/FontIcon"; +import ArrowDropRight from "material-ui/svg-icons/navigation-arrow-drop-right"; +import Popover from "./PopoverNoFlicker"; +import Paper from "material-ui/Paper"; + +const actionDefinition = PropTypes.shape({ + name: PropTypes.string.isRequired, + multiple: PropTypes.bool.isRequired, + icon: PropTypes.string.isRequired, + isActive: PropTypes.func, + onClick: PropTypes.func, + options: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), +}); + +export const propTypesActionsDefinition = PropTypes.objectOf(actionDefinition); + +const MultipleDataTableContextMenu = createReactClass({ + propTypes: { + actionsDefinition: propTypesActionsDefinition.isRequired, + actions: PropTypes.objectOf(PropTypes.func), + showContextMenu: PropTypes.bool, + activeItems: PropTypes.array, + icons: PropTypes.object, + target: PropTypes.object, + }, + + mixins: [Translate], + + getDefaultProps() { + return { + icons: {}, + actions: {}, + }; + }, + + render() { + const actionList = Object.keys(this.props.actions).filter( + menuActionKey => typeof this.props.actions[menuActionKey] === "function" + ); + + const cmStyle = { + position: "fixed", + }; + const { + actions, + target, + activeItems, + icons, + showContextMenu, + actionsDefinition, + ...popoverProps + } = this.props; + + return ( + + + {actionList.map(action => { + const iconName = icons[action] ? icons[action] : action; + const { options } = actionsDefinition[action]; + + return ( + this.handleClick(action)} + primaryText={this.getTranslation(action)} + leftIcon={ + {iconName} + } + rightIcon={options ? : undefined} + menuItems={(options || []).map(option => ( + this.handleClick(action, { year: option })} + /> + ))} + /> + ); + })} + + + ); + }, + + handleClick(action, options) { + this.props.actions[action]({ selected: this.props.activeItems, options }); + this.props.onRequestClose && this.props.onRequestClose(); + }, +}); + +export default MultipleDataTableContextMenu; diff --git a/src/MultipleDataTable/MultipleDataTableRow.component.js b/src/MultipleDataTable/MultipleDataTableRow.component.js new file mode 100644 index 000000000..4879a73f8 --- /dev/null +++ b/src/MultipleDataTable/MultipleDataTableRow.component.js @@ -0,0 +1,174 @@ +import React, { isValidElement } from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import classes from "classnames"; +import isObject from "d2-utilizr/lib/isObject"; +import isString from "d2-utilizr/lib/isString"; +import moment from "moment"; +import IconButton from "material-ui/IconButton"; +import MoreVert from "material-ui/svg-icons/navigation/more-vert"; +import Color from "d2-ui/lib/data-table/data-value/Color.component"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; + +import "./MultipleDataTableRow.scss"; + +function valueTypeGuess(valueType, value) { + switch (valueType) { + case "DATE": + return moment(new Date(value)).fromNow(); + case "TEXT": + if (/#([a-z0-9]{6})$/i.test(value)) { + return ; + } + return value; + default: + break; + } + + return value; +} + +function getValueAfterValueTypeGuess(dataSource, columnName) { + if ( + dataSource && + dataSource.modelDefinition && + dataSource.modelDefinition.modelValidations && + dataSource.modelDefinition.modelValidations[columnName] + ) { + return valueTypeGuess( + dataSource.modelDefinition.modelValidations[columnName].type, + dataSource[columnName] + ); + } + + return dataSource[columnName]; +} + +const MultipleDataTableRow = createReactClass({ + propTypes: { + columns: PropTypes.array.isRequired, + dataSource: PropTypes.object, + isActive: PropTypes.bool, + isEven: PropTypes.bool, + isOdd: PropTypes.bool, + hideActionsIcon: PropTypes.bool, + itemClicked: PropTypes.func.isRequired, + primaryClick: PropTypes.func.isRequired, + style: PropTypes.object, + }, + + mixins: [Translate], + + render() { + const classList = classes("data-table__rows__row", { + "data-table__rows__row--even": !this.props.isOdd, + "data-table__rows__row--odd": this.props.isOdd, + selected: this.props.isActive, + }); + + const dataSource = this.props.dataSource; + + const textWrapStyle = { + width: "100%", + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "nowrap", + position: "absolute", + wordBreak: "break-all", + wordWrap: "break-word", + top: 0, + bottom: 0, + lineHeight: "50px", + paddingRight: "1rem", + }; + + const columns = this.props.columns.map((columnName, index) => { + const rowValue = getValueAfterValueTypeGuess(dataSource, columnName); + let displayValue; + + // Render objects by name or otherwise by their toString method. + // ReactElements are also objects but we want to render them out normally, so they are excluded. + if (isObject(rowValue) && !isValidElement(rowValue)) { + displayValue = rowValue.displayName || rowValue.name || rowValue.toString(); + } else { + displayValue = rowValue; + } + + // TODO: PublicAccess Hack - need to make it so that value transformers can be registered + if (columnName === "publicAccess") { + displayValue = this.getDataMetadaAccessText(dataSource[columnName]); + } + + return ( +
    + {isString(displayValue) ? ( + + {displayValue} + + ) : ( + displayValue + )} +
    + ); + }); + return ( +
    + {columns} +
    + {this.props.hideActionsIcon ? null : ( + + + + )} +
    +
    + ); + }, + + iconMenuClick(event) { + event && event.preventDefault() && event.stopPropagation(); + this.props.itemClicked(event, this.props.dataSource, true); + }, + + handleContextClick(event) { + event && event.preventDefault(); + this.props.itemClicked(event, this.props.dataSource, false); + }, + + handleClick(event) { + this.props.primaryClick(event, this.props.dataSource); + }, + + getDataMetadaAccessText(value) { + if (value) { + const accessMetadata = value.slice(0, 2); + const accessData = value.slice(2, 4); + const get = this.getAccessText; + return `Data: ${get(accessMetadata)}, Metadata: ${get(accessData)}`; + } else { + return "?"; + } + }, + + getAccessText(value) { + if (!value) { + return "?"; + } else if (value === "rw") { + return this.getTranslation("public_can_edit"); + } else if (value === "r-") { + return this.getTranslation("public_can_view"); + } else if (value === "--") { + return this.getTranslation("public_none"); + } + }, +}); + +export default MultipleDataTableRow; diff --git a/src/MultipleDataTable/MultipleDataTableRow.scss b/src/MultipleDataTable/MultipleDataTableRow.scss new file mode 100644 index 000000000..899b2b8dd --- /dev/null +++ b/src/MultipleDataTable/MultipleDataTableRow.scss @@ -0,0 +1,4 @@ +$detail-box--field-value--color: #F1F1F1; +.data-table__rows__row.selected{ + background-color: $detail-box--field-value--color; +} \ No newline at end of file diff --git a/src/MultipleDataTable/PopoverNoFlicker.js b/src/MultipleDataTable/PopoverNoFlicker.js new file mode 100644 index 000000000..8c2e00979 --- /dev/null +++ b/src/MultipleDataTable/PopoverNoFlicker.js @@ -0,0 +1,109 @@ +/* eslint no-unused-vars: off */ +/* eslint @typescript-eslint/no-unused-vars: off */ +import React from "react"; +import Paper from "material-ui/Paper"; +import Popover from "material-ui/Popover"; +import PopoverAnimationDefault from "material-ui/Popover/PopoverAnimationDefault"; + +// See https://github.com/mui-org/material-ui/issues/8040 + +class PopoverNoFlicker extends Popover { + renderLayer = () => { + const { + animated, + animation, + anchorEl, + anchorOrigin, + autoCloseWhenOffScreen, + canAutoPosition, + children, + onRequestClose, + style, + targetOrigin, + useLayerForClickAway, + scrollableContainer, + ...other + } = this.props; + + let styleRoot = style; + + if (!animated) { + styleRoot = { + position: "fixed", + zIndex: this.context.muiTheme.zIndex.popover, + opacity: this.state.setPlacement ? 1 : 0, // EDIT + }; + + if (!this.state.open) { + return null; + } + + return ( + + {children} + + ); + } + + const Animation = animation || PopoverAnimationDefault; + + return ( + + {children} + + ); + }; + + UNSAFE_componentWillReceiveProps(nextProps) { + if (nextProps.open === this.props.open) { + return; + } + + if (nextProps.open) { + clearTimeout(this.timeout); + this.timeout = null; + this.anchorEl = nextProps.anchorEl || this.props.anchorEl; + this.setState( + { + open: true, + closing: false, + setPlacement: false, + }, + () => { + // EDIT + setTimeout(() => { + this.setState({ + setPlacement: true, + }); + }); + } + ); + } else { + if (nextProps.animated) { + if (this.timeout !== null) return; + this.setState({ closing: true }); + this.timeout = setTimeout(() => { + this.setState( + { + open: false, + }, + () => { + this.timeout = null; + } + ); + }, 500); + } else { + this.setState({ + open: false, + }); + } + } + } +} + +export default PopoverNoFlicker; diff --git a/src/Pagination/Pagination.scss b/src/Pagination/Pagination.scss new file mode 100644 index 000000000..580e85c66 --- /dev/null +++ b/src/Pagination/Pagination.scss @@ -0,0 +1,37 @@ + +.data-table-pager--buttons { + + list-style: none; + padding: 0; + margin: 0; + margin-right: 10px; + text-align: right; + + li { + display: inline-block; + } + + .data-table-pager--previous-page, + .data-table-pager--next-page { + padding: 0; + + i { + border-radius: 100%; + cursor: pointer; + margin: .5rem; + padding: .5rem 0; + } + + .data-table-pager--previous-page__disabled, + .data-table-pager--next-page__disabled { + color: #CCC; + } + } + + .data-table-pager--page-info { + line-height: 24px; + padding: 1rem; + text-align: center; + vertical-align: top; + } +} \ No newline at end of file diff --git a/src/SearchBox/SearchBox.component.js b/src/SearchBox/SearchBox.component.js new file mode 100644 index 000000000..8f8e3c298 --- /dev/null +++ b/src/SearchBox/SearchBox.component.js @@ -0,0 +1,65 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import ObservedEvents from "../utils/ObservedEvents.mixin"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import TextField from "material-ui/TextField"; + +const SearchBox = createReactClass({ + propTypes: { + searchObserverHandler: PropTypes.func.isRequired, + debounce: PropTypes.number, + }, + + mixins: [ObservedEvents, Translate], + + getInitialState() { + return { + value: "", + }; + }, + + UNSAFE_componentWillMount() { + this.searchBoxCb = this.createEventObserver("searchBox"); + }, + + componentDidMount() { + const searchObserver = this.events.searchBox + .debounce(this.props.debounce || 400) + .map(event => (event && event.target && event.target.value ? event.target.value : "")) + .distinctUntilChanged(); + + this.props.searchObserverHandler(searchObserver); + + // this.disposable = currentSubSection$ + // .subscribe((appState) => this.setState({ value: '' })); + }, + + componentWillUnmount() { + // this.disposable && this.disposable.dispose && this.disposable.dispose(); + }, + + render() { + return ( +
    + +
    + ); + }, + + _onKeyUp(event) { + this.setState({ + value: event.target.value, + }); + this.searchBoxCb(event); + }, +}); + +export default SearchBox; diff --git a/src/SessionDialog/SessionDialog.component.js b/src/SessionDialog/SessionDialog.component.js new file mode 100644 index 000000000..cf6a62df6 --- /dev/null +++ b/src/SessionDialog/SessionDialog.component.js @@ -0,0 +1,61 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import Dialog from "material-ui/Dialog"; +import FlatButton from "material-ui/FlatButton"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import { redirectToLogin } from "../utils/Dhis2Helpers"; + +const SessionDialog = createReactClass({ + mixins: [Translate], + + getInitialState() { + return { open: false, checkServerIntervalId: null }; + }, + + componentDidMount() { + const checkServerIntervalId = setInterval(this.checkServer, 1000 * 60 * 15); + this.setState({ checkServerIntervalId }); + }, + + componentWillUnmount() { + clearInterval(this.state.checkServerIntervalId); + }, + + checkServer() { + this.context.d2.system.configuration.get("systemId", true).catch(_err => { + this.setState({ open: true }); + }); + }, + + close() { + this.setState({ open: false }); + }, + + render() { + const actions = [ + , + redirectToLogin(this.context.d2.system.settings.api.baseUrl)} + />, + ]; + + return ( + + {this.getTranslation("not_logged_or_expired")} + + ); + }, +}); + +export default SessionDialog; diff --git a/src/Settings/Settings.component.js b/src/Settings/Settings.component.js new file mode 100644 index 000000000..8e51eebff --- /dev/null +++ b/src/Settings/Settings.component.js @@ -0,0 +1,240 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import fp from "lodash/fp"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import Validators from "d2-ui/lib/forms/Validators"; +import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; + +import Dialog from "material-ui/Dialog/Dialog"; +import FlatButton from "material-ui/FlatButton/FlatButton"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import RaisedButton from "material-ui/RaisedButton/RaisedButton"; +import Card from "material-ui/Card/Card"; +import CardText from "material-ui/Card/CardText"; +import { Tabs, Tab } from "material-ui/Tabs"; + +import Settings from "../models/Settings"; +import FormHelpers from "../forms/FormHelpers"; +import ObservedEvents from "../utils/ObservedEvents.mixin"; +import YearlyDateSelector from "../forms/YearlyDateSelector.component"; +import TimePeriodSelector from "../forms/TimePeriodSelector.component"; + +const TabCard = ({ fields, onUpdateFormStatus, onUpdateField }) => ( + + + + + +); + +const SettingsDialog = createReactClass({ + propTypes: { + open: PropTypes.bool.isRequired, + onRequestClose: PropTypes.func.isRequired, + }, + + mixins: [ObservedEvents, Translate], + + tabs: { + general: [ + "categoryProjectsId", + "categoryComboId", + "dataElementGroupSetCoreCompetencyId", + "outputEndDate", + "outcomeEndDate", + "outputLastYearEndDate", + "outcomeLastYearEndDate", + "organisationUnitLevelForCountriesId", + "createdByDataSetConfigurationAttributeId", + "dataPeriodOutputDatesAttributeId", + "dataPeriodOutcomeDatesAttributeId", + "dataPeriodIntervalDatesAttributeId", + ], + sections: { + partition: [ + "dataElementGroupSetThemeId", + "indicatorGroupSetThemeId", + "attributeGroupId", + ], + other: [ + "dataElementGroupOutputId", + "dataElementGroupGlobalIndicatorMandatoryId", + "indicatorGroupGlobalIndicatorMandatoryId", + "dataElementGroupSetOriginId", + "indicatorGroupSetOriginId", + "dataElementGroupSetStatusId", + "indicatorGroupSetStatusId", + "hideInDataSetAppAttributeId", + "exclusionRuleCoreUserGroupId", + ], + }, + }, + + getInitialState() { + this.settings = new Settings(this.context.d2); + return { loaded: false }; + }, + + UNSAFE_componentWillReceiveProps(newProps) { + if (newProps.open) { + this.loadConfig(); + } + }, + + loadConfig() { + Promise.all([this.settings.get(), this.settings.getFields()]).then(([config, fields]) => { + this.setState({ + loaded: true, + fields: fields, + config: config, + currentTab: "general", + formStatuses: {}, + }); + }); + }, + + save() { + this.settings.save(this.state.config).then(() => this.props.onRequestClose()); + }, + + onUpdateField(key, value) { + const newState = fp.set(["config", key], value, this.state); + this.setState(newState); + }, + + getFields(key) { + const { fields, config } = this.state; + const keys = _.get(this.tabs, key); + const tabFields = _(fields) + .keyBy("name") + .at(keys) + .value(); + + return tabFields.map(field => { + if (field.type === "yearlyDate") { + return { + name: field.name, + component: YearlyDateSelector, + value: config[field.name], + props: { + labelText: this.getTranslation(field.i18n_key), + }, + }; + } else if (field.type === "timePeriod") { + return { + name: field.name, + component: TimePeriodSelector, + value: config[field.name], + props: { + labelText: this.getTranslation(field.i18n_key), + }, + }; + } else if (field.options) { + return FormHelpers.getSelectField({ + name: field.name, + label: this.getTranslation(field.i18n_key), + isRequired: false, + options: field.options, + value: config[field.name], + }); + } else { + return FormHelpers.getTextField({ + name: field.name, + label: this.getTranslation(field.i18n_key), + isRequired: true, + value: config[field.name], + validators: [ + { + validator: Validators.isRequired, + message: this.getTranslation(Validators.isRequired.message), + }, + ], + }); + } + }); + }, + + onChangeTab(value) { + this.setState({ currentTab: value }); + }, + + onUpdateFormStatus(section, status) { + const newFormStatuses = _(_.clone(this.state.formStatuses)) + .set(section, status.valid) + .value(); + this.setState({ formStatuses: newFormStatuses }); + }, + + render() { + const { loaded, formStatuses } = this.state; + const saveIsEnabled = + loaded && + _(formStatuses) + .values() + .every(); + + const actions = [ + , + loaded ? ( + + ) : null, + ]; + + const getTabCardProps = section => ({ + fields: this.getFields(section), + onUpdateFormStatus: status => _.defer(this.onUpdateFormStatus, section, status), + onUpdateField: this.onUpdateField, + }); + + return ( + + {!loaded ? ( + + ) : ( + + + + + + + + + + + )} + + ); + }, +}); + +export default SettingsDialog; diff --git a/src/Snackbar/SnackbarContainer.component.js b/src/Snackbar/SnackbarContainer.component.js new file mode 100644 index 000000000..26c0f6d22 --- /dev/null +++ b/src/Snackbar/SnackbarContainer.component.js @@ -0,0 +1,71 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import Snackbar from "material-ui/Snackbar/Snackbar"; +import snackStore from "./snack.store"; +import ObserverRegistry from "../utils/ObserverRegistry.mixin"; +import log from "loglevel"; + +const SnackBarContainer = createReactClass({ + mixins: [ObserverRegistry], + + getInitialState() { + return { + show: false, + snack: { + message: "", + }, + }; + }, + + UNSAFE_componentWillMount() { + const snackStoreDisposable = snackStore.subscribe(snack => { + if (snack) { + this.setState({ + snack, + show: true, + }); + } else { + this.setState({ + show: false, + }); + } + }, log.debug.bind(log)); + + this.registerDisposable(snackStoreDisposable); + }, + + _closeSnackbar() { + this.setState({ + show: false, + }); + }, + + render() { + if (!this.state.snack) { + return null; + } + + return ( + + ); + }, +}); + +export default SnackBarContainer; diff --git a/src/Snackbar/snack.actions.js b/src/Snackbar/snack.actions.js new file mode 100644 index 000000000..c8dbc4429 --- /dev/null +++ b/src/Snackbar/snack.actions.js @@ -0,0 +1,40 @@ +import Action from "d2-ui/lib/action/Action"; +import snackStore from "./snack.store"; +import { getInstance as getD2 } from "d2/lib/d2"; +import { goToRoute } from "../router"; + +const snackActions = Action.createActionsFromNames(["show", "showAndRedirect", "hide"]); + +snackActions.show.subscribe(actionConfig => { + const { + message, + action, + autoHideDuration, + onActionClick, + translate, + route, + } = actionConfig.data; + + if (route) { + goToRoute(route); + } + + getD2().then(d2 => { + snackStore.setState({ + message: translate ? d2.i18n.getTranslation(message) : message, + action: action || "ok", + autoHideDuration, + onActionClick: + onActionClick || + (() => { + snackActions.hide(); + }), + }); + }); +}); + +snackActions.hide.subscribe(() => { + snackStore.setState(null); +}); + +export default snackActions; diff --git a/src/Snackbar/snack.store.js b/src/Snackbar/snack.store.js new file mode 100644 index 000000000..2203dcece --- /dev/null +++ b/src/Snackbar/snack.store.js @@ -0,0 +1,3 @@ +import Store from "d2-ui/lib/store/Store"; + +export default Store.create(); diff --git a/src/Wizard/Wizard.component.js b/src/Wizard/Wizard.component.js new file mode 100644 index 000000000..d4e1a0b71 --- /dev/null +++ b/src/Wizard/Wizard.component.js @@ -0,0 +1,182 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import Toolbar from "material-ui/Toolbar/Toolbar"; +import ToolbarGroup from "material-ui/Toolbar/ToolbarGroup"; +import RaisedButton from "material-ui/RaisedButton/RaisedButton"; +import Card from "material-ui/Card/Card"; +import CardText from "material-ui/Card/CardText"; +import IconButton from "material-ui/IconButton"; +import HelpOutlineIcon from "material-ui/svg-icons/action/help-outline"; +import Dialog from "material-ui/Dialog/Dialog"; +import FlatButton from "material-ui/FlatButton/FlatButton"; +import Steps from "react-steps"; + +const Wizard = createReactClass({ + mixins: [Translate], + + propTypes: { + fields: PropTypes.arrayOf(PropTypes.object), + buttons: PropTypes.arrayOf(PropTypes.object), + onFieldsChange: PropTypes.func, + }, + + getDefaultProps: function() { + return { + onFieldsChange: _.identity, + nextEnabled: true, + active: 0, + doneUntil: 0, + }; + }, + + getInitialState() { + return { + helpOpen: false, + }; + }, + + _onPreviousClicked(ev) { + ev.preventDefault(); + const newActive = _(this._getIndexedVisibleSteps()) + .map("index") + .sortBy() + .reverse() + .find(idx => idx < this.props.active); + this.props.onStepChange(newActive); + }, + + _onNextClicked(ev) { + ev.preventDefault(); + const newActive = _(this._getIndexedVisibleSteps()) + .map("index") + .sortBy() + .find(idx => idx > this.props.active); + this.props.onStepChange(newActive); + }, + + _openHelp() { + this.setState({ helpOpen: true }); + }, + + _closeHelp() { + this.setState({ helpOpen: false }); + }, + + render() { + const indexedVisibleSteps = this._getIndexedVisibleSteps(); + if (!indexedVisibleSteps) return; + + const currentStep = this.props.steps[this.props.active]; + const items = indexedVisibleSteps.map(({ step, index }) => ({ + text: step.title, + isActive: index === this.props.active, + isDone: index < this.props.doneUntil, + })); + const actionsBar = currentStep.actionsBar || ["top", "bottom"]; + const firstStepIndex = indexedVisibleSteps[0].index; + const lastStepIndex = indexedVisibleSteps[indexedVisibleSteps.length - 1].index; + const showPrevious = this.props.active > firstStepIndex; + const showNext = this.props.active < lastStepIndex; + const actions = [ + , + ]; + + return ( +
    + + {currentStep.help} + + + + {_(actionsBar).includes("top") && + this._renderButtons( + currentStep, + showPrevious, + showNext, + currentStep.help !== "" + )} + + + + + this.props.onFieldsChange(currentStep.id, ...args) + } + {...currentStep.props} + /> + + + + {_(actionsBar).includes("top") && + this._renderButtons(currentStep, showPrevious, showNext, false)} +
    + ); + }, + + _getIndexedVisibleSteps() { + return this.props.steps + .map((step, index) => ({ step, index })) + .filter(({ step }) => step.visible !== false); + }, + + _renderButtons(step, showPrevious, showNext, showHelp) { + const renderHelp = () => ( + + + + + + ); + + return ( + + + + + + + + + {this.props.buttons.map(button => + !button.showFunc || button.showFunc(step) ? ( + + ) : null + )} + + + {showHelp && renderHelp()} + + ); + }, +}); + +export default Wizard; diff --git a/src/app-config.ts b/src/app-config.ts deleted file mode 100644 index 8825a8f6e..000000000 --- a/src/app-config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { FeedbackOptions } from "@eyeseetea/feedback-component"; - -export const appConfig: AppConfig = { - id: "d2-dataset-configuration", - appearance: { - showShareButton: true, - }, - feedback: { - repositories: { - clickUp: { - // https://app.clickup.com/${workspace}/v/b/N-${listId}-M - // Web development -> Common resources -> app-skeleton - listId: "42597084", - title: "[User feedback] {title}", - body: "## dhis2\n\nUsername: {username}\n\n{body}", - }, - }, - layoutOptions: { - buttonPosition: "bottom-start", - }, - }, -}; - -export interface AppConfig { - id: string; - appearance: { - showShareButton: boolean; - }; - feedback?: FeedbackOptions; -} diff --git a/src/app.js b/src/app.js new file mode 100644 index 000000000..782ddb75c --- /dev/null +++ b/src/app.js @@ -0,0 +1,106 @@ +// When the app is built for development, DHIS_CONFIG is replaced with the config read from $DHIS2_HOME/config.js[on] +// When the app is built for production, process.env.NODE_ENV is replaced with the string 'production', and +// DHIS_CONFIG is replaced with an empty object +import React from "react"; +import { render } from "react-dom"; +import { init, config, getUserSettings, getManifest } from "d2/lib/d2"; +import log from "loglevel"; +import LoadingMask from "d2-ui/lib/loading-mask/LoadingMask.component"; +import MuiThemeProvider from "material-ui/styles/MuiThemeProvider"; +import moment from "moment"; + +// The react-tap-event-plugin is required by material-ui to make touch screens work properly with onClick events +//import "react-tap-event-plugin"; +//import injectTapEventPlugin from "react-tap-event-plugin"; + +import routes from "./router"; +import appTheme from "./App/app.theme"; +import "./App/App.scss"; +import Settings from "./models/Settings"; +import i18n from "./components/sharing-dialog/i18n"; + +const dhisDevConfig = DHIS_CONFIG; // eslint-disable-line + +// This code will only be included in non-production builds of the app +// It sets up the Authorization header to be used during CORS requests +// This way we can develop using webpack without having to install the application into DHIS2. +if (process.env.NODE_ENV !== "production") { + // jQuery.ajaxSetup({ headers: { Authorization: dhisDevConfig.authorization } }); // eslint-disable-line +} +//injectTapEventPlugin(); + +// Render the a LoadingMask to show the user the app is in loading +// The consecutive render after we did our setup will replace this loading mask +// with the rendered version of the application. +render( + + + , + document.getElementById("app") +); + +function safeGetUserSettings() { + return getUserSettings().then(settings => + typeof settings === "object" ? settings : Promise.reject() + ); +} + +function configI18n(userSettings) { + const uiLocale = userSettings.keyUiLocale; + const browserLocale = window.navigator.userLanguage || window.navigator.language; + moment.locale(browserLocale); + + if (uiLocale && uiLocale !== "en") { + // Add the language sources for the preferred locale + config.i18n.sources.add(`./i18n/i18n_module_${uiLocale}.properties`); + } + + // Add english as locale for all cases (either as primary or fallback) + config.i18n.sources.add("./i18n/i18n_module_en.properties"); + + ["cancel", "name"].forEach(key => config.i18n.strings.add(key)); +} + +/** + * Renders the application into the page. + * + * @param d2 Instance of the d2 library that is returned by the `init` function. + */ +async function startApp(d2) { + window.d2 = d2; + i18n.config.d2 = d2; // Init wrapper for component using gettext i18n + await addExtraInfoToCurrentUser(d2); + render(routes, document.getElementById("app")); +} + +async function addExtraInfoToCurrentUser(d2) { + const api = d2.Api.getApi(); + const { userGroups } = await api.get("/me?fields=userGroups[id,name]"); + d2.currentUser.userGroups = userGroups; +} + +function initSettings(d2) { + const settings = new Settings(d2); + return settings.init().then(() => d2); +} + +// Load the application manifest to be able to determine the location of the Api +// After we have the location of the api, we can set it onto the d2.config object +// and initialise the library. We use the initialised library to pass it into the app +// to make it known on the context of the app, so the sub-components (primarily the d2-ui components) +// can use it to access the api, translations etc. +getManifest("./manifest.webapp") + .then(manifest => { + const baseUrl = + process.env.NODE_ENV === "production" ? manifest.getBaseUrl() : dhisDevConfig.baseUrl; + config.siteUrl = baseUrl; + config.baseUrl = `${baseUrl}/api`; + log.info(`Loading: ${manifest.name} v${manifest.version}`); + log.info(`Built ${manifest.manifest_generated_at}`); + }) + .then(safeGetUserSettings) + .then(configI18n) + .then(init) + .then(initSettings) + .then(startApp) + .catch(log.error.bind(log)); diff --git a/src/components/collapsible-box/CollapsibleBox.js b/src/components/collapsible-box/CollapsibleBox.js new file mode 100644 index 000000000..d24226c98 --- /dev/null +++ b/src/components/collapsible-box/CollapsibleBox.js @@ -0,0 +1,73 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import IconButton from "material-ui/IconButton/IconButton"; +import ArrowRight from "material-ui/svg-icons/hardware/keyboard-arrow-right.js"; +import ArrowLeft from "material-ui/svg-icons/hardware/keyboard-arrow-left.js"; +import _ from "../../utils/lodash-mixins"; +import "./CollapsibleBox.scss"; + +const CollapsibleBox = createReactClass({ + propTypes: { + open: PropTypes.bool, + onToggle: PropTypes.func, + styles: PropTypes.shape({ + wrapper: PropTypes.shape({ + open: PropTypes.object, + close: PropTypes.object, + }), + iconButton: PropTypes.object, + content: PropTypes.object, + }), + }, + + getDefaultProps: function() { + return { + open: true, + styles: {}, + }; + }, + + getInitialState: function() { + return { open: this.props.open }; + }, + + UNSAFE_componentWillReceiveProps: function(newProps) { + if (this.props.open !== newProps.open) { + this.setState({ open: newProps.open }); + } + }, + + toggleOpen: function() { + const newOpen = !this.state.open; + this.props.onToggle && this.props.onToggle(newOpen); + this.setState({ open: newOpen }); + }, + + render: function() { + const defaultStyles = { + wrapper: { open: {}, close: {} }, + iconButton: { width: "100%" }, + content: {}, + }; + const styles = _.deepMerge(defaultStyles, this.props.styles); + const { open } = this.state; + const wrapperClass = classNames(["collapsible-box", open ? "open" : "close"]); + const wrapperStyle = open ? styles.wrapper.open : styles.wrapper.close; + + return ( +
    + + {open ? : } + + +
    + {this.props.children} +
    +
    + ); + }, +}); + +export default CollapsibleBox; diff --git a/src/components/collapsible-box/CollapsibleBox.scss b/src/components/collapsible-box/CollapsibleBox.scss new file mode 100644 index 000000000..3a960ddb7 --- /dev/null +++ b/src/components/collapsible-box/CollapsibleBox.scss @@ -0,0 +1,32 @@ +.collapsible-box { + position: relative; + background-color: #EEE; + overflow: hidden; + display: inline-block; + transition: width 0.5s ease-in-out; + margin-right: 10px; +} + +.collapsible-box.close { + flex: 0 0 50px; +} + +.collapsible-box.open { + flex: 0 0 250px; +} + +.collapsible-box.close .content { + opacity: 0; + visibility: hidden; + transition: opacity 0.5s, visibility 0s ease-in-out; +} + +.collapsible-box.open .content { + opacity: 1; + visibility: visible; + transition: opacity 0.5s, visibility 0s ease-in-out; +} + +.collapsible-box .toggle { + width: 100%; +} \ No newline at end of file diff --git a/src/components/sharing-dialog/Access.jsx b/src/components/sharing-dialog/Access.jsx new file mode 100644 index 000000000..6eab0e9d1 --- /dev/null +++ b/src/components/sharing-dialog/Access.jsx @@ -0,0 +1,165 @@ +import React from "react"; +import PropTypes from "prop-types"; +import IconButton from "@material-ui/core/IconButton"; +import ClearIcon from "@material-ui/icons/Clear"; +import PersonIcon from "@material-ui/icons/Person"; +import GroupIcon from "@material-ui/icons/Group"; +import PublicIcon from "@material-ui/icons/Public"; +import BusinessIcon from "@material-ui/icons/Business"; +import { withStyles } from "@material-ui/core/styles"; + +import PermissionPicker from "./PermissionPicker"; +import { accessStringToObject, accessObjectToString } from "./utils"; +import i18n from "./i18n"; + +const icons = { + user: PersonIcon, + userGroup: GroupIcon, + external: PublicIcon, + public: BusinessIcon, +}; + +const SvgIcon = ({ userType }) => { + const Icon = icons[userType] || PersonIcon; + + return ; +}; + +SvgIcon.propTypes = { + userType: PropTypes.string.isRequired, +}; + +const styles = { + accessView: { + fontWeight: "400", + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", + padding: "4px 8px", + }, + accessDescription: { + display: "flex", + flexDirection: "column", + flex: 1, + paddingLeft: 16, + }, +}; + +const useAccessObjectFormat = props => ({ + ...props, + access: accessStringToObject(props.access), + onChange: newAccess => props.onChange(accessObjectToString(newAccess)), +}); + +export const Access = withStyles(styles)( + ({ + access, + accessType, + accessOptions, + primaryText, + secondaryText, + onChange, + onRemove, + disabled, + classes, + }) => ( +
    + +
    +
    {primaryText}
    +
    {secondaryText || " "}
    +
    + + + + +
    + ) +); + +Access.propTypes = { + access: PropTypes.object.isRequired, + accessType: PropTypes.string.isRequired, + accessOptions: PropTypes.object.isRequired, + primaryText: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + disabled: PropTypes.bool, + secondaryText: PropTypes.string, + onRemove: PropTypes.func, +}; + +Access.defaultProps = { + secondaryText: null, + onRemove: null, + disabled: false, +}; + +export const GroupAccess = basicProps => { + const props = useAccessObjectFormat(basicProps); + const newProps = { + accessType: props.groupType, + primaryText: props.groupName, + accessOptions: { + meta: { canView: true, canEdit: true, noAccess: false }, + data: props.dataShareable && { + canView: true, + canEdit: true, + noAccess: true, + }, + }, + }; + + return ; +}; + +export const ExternalAccess = props => { + const newProps = { + ...props, + accessType: "external", + primaryText: i18n.t("External access"), + secondaryText: props.access ? i18n.t("Anyone can view without login") : i18n.t("No access"), + access: { + meta: { canEdit: false, canView: props.access }, + data: { canEdit: false, canView: false }, + }, + onChange: newAccess => props.onChange(newAccess.meta.canView), + accessOptions: { + meta: { canView: true, canEdit: false, noAccess: true }, + }, + }; + + return ; +}; + +export const PublicAccess = basicProps => { + const props = useAccessObjectFormat(basicProps); + const { canEdit, canView } = props.access.meta; + const description = canEdit + ? "Anyone can find and view" + : canView + ? "Anyone can view" + : "No access"; + + const newProps = { + ...props, + accessType: "public", + primaryText: i18n.t("Public access"), + secondaryText: description, + accessOptions: { + meta: { canView: true, canEdit: true, noAccess: true }, + data: props.dataShareable && { + canView: true, + canEdit: true, + noAccess: true, + }, + }, + }; + + return ; +}; diff --git a/src/components/sharing-dialog/AutoComplete.jsx b/src/components/sharing-dialog/AutoComplete.jsx new file mode 100644 index 000000000..84e5e6e88 --- /dev/null +++ b/src/components/sharing-dialog/AutoComplete.jsx @@ -0,0 +1,157 @@ +import React, { Component } from "react"; +import PropTypes from "prop-types"; +import Downshift from "downshift"; +import { withStyles } from "@material-ui/core/styles"; +import TextField from "@material-ui/core/TextField"; +import Paper from "@material-ui/core/Paper"; +import MenuItem from "@material-ui/core/MenuItem"; +import Popper from "@material-ui/core/Popper"; + +const Input = ({ InputProps }) => { + return ; +}; + +Input.propTypes = { + InputProps: PropTypes.object.isRequired, +}; + +const Suggestion = ({ suggestion, itemProps, isHighlighted, selectedItem }) => { + const isSelected = selectedItem && selectedItem.id === suggestion.id; + + return ( + + {suggestion.displayName} + + ); +}; + +Suggestion.propTypes = { + isHighlighted: PropTypes.bool.isRequired, + itemProps: PropTypes.object, + selectedItem: PropTypes.object, + suggestion: PropTypes.shape({ displayName: PropTypes.string }).isRequired, +}; + +const styles = theme => ({ + root: { + flexGrow: 1, + height: 60, + }, + popper: { + zIndex: 2000, + maxHeight: "420px", + overflowY: "hidden", + boxShadow: "0px 0px 1px 1px rgba(0,0,0,0.2)", + }, + container: { + flexGrow: 1, + position: "relative", + }, + inputRoot: { + flexWrap: "wrap", + }, +}); + +let popperNode; + +class AutoComplete extends Component { + render() { + const { classes, placeholderText, suggestions, searchText } = this.props; + + return ( +
    + (item ? item.name : "")} + inputValue={searchText} + > + {({ + getInputProps, + getItemProps, + getMenuProps, + highlightedIndex, + isOpen, + selectedItem, + }) => { + return ( +
    + { + popperNode = node; + }, + })} + /> +
    + {isOpen && ( + + + {suggestions.map((suggestion, index) => { + return ( + + ); + })} + + + )} +
    +
    + ); + }} +
    +
    + ); + } +} + +AutoComplete.propTypes = { + classes: PropTypes.object.isRequired, + placeholderText: PropTypes.string, + onInputChanged: PropTypes.func.isRequired, + onItemSelected: PropTypes.func.isRequired, + suggestions: PropTypes.array.isRequired, +}; + +AutoComplete.defaultProps = { + placeholderText: "", +}; + +export default withStyles(styles)(AutoComplete); diff --git a/src/components/sharing-dialog/ConfirmationDialog.jsx b/src/components/sharing-dialog/ConfirmationDialog.jsx new file mode 100644 index 000000000..4e65d5985 --- /dev/null +++ b/src/components/sharing-dialog/ConfirmationDialog.jsx @@ -0,0 +1,64 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@material-ui/core"; +import i18n from "./i18n"; + +class ConfirmationDialog extends React.Component { + static propTypes = { + isOpen: PropTypes.bool.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.string, + onSave: PropTypes.func, + onCancel: PropTypes.func, + saveText: PropTypes.string, + cancelText: PropTypes.string, + disableSave: PropTypes.bool, + }; + + render() { + const { + title, + description, + onSave, + onCancel, + isOpen, + children, + cancelText, + saveText, + disableSave, + ...other + } = this.props; + + return ( + + {title} + + + {description && ( + + {description.split("\n").map((text, idx) => ( +

    {text}

    + ))} +
    + )} + {children} +
    + + + {onCancel && ( + + )} + {onSave && ( + + )} + +
    + ); + } +} + +export default ConfirmationDialog; diff --git a/src/components/sharing-dialog/PermissionOption.jsx b/src/components/sharing-dialog/PermissionOption.jsx new file mode 100644 index 000000000..bc13081df --- /dev/null +++ b/src/components/sharing-dialog/PermissionOption.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import PropTypes from "prop-types"; +import DoneIcon from "@material-ui/icons/Done"; +import MenuItem from "@material-ui/core/MenuItem"; +import ListItemIcon from "@material-ui/core/ListItemIcon"; +import ListItemText from "@material-ui/core/ListItemText"; + +const PermissionOption = props => { + if (props.disabled) { + return null; + } + + return ( + + {props.isSelected && ( + + + + )} + + + ); +}; + +PermissionOption.propTypes = { + disabled: PropTypes.bool.isRequired, + isSelected: PropTypes.bool, + primaryText: PropTypes.string.isRequired, + onClick: PropTypes.func.isRequired, +}; + +PermissionOption.defaultProps = { + isSelected: false, +}; + +export default PermissionOption; diff --git a/src/components/sharing-dialog/PermissionPicker.jsx b/src/components/sharing-dialog/PermissionPicker.jsx new file mode 100644 index 000000000..bf1d3a78c --- /dev/null +++ b/src/components/sharing-dialog/PermissionPicker.jsx @@ -0,0 +1,167 @@ +import PropTypes from "prop-types"; +import React, { Component, Fragment } from "react"; +import IconButton from "@material-ui/core/IconButton"; +import Divider from "@material-ui/core/Divider"; +import MenuList from "@material-ui/core/MenuList"; +import Popover from "@material-ui/core/Popover"; +import NotInterestedIcon from "@material-ui/icons/NotInterested"; +import CreateIcon from "@material-ui/icons/Create"; +import VisibilityIcon from "@material-ui/icons/Visibility"; +import { withStyles } from "@material-ui/core/styles"; + +import PermissionOption from "./PermissionOption"; +import i18n from "./i18n"; + +const styles = { + optionHeader: { + paddingLeft: 16, + paddingTop: 16, + fontWeight: "500", + color: "gray", + }, +}; + +const AccessIcon = ({ metaAccess, disabled }) => { + const iconProps = { + color: disabled ? "disabled" : "action", + }; + if (metaAccess.canEdit) { + return ; + } + + return metaAccess.canView ? ( + + ) : ( + + ); +}; + +class PermissionPicker extends Component { + state = { + open: false, + }; + + onOptionClick = access => () => { + const newAccess = { + ...this.props.access, + ...access, + }; + + this.props.onChange(newAccess); + }; + + openMenu = event => { + event.preventDefault(); + this.setState({ + open: true, + anchor: event.currentTarget, + }); + }; + + closeMenu = () => { + this.setState({ + open: false, + }); + }; + + render = () => { + const { data, meta } = this.props.access; + const { data: dataOptions, meta: metaOptions } = this.props.accessOptions; + + return ( + + + + + + + + + + + + + + {dataOptions && ( + + + + + + + + + )} + + + ); + }; +} + +PermissionPicker.propTypes = { + access: PropTypes.object.isRequired, + accessOptions: PropTypes.object.isRequired, + onChange: PropTypes.func.isRequired, + disabled: PropTypes.bool, +}; + +PermissionPicker.defaultProps = { + disabled: false, +}; + +const OptionHeader = withStyles(styles)(({ text, classes }) => ( +
    {text.toUpperCase()}
    +)); + +OptionHeader.propTypes = { + text: PropTypes.string.isRequired, +}; + +export default PermissionPicker; diff --git a/src/components/sharing-dialog/Sharing.jsx b/src/components/sharing-dialog/Sharing.jsx new file mode 100644 index 000000000..6bd10f274 --- /dev/null +++ b/src/components/sharing-dialog/Sharing.jsx @@ -0,0 +1,222 @@ +import PropTypes from "prop-types"; +import React from "react"; +import Divider from "@material-ui/core/Divider"; +import Typography from "@material-ui/core/Typography"; +import { withStyles } from "@material-ui/core/styles"; + +import UserSearch from "./UserSearch"; +import { PublicAccess, ExternalAccess, GroupAccess } from "./Access"; +import i18n from "./i18n"; + +const styles = { + title: { + fontSize: "24px", + fontWeight: 300, + color: "rgba(0, 0, 0, 0.87)", + padding: "16px 0px 5px", + margin: "0px", + }, + createdBy: { + color: "#818181", + }, + titleBodySpace: { + paddingTop: 30, + }, + rules: { + height: "240px", + overflowY: "scroll", + }, +}; + +/** + * Content of the sharing dialog; a set of components for changing sharing + * preferences. + */ +class Sharing extends React.Component { + onAccessRuleChange = id => accessRule => { + const changeWithId = rule => (rule.id === id ? { ...rule, access: accessRule } : rule); + const userAccesses = (this.props.sharedObject.object.userAccesses || []).map(changeWithId); + const userGroupAccesses = (this.props.sharedObject.object.userGroupAccesses || []).map( + changeWithId + ); + + this.props.onChange({ + userAccesses, + userGroupAccesses, + }); + }; + + onAccessRemove = accessOwnerId => () => { + const withoutId = accessOwner => accessOwner.id !== accessOwnerId; + const userAccesses = (this.props.sharedObject.object.userAccesses || []).filter(withoutId); + const userGroupAccesses = (this.props.sharedObject.object.userGroupAccesses || []).filter( + withoutId + ); + + this.props.onChange({ + userAccesses, + userGroupAccesses, + }); + }; + + onPublicAccessChange = publicAccess => { + this.props.onChange({ + publicAccess, + }); + }; + + onExternalAccessChange = externalAccess => { + this.props.onChange({ + externalAccess, + }); + }; + + setAccessListRef = ref => { + this.accessListRef = ref; + }; + + accessListRef = null; + + addUserAccess = userAccess => { + const currentAccesses = this.props.sharedObject.object.userAccesses || []; + this.props.onChange( + { + userAccesses: [...currentAccesses, userAccess], + }, + this.scrollAccessListToBottom() + ); + }; + + addUserGroupAccess = userGroupAccess => { + const currentAccesses = this.props.sharedObject.object.userGroupAccesses || []; + this.props.onChange( + { + userGroupAccesses: [...currentAccesses, userGroupAccess], + }, + this.scrollAccessListToBottom() + ); + }; + + scrollAccessListToBottom = () => { + this.accessListRef.scrollTop = this.accessListRef.scrollHeight; + }; + + render() { + const { + user, + displayName, + name, + userAccesses, + userGroupAccesses, + publicAccess, + externalAccess, + } = this.props.sharedObject.object; + const { allowPublicAccess = true, allowExternalAccess = false } = + this.props.sharedObject.meta || {}; + const { controls, classes } = this.props; + + const accessIds = (userAccesses || []) + .map(access => access.id) + .concat((userGroupAccesses || []).map(access => access.id)); + + return ( +
    +

    {displayName || name}

    + {user && user.name && ( +
    + {`${i18n.t("Created by")}: ${user.name}`} +
    + )} + {controls || null} +
    + {i18n.t("Who has access")} + +
    + + + {allowExternalAccess && ( + + )} + + {userAccesses && + userAccesses.map(access => ( +
    + + +
    + ))} + {userGroupAccesses && + userGroupAccesses.map(access => ( +
    + + +
    + ))} +
    + +
    + ); + } +} + +Sharing.propTypes = { + /** + * The object to share + */ + sharedObject: PropTypes.shape({ + object: PropTypes.object, + meta: PropTypes.shape({ + allowPublicAccess: PropTypes.bool, + allowExternalAccess: PropTypes.bool, + }), + }).isRequired, + + /* + * If true, the object's data should have their own settings. + */ + dataShareable: PropTypes.bool.isRequired, + + /** + * Function that takes an object containing updated sharing preferences and + * an optional callback fired when the change was successfully posted. + */ + onChange: PropTypes.func.isRequired, + + /** + * Takes a string and a callback, and returns matching users and userGroups. + */ + onSearch: PropTypes.func.isRequired, + + controls: PropTypes.node, +}; + +export default withStyles(styles)(Sharing); diff --git a/src/components/sharing-dialog/SharingDialog.jsx b/src/components/sharing-dialog/SharingDialog.jsx new file mode 100644 index 000000000..d1f8cc7e8 --- /dev/null +++ b/src/components/sharing-dialog/SharingDialog.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import DialogContent from "@material-ui/core/DialogContent"; +import ConfirmationDialog from "./ConfirmationDialog"; +import Sharing from "./Sharing"; +import i18n from "./i18n"; + +const SharingDialog = ({ + isOpen, + isDataShareable, + sharedObject, + onCancel, + onSharingChanged, + onSearchRequest, + controls, +}) => { + return ( + + + {sharedObject && ( + + )} + + + ); +}; + +export default SharingDialog; diff --git a/src/components/sharing-dialog/SharingDialogMultiple.jsx b/src/components/sharing-dialog/SharingDialogMultiple.jsx new file mode 100644 index 000000000..c716fae25 --- /dev/null +++ b/src/components/sharing-dialog/SharingDialogMultiple.jsx @@ -0,0 +1,63 @@ +import _ from "lodash" +import React, { useState } from "react"; +import { FormControlLabel, Switch } from "@material-ui/core"; +import SharingDialog from "./SharingDialog"; +import { mergeShareableAccesses } from "./utils"; +import i18n from "./i18n"; + +const SharingDialogMultiple = props => { + const { meta, objects, onSharingChanged, ...otherProps } = props; + const initialStrategy = objects.length === 1 ? "replace" : "merge"; + const [strategy, setStrategy] = useState(initialStrategy); + + const names = _(objects) + .map(obj => obj.displayName || obj.name) + .take(4); + const name = _.compact([ + objects.length > 1 ? `[${objects.length}] ` : null, + names.join(", "), + names.size() > objects.length ? `, ...` : null, + ]).join(""); + + const users = _.uniq(objects.map(obj => obj.user)); + const user = users.length === 1 ? users[0] : undefined; + const object = { name, user, ...mergeShareableAccesses(objects) }; + const mergedObject = { object, meta }; + const controls = + objects.length > 1 ? : null; + + const onChange = objects => onSharingChanged(objects, strategy); + + return ( + + ); +}; + +const StrategySwitch = props => { + const { strategy, onChange } = props; + const strategies = { merge: i18n.t("Merge"), replace: i18n.t("Replace") }; + const label = [i18n.t("Update strategy"), ": ", strategies[strategy]].join(""); + + return ( +
    + onChange(ev.target.checked ? "replace" : "merge")} + value="checkedB" + color="primary" + /> + } + label={label} + /> +
    + ); +}; + +export default SharingDialogMultiple; diff --git a/src/components/sharing-dialog/UserSearch.jsx b/src/components/sharing-dialog/UserSearch.jsx new file mode 100644 index 000000000..1d3f821bc --- /dev/null +++ b/src/components/sharing-dialog/UserSearch.jsx @@ -0,0 +1,165 @@ +import React, { Component } from "react"; +import PropTypes from "prop-types"; +import { Subject } from "rxjs/Subject"; +import { timer } from "rxjs/observable/timer"; +import { debounce } from "rxjs/operators"; +import { withStyles } from "@material-ui/core/styles"; + +import { accessObjectToString } from "./utils"; +import PermissionPicker from "./PermissionPicker"; +import AutoComplete from "./AutoComplete"; +import i18n from "./i18n"; + +const styles = { + container: { + fontWeight: "400", + padding: 16, + backgroundColor: "#F5F5F5", + display: "flex", + flexDirection: "column", + justifyContent: "center", + }, + + innerContainer: { + display: "flex", + flexDirection: "row", + flex: 1, + }, + + title: { + color: "#818181", + paddingBottom: 8, + }, +}; + +const searchDelay = 300; + +class UserSearch extends Component { + state = { + defaultAccess: { + meta: { canView: true, canEdit: true }, + data: { canView: false, canEdit: false }, + }, + searchResult: [], + searchText: "", + }; + + componentDidMount() { + this.inputStream.pipe(debounce(() => timer(searchDelay))).subscribe(searchText => { + this.fetchSearchResult(searchText); + }); + } + + onItemSelected = selected => { + // Material UI triggers an 'onUpdateInput' when a search result is clicked. Therefore, we + // immediately pushes a new item to the search stream to prevent the stream from searching + // for the item again. + this.inputStream.next(""); + + const selection = this.state.searchResult.find(r => r.id === selected.id); + + const type = selection.type; + delete selection.type; + + if (type === "userAccess") { + this.props.addUserAccess({ + ...selection, + access: accessObjectToString(this.state.defaultAccess), + }); + } else { + this.props.addUserGroupAccess({ + ...selection, + access: accessObjectToString(this.state.defaultAccess), + }); + } + this.clearSearchText(); + }; + + inputStream = new Subject(); + + hasNoCurrentAccess = userOrGroup => this.props.currentAccessIds.indexOf(userOrGroup.id) === -1; + + fetchSearchResult = searchText => { + if (searchText === "") { + this.handleSearchResult([]); + } else { + this.props.onSearch(searchText).then(({ users, userGroups }) => { + const addType = type => result => ({ ...result, type }); + const searchResult = users + .map(addType("userAccess")) + .filter(this.hasNoCurrentAccess) + .concat( + userGroups.map(addType("userGroupAccess")).filter(this.hasNoCurrentAccess) + ); + + this.handleSearchResult(searchResult); + }); + } + }; + + handleSearchResult = searchResult => { + this.setState({ searchResult }); + }; + + onInputChanged = searchText => { + this.inputStream.next(searchText); + this.setState({ searchText }); + }; + + accessOptionsChanged = accessOptions => { + this.setState({ + defaultAccess: accessOptions, + }); + }; + + clearSearchText = () => { + this.setState({ + searchText: "", + }); + }; + + render() { + const { classes } = this.props; + return ( +
    +
    {i18n.t("Add users and user groups")}
    +
    + + +
    +
    + ); + } +} + +UserSearch.propTypes = { + onSearch: PropTypes.func.isRequired, + addUserAccess: PropTypes.func.isRequired, + dataShareable: PropTypes.bool.isRequired, + addUserGroupAccess: PropTypes.func.isRequired, + currentAccessIds: PropTypes.array.isRequired, +}; + +export default withStyles(styles)(UserSearch); diff --git a/src/components/sharing-dialog/i18n.js b/src/components/sharing-dialog/i18n.js new file mode 100644 index 000000000..9bc014c30 --- /dev/null +++ b/src/components/sharing-dialog/i18n.js @@ -0,0 +1,12 @@ +export let config = { d2: null }; + +export function t(...args) { + const { d2 } = config; + if (!d2) { + throw new Error("d2 not initialized"); + } else { + return d2.i18n.getTranslation(...args); + } +} + +export default { t, config }; diff --git a/src/components/sharing-dialog/utils.js b/src/components/sharing-dialog/utils.js new file mode 100644 index 000000000..60042fc61 --- /dev/null +++ b/src/components/sharing-dialog/utils.js @@ -0,0 +1,149 @@ +import _ from "lodash"; +import { getOwnedPropertyJSON } from "../../utils/Dhis2Helpers"; + +export const cachedAccessTypeToString = (canView, canEdit) => { + if (canView) { + return canEdit ? "rw------" : "r-------"; + } + + return "--------"; +}; + +export const transformAccessObject = (access, type) => ({ + id: access.id, + name: access.name, + displayName: access.displayName, + type, + canView: access.access && access.access.includes("r"), + canEdit: access.access && access.access.includes("rw"), +}); + +export const accessStringToObject = access => { + if (!access) { + return { + data: { canView: false, canEdit: false }, + meta: { canView: false, canEdit: false }, + }; + } + + const metaAccess = access.substring(0, 2); + const dataAccess = access.substring(2, 4); + + return { + meta: { + canView: metaAccess.includes("r"), + canEdit: metaAccess.includes("rw"), + }, + data: { + canView: dataAccess.includes("r"), + canEdit: dataAccess.includes("rw"), + }, + }; +}; + +export const accessObjectToString = accessObject => { + const convert = ({ canEdit, canView }) => { + if (canEdit) { + return "rw"; + } + + return canView ? "r-" : "--"; + }; + + let accessString = ""; + accessString += convert(accessObject.meta); + accessString += convert(accessObject.data); + accessString += "----"; + + return accessString; +}; + +/* Batch mode helpers */ + +export function mergeShareableAccesses(objects) { + return { + publicAccess: mergeAccesses(objects, "publicAccess"), + externalAccess: _(objects) + .map(obj => obj.externalAccess) + .uniq() + .isEqual([true]), + userAccesses: mergeEntityAccesses(objects, "userAccesses"), + userGroupAccesses: mergeEntityAccesses(objects, "userGroupAccesses"), + }; +} + +function mergeAccesses(objects, field, defaultAccess = "--------") { + return _.zip(...objects.map(objects => (objects[field] || defaultAccess).split(""))) + .map(vals => (_.uniq(vals).length === 1 ? vals[0] : "-")) + .join(""); +} + +function mergeEntityAccesses(objects, field) { + const commonAccesses = _.intersectionBy(...objects.map(o => o[field]), "id"); + + return _(objects) + .flatMap(field) + .groupBy("id") + .at(commonAccesses.map(obj => obj.id)) + .values() + .map(permissions => ({ ...permissions[0], access: mergeAccesses(permissions, "access") })) + .value(); +} + +function mergePermissions(object, newAttributes, field, strategy, commonPermissionIds) { + const objPermissions = object[field] || []; + const newPermissions = newAttributes[field]; + if (!newPermissions) return {}; + + switch (strategy) { + case "merge": + // If a permission id was common but it's now not present in newPermissions, it means + // the user removed it from the list, should be removed here. + const idsToRemove = _.difference(commonPermissionIds, newPermissions.map(p => p.id)); + const ids = _(objPermissions) + .map("id") + .concat(_.map(newPermissions, "id")) + .uniq() + .value(); + const newObjPermissions = _(objPermissions) + .keyBy("id") + .merge(_.keyBy(newPermissions, "id")) + .omit(idsToRemove) + .at(ids) + .compact() + .value(); + return { [field]: newObjPermissions }; + case "replace": + return { [field]: newPermissions }; + default: + throw new Error("Unknown strategy: " + strategy); + } +} + +export function save(d2, objects, sharingAttributes, strategy) { + const plainObjects = objects.map(object => + object.modelDefinition ? getOwnedPropertyJSON(object) : object + ); + + const commonIds = _(objects) + .flatMap(obj => [...(obj.userAccesses || []), ...(obj.userGroupAccesses || [])]) + .countBy(permission => permission.id) + .pickBy(count => count === objects.length) + .keys() + .value(); + + const dataSetsUpdated = plainObjects.map(object => ({ + ...object, + ...mergePermissions(object, sharingAttributes, "userAccesses", strategy, commonIds), + ...mergePermissions(object, sharingAttributes, "userGroupAccesses", strategy, commonIds), + ..._.pick(sharingAttributes, ["publicAccess", "externalAccess"]), + })); + + const api = d2.Api.getApi(); + const payload = { dataSets: dataSetsUpdated }; + + return api + .post("metadata", payload) + .then(response => ({ status: response.status === "OK", ...payload })) + .catch(_err => ({ status: "ERROR" })); +} diff --git a/src/config/periodTypes.json b/src/config/periodTypes.json new file mode 100644 index 000000000..28e932293 --- /dev/null +++ b/src/config/periodTypes.json @@ -0,0 +1,13 @@ +[ + "Daily", + "Weekly", + "Monthly", + "BiMonthly", + "Quarterly", + "SixMonthly", + "SixMonthlyApril", + "Yearly", + "FinancialApril", + "FinancialJuly", + "FinancialOct" +] diff --git a/src/data/api-futures.ts b/src/data/api-futures.ts deleted file mode 100644 index 502ffe7a1..000000000 --- a/src/data/api-futures.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Future } from "$/domain/entities/generic/Future"; -import { CancelableResponse } from "$/types/d2-api"; - -export type FutureData = Future; - -export function apiToFuture(res: CancelableResponse): FutureData { - return Future.fromComputation((resolve, reject) => { - res.getData() - .then(resolve) - .catch((err: unknown) => { - if (err instanceof Error) { - reject(err); - } else { - console.error("apiToFuture:uncatched", err); - reject(new Error("Unknown error")); - } - }); - return res.cancel; - }); -} diff --git a/src/data/repositories/UserD2Repository.ts b/src/data/repositories/UserD2Repository.ts deleted file mode 100644 index 7013272d8..000000000 --- a/src/data/repositories/UserD2Repository.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { User } from "$/domain/entities/User"; -import { UserRepository } from "$/domain/repositories/UserRepository"; -import { D2Api, MetadataPick } from "$/types/d2-api"; -import { apiToFuture, FutureData } from "$/data/api-futures"; - -export class UserD2Repository implements UserRepository { - constructor(private api: D2Api) {} - - public getCurrent(): FutureData { - return apiToFuture( - this.api.currentUser.get({ - fields: userFields, - }) - ).map(d2User => { - const res = this.buildUser(d2User); - return res; - }); - } - - private buildUser(d2User: D2User) { - return new User({ - id: d2User.id, - name: d2User.displayName, - userGroups: d2User.userGroups, - ...d2User.userCredentials, - }); - } -} - -const userFields = { - id: true, - displayName: true, - userGroups: { id: true, name: true }, - userCredentials: { - username: true, - userRoles: { id: true, name: true, authorities: true }, - }, -} as const; - -type D2User = MetadataPick<{ users: { fields: typeof userFields } }>["users"][number]; diff --git a/src/data/repositories/UserTestRepository.ts b/src/data/repositories/UserTestRepository.ts deleted file mode 100644 index 1378d1e48..000000000 --- a/src/data/repositories/UserTestRepository.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { User } from "$/domain/entities/User"; -import { createAdminUser } from "$/domain/entities/__tests__/userFixtures"; -import { Future } from "$/domain/entities/generic/Future"; -import { UserRepository } from "$/domain/repositories/UserRepository"; -import { FutureData } from "$/data/api-futures"; - -export class UserTestRepository implements UserRepository { - public getCurrent(): FutureData { - return Future.success(createAdminUser()); - } -} diff --git a/src/domain/entities/Ref.ts b/src/domain/entities/Ref.ts deleted file mode 100644 index 8b95ca2f4..000000000 --- a/src/domain/entities/Ref.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Id = string; - -export interface Ref { - id: Id; -} - -export interface NamedRef extends Ref { - name: string; -} diff --git a/src/domain/entities/User.ts b/src/domain/entities/User.ts deleted file mode 100644 index 9323f57c6..000000000 --- a/src/domain/entities/User.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Struct } from "./generic/Struct"; -import { NamedRef } from "./Ref"; - -export interface UserAttrs { - id: string; - name: string; - username: string; - userRoles: UserRole[]; - userGroups: NamedRef[]; -} - -export interface UserRole extends NamedRef { - authorities: string[]; -} - -export class User extends Struct() { - belongToUserGroup(userGroupUid: string): boolean { - return this.userGroups.some(({ id }) => id === userGroupUid); - } - - isAdmin(): boolean { - return this.userRoles.some(({ authorities }) => authorities.includes("ALL")); - } -} diff --git a/src/domain/entities/__tests__/User.spec.ts b/src/domain/entities/__tests__/User.spec.ts deleted file mode 100644 index 49bfcb4c8..000000000 --- a/src/domain/entities/__tests__/User.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { createAdminUser, createNonAdminUser, createUserWithGroups } from "./userFixtures"; - -describe("User", () => { - it("should be admin if has a role with authority ALL", () => { - const user = createAdminUser(); - - expect(user.isAdmin()).toBe(true); - }); - it("should no be admin if hasn't a role with authority ALL", () => { - const user = createNonAdminUser(); - - expect(user.isAdmin()).toBe(false); - }); - it("should return belong to user group equal to false when the id exist", () => { - const userGroupId = "BwyMfDBLih9"; - - const user = createUserWithGroups([{ id: userGroupId, name: "Group 1" }]); - - expect(user.belongToUserGroup(userGroupId)).toBe(true); - }); - it("should return belong to user group equal to false when the id does not exist", () => { - const existedUserGroupId = "BwyMfDBLih9"; - const nonExistedUserGroupId = "f31IM13BgwJ"; - - const user = createUserWithGroups([{ id: existedUserGroupId, name: "Group 1" }]); - - expect(user.belongToUserGroup(nonExistedUserGroupId)).toBe(false); - }); - it("should return belong to user group equal to false if user groups is empty", () => { - const nonExistedUserGroupId = "f31IM13BgwJ"; - - const user = createUserWithGroups(); - - expect(user.belongToUserGroup(nonExistedUserGroupId)).toBe(false); - }); -}); diff --git a/src/domain/entities/__tests__/userFixtures.ts b/src/domain/entities/__tests__/userFixtures.ts deleted file mode 100644 index a54c92ac5..000000000 --- a/src/domain/entities/__tests__/userFixtures.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { User, UserRole } from "$/domain/entities/User"; -import { NamedRef } from "$/domain/entities/Ref"; - -export function createAdminUser(): User { - const adminRoles = [{ id: "Hg7n0MwzUQn", name: "Super user", authorities: ["ALL"] }]; - - return createUser(adminRoles, []); -} -export function createNonAdminUser(): User { - const nonAdminRoles = [{ id: "Hg7n0MwzUQn", name: "Malaria", authorities: ["F_EXPORT_DATA"] }]; - - return createUser(nonAdminRoles, []); -} -export function createUserWithGroups(userGroups: NamedRef[] = []): User { - return new User({ - id: "YjJdEO6d38H", - name: "John Traore", - username: "user", - userRoles: [], - userGroups, - }); -} -function createUser(userRoles: UserRole[], userGroups: NamedRef[] = []): User { - return new User({ - id: "kQiwoyMYHBS", - name: "John Traore", - username: "user", - userRoles, - userGroups, - }); -} diff --git a/src/domain/entities/generic/Collection.ts b/src/domain/entities/generic/Collection.ts deleted file mode 100644 index b48d66232..000000000 --- a/src/domain/entities/generic/Collection.ts +++ /dev/null @@ -1,328 +0,0 @@ -import { HashMap } from "./HashMap"; - -/** - * Wrap a collection of values, expanding methods for Javascript Arrays. An example: - * - * ``` - * import _ from "./Collection"; - * - * const values = _(["1", "2", "3", "3", "4"]) - * .map(x => parseInt(x)) - * .filter(x => x > 1) - * .uniq() - * .reverse() - * .value(); // [4, 3, 2] - * ``` - */ - -export class Collection { - protected xs: T[]; - - protected constructor(values: T[]) { - this.xs = values; - } - - /* Builders */ - - static from(xs: T[]): Collection { - return new Collection(xs); - } - - static range(start: number, end: number, step = 1): Collection { - const output = []; - for (let idx = start; idx < end; idx = idx + step) output.push(idx); - return Collection.from(output); - } - - /* Unwrappers */ - - value(): T[] { - return this.xs; - } - - toArray = this.value; - - get size() { - return this.xs.length; - } - - /* Methods that return a Collection */ - - map(fn: (x: T) => U): Collection { - return _c(this.xs.map(fn)); - } - - flatten(): T extends Array ? Collection : never { - return _c(this.xs.flat()) as any; - } - - flatMap(fn: (x: T) => Collection): Collection { - return _c(this.xs.flatMap(x => fn(x).toArray())); - } - - select(pred: (x: T) => boolean): Collection { - return _c(this.xs.filter(pred)); - } - - filter = this.select; - - reject(pred: (x: T) => boolean): Collection { - return _c(this.xs.filter(x => !pred(x))); - } - - enumerate(): Collection<[number, T]> { - return _c(this.xs.map((x, idx) => [idx, x])); - } - - compact(): Collection> { - return this.reject(x => x === undefined || x === null) as unknown as Collection< - NonNullable - >; - } - - compactMap(fn: (x: T) => U | undefined | null): Collection { - return this.map(fn).compact() as unknown as Collection; - } - - append(x: T): Collection { - return _c(this.xs.concat([x])); - } - - includes(x: T): boolean { - return this.xs.includes(x); - } - - every(pred: (x: T) => boolean): boolean { - return this.xs.every(pred); - } - - all = this.every; - - some(pred: (x: T) => boolean): boolean { - return this.xs.some(pred); - } - - any = this.some; - - find(pred: (x: T) => boolean, options: { or?: Or } = {}): T | Or { - return this.xs.find(pred) || (options?.or as Or); - } - - sort(): Collection { - return this.sortWith(defaultCompareFn); - } - - reverse(): Collection { - return _c([...this.xs].reverse()); - } - - sortWith(compareFn: CompareFn): Collection { - return _c(this.xs.slice().sort(compareFn)); - } - - sortBy(fn: (x: T) => U, options: { compareFn?: CompareFn } = {}): Collection { - const compareFn = options.compareFn || defaultCompareFn; - // TODO: Schwartzian transform: decorate + sort tuple + undecorate - return this.sortWith((a, b) => compareFn(fn(a), fn(b))); - } - - orderBy(items: OrderItem[]): Collection { - return this.sortWith((a, b) => { - return compareArray(a, b, items); - }); - } - - first(): T | undefined { - return this.xs[0]; - } - - last(): T | undefined { - return this.xs[this.xs.length - 1]; - } - - sum(): number { - return this.xs.reduce((acc, x) => acc + Number(x), 0); - } - - take(n: number): Collection { - return _c(this.xs.slice(0, n)); - } - - drop(n: number): Collection { - return _c(this.xs.slice(n)); - } - - pairwise(): Collection<[T, T]> { - const n = 2; - - return _c( - this.xs - .slice(0, this.xs.length - n + 1) - .map((_x, idx) => [this.xs[idx], this.xs[idx + 1]] as [T, T]) - ); - } - - prepend(x: T) { - return _c([x, ...this.xs]); - } - - tap(fn: (xs: Collection) => void) { - fn(this); - return this; - } - - splitAt(indexes: number[]): Collection> { - return _c(indexes) - .prepend(0) - .append(this.xs.length) - .pairwise() - .map(([i1, i2]) => _c(this.xs.slice(i1, i2))); - } - - thru(fn: (xs: Collection) => Collection) { - return fn(this); - } - - join(char: string): string { - return this.xs.join(char); - } - - get(idx: number): T | undefined { - return this.xs[idx]; - } - - getMany(idxs: number[]): Collection { - return _c(idxs.map(idx => this.xs[idx])); - } - - intersperse(value: T): Collection { - return this.flatMap(x => _c([x, value])).thru(cs => cs.take(cs.size - 1)); - } - - uniq(): Collection { - return this.uniqBy(x => x); - } - - uniqBy(mapper: (value: T) => U): Collection { - const seen = new Set(); - const output: Array = []; - - for (const item of this.xs) { - const mapped = mapper(item); - if (!seen.has(mapped)) { - output.push(item); - seen.add(mapped); - } - } - - return _c(output); - } - - reduce(mapper: (acc: U, value: T) => U, initialAcc: U): U { - return this.xs.reduce(mapper, initialAcc); - } - - chunk(size: number): Collection { - return Collection.range(0, this.xs.length, size).map(index => { - return this.xs.slice(index, index + size); - }); - } - - cartesian(): T extends Array ? Collection : never { - const [ys, ...zss] = this.xs; - - if (!ys) { - return _c([[]]) as any; - } else { - return _c(ys as T[]).flatMap(x => - _c(zss) - .cartesian() - .map(zs => [x, ...zs]) - ) as any; - } - } - - // forEach(fn: (value: T) => void): void - - zipLongest(xs: Collection): Collection<[T | undefined, S | undefined]> { - const max = Math.max(this.size, xs.size); - const pairs = Collection.range(0, max) - .map(i => [this.xs[i], xs.xs[i]] as [T | undefined, S | undefined]) - .value(); - return _c(pairs); - } - - zip(xs: Collection): Collection<[T, S]> { - const min = Math.min(this.size, xs.size); - const pairs = Collection.range(0, min) - .map(i => [this.xs[i], xs.xs[i]] as [T, S]) - .value(); - return _c(pairs); - } - - /* Methods that return HashMap */ - - indexBy(grouperFn: (x: T) => U): HashMap { - const initialValue = HashMap.empty(); - - return this.reduce((acc, x) => { - const key = grouperFn(x); - return acc.set(key, x); - }, initialValue); - } - - keyBy = this.indexBy; - - groupBy(grouperFn: (x: T) => U): HashMap { - const map = this.reduce((acc, value) => { - const key = grouperFn(value); - const valuesForKey = acc.get(key) || []; - valuesForKey.push(value); - return acc.set(key, valuesForKey); - }, new Map()); - - return HashMap.fromPairs(Array.from(map.entries())); - } - - groupFromMap(pairGrouperFn: (x: T) => [U, W]): HashMap { - const map = this.reduce((acc, x) => { - const [key, value] = pairGrouperFn(x); - const valuesForKey = acc.get(key) || []; - valuesForKey.push(value); - return acc.set(key, valuesForKey); - }, new Map()); - - return HashMap.fromPairs(Array.from(map.entries())); - } - - toHashMap(toPairFn: (x: T) => [K, V]): HashMap { - const pairs = this.map(toPairFn).toArray(); - return HashMap.fromPairs(pairs); - } -} - -type CompareRes = -1 | 0 | 1; - -type CompareFn = (a: T, b: T) => CompareRes; - -type Direction = "asc" | "desc"; - -function defaultCompareFn(a: T, b: T, direction: Direction = "asc"): CompareRes { - const [value1, value2] = - direction === "asc" ? [1 as const, -1 as const] : [-1 as const, 1 as const]; - return a > b ? value1 : b > a ? value2 : 0; -} - -function compareArray(a: T, b: T, items: OrderItem[]): CompareRes { - const item = items[0]; - if (!item) return 0; - const [mapper, direction] = item; - const res = defaultCompareFn(mapper(a), mapper(b), direction); - return res !== 0 ? res : compareArray(a, b, items.slice(1)); -} - -type OrderItem = [(obj: T) => unknown, "asc" | "desc"]; - -export default function _c(xs: T[]): Collection { - return Collection.from(xs); -} diff --git a/src/domain/entities/generic/Either.ts b/src/domain/entities/generic/Either.ts deleted file mode 100644 index 332340901..000000000 --- a/src/domain/entities/generic/Either.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Either a success value or an error. Example: - * - * ``` - * Either.success<{ message: string }, string>("9") - * .map(s => parseInt(s)) - * .flatMap(x => { - * return x > 0 ? Either.success(Math.sqrt(x)) : Either.error({ message: "negative!" }); - * }) - * .match({ - * success: x => console.log(`Value is ${x}`), - * error: error => console.error(`Some error: ${error.message}`), - * }); // prints `Value is 3` - * ``` - */ - -export class Either { - constructor(public value: EitherValue) {} - - match(matchObj: MatchObject): Res { - switch (this.value.type) { - case "success": - return matchObj.success(this.value.data); - case "error": - return matchObj.error(this.value.error); - } - } - - isError(): this is this & { value: EitherValueError } { - return this.value.type === "error"; - } - - isSuccess(): this is this & { value: EitherValueSuccess } { - return this.value.type === "success"; - } - - map(fn: (data: Data) => Data1): Either { - return this.flatMap(data => new Either({ type: "success", data: fn(data) })); - } - - mapError(fn: (error: Error) => Error1): Either { - return this.flatMapError( - error => new Either({ type: "error", error: fn(error) }) - ); - } - - flatMap(fn: (data: Data) => Either): Either { - return this.match({ - success: data => fn(data), - error: () => this as Either, - }); - } - - flatMapError(fn: (error: Error) => Either): Either { - return this.match({ - success: () => this as Either, - error: error => fn(error), - }); - } - - static error(error: Error) { - return new Either({ type: "error", error }); - } - - static success(data: Data) { - return new Either({ type: "success", data }); - } - - static map2( - [either1, either2]: [Either, Either], - fn: (data1: Data1, data2: Data2) => Res - ): Either { - return either1.flatMap(data1 => { - return either2.map(data2 => fn(data1, data2)); - }); - } -} - -type EitherValueError = { type: "error"; error: Error; data?: never }; -type EitherValueSuccess = { type: "success"; error?: never; data: Data }; -type EitherValue = EitherValueError | EitherValueSuccess; - -type MatchObject = { - success: (data: Data) => Res; - error: (error: Error) => Res; -}; diff --git a/src/domain/entities/generic/Future.ts b/src/domain/entities/generic/Future.ts deleted file mode 100644 index 0e95bd58a..000000000 --- a/src/domain/entities/generic/Future.ts +++ /dev/null @@ -1,193 +0,0 @@ -import * as rcpromise from "real-cancellable-promise"; -import { Cancellation } from "real-cancellable-promise"; - -/** - * Futures are async values similar to promises, with some differences: - * - Futures are only executed when their method `run` is called. - * - Futures are cancellable (thus, they can be easily used in a `React.useEffect`, for example). - * - Futures have fully typed errors. Subclass Error if you need full stack traces. - * - You may still use async/await monad-style blocks (check Future.block). - * - * More info: https://github.com/EyeSeeTea/know-how/wiki/Async-futures - */ -export class Future { - private constructor(private _promise: () => rcpromise.CancellablePromise) {} - - static success(data: D): Future { - return new Future(() => rcpromise.CancellablePromise.resolve(data)); - } - - static error(error: E): Future { - return new Future(() => rcpromise.CancellablePromise.reject(error)); - } - - static fromComputation( - computation: (resolve: (value: D) => void, reject: (error: E) => void) => Cancel - ): Future { - let cancel: Cancel = () => {}; - - return new Future(() => { - const promise = new Promise((resolve, reject) => { - cancel = computation(resolve, error => reject(error)); - }); - - return new rcpromise.CancellablePromise(promise, cancel || (() => {})); - }); - } - - run(onSuccess: (data: D) => void, onError: (error: E) => void): Cancel { - return this._promise().then(onSuccess, err => { - if (err instanceof rcpromise.Cancellation) { - // no-op - } else { - onError(err); - } - }).cancel; - } - - map(fn: (data: D) => U): Future { - return new Future(() => this._promise().then(fn)); - } - - mapError(fn: (error: E) => E2): Future { - return new Future(() => - this._promise().catch((error: E) => { - throw fn(error); - }) - ); - } - - flatMap(fn: (data: D) => Future): Future { - return new Future(() => this._promise().then(data => fn(data)._promise())); - } - - chain(fn: (data: D) => Future): Future { - return this.flatMap(fn); - } - - toPromise(): Promise { - return this._promise(); - } - - static join2(async1: Future, async2: Future): Future { - return new Future(() => { - return rcpromise.CancellablePromise.all([async1._promise(), async2._promise()]); - }); - } - - static joinObj>>( - obj: Obj, - options: ParallelOptions = { concurrency: 1 } - ): Future< - Obj[keyof Obj] extends Future ? E : never, - { [K in keyof Obj]: Obj[K] extends Future ? U : never } - > { - const asyncs = Object.values(obj); - - return Future.parallel(asyncs, options).map(values => { - const keys = Object.keys(obj); - const pairs = keys.map((key, idx) => [key, values[idx]]); - return Object.fromEntries(pairs); - }); - } - - static sequential(asyncs: Future[]): Future { - return Future.block(async $ => { - const output: D[] = []; - for (const async of asyncs) { - const res = await $(async); - output.push(res); - } - return output; - }); - } - - static parallel(asyncs: Future[], options: ParallelOptions): Future { - return new Future(() => - rcpromise.buildCancellablePromise(async $ => { - const queue: rcpromise.CancellablePromise[] = []; - const output: D[] = new Array(asyncs.length); - - for (const [idx, async] of asyncs.entries()) { - const queueItem$ = async._promise().then(res => { - queue.splice(queue.indexOf(queueItem$), 1); - output[idx] = res; - }); - - queue.push(queueItem$); - - if (queue.length >= options.concurrency) - await $(rcpromise.CancellablePromise.race(queue)); - } - - await $(rcpromise.CancellablePromise.all(queue)); - return output; - }) - ); - } - - static sleep(ms: number): Future { - return new Future(() => rcpromise.CancellablePromise.delay(ms)).map(() => ms); - } - - static void(): Future { - return Future.success(undefined); - } - - static block(blockFn: (capture: CaptureAsync) => Promise): Future { - return new Future((): rcpromise.CancellablePromise => { - return rcpromise.buildCancellablePromise(capturePromise => { - const captureAsync: CaptureAsync = async => { - return capturePromise(async._promise()); - }; - - captureAsync.throw = function (error: E) { - throw error; - }; - - return blockFn(captureAsync); - }); - }); - } - - static block_() { - return function (blockFn: (capture: CaptureAsync) => Promise): Future { - return Future.block(blockFn); - }; - } -} - -export type Cancel = (() => void) | undefined; - -interface CaptureAsync { - (async: Future): Promise; - throw: (error: E) => never; -} - -type ParallelOptions = { concurrency: number }; - -export function getJSON(url: string): Future { - const abortController = new AbortController(); - - return Future.fromComputation((resolve, reject) => { - // exceptions: TypeError | DOMException[name=AbortError] - fetch(url, { method: "get", signal: abortController.signal }) - .then(res => res.json() as U) // exceptions: SyntaxError - .then(data => resolve(data)) - .catch((error: unknown) => { - if (isNamedError(error) && error.name === "AbortError") { - throw new Cancellation(); - } else if (error instanceof TypeError || error instanceof SyntaxError) { - reject(error); - } else { - reject(new TypeError("Unknown error")); - } - }); - - return () => abortController.abort(); - }); -} - -function isNamedError(error: unknown): error is { name: string } { - return Boolean(error && typeof error === "object" && "name" in error); -} diff --git a/src/domain/entities/generic/HashMap.ts b/src/domain/entities/generic/HashMap.ts deleted file mode 100644 index 57d98aaba..000000000 --- a/src/domain/entities/generic/HashMap.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Collection } from "./Collection"; -import * as imap from "typed-immutable-map"; - -/** - * Like ES6 Map, but immutable. - * - * ``` - * import HashMap from "./HashMap"; - * - * const map = HashMap.fromObject({ x: 1, y: 2, z: 3 }) - * .invert() - * .pickBy(([key, value]) => key > 1) - * .values(); // ["y", "z"] - */ - -/* Immutable Hash Map. Keys and values can be of any type. */ - -export class HashMap { - protected constructor(protected _map: imap.HashMap) {} - - /* Constructors */ - - static empty() { - return new HashMap(imap.empty()); - } - - static fromPairs(pairs: Array<[K, V]>): HashMap { - return new HashMap(imap.fromIterable(pairs)); - } - - static fromObject(obj: Record) { - return new HashMap(imap.fromObject(obj)); - } - - /* Methods */ - - get(key: K): V | undefined { - return imap.get(key, this._map); - } - - set(key: K, value: V): HashMap { - const updated = imap.set(key, value, this._map); - return new HashMap(updated); - } - - equals(map: HashMap): boolean { - const mapsHaveEqualSize = () => this.size === map.size; - const allValuesEqual = () => this.keys().every(k => this.get(k) === map.get(k)); - return mapsHaveEqualSize() && allValuesEqual(); - } - - keys(): K[] { - return Array.from(imap.keys(this._map)); - } - - values(): V[] { - return Array.from(imap.values(this._map)); - } - - toPairs(): Array<[K, V]> { - return Array.from(imap.entries(this._map)); - } - - get size(): number { - return this._map.size; - } - - pick(keys: K[]): HashMap { - return this.pickBy(([key, _value]) => keys.includes(key)); - } - - pickBy(pred: (pair: readonly [K, V]) => boolean): HashMap { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return new HashMap(imap.filter((value, key) => pred([key!, value]), this._map)); - } - - omit(keys: K[]): HashMap { - return this.pickBy(([key, _value]) => !keys.includes(key)); - } - - omitBy(pred: (pair: readonly [K, V]) => boolean): HashMap { - return this.pickBy(([key, value]) => !pred([key, value])); - } - - toCollection(): Collection<[K, V]> { - return Collection.from(this.toPairs()); - } - - hasKey(key: K): boolean { - return imap.has(key, this._map); - } - - invert(): HashMap { - const invertedPairs = this.toPairs().map<[V, K]>(([key, value]) => [value, key]); - return HashMap.fromPairs(invertedPairs); - } - - invertMulti(): HashMap { - return this.toCollection().groupFromMap(([key, value]) => [value, key]); - } - - mapValues(mapper: (pair: [K, V]) => V2): HashMap { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return new HashMap(imap.map((value, key) => mapper([key!, value]), this._map)); - } - - mapKeys(_mapper: (pair: [K, V]) => K2): HashMap { - const pairs = this.toPairs().map(([key, value]) => { - return [_mapper([key, value]), value] as [K2, V]; - }); - return HashMap.fromPairs(pairs); - } - - merge(other: HashMap): HashMap { - return HashMap.fromPairs(this.toPairs().concat(other.toPairs())); - } - - forEach(fn: (pair: readonly [K, V]) => void): void { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - imap.forEach((value, key) => fn([key!, value]), this._map); - } - - toObject(): ToObject { - return imap.toObject(this._map) as ToObject; - } -} - -type ToObject = K extends keyof any ? Record : Record; diff --git a/src/domain/entities/generic/Rec.ts b/src/domain/entities/generic/Rec.ts deleted file mode 100644 index e2b15dbbd..000000000 --- a/src/domain/entities/generic/Rec.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Expand methods for Javascript objects. An example: - * - * ``` - * import _r from "./Rec"; - * - * const obj = _r({ x: 1, y: 2, s: "hello" }) - * .pick(["x", "y"]) - * .merge(_r({ z: 3 })) - * .value(); // { x: 1, y: 2, z: 3} - * ``` - */ - -export class Rec { - protected constructor(protected obj: T) {} - - static from(obj: T): Rec { - return new Rec(obj); - } - - keys(): Array { - return Object.keys(this.obj) as Array; - } - - values(): Array { - return Object.values(this.obj) as Array; - } - - toObject(): T { - return this.obj; - } - - value(): T { - return this.obj; - } - - pick(keys: K[]): Rec> { - return this.pickBy(key => keys.includes(key as K)) as unknown as Rec>; - } - - omit(keys: K[]): Rec> { - return this.pickBy(key => !keys.includes(key as K)) as unknown as Rec>; - } - - pickBy(filter: (key: keyof T) => boolean): Rec> { - const pairs = Object.entries(this.obj); - const filtered = Object.fromEntries(pairs.filter(([k, _v]) => filter(k as keyof T))); - return new Rec(filtered) as unknown as Rec>; - } - - omitBy(filter: (key: keyof T) => boolean): Rec> { - return this.pickBy(key => !filter(key)); - } - - merge(rec2: Rec): Rec> { - const merged = { ...this.obj, ...rec2.obj } as Merge; - return new Rec(merged); - } -} - -export default function _r(obj: T): Rec { - return Rec.from(obj); -} - -type Merge = Omit & T2; - -type BaseObj = Record; diff --git a/src/domain/entities/generic/Struct.ts b/src/domain/entities/generic/Struct.ts deleted file mode 100644 index cf4d98160..000000000 --- a/src/domain/entities/generic/Struct.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Base class for typical classes with attributes. Features: create, update. - * - * ``` - * class Counter extends Struct<{ id: Id; value: number }>() { - * add(value: number): Counter { - * return this._update({ value: this.value + value }); - * } - * } - * - * const counter1 = Counter.create({ id: "some-counter", value: 1 }); - * const counter2 = counter1._update({ value: 2 }); - * ``` - */ - -export function Struct() { - abstract class Base { - constructor(_attributes: Attrs) { - Object.assign(this, _attributes); - } - - _getAttributes(): Attrs { - const entries = Object.getOwnPropertyNames(this).map(key => [key, (this as any)[key]]); - return Object.fromEntries(entries) as Attrs; - } - - protected _update(partialAttrs: Partial): this { - const ParentClass = this.constructor as new (values: Attrs) => typeof this; - return new ParentClass({ ...this._getAttributes(), ...partialAttrs }); - } - - static create(this: new (attrs: Attrs) => U, attrs: Attrs): U { - return new this(attrs); - } - } - - return Base as { - new (values: Attrs): Attrs & Base; - create: (typeof Base)["create"]; - }; -} - -const GenericStruct = Struct(); - -export type GenericStructInstance = InstanceType; diff --git a/src/domain/entities/generic/__tests/Collection.spec.ts b/src/domain/entities/generic/__tests/Collection.spec.ts deleted file mode 100644 index 1b19d6273..000000000 --- a/src/domain/entities/generic/__tests/Collection.spec.ts +++ /dev/null @@ -1,336 +0,0 @@ -import { describe, expect, test } from "vitest"; -import _, { Collection } from "$/domain/entities/generic/Collection"; -import { expectTypeOf } from "expect-type"; - -describe("Collection", () => { - test("range", () => { - expect(Collection.range(2, 5).toArray()).toEqual([2, 3, 4]); - expect(Collection.range(2, -1).toArray()).toEqual([]); - }); - - test("map", () => { - const values = _([1, 2, 3]).map(x => 2 * x); - expect(values.toArray()).toEqual([2, 4, 6]); - }); - - test("flatMap", () => { - const values = _([1, 2, 3]).flatMap(x => _([x, -x])); - expect(values.toArray()).toEqual([1, -1, 2, -2, 3, -3]); - }); - - test("flatten", () => { - expect( - _([[1, 2], [3], [], [4, 5]]) - .flatten() - .toArray() - ).toEqual([1, 2, 3, 4, 5]); - }); - - test("filter/select", () => { - const values = _([1, 2, 3, 0, 3]).select(x => x > 1); - expect(values.toArray()).toEqual([2, 3, 3]); - }); - - test("reject", () => { - const values = _([1, 2, 3]).reject(x => x > 1); - expect(values.toArray()).toEqual([1]); - }); - - test("enumerate", () => { - expect(_(["a", "b", "c"]).enumerate().toArray()).toEqual([ - [0, "a"], - [1, "b"], - [2, "c"], - ]); - }); - - test("compact", () => { - const values = _([1, undefined, 2, null, 3]).compact(); - - expect(values.toArray()).toEqual([1, 2, 3]); - expectTypeOf(values).toEqualTypeOf>(); - }); - - test("compactMap", () => { - const values = _([1, 2, 3]).compactMap(x => (x > 1 ? x.toString() : undefined)); - - expect(values.toArray()).toEqual(["2", "3"]); - expectTypeOf(values).toEqualTypeOf>(); - }); - - test("append", () => { - expect(_([1, 2]).append(3).toArray()).toEqual([1, 2, 3]); - }); - - test("includes", () => { - const values = _([1, 2, 3]); - - expect(values.includes(2)).toEqual(true); - expect(values.includes(4)).toEqual(false); - }); - - test("every/all", () => { - const values = _([1, 2, 3]); - - expect(values.every(x => x > 0)).toEqual(true); - expect(values.every(x => x > 1)).toEqual(false); - expect(values.every(x => x > 3)).toEqual(false); - - expect(values.all(x => x > 0)).toEqual(true); - expect(values.all(x => x > 1)).toEqual(false); - expect(values.all(x => x > 3)).toEqual(false); - }); - - test("some/any", () => { - const values = _([1, 2, 3]); - - expect(values.some(x => x > 0)).toEqual(true); - expect(values.some(x => x > 1)).toEqual(true); - expect(values.some(x => x > 3)).toEqual(false); - - expect(values.any(x => x > 0)).toEqual(true); - expect(values.any(x => x > 1)).toEqual(true); - expect(values.any(x => x > 3)).toEqual(false); - }); - - test("find", () => { - const values = _([1, 2, 3]); - - const valueFound = values.find(value => value === 2); - expect(valueFound).toEqual(2); - expectTypeOf(valueFound).toEqualTypeOf(); - - const valueNotFound = values.find(value => value === 4); - expect(valueNotFound).toEqual(undefined); - expectTypeOf(valueNotFound).toEqualTypeOf(); - - const valueDefault = values.find(value => value === 4, { or: 10 }); - expect(valueDefault).toEqual(10); - expectTypeOf(valueDefault).toEqualTypeOf(); - }); - - test("splitAt", () => { - const values = _([0, 1, 2, 3, 4, 5]); - - expect( - values - .splitAt([1, 3]) - .value() - .map(xs => xs.value()) - ).toEqual([[0], [1, 2], [3, 4, 5]]); - }); - - test("join", () => { - expect(_(["a", "b", "c"]).join(" - ")).toEqual("a - b - c"); - }); - - test("get", () => { - const xs = _(["a", "b"]); - - expect(xs.get(-1)).toEqual(undefined); - expect(xs.get(0)).toEqual("a"); - expect(xs.get(1)).toEqual("b"); - expect(xs.get(2)).toEqual(undefined); - }); - - test("getMany", () => { - const xs = _(["a", "b", "c"]); - - expect(xs.getMany([]).toArray()).toEqual([]); - expect(xs.getMany([0, 2]).toArray()).toEqual(["a", "c"]); - expect(xs.getMany([1, 3]).toArray()).toEqual(["b", undefined]); - }); - - test("intersperse", () => { - const xs = _(["a", "b", "c"]); - - expect(xs.intersperse("x").toArray()).toEqual(["a", "x", "b", "x", "c"]); - }); - - test("uniq", () => { - expect(_([1, 2, 2, 3, 1]).uniq().toArray()).toEqual([1, 2, 3]); - }); - - test("uniqBy", () => { - expect( - _(["a", "ab", "b", "c", "abc", "de", "xyz"]) - .uniqBy(s => s.length) - .toArray() - ).toEqual(["a", "ab", "abc"]); - }); - - test("reduce", () => { - expect(_([1, 2, 3]).reduce((acc, x) => acc + x, 10)).toEqual(16); - }); - - test("reverse", () => { - expect(_([1, 2, 3]).reverse().toArray()).toEqual([3, 2, 1]); - }); - - test("sort (strings)", () => { - expect(_(["a", "c", "b"]).sort().toArray()).toEqual(["a", "b", "c"]); - expect(_(["22", "3", "1"]).sort().toArray()).toEqual(["1", "22", "3"]); - }); - - test("sort (numbers)", () => { - expect(_([2, 33, 1, 4]).sort().toArray()).toEqual([1, 2, 4, 33]); - }); - - test("sortBy", () => { - const values = _([2, 33, 1, 4]); - - expect(values.sortBy(x => x).toArray()).toEqual([1, 2, 4, 33]); - expect(values.sortBy(x => -x).toArray()).toEqual([33, 4, 2, 1]); - expect(values.sortBy(x => x.toString()).toArray()).toEqual([1, 2, 33, 4]); - }); - - test("sortBy with custom compareFn", () => { - const values = _([2, 33, 1, 4]); - - expect( - values - .sortBy(x => x, { compareFn: (a, b) => (a === 1 ? -1 : b === 1 ? +1 : 0) }) - .toArray() - ).toEqual([1, 2, 33, 4]); - }); - - test("first", () => { - expect(_([1, 2, 3]).first()).toEqual(1); - expect(_([]).first()).toEqual(undefined); - }); - - test("last", () => { - expect(_([1, 2, 3]).last()).toEqual(3); - expect(_([]).last()).toEqual(undefined); - }); - - test("take", () => { - expect(_([1, 2, 3]).take(-10).toArray()).toEqual([]); - expect(_([1, 2, 3]).take(2).toArray()).toEqual([1, 2]); - expect(_([1, 2, 3]).take(10).toArray()).toEqual([1, 2, 3]); - }); - - test("drop", () => { - expect(_([1, 2, 3]).drop(-0).toArray()).toEqual([1, 2, 3]); - expect(_([1, 2, 3]).drop(2).toArray()).toEqual([3]); - expect(_([1, 2, 3]).drop(10).toArray()).toEqual([]); - }); - - test("pairwise", () => { - expect(_([1, 2, 3, 4]).pairwise().toArray()).toEqual([ - [1, 2], - [2, 3], - [3, 4], - ]); - }); - - test("chunk", () => { - expect(_([1, 2, 3, 4, 5]).chunk(2).toArray()).toEqual([[1, 2], [3, 4], [5]]); - }); - - test("cartesian", () => { - expect(_([[]]).cartesian().toArray()).toEqual([]); - - expect( - _([[1, 2], [3, 4], [5]]) - .cartesian() - .toArray() - ).toEqual([ - [1, 3, 5], - [1, 4, 5], - [2, 3, 5], - [2, 4, 5], - ]); - }); - - test("orderBy", () => { - const unsortedObjects = [ - { id: 1, value: 10 }, - { id: 2, value: 5 }, - { id: 3, value: 10 }, - { id: 4, value: 5 }, - ]; - - const sortedObjects = [ - { id: 4, value: 5 }, - { id: 2, value: 5 }, - { id: 3, value: 10 }, - { id: 1, value: 10 }, - ]; - - expect( - _(unsortedObjects) - .orderBy([ - [obj => obj.value, "asc"], - [obj => obj.id, "desc"], - ]) - .toArray() - ).toEqual(sortedObjects); - }); - - test("zipLongest", () => { - expect( - _([1, 2, 3]) - .zipLongest(_(["a", "b"])) - .toArray() - ).toEqual([ - [1, "a"], - [2, "b"], - [3, undefined], - ]); - }); - - test("zip", () => { - const zipped = _([1, 2, 3]).zip(_(["a", "b"])); - - expectTypeOf(zipped).toEqualTypeOf>(); - expect(zipped.toArray()).toEqual([ - [1, "a"], - [2, "b"], - ]); - }); - - test("prepend", () => { - expect(_([2, 3]).prepend(1).toArray()).toEqual([1, 2, 3]); - }); - - test("indexBy", () => { - const values = _(["a", "ab", "x", "xy"]).indexBy(s => s.length); - - expect(values.size).toEqual(2); - expect(values.get(1)).toEqual("x"); - expect(values.get(2)).toEqual("xy"); - }); - - test("groupBy", () => { - const values = _(["a", "ab", "x", "y", "xy"]).groupBy(s => s.length); - - expect(values.size).toEqual(2); - expect(values.get(1)).toEqual(["a", "x", "y"]); - expect(values.get(2)).toEqual(["ab", "xy"]); - }); - - test("groupBy", () => { - const values = _(["a", "ab", "x", "y", "xy"]).groupBy(s => s.length); - - expect(values.size).toEqual(2); - expect(values.get(1)).toEqual(["a", "x", "y"]); - expect(values.get(2)).toEqual(["ab", "xy"]); - }); - - test("groupAndMap", () => { - const values = _(["1", "12", "9", "89"]).groupFromMap(s => [s.length, parseInt(s)]); - - expect(values.size).toEqual(2); - expect(values.get(1)).toEqual([1, 9]); - expect(values.get(2)).toEqual([12, 89]); - }); - - test("toHashMap from pairs", () => { - const hashMap = _([1, 2]).toHashMap(x => [2 * x, x.toString()]); - - expect(hashMap.size).toEqual(2); - expect(hashMap.get(2)).toEqual("1"); - expect(hashMap.get(4)).toEqual("2"); - }); -}); diff --git a/src/domain/entities/generic/__tests/Future.spec.ts b/src/domain/entities/generic/__tests/Future.spec.ts deleted file mode 100644 index 4edf0ff34..000000000 --- a/src/domain/entities/generic/__tests/Future.spec.ts +++ /dev/null @@ -1,280 +0,0 @@ -import { describe, expect, test, it, vi, expectTypeOf } from "vitest"; -import { Future } from "$/domain/entities/generic/Future"; - -describe("Basic builders", () => { - test("Future.success", async () => { - const value$ = Future.success(10); - - expectTypeOf(value$).toEqualTypeOf>(); - await expectAsync(value$, { toEqual: 10 }); - }); - - test("Future.error", async () => { - const error = new CodedError("message: Error 1", { code: "E001" }); - const value$ = Future.error(error); - - expectTypeOf(value$).toEqualTypeOf>(); - await expectAsync(value$, { toThrow: error }); - }); -}); - -describe("run", () => { - it("calls the sucess branch with the value", async () => { - const success = vi.fn(); - const reject = vi.fn(); - - Future.success(1).run(success, reject); - await nextTick(); - - expect(success).toHaveBeenCalledTimes(1); - expect(success.mock.calls[0]).toEqual([1]); - expect(reject).not.toHaveBeenCalled(); - }); - - it("calls the error branch with the error", async () => { - const success = vi.fn(); - const reject = vi.fn(); - - const async = Future.error({ errorCode: "E12" }); - async.run(success, reject); - await nextTick(); - - expect(success).not.toHaveBeenCalled(); - expect(reject).toHaveBeenCalledTimes(1); - const error = reject.mock.calls[0]?.[0]; - expect(error).toEqual({ errorCode: "E12" }); - }); -}); - -describe("toPromise", () => { - it("converts a successful Async to promise", async () => { - await expect(Future.success(1).toPromise()).resolves.toEqual(1); - }); - - it("converts an error Async to promise", async () => { - await expect(Future.error(new Error("message")).toPromise()).rejects.toThrow( - new Error("message") - ); - }); -}); - -describe("helpers", () => { - test("Future.sleep", async () => { - await expectAsync(Future.sleep(1), { toEqual: 1 }); - }); - - test("Future.void", async () => { - await expectAsync(Future.void(), { toEqual: undefined }); - }); -}); - -describe("Transformations", () => { - test("map", async () => { - const value1$ = Future.success(1); - const value2$ = value1$.map(x => x.toString()); - - await expectAsync(value2$, { toEqual: "1" }); - }); - - test("mapError", async () => { - const value1$ = Future.error(1); - const value2$ = value1$.mapError(x => x.toString()); - expectTypeOf(value2$).toEqualTypeOf>(); - - await expectAsync(value2$, { toThrow: "1" }); - }); - - describe("flatMap/chain", () => { - it("builds an async value mapping to another async", async () => { - const value$ = Future.success(1) - .chain(value => Future.success(value + 2)) - .flatMap(value => Future.success(value + 3)) - .flatMap(value => Future.success(value + 4)); - - await expectAsync(value$, { toEqual: 10 }); - }); - }); -}); - -describe("Future.block", () => { - describe("when all awaited values in the block are successful", () => { - it("returns the returned value as an async", async () => { - const result$ = Future.block(async $ => { - const value1 = await $(Future.success(1)); - const value2 = await $(Future.success("2")); - const value3 = await $(Future.success(3)); - return value1 + parseInt(value2) + value3; - }); - - await expectAsync(result$, { toEqual: 6 }); - }); - }); - - describe("when any the awaited values in the block is an error", () => { - it("returns that error as the async result", async () => { - const result$ = Future.block(async $ => { - const value1 = await $(Future.success(1)); - const value2 = await $(Future.error("message") as Future); - const value3 = await $(Future.success(3)); - return value1 + value2 + value3; - }); - - await expectAsync(result$, { toThrow: "message" }); - }); - }); - - describe("when any the awaited values in the block is an error", () => { - it("returns that error as the async result", async () => { - const result$ = Future.block_()(async $ => { - const value1 = await $(Future.success(1)); - const value2 = await $(Future.error("message") as Future); - const value3 = await $(Future.success(3)); - return value1 + value2 + value3; - }); - - await expectAsync(result$, { toThrow: "message" }); - }); - }); - - describe("when the helper $.error is called", () => { - it("returns that async error as the async result", async () => { - const value1 = 1; - const double = vi.fn((x: number) => x); - - const result$ = Future.block_()(async $ => { - if (value1 > 0) $.throw(new Error("message")); - const value = await $(Future.success(double(1))); - return value; - }); - - await expectAsync(result$, { toThrow: new Error("message") }); - expect(double).not.toHaveBeenCalled(); - }); - }); -}); - -describe("fromComputation", () => { - describe("for a successful computation", () => { - it("return a success async", async () => { - const value$ = Future.fromComputation((resolve, _reject) => { - resolve(1); - return () => {}; - }); - - await expectAsync(value$, { toEqual: 1 }); - }); - }); - - describe("for an unsuccessful computation", () => { - it("return an error async", async () => { - const value$ = Future.fromComputation((_resolve, reject) => { - reject("message"); - return () => {}; - }); - - await expectAsync(value$, { toThrow: "message" }); - }); - }); -}); - -describe("cancel", () => { - it("cancels the async and the error branch is not called", async () => { - const success = vi.fn(); - const reject = vi.fn(); - - const cancel = Future.sleep(1).run(success, reject); - cancel?.(); - await nextTick(); - - expect(success).not.toHaveBeenCalled(); - expect(reject).toHaveBeenCalledTimes(0); - }); -}); - -describe("join2", () => { - it("returns a single async with the pair of values", async () => { - const join$ = Future.join2(Future.success(123), Future.success("hello")); - - expectTypeOf(join$).toEqualTypeOf>(); - await expectAsync(join$, { toEqual: [123, "hello"] }); - }); - - it("returns an error if some of the inputs is an error", async () => { - const join$ = Future.join2(Future.success(123), Future.error("Some error")); - - expectTypeOf(join$).toEqualTypeOf>(); - await expectAsync(join$, { toThrow: "Some error" }); - }); -}); - -describe("joinObj", () => { - it("returns an async with the object of values", async () => { - const join$ = Future.joinObj({ - n: Future.success(123), - s: Future.success("hello"), - }); - - await expectAsync(join$, { - toEqual: { n: 123, s: "hello" }, - }); - }); - - it("returns an error if some of the inputs is an error", async () => { - const join$ = Future.joinObj({ - n: Future.success(123) as Future, - s: Future.error("Some error") as Future, - }); - expectTypeOf(join$).toEqualTypeOf>(); - - await expectAsync(join$, { toThrow: "Some error" }); - }); -}); - -describe("sequential", () => { - it("returns an async containing all the values as an array", async () => { - const values$ = Future.sequential([ - Future.success(1), - Future.success(2), - Future.success(3), - ]); - await expectAsync(values$, { toEqual: [1, 2, 3] }); - }); -}); - -describe("parallel", async () => { - test("concurrency smaller than length", async () => { - const asyncs = [Future.sleep(3), Future.sleep(1), Future.sleep(2)]; - const values$ = Future.parallel(asyncs, { concurrency: 2 }); - await expectAsync(values$, { toEqual: [3, 1, 2] }); - }); - - test("concurrency larger than length", async () => { - const asyncs = [Future.sleep(3), Future.sleep(1), Future.sleep(2)]; - const values$ = Future.parallel(asyncs, { concurrency: 4 }); - await expectAsync(values$, { toEqual: [3, 1, 2] }); - }); -}); - -function nextTick() { - return new Promise(process.nextTick); -} - -export async function expectAsync( - value$: Future, - options: { toEqual: D; toThrow?: undefined } | { toEqual?: undefined; toThrow: E } -): Promise { - if ("toEqual" in options) { - await expect(value$.toPromise()).resolves.toEqual(options.toEqual); - } else { - await expect(value$.toPromise()).rejects.toMatchObject(options.toThrow as any); - } -} - -class CodedError extends Error { - code: string; - - constructor(message: string, data: { code: string }) { - super(message); - this.code = data.code; - } -} diff --git a/src/domain/entities/generic/__tests/HashMap.spec.ts b/src/domain/entities/generic/__tests/HashMap.spec.ts deleted file mode 100644 index a666d0c5b..000000000 --- a/src/domain/entities/generic/__tests/HashMap.spec.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { describe, expect, test } from "vitest"; -import { HashMap } from "$/domain/entities/generic/HashMap"; - -const mapAbc123 = HashMap.fromPairs([ - ["a", 1], - ["b", 2], - ["c", 3], -]); - -describe("constructors", () => { - test("empty", () => { - const map = HashMap.empty(); - expect(map.size).toEqual(0); - expectMapPairsToEqual(map, []); - }); - - test("fromPairs", () => { - const map = HashMap.fromPairs([ - ["a", 1], - ["b", 2], - ]); - - expect(map.size).toEqual(2); - expectMapPairsToEqual(map, [ - ["a", 1], - ["b", 2], - ]); - }); - - test("fromObject", () => { - const map = HashMap.fromObject({ a: 1, b: 2 }); - - expect(map.size).toEqual(2); - expect(map.get("a")).toEqual(1); - expect(map.get("b")).toEqual(2); - }); -}); - -describe("conversors", () => { - test("toCollection", () => { - expect(mapAbc123.toCollection().toArray()).toEqual([ - ["a", 1], - ["b", 2], - ["c", 3], - ]); - }); - - test("toObj", () => { - const obj = mapAbc123.toObject(); - expect(obj).toEqual({ a: 1, b: 2, c: 3 }); - }); -}); - -describe("key/value inclusion", () => { - test("hasKey", () => { - expect(mapAbc123.hasKey("b")).toBe(true); - expect(mapAbc123.hasKey("d")).toBe(false); - }); -}); - -describe("get", () => { - test("returns value if present", () => { - expect(mapAbc123.get("a")).toEqual(1); - expect(mapAbc123.get("b")).toEqual(2); - }); - - test("returns undefined if not present", () => { - expect(mapAbc123.get("d")).toBeUndefined(); - }); -}); - -describe("set", () => { - test("creates key entry for non-existing key", () => { - expectMapPairsToEqual(mapAbc123.set("d", 4), [ - ["a", 1], - ["b", 2], - ["c", 3], - ["d", 4], - ]); - }); - - test("overwrites value for existing key", () => { - expectMapPairsToEqual(mapAbc123.set("a", 11), [ - ["a", 11], - ["b", 2], - ["c", 3], - ]); - }); -}); - -describe("transformations", () => { - test("invert", () => { - expectMapPairsToEqual(mapAbc123.invert(), [ - [1, "a"], - [2, "b"], - [3, "c"], - ]); - }); - - test("invertMulti", () => { - const mapAbc122 = HashMap.fromPairs([ - ["a", 1], - ["b", 2], - ["c", 2], - ]); - - expectMapPairsToEqual(mapAbc122.invertMulti(), [ - [1, ["a"]], - [2, ["b", "c"]], - ]); - }); - - test("mapValues", () => { - expectMapPairsToEqual( - mapAbc123.mapValues(([key, value]) => `${key}${value}`), - [ - ["a", "a1"], - ["b", "b2"], - ["c", "c3"], - ] - ); - }); - - test("mapKeys", () => { - const mapped = mapAbc123.mapKeys(([key, value]) => `${key}${value}`); - expectMapPairsToEqual(mapped, [ - ["a1", 1], - ["b2", 2], - ["c3", 3], - ]); - }); - - test("merge", () => { - const mapAcd = HashMap.fromPairs([ - ["a", 11], - ["c", 33], - ["d", 44], - ]); - - expectMapPairsToEqual(mapAbc123.merge(mapAcd), [ - ["a", 11], - ["b", 2], - ["c", 33], - ["d", 44], - ]); - }); - - test("forEach", () => { - const output: Array<[string, number]> = []; - mapAbc123.forEach(([key, value]) => output.push([key, value])); - - expect(output).toEqual([ - ["a", 1], - ["b", 2], - ["c", 3], - ]); - }); -}); - -describe("filtering by key or value", () => { - test("pick", () => { - expectMapPairsToEqual(mapAbc123.pick(["a", "c"]), [ - ["a", 1], - ["c", 3], - ]); - }); - - test("pickBy", () => { - expectMapPairsToEqual( - mapAbc123.pickBy(([k, v]) => k !== "b" && v > 2), - [["c", 3]] - ); - }); - - test("omit", () => { - expectMapPairsToEqual(mapAbc123.omit(["a", "c"]), [["b", 2]]); - }); - - test("omitBy", () => { - expectMapPairsToEqual( - mapAbc123.omitBy(([k, v]) => k === "b" || v === 1), - [["c", 3]] - ); - }); -}); - -function expectMapPairsToEqual(map: HashMap, pairsSet: Array<[K, V]>): void { - expect(map.toPairs()).toEqual(expect.arrayContaining(pairsSet)); -} diff --git a/src/domain/entities/generic/__tests/Rec.spec.ts b/src/domain/entities/generic/__tests/Rec.spec.ts deleted file mode 100644 index 7f406a91a..000000000 --- a/src/domain/entities/generic/__tests/Rec.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Rec } from "$/domain/entities/generic/Rec"; -import { expectTypeOf } from "expect-type"; - -const rec1 = Rec.from({ x: 1, s: "hello", n: null }); - -describe("Rec", () => { - test("keys", () => { - const keys = rec1.keys(); - expectTypeOf(keys).toEqualTypeOf>(); - expect(keys).toEqual(["x", "s", "n"]); - }); - - test("values", () => { - const values = rec1.values(); - expectTypeOf(values).toEqualTypeOf>(); - expect(values).toEqual([1, "hello", null]); - }); - - test("pick", () => { - const picked = rec1.pick(["x", "n"]); - expectTypeOf(picked).toEqualTypeOf>(); - expect(picked.toObject()).toEqual({ x: 1, n: null }); - }); - - test("pickBy", () => { - expect(rec1.pickBy(key => key === "x").toObject()).toEqual({ x: 1 }); - }); - - test("omit", () => { - expect(rec1.omit(["x", "n"]).toObject()).toEqual({ s: "hello" }); - }); - - test("omitBy", () => { - expect(rec1.omitBy(key => key === "x").toObject()).toEqual({ s: "hello", n: null }); - }); - - test("merge", () => { - const rec2 = Rec.from({ n: true, z: 123 }); - const merged = rec1.merge(rec2); - expectTypeOf(merged).toEqualTypeOf>(); - expect(merged.toObject()).toEqual({ x: 1, s: "hello", n: true, z: 123 }); - }); -}); diff --git a/src/domain/entities/generic/__tests/Struct.spec.ts b/src/domain/entities/generic/__tests/Struct.spec.ts deleted file mode 100644 index 1da70df11..000000000 --- a/src/domain/entities/generic/__tests/Struct.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect, test } from "vitest"; -import { Struct } from "$/domain/entities/generic/Struct"; - -class Person extends Struct<{ name: string; age: number }>() { - description() { - return `${this.name} has ${this.age} years`; - } -} - -const mary = new Person({ name: "Mary Cassatt", age: 54 }); - -test("public attributes", () => { - expect(mary.name).toEqual("Mary Cassatt"); - expect(mary.age).toEqual(54); -}); - -test("public custom methods", () => { - expect(mary.description()).toEqual("Mary Cassatt has 54 years"); -}); diff --git a/src/domain/repositories/UserRepository.ts b/src/domain/repositories/UserRepository.ts deleted file mode 100644 index b197630f1..000000000 --- a/src/domain/repositories/UserRepository.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FutureData } from "$/data/api-futures"; -import { User } from "$/domain/entities/User"; - -export interface UserRepository { - getCurrent(): FutureData; -} diff --git a/src/domain/usecases/GetCurrentUserUseCase.ts b/src/domain/usecases/GetCurrentUserUseCase.ts deleted file mode 100644 index e20f22d43..000000000 --- a/src/domain/usecases/GetCurrentUserUseCase.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { FutureData } from "$/data/api-futures"; -import { User } from "$/domain/entities/User"; -import { UserRepository } from "$/domain/repositories/UserRepository"; - -export class GetCurrentUserUseCase { - constructor(private usersRepository: UserRepository) {} - - public execute(): FutureData { - return this.usersRepository.getCurrent(); - } -} diff --git a/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts b/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts deleted file mode 100644 index 91d98850f..000000000 --- a/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { getTestCompositionRoot } from "$/CompositionRoot"; - -describe("GetCurrentUserUseCase", () => { - it("returns user", async () => { - const compositionRoot = getTestCompositionRoot(); - - const res = compositionRoot.users.getCurrent.execute(); - const user = await res.toPromise(); - expect(user.name).toEqual("John Traore"); - }); -}); diff --git a/src/forms/DataInputPeriods.component.js b/src/forms/DataInputPeriods.component.js new file mode 100644 index 000000000..2d4a6562a --- /dev/null +++ b/src/forms/DataInputPeriods.component.js @@ -0,0 +1,234 @@ +import React from "react"; +import PropTypes from "prop-types"; +import Dialog from "material-ui/Dialog"; +import RaisedButton from "material-ui/RaisedButton"; +import FlatButton from "material-ui/FlatButton"; +import DatePicker from "material-ui/DatePicker"; +import IconButton from "material-ui/IconButton"; +import FontIcon from "material-ui/FontIcon"; +import Divider from "material-ui/Divider"; + +import { generateUid } from "d2/lib/uid"; + +import getPeriod from "d2/lib/period/parser"; +import PeriodPicker from "d2-ui/lib/period-picker/PeriodPicker.component"; + +const styles = { + periodRow: { display: "flex" }, + periodColumn: { flex: 2, paddingTop: 16 }, + dateColumn: { flex: 1 }, + datePicker: { display: "inline-block" }, + datePickerField: { width: 100 }, + periodPicker: { display: "inline-block" }, + iconButton: { top: 4 }, + divider: { marginTop: -9 }, + openDialogButton: { margin: "16px 0" }, +}; + +class DataInputPeriods extends React.Component { + constructor(props, context) { + super(props, context); + + this.state = { + dialogOpen: false, + dataInputPeriods: props.value, + }; + + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + this.openDialog = this.openDialog.bind(this); + this.closeDialog = this.closeDialog.bind(this); + this.addPeriod = this.addPeriod.bind(this); + this.removePeriod = this.removePeriod.bind(this); + this.changePeriodDate = this.changePeriodDate.bind(this); + + this.handleCancel = this.handleCancel.bind(this); + this.handleSave = this.handleSave.bind(this); + } + + openDialog() { + this.setState({ + dialogOpen: true, + dataInputPeriods: (this.props.value || []).sort((a, b) => + a.period.id.localeCompare(b.period.id) + ), + }); + } + + closeDialog() { + this.setState({ + dialogOpen: false, + }); + } + + addPeriod(periodId) { + this.setState({ + dataInputPeriods: this.state.dataInputPeriods.concat({ + id: generateUid(), + period: { id: periodId }, + }), + }); + } + + removePeriod(uid) { + this.setState({ + dataInputPeriods: this.state.dataInputPeriods.filter(dip => dip.id !== uid), + }); + } + + changePeriodDate(uid, dateField, nothing, value) { + this.setState({ + dataInputPeriods: this.state.dataInputPeriods.map(dip => { + if (dip.id === uid) { + dip[dateField] = value; + } + + return dip; + }), + }); + } + + handleCancel() { + this.closeDialog(); + } + + handleSave() { + this.props.onChange({ + target: { + value: this.state.dataInputPeriods.map(dip => ({ + id: dip.id, + period: { + id: dip.period.id, + }, + openingDate: dip.openingDate, + closingDate: dip.closingDate, + })), + }, + }); + this.closeDialog(); + } + + renderDatePicker(labelText, dateValue, onChange, onCancelClick) { + return ( +
    + + {dateValue && ( + + + clear + + + )} +
    + ); + } + + renderPeriods() { + const removePeriodProxy = uid => { + return () => this.removePeriod(uid); + }; + + const changeDateProxy = (uid, dateField) => { + return this.changePeriodDate.bind(this, uid, dateField); + }; + + const removeDateProxy = (periodId, dateField) => { + return () => this.changePeriodDate(periodId, dateField, null, null); + }; + + return ( + this.state.dataInputPeriods && + this.state.dataInputPeriods.map(dataInputPeriod => ( +
    +
    +
    + + + delete + + + {getPeriod(dataInputPeriod.period.id).name} +
    + {this.renderDatePicker( + this.getTranslation("opening_date"), + dataInputPeriod.openingDate && new Date(dataInputPeriod.openingDate), + changeDateProxy(dataInputPeriod.id, "openingDate"), + removeDateProxy(dataInputPeriod.id, "openingDate") + )} + {this.renderDatePicker( + this.getTranslation("closing_date"), + dataInputPeriod.closingDate && new Date(dataInputPeriod.closingDate), + changeDateProxy(dataInputPeriod.id, "closingDate"), + removeDateProxy(dataInputPeriod.id, "closingDate") + )} +
    + +
    + )) + ); + } + + render() { + const actions = [ + , + , + ]; + + return ( +
    + + + {this.renderPeriods()} +
    + +
    +
    +
    + ); + } +} +DataInputPeriods.contextTypes = { d2: PropTypes.any }; + +export default DataInputPeriods; diff --git a/src/forms/DataSetElementCategoryComboSelectionDialog.component.js b/src/forms/DataSetElementCategoryComboSelectionDialog.component.js new file mode 100644 index 000000000..3b4cb4489 --- /dev/null +++ b/src/forms/DataSetElementCategoryComboSelectionDialog.component.js @@ -0,0 +1,199 @@ +import React from "react"; +import PropTypes from "prop-types"; +import withState from "recompose/withState"; +import withHandlers from "recompose/withHandlers"; +import compose from "recompose/compose"; +import getContext from "recompose/getContext"; +import Column from "d2-ui/lib/layout/Column.component"; +import Row from "d2-ui/lib/layout/Row.component"; +import SelectField from "material-ui/SelectField/SelectField"; +import MenuItem from "material-ui/MenuItem/MenuItem"; +import Translate from "d2-ui/lib/i18n/Translate.component"; +import { collectionToArray, getDseId } from "../utils/Dhis2Helpers"; +import _ from "lodash"; + +const enhance = compose( + getContext({ d2: PropTypes.object }), + withState("open", "updateOpen", false), + withHandlers({ + onRequestClose: props => () => { + props.updateOpen(false); + }, + onRequestOpen: props => () => { + props.updateOpen(true); + }, + }) +); + +const getCategoryOptions = categoryCombo => { + if (!categoryCombo || categoryCombo.isDefault) { + return ""; + } else { + return collectionToArray(categoryCombo.categories) + .map(category => + collectionToArray(category.categoryOptions) + .map(co => co.displayName) + .join(" - ") + ) + .join(" / "); + } +}; + +const getOptions = (selectableCategories, selectedCategories) => { + const selectedCategoryIds = new Set(selectedCategories.map(cat => cat.id)); + + return selectableCategories.map(category => { + const { displayName, id } = category; + const categoryOptions = collectionToArray(category.categoryOptions) + .map(co => co.displayName) + .join(" - "); + const checked = selectedCategoryIds.has(category.id); + + return ( + + ); + }); +}; + +const CategoriesSelectField = ({ + hintText, + selectableCategories, + selectedCategories, + onChange, +}) => { + const options = getOptions(selectableCategories, selectedCategories); + const title = _(selectedCategories) + .map("displayName") + .sortBy() + .join(" / "); + const selectableCategoriesById = _.keyBy(selectableCategories, "id"); + const onChangeSelect = (event, index, categoryIds) => + onChange(_.at(selectableCategoriesById, categoryIds)); + const selectionRenderer = categoryIds => { + return _(selectableCategoriesById) + .at(categoryIds) + .map(category => category.displayName) + .join(", "); + }; + + return ( + cat.id)} + title={title} + onChange={onChangeSelect} + fullWidth={true} + selectionRenderer={selectionRenderer} + floatingLabelText={override_data_element_category_combo} + > + {options} + + ); +}; + +function DataSetElementList( + { dataSetElementsGroups, categoryCombos, onCategoriesSelected, canEdit }, + { d2 } +) { + const styles = { + elementListItem: { width: "49%" }, + elementListItemDataElement: { width: "49%", marginTop: "2.5%" }, + noDataElementMessage: { paddingTop: "2rem" }, + originalCategoryCombo: { color: "#CCC", fontSize: "1rem", fontWeight: "300" }, + }; + const categoryCombosById = _.keyBy(categoryCombos, "id"); + const toArray = collectionToArray; + const categories = _(categoryCombos) + .filter(cc => !cc.isDefault) + .flatMap(cc => collectionToArray(cc.categories)) + .uniqBy("id") + .sortBy("displayName") + .value(); + + const dataSetElementsRows = _.flatMap(dataSetElementsGroups, dseGroup => { + const { categoryCombo = {}, dataElement = {} } = dseGroup[0]; + const dseIds = dseGroup.map(dse => getDseId(dse)); + const dataElementCategoryIds = new Set( + toArray(dataElement.categoryCombo.categories).map(cat => cat.id) + ); + const selectableCategories = categories.filter( + category => !dataElementCategoryIds.has(category.id) + ); + const selectedCategories = _.differenceBy( + toArray(categoryCombo.categories), + toArray(dataElement.categoryCombo.categories), + "id" + ); + const categoryOptions = getCategoryOptions( + categoryCombosById[dataElement.categoryCombo.id] + ); + + return ( + +
    + {dseGroup.map(dse => ( +
    {dse.dataElement.displayName}
    + ))} + + {dataElement.categoryCombo.displayName} + +
    + + {canEdit ? ( +
    + onCategoriesSelected(dseIds, categories)} + /> +
    + ) : ( +
    + )} + + ); + }); + + if (dataSetElementsRows.length === 0) { + return ( +
    + {d2.i18n.getTranslation("select_a_data_element_before_applying_an_override")} +
    + ); + } else { + return {dataSetElementsRows}; + } +} + +DataSetElementList.contextTypes = { + d2: PropTypes.object, +}; + +export function DataSetElementCategoryComboSelection(props) { + const { categoryCombos, dataSetElementsGroups, onCategoriesSelected, canEdit } = props; + + return ( +
    + +
    + ); +} + +export default enhance(DataSetElementCategoryComboSelection); diff --git a/src/forms/Dropdown.component.js b/src/forms/Dropdown.component.js new file mode 100644 index 000000000..34819a0cd --- /dev/null +++ b/src/forms/Dropdown.component.js @@ -0,0 +1,226 @@ +import React from "react"; +import PropTypes from "prop-types"; +import SelectField from "material-ui/SelectField/SelectField"; +import TextField from "material-ui/TextField"; +import isString from "d2-utilizr/lib/isString"; +import Dialog from "material-ui/Dialog"; +import FlatButton from "material-ui/FlatButton"; +import MenuItem from "material-ui/MenuItem/MenuItem"; + +class Dropdown extends React.Component { + constructor(props, context) { + super(props, context); + + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + + this._onChange = this._onChange.bind(this); + this.openDialog = this.openDialog.bind(this); + this.closeDialog = this.closeDialog.bind(this); + + this.state = { + value: + this.props.value !== undefined && this.props.value !== null ? this.props.value : "", + options: this.getOptions(this.props.options, this.props.isRequired), + dialogOpen: false, + }; + } + + UNSAFE_componentWillReceiveProps(newProps) { + this.setState({ + // value: this.state.value || ((newProps.defaultValue !== undefined && newProps.defaultValue !== null) ? newProps.defaultValue : ''), + options: this.getOptions(newProps.options, newProps.isRequired), + }); + } + + getOptions(options, _required = false) { + let opts = options.map(option => { + return { + value: option.value, + text: option.text, + }; + }); + + return opts.map(option => { + if (option.text && this.props.translateOptions) { + option.text = isString(option.text) + ? this.getTranslation(option.text.toLowerCase()) + : option.text; + } + return option; + }); + } + + _onChange(event, index, value) { + this.props.onChange({ + target: { + value, + }, + }); + } + + openDialog() { + this.setState({ dialogOpen: true, filterText: "" }); + } + + closeDialog() { + this.setState({ dialogOpen: false }); + } + + getOptionText(value) { + return value && this.state.options.length + ? this.state.options.find(option => option.value === value).text + : ""; + } + + renderDialogOption(value, label) { + return ( +
    { + this.props.onChange({ target: { value: value } }); + this.setState({ dialogOpen: false, value: value }); + }} + > + {label} +
    + ); + } + + render() { + const { + onFocus, + onBlur, + labelText, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + translateOptions, + isRequired, + options, + model, + limit, + fullWidth, + translateLabel, + ...other + } = this.props; + + return this.state.options.length > limit ? ( +
    + , + ]} + > + { + this.setState({ filterText: value }); + }} + style={{ marginBottom: 16 }} + /> + {!this.props.isRequired && + this.renderDialogOption(null, this.getTranslation("no_value"))} + {this.state.options + .filter( + o => + !this.state.filterText || + this.state.filterText + .trim() + .toLocaleLowerCase() + .split(" ") + .every(f => + o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) + ) + ) + .map(o => this.renderDialogOption(o.value, o.text))} + + +
    + open_in_new +
    +
    + ) : ( + + {this.renderOptions()} + + ); + } + + renderOptions() { + const options = this.state.options.map((option, index) => ( + + )); + + if (!this.props.isRequired) { + // When the value is not required we add an item that sets the value to null + // For this value we pass an empty label to not show the label no_value + // when this option is selected. + options.unshift([ + , + ]); + } + + return options; + } +} + +Dropdown.propTypes = { + defaultValue: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.bool, + ]), + onFocus: PropTypes.func, + onBlur: PropTypes.func, + options: PropTypes.array.isRequired, + isRequired: PropTypes.bool, + labelText: PropTypes.string.isRequired, + translateOptions: PropTypes.bool, + limit: PropTypes.number, +}; +Dropdown.defaultProps = { + limit: 50, +}; +Dropdown.contextTypes = { + d2: PropTypes.any, +}; + +export default Dropdown; diff --git a/src/forms/FormHelpers.js b/src/forms/FormHelpers.js new file mode 100644 index 000000000..0705f4ef7 --- /dev/null +++ b/src/forms/FormHelpers.js @@ -0,0 +1,186 @@ +import React from "react"; +import TextField from "d2-ui/lib/form-fields/TextField.js"; +import Dropdown from "./Dropdown.component"; +import RichDropdown from "./RichDropdown.component"; +import CheckBox from "d2-ui/lib/form-fields/CheckBox.component"; +import MultiSelect from "./MultiSelect.component"; +import DateSelect from "./form-fields/date-select"; + +function getLabel(label, isRequired, help = null) { + return label + (help ? ` (${help})` : "") + (isRequired ? " (*)" : ""); +} + +function getTextField({ + name, + label, + value = "", + isRequired = false, + multiLine = false, + type = "string", + help = null, + validators = [], + asyncValidators = [], +}) { + return { + name: name, + value: value !== null && value !== undefined ? value.toString() : "", + component: TextField, + validators: validators, + asyncValidators: asyncValidators, + props: { + type: type, + multiLine: multiLine, + style: { width: "100%" }, + changeEvent: "onBlur", + floatingLabelText: getLabel(label, isRequired, help), + }, + }; +} + +function getSelectField({ name, label, options, value = undefined, isRequired = false }) { + return { + name: name, + component: Dropdown, + value: value, + props: { + options: options, + isRequired: isRequired, + labelText: getLabel(label, isRequired), + style: { width: "100%" }, + }, + }; +} + +function getRichSelectField({ + name, + label, + options, + filterOptions, + value = undefined, + isRequired = false, + controls = [], + description = undefined, + validators = [], + asyncValidators = [], +}) { + return { + name: name, + component: ({ description, ...otherProps }) => { + return ( +
    + {description ?

    {description}:

    : null} + +
    + ); + }, + value: value, + validators: validators, + asyncValidators: asyncValidators, + props: { + options: options, + filterOptions: filterOptions, + isRequired: isRequired, + labelText: getLabel(label, isRequired), + style: { width: "30%" }, + description: description, + controls: controls, + }, + }; +} + +function getBooleanField({ name, label, onChange, value = false, style }) { + return { + name: name, + component: CheckBox, + value: value, + props: { + checked: value, + label: getLabel(label), + onCheck: (ev, newValue) => onChange(name, newValue), + style, + }, + }; +} + +function getMultiSelect({ name, label, onChange, options = [], selected = [], errors = [] }) { + return { + name: name, + component: MultiSelect, + props: { + options: options, + onChange: onChange, + label: label, + selected: selected, + errors: errors, + }, + }; +} + +function getFormLabel({ value, forSection, style }) { + return { + name: forSection ? `${value}_${forSection}` : value, + component: FormLabel, + props: { + value, + style: { fontSize: 16, marginTop: 16, marginBottom: -15, ...style }, + }, + }; +} + +function getDateField({ + name, + label, + value = undefined, + isRequired = false, + disabled = false, + validators = undefined, + minDate = undefined, + maxDate = undefined, + wrapStyle = undefined, +}) { + return { + name: name, + component: DateSelect, + value: value ? new Date(value) : undefined, + validators: validators, + props: { + wrapStyle, + labelText: getLabel(label, isRequired), + changeEvent: "onChange", + fullWidth: false, + disabled, + minDate, + maxDate, + }, + }; +} + +function SimpleCheckBox({ onClick, checked, ...otherProps }) { + return ( + + + + + ); +} + +function FormLabel({ value, style }) { + return
    {value}
    ; +} + +function separator(name) { + return { name, component: () => null, props: { wrapStyle: { clear: "both" } } }; +} + +export default { + getLabel, + getTextField, + getSelectField, + getRichSelectField, + getBooleanField, + getMultiSelect, + getDateField, + SimpleCheckBox, + getFormLabel, + separator, +}; diff --git a/src/forms/GreyFieldsTable.component.js b/src/forms/GreyFieldsTable.component.js new file mode 100644 index 000000000..11d0e6088 --- /dev/null +++ b/src/forms/GreyFieldsTable.component.js @@ -0,0 +1,410 @@ +import React from "react"; +import PropTypes from "prop-types"; +import DropDown from "../forms/form-fields/drop-down"; +import LinearProgress from "material-ui/LinearProgress/LinearProgress"; +import { getCategoryCombos, getCategoryCombo } from "../utils/Dhis2Helpers"; +import FormHelpers from "./FormHelpers"; +import _ from "../utils/lodash-mixins"; + +const { SimpleCheckBox } = FormHelpers; + +const styles = { + table: { + borderSpacing: 0, + borderCollapse: "collapse", + margin: "5px 0px", + }, + th: { + whiteSpace: "nowrap", + textAlign: "center", + border: "1px solid #e0e0e0", + padding: 6, + }, + thDataElements: { + whiteSpace: "nowrap", + border: "1px solid #e0e0e0", + background: "#f0f0f0", + textAlign: "left", + padding: 6, + }, + td: { + whiteSpace: "nowrap", + padding: 2, + border: "1px solid #e0e0e0", + textAlign: "center", + }, + tdDataElement: { + whiteSpace: "nowrap", + padding: 6, + border: "1px solid #e0e0e0", + maxWidth: "33vw", + overflow: "hidden", + textOverflow: "ellipsis", + }, +}; + +// Return the key to use in structure cocByCategoryKey +const getKey = (categoryCombo, categoryOptions) => { + // categoryOptionCombo.categoryOptions holds non-repeated IDs, in any order + const sortedUniqueIds = _(categoryOptions) + .map("id") + .orderBy() + .uniq() + .value(); + return [categoryCombo.id, ...sortedUniqueIds].join("."); +}; + +class GreyFieldsTable extends React.Component { + constructor(props, context) { + super(props, context); + + this.state = { + loaded: false, + categories: [], + categoryCombos: null, + currentSection: null, + currentCategoryCombo: null, + }; + + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + } + + componentDidMount() { + const d2 = this.context.d2; + const cocFields = "id,categoryOptions[id]"; + + const categoryComboIds = _(this.props.dataSet.dataSetElements) + .map(dse => getCategoryCombo(dse).id) + .uniq() + .value(); + const options = { cocFields, filterIds: categoryComboIds }; + + getCategoryCombos(d2, options).then(persistedCategoryCombos => { + const categoryCombosById = _(this.props.dataSet.dataSetElements) + .map(dse => getCategoryCombo(dse)) + .keyBy("id") + .merge(_.keyBy(persistedCategoryCombos.toArray(), "id")) + .value(); + + // greyedFields: {"dataElementId.categoryOptionComboId": true | false} + const greyedFields = _(this._sectionsMap(section => section.greyedFields)) + .map(gf => [gf.dataElement, gf.categoryOptionCombo].map(o => o.id).join(".")) + .map(fieldId => [fieldId, true]) + .fromPairs() + .value(); + const cocByCategoryKey = _(categoryCombosById) + .values() + .flatMap(cc => + cc.categoryOptionCombos + .toArray() + .map(coc => [getKey(cc, coc.categoryOptions.toArray()), coc]) + ) + .fromPairs() + .value(); + + this.setState({ + loaded: true, + categoryCombosById, + cocByCategoryKey, + greyedFields, + }); + }); + } + + _getGreyedFieldsBySections() { + const { sections } = this.props; + const ids = _(this.state.greyedFields) + .map((v, k) => (v ? k : null)) + .compact() + .value(); + const greyedFields = ids.map(id => { + const [dataElementId, cocId] = id.split("."); + return { + dataElement: { id: dataElementId }, + categoryOptionCombo: { id: cocId }, + }; + }); + const greyedFieldsByDataElementId = _(greyedFields) + .groupBy(field => field.dataElement.id) + .value(); + return sections.map(section => { + const dataElementIds = section.dataElements.toArray().map(de => de.id); + return _(greyedFieldsByDataElementId) + .at(dataElementIds) + .flatten() + .compact() + .value(); + }); + } + + componentWillUnmount() { + if (this.props.onClose && this.state.loaded) { + this.props.onClose(this._getGreyedFieldsBySections()); + } + } + + _renderHeaderCheckBox(label, dataSetElements, categoryOptionCombos) { + const fieldIds = _(dataSetElements) + .cartesianProduct(categoryOptionCombos) + .flatMap(([dse, coc]) => [dse.dataElement.id, coc.id].join(".")) + .value(); + const allFieldsInColumnAreSelected = _(this.state.greyedFields) + .at(fieldIds) + .every(v => !v); + const toggleAll = () => { + const updatedGreyedFields = _(fieldIds) + .map(fieldId => [fieldId, allFieldsInColumnAreSelected]) + .fromPairs() + .value(); + this.setState({ + greyedFields: _.merge(this.state.greyedFields, updatedGreyedFields), + }); + }; + + return ( +
    + {(dataSetElements.length > 1 || categoryOptionCombos.length > 1) && ( + + )} + {label === "default" ? "" : label} +
    + ); + } + + _getCategoryOptionCombos(categoryComboId) { + const categoryCombo = this.state.categoryCombosById[categoryComboId]; + const categories = categoryCombo.categories.toArray(); + const categoryOptions = categories.map(c => c.categoryOptions.toArray()); + return _.cartesianProduct(...categoryOptions); + } + + renderTableHeader(dataSetElements, categoryCombo, categoryOptionCombos) { + const nCategories = categoryOptionCombos[0].length; + const rows = _.range(nCategories).map(idx => { + return _(categoryOptionCombos) + .groupConsecutiveBy(product => product.slice(0, idx + 1)) + .map(consecutiveProducts => { + const cocs = consecutiveProducts + .map(cos => getKey(categoryCombo, cos)) + .map(key => this.state.cocByCategoryKey[key]); + return { + label: consecutiveProducts[0][idx].displayName, + cocs: _.compact(cocs), + }; + }) + .value(); + }); + + return rows.map((row, rowNum) => { + const isLastHeader = rowNum === rows.length - 1; + + return ( + + + {isLastHeader && this.getTranslation("data_element")} + + + {row.map(({ label, cocs }, colNum) => ( + + {this._renderHeaderCheckBox(label, dataSetElements, cocs)} + + ))} + + ); + }); + } + + renderCheckbox(dataSetElement, categoryOptions) { + const { dataElement } = dataSetElement; + const key = getKey(getCategoryCombo(dataSetElement), categoryOptions); + const categoryOptionCombo = this.state.cocByCategoryKey[key]; + if (!dataElement || !categoryOptionCombo) return; + + const fieldId = [dataElement.id, categoryOptionCombo.id].join("."); + const isGreyed = !!this.state.greyedFields[fieldId]; + const toggleBoggle = () => { + this.setState({ + greyedFields: _.merge(this.state.greyedFields, { [fieldId]: !isGreyed }), + }); + }; + + return ( + + + + ); + } + + _getDataSetElements(categoryComboId) { + const categoryCombo = this.state.categoryCombosById[categoryComboId]; + const currentSectionDataElementIds = this._sectionsMap(section => + section.dataElements.toArray().map(de => de.id) + ); + + return this.props.dataSet.dataSetElements + .filter(dse => currentSectionDataElementIds.includes(dse.dataElement.id)) + .filter(dse => getCategoryCombo(dse).id === categoryCombo.id) + .sort( + (a, b) => + currentSectionDataElementIds.indexOf(a.dataElement.id) - + currentSectionDataElementIds.indexOf(b.dataElement.id) + ); + } + + renderDataElements(dataSetElements, categoryOptionCombos) { + return dataSetElements.map((dse, deNum) => { + return ( + + + {dse.dataElement.displayName} + + {categoryOptionCombos.map(cos => this.renderCheckbox(dse, cos))} + + ); + }); + } + + _sectionsMap(sectionMapper) { + const { currentSection } = this.state; + const sections = currentSection ? [currentSection] : this.props.sections; + return _.flatMap(sections, sectionMapper); + } + + _getCategoryComboLabel(categoryCombo) { + if (categoryCombo) { + return categoryCombo.displayName === "default" + ? this.getTranslation("none") + : categoryCombo.displayName; + } else { + return ""; + } + } + + _renderForm() { + const { currentCategoryCombo } = this.state; + const sectionDataElementIds = new Set( + this._sectionsMap(section => section.dataElements.toArray().map(de => de.id)) + ); + const categoryCombosForVisibleSections = _(this.props.dataSet.dataSetElements) + .filter(dse => sectionDataElementIds.has(dse.dataElement.id)) + .map(dse => getCategoryCombo(dse)) + .uniqBy("id") + .sortBy("displayName") + .value(); + + const categoryCombosToShow = currentCategoryCombo + ? [currentCategoryCombo] + : categoryCombosForVisibleSections; + + const renderTable = (categoryCombo, cocs) => { + const dataSetElements = this._getDataSetElements(categoryCombo.id); + const key = [categoryCombo, ..._.flatten(cocs)].map(x => x.id).join("-"); + + return ( + + + {this.renderTableHeader(dataSetElements, categoryCombo, cocs)} + {this.renderDataElements(dataSetElements, cocs)} + +
    + ); + }; + + const renderTablesForCocs = (categoryCombo, cocs, categoryIndex) => { + const nCategories = cocs[0].length; + if (cocs.length <= 12 || categoryIndex >= nCategories - 1) { + return renderTable(categoryCombo, cocs); + } else { + const tables = _(cocs) + .groupConsecutiveBy(cos => cos.slice(0, categoryIndex + 1)) + .flatMap(splitCocs => + renderTablesForCocs(categoryCombo, splitCocs, categoryIndex + 1) + ) + .value(); + const key = + categoryCombo.id + + _(cocs) + .flatten() + .map("id") + .join(""); + return
    {tables}
    ; + } + }; + + const renderTables = categoryCombo => { + const cocs = this._getCategoryOptionCombos(categoryCombo.id); + return ( +
    +

    {this._getCategoryComboLabel(categoryCombo)}

    + {renderTablesForCocs(categoryCombo, cocs, 0)} +
    + ); + }; + + const changeSection = ev => { + this.setState({ + currentSection: _(this.props.sections) + .keyBy("name") + .get(ev.target.value), + currentCategoryCombo: null, + }); + }; + + const changeCategoryCombo = ev => { + this.setState({ + currentCategoryCombo: _(categoryCombosForVisibleSections) + .keyBy("id") + .get(ev.target.value), + }); + }; + + return ( +
    + ({ + value: section.name, + text: section.name.replace("@", "->"), + }))} + labelText={this.getTranslation("section")} + value={this.state.currentSection && this.state.currentSection.name} + onChange={changeSection} + style={{ width: "33%", marginRight: 20 }} + /> + + ({ + value: cc.id, + text: cc.displayName, + }))} + labelText={this.getTranslation("category_combo")} + value={currentCategoryCombo && currentCategoryCombo.id} + onChange={changeCategoryCombo} + style={{ width: "33%" }} + /> + + {categoryCombosToShow.map(categoryCombo => renderTables(categoryCombo))} +
    + ); + } + + render() { + if (this.state.loaded) { + return this._renderForm(); + } else { + return ; + } + } +} + +GreyFieldsTable.contextTypes = { d2: PropTypes.any.isRequired }; + +GreyFieldsTable.propTypes = { + sections: PropTypes.any.isRequired, + dataSet: PropTypes.any.isRequired, + onClose: PropTypes.func, +}; + +export default GreyFieldsTable; diff --git a/src/forms/MultiSelect.component.js b/src/forms/MultiSelect.component.js new file mode 100644 index 000000000..44d7945a4 --- /dev/null +++ b/src/forms/MultiSelect.component.js @@ -0,0 +1,88 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import _ from "lodash"; +import Store from "d2-ui/lib/store/Store"; +import GroupEditor from "d2-ui/lib/group-editor/GroupEditor.component"; + +const MultiSelect = createReactClass({ + propTypes: { + options: PropTypes.arrayOf(PropTypes.object), + selected: PropTypes.arrayOf(PropTypes.string), + onChange: PropTypes.func.isRequired, + label: PropTypes.string, + errors: PropTypes.arrayOf(PropTypes.string), + }, + + getInitialState() { + const availableStore = Store.create(); + const assignedStore = Store.create(); + availableStore.setState(this.props.options); + assignedStore.setState(this.props.selected); + return { availableStore, assignedStore }; + }, + + UNSAFE_componentWillReceiveProps(nextProps) { + this.state.availableStore.setState(nextProps.options); + this.state.assignedStore.setState(nextProps.selected); + }, + + getDefaultProps() { + return { height: 300, options: [], selected: [] }; + }, + + _onItemAssigned(newItems) { + const assigned = this.state.assignedStore.state.concat(newItems); + this.state.assignedStore.setState(assigned); + this.props.onChange(assigned); + return Promise.resolve(); + }, + + _onItemRemoved(removedItems) { + const assigned = _.difference(this.state.assignedStore.state, removedItems); + this.state.assignedStore.setState(assigned); + this.props.onChange(assigned); + return Promise.resolve(); + }, + + render() { + const styles = { + labelStyle: { + display: "block", + width: "calc(100% - 60px)", + lineHeight: "24px", + color: "rgba(0,0,0,0.3)", + marginTop: "1rem", + fontSize: 16, + }, + errorStyle: { + color: "red", + }, + }; + const { errors, label, ...otherProps } = this.props; + + return ( +
    + + +
    + {(errors || []).map((error, idx) => ( +

    + {error} +

    + ))} +
    + + +
    + ); + }, +}); + +export default MultiSelect; diff --git a/src/forms/RichDropdown.component.js b/src/forms/RichDropdown.component.js new file mode 100644 index 000000000..9c3f890cf --- /dev/null +++ b/src/forms/RichDropdown.component.js @@ -0,0 +1,244 @@ +import React from "react"; +import PropTypes from "prop-types"; +import _ from "lodash"; +import TextField from "material-ui/TextField"; +import isString from "d2-utilizr/lib/isString"; +import Dialog from "material-ui/Dialog"; +import FlatButton from "material-ui/FlatButton"; +import MenuItem from "material-ui/MenuItem/MenuItem"; +import CheckBox from "d2-ui/lib/form-fields/CheckBox.component"; + +class RichDropdown extends React.Component { + constructor(props, context) { + super(props, context); + + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + + this._onChange = this._onChange.bind(this); + this.openDialog = this.openDialog.bind(this); + this.closeDialog = this.closeDialog.bind(this); + const initialControls = _(this.props.controls) + .map(c => [c.name, c.value]) + .fromPairs() + .value(); + + this.state = { + value: + this.props.value !== undefined && this.props.value !== null ? this.props.value : "", + controls: initialControls, + options: this.getOptions(this.props.options, this.props.isRequired), + dialogOpen: false, + }; + } + + UNSAFE_componentWillReceiveProps(newProps) { + const controls = _(newProps.controls) + .map(c => [c.name, c.value]) + .fromPairs() + .value(); + this.setState({ + controls: controls, + options: this.getOptions(newProps.options, newProps.isRequired), + }); + } + + getOptions(options, _required = false) { + let opts = options.map(option => { + return { + value: option.value, + text: option.text, + }; + }); + + return opts.map(option => { + if (option.text && this.props.translateOptions) { + option.text = isString(option.text) + ? this.getTranslation(option.text.toLowerCase()) + : option.text; + } + return option; + }); + } + + _onChange(event, index, value) { + this.props.onChange({ + target: { + value, + }, + }); + } + + openDialog() { + this.setState({ dialogOpen: true, filterText: "" }); + } + + closeDialog() { + this.setState({ dialogOpen: false }); + } + + getOptionText(value) { + return value && this.state.options.length + ? this.state.options.find(option => option.value === value).text + : ""; + } + + renderDialogOption(value, label) { + return ( +
    { + this.props.onChange({ target: { value: value } }); + this.setState({ dialogOpen: false, value: value }); + }} + > + {label} +
    + ); + } + + render() { + const { + onFocus, + onBlur, + labelText, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + translateOptions, + isRequired, + options, + filterOptions, + model, + fullWidth, + translateLabel, + ...other + } = this.props; + + return ( +
    + , + ]} + > + {this.props.controls.map(control => ( + + this.setState({ + controls: _.merge(this.state.controls, { + [control.name]: !this.state.controls[control.name], + }), + }) + } + /> + ))} + { + this.setState({ filterText: value }); + }} + style={{ marginBottom: 5, marginTop: -25 }} + /> + {!this.props.isRequired && + this.renderDialogOption(null, this.getTranslation("no_value"))} + {this.props + .filterOptions(this.state.options, this.state.controls) + .filter( + o => + !this.state.filterText || + this.state.filterText + .trim() + .toLocaleLowerCase() + .split(" ") + .every(f => + o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) + ) + ) + .map(o => this.renderDialogOption(o.value, o.text))} + + +
    + open_in_new +
    +
    + ); + } + + renderOptions() { + const options = this.state.options.map((option, index) => ( + + )); + + if (!this.props.isRequired) { + // When the value is not required we add an item that sets the value to null + // For this value we pass an empty label to not show the label no_value + // when this option is selected. + options.unshift([ + , + ]); + } + + return options; + } +} + +RichDropdown.propTypes = { + defaultValue: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.bool, + ]), + onFocus: PropTypes.func, + onBlur: PropTypes.func, + options: PropTypes.array.isRequired, + isRequired: PropTypes.bool, + labelText: PropTypes.string.isRequired, + translateOptions: PropTypes.bool, + filterOptions: PropTypes.func, + controls: PropTypes.array, +}; +RichDropdown.defaultProps = { + controls: [], + filterOptions: (options, _controls) => options, +}; +RichDropdown.contextTypes = { + d2: PropTypes.any, +}; + +export default RichDropdown; diff --git a/src/forms/TimePeriodSelector.component.js b/src/forms/TimePeriodSelector.component.js new file mode 100644 index 000000000..a1ec42e4f --- /dev/null +++ b/src/forms/TimePeriodSelector.component.js @@ -0,0 +1,90 @@ +import React from "react"; +import PropTypes from "prop-types"; +import SelectField from "material-ui/SelectField/SelectField"; +import TextField from "material-ui/TextField"; +import MenuItem from "material-ui/MenuItem/MenuItem"; + +class TimePeriodSelector extends React.Component { + constructor(props, context) { + super(props, context); + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + this.unitsOptions = this.getUnitsOptions(); + } + + onUnitChange = (event, index, value) => { + const newValue = { ...this.props.value, units: value }; + this.notifyChange(newValue); + }; + + onValueChange = (event, value) => { + const newValue = { ...this.props.value, value: parseInt(value) }; + this.notifyChange(newValue); + }; + + getUnitsOptions() { + return ["day", "week", "month"].map(key => ({ + text: this.getTranslation(key), + value: key, + })); + } + + notifyChange(value) { + this.props.onChange({ target: { value } }); + } + + render() { + const { labelText, value } = this.props; + + return ( +
    + + + + {this.renderOptions(this.unitsOptions)} + +
    + ); + } + + renderOptions(options) { + return options.map((option, index) => ( + + )); + } +} + +TimePeriodSelector.propTypes = { + value: PropTypes.shape({ + units: PropTypes.oneOf(["day", "week", "month"]), + value: PropTypes.number, + }).isRequired, + labelText: PropTypes.string.isRequired, +}; + +TimePeriodSelector.contextTypes = { + d2: PropTypes.any, +}; + +const styles = { + wrapper: { display: "flex" }, + value: { marginRight: 20, width: "28em" }, + unitsSelector: {}, +}; + +export default TimePeriodSelector; diff --git a/src/forms/YearlyDateSelector.component.js b/src/forms/YearlyDateSelector.component.js new file mode 100644 index 000000000..1f9ed6527 --- /dev/null +++ b/src/forms/YearlyDateSelector.component.js @@ -0,0 +1,102 @@ +import React from "react"; +import _ from "lodash"; +import moment from "moment"; +import PropTypes from "prop-types"; +import SelectField from "material-ui/SelectField/SelectField"; +import MenuItem from "material-ui/MenuItem/MenuItem"; + +const daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + +class YearlyDateSelector extends React.Component { + constructor(props, context) { + super(props, context); + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + this.monthOptions = this.getMonthOptions(); + } + + onMonthChange = (event, index, value) => { + const newValue = { month: value, day: 1 }; + this.notifyChange(newValue); + }; + + onDayChange = (event, index, value) => { + const newValue = { ...this.props.value, day: value }; + this.notifyChange(newValue); + }; + + getDayOptionsForMonth(month) { + return month && _.has(daysInMonths, month) + ? _(1) + .range(daysInMonths[month - 1] + 1) + .map(ndays => ({ text: ndays, value: ndays })) + .value() + : []; + } + + getMonthOptions() { + return moment + .localeData("en") + .monthsShort() + .map(shortName => this.getTranslation(shortName.toLowerCase())) + .map((name, index) => ({ text: name, value: index + 1 })); + } + + notifyChange(value) { + this.props.onChange({ target: { value } }); + } + + render() { + const { labelText, value } = this.props; + const dayOptions = this.getDayOptionsForMonth(value.month); + + return ( +
    + + {this.renderOptions(this.monthOptions)} + + + + {this.renderOptions(dayOptions)} + +
    + ); + } + + renderOptions(options) { + return options.map((option, index) => ( + + )); + } +} + +YearlyDateSelector.propTypes = { + value: PropTypes.shape({ + month: PropTypes.number, + day: PropTypes.number, + }).isRequired, + labelText: PropTypes.string.isRequired, +}; + +YearlyDateSelector.contextTypes = { + d2: PropTypes.any, +}; + +const styles = { + monthSelector: { marginRight: 20 }, +}; + +export default YearlyDateSelector; diff --git a/src/forms/form-fields/check-box.js b/src/forms/form-fields/check-box.js new file mode 100644 index 000000000..0245632a5 --- /dev/null +++ b/src/forms/form-fields/check-box.js @@ -0,0 +1,57 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import Checkbox from "material-ui/Checkbox/Checkbox"; + +function isTrueOrTheStringTrue(value) { + return value === true || value === "true"; +} + +export default createReactClass({ + propTypes: { + onChange: PropTypes.func.isRequired, + labelText: PropTypes.string.isRequired, + value: PropTypes.bool, + }, + + render() { + // Do not pass the value on to the CheckBox component + const { + value, + errorStyle, + errorText, + labelText, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + multiLine, + fullWidth, + translateOptions, + isRequired, + options, + model, + ...otherProps + } = this.props; + + return ( +
    + +
    + ); + }, + + _onClick() { + this.props.onChange({ + target: { + value: !isTrueOrTheStringTrue(this.props.value), + }, + }); + }, +}); diff --git a/src/forms/form-fields/date-select.js b/src/forms/form-fields/date-select.js new file mode 100644 index 000000000..41490bdfa --- /dev/null +++ b/src/forms/form-fields/date-select.js @@ -0,0 +1,108 @@ +import React from "react"; +import createReactClass from "create-react-class"; +import PropTypes from "prop-types"; +import DatePicker from "material-ui/DatePicker/DatePicker"; +import IconButton from "material-ui/IconButton/IconButton"; + +const DateSelect = createReactClass({ + propTypes: { + value: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), + labelText: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + disabled: PropTypes.bool, + defaultDate: PropTypes.object, + minDate: PropTypes.object, + maxDate: PropTypes.object, + }, + + renderDatePicker() { + const { + labelText, + referenceType, + referenceProperty, + isInteger, + translateOptions, + isRequired, + options, + model, + models, + modelDefinition, + disabled, + defaultDate, + minDate, + maxDate, + value, + ...other + } = this.props; + + // Set an empty object instead of undefined for the no-value case, otherwise the component + // assumes it's being used in un-controlled state and does not react properly to changes + const valueProp = value ? new Date(value) : {}; + + return ( + + ); + }, + + render() { + const styles = { + closeButton: { + position: "absolute", + right: "-16px", + top: "28px", + zIndex: 1, + }, + closeIcon: { + color: "#888888", + }, + }; + + return ( +
    + {!this.props.isRequired && + this.props.value !== undefined && + this.props.value !== "" && + !this.props.disabled ? ( + + close + + ) : null} + {this.renderDatePicker()} +
    + ); + }, + + _clearDate() { + this._onDateSelect(undefined, ""); + }, + + _onDateSelect(event, date) { + this.props.onChange({ + target: { + value: date, + }, + }); + }, +}); + +DateSelect.defaultProps = { + disabled: false, +}; + +export default DateSelect; diff --git a/src/forms/form-fields/drop-down-async.js b/src/forms/form-fields/drop-down-async.js new file mode 100644 index 000000000..1cbc4ddbc --- /dev/null +++ b/src/forms/form-fields/drop-down-async.js @@ -0,0 +1,190 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import DropDown from "./drop-down"; +import { getInstance } from "d2/lib/d2"; +import QuickAddLink from "./helpers/QuickAddLink.component"; +import RefreshMask from "./helpers/RefreshMask.component"; + +export default createReactClass({ + propTypes: { + referenceType: PropTypes.string.isRequired, + value: PropTypes.shape({ + id: PropTypes.string.isRequired, + }), + onChange: PropTypes.func.isRequired, + }, + + getInitialState() { + return { + options: [], + isRefreshing: false, + }; + }, + + loadOptions() { + const fieldsForReferenceType = + this.props.referenceType === "optionSet" + ? "id,displayName,name,valueType" + : "id,displayName,name"; + const filter = this.props.queryParamFilter; + + return getInstance() + .then(d2 => + d2.models[this.props.referenceType].list( + Object.assign( + { + fields: fieldsForReferenceType, + paging: false, + filter, + }, + filter && filter.length > 1 + ? { + rootJunction: "OR", + } + : {} + ) + ) + ) + .then(modelCollection => modelCollection.toArray()) + .then(values => + values.map(model => { + return { + text: model.displayName, + value: model.id, + model: model, + }; + }) + ) + .then(options => { + this.setState( + { + // TODO: Behold the very special hack for renaming the very special 'default' cat combo to 'None' + options: options.map(option => + Object.assign( + option, + option.model && + option.model.modelDefinition && + option.model.modelDefinition.name === "categoryCombo" && + option.text === "default" + ? { text: "None" } + : {} + ) + ), + }, + () => { + // TODO: Hack to default categoryCombo to 'default' + const defaultOption = this.state.options.find(option => { + return option.model.name === "default"; + }); + + if (!this.props.value && defaultOption) { + this.props.onChange({ + target: { + value: defaultOption.model, + }, + }); + } + + this.forceUpdate(); + } + ); + }); + }, + + componentDidMount() { + this.loadOptions(); + }, + + // TODO: Remove this hack to update the categoryCombo property when the domainType is set to TRACKER + // This should probably be done in the objectActions, however there we currently do not have any knowledge of the options + // It might be worth loading the categoryOption with name `default` just for this. + UNSAFE_componentWillReceiveProps(newProps) { + const defaultOption = this.state.options.find(option => { + return option.model.name === "default"; + }); + + if ( + newProps.value && + defaultOption && + defaultOption.model.id !== newProps.value.id && + this.props.model.domainType === "TRACKER" + ) { + this.props.onChange({ + target: { + value: defaultOption.model, + }, + }); + } + }, + + render() { + const { + errorStyle, + errorText, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + multiLine, + fullWidth, + translateOptions, + options, + model, + queryParamFilter, + ...other + } = this.props; + const styles = { + wrap: { + display: "flex", + alignItems: "flex-end", + }, + }; + + return ( +
    + {this.state.isRefreshing ? : null} + + +
    + ); + }, + + _onRefreshClick() { + this.setState({ + isRefreshing: true, + }); + + this.loadOptions().then(() => this.setState({ isRefreshing: false })); + }, + + _onChange(event) { + if (event.target.value === null) { + this.props.onChange({ + target: { + value: null, + }, + }); + return; + } + + const option = this.state.options.find(opt => opt.model.id === event.target.value); + if (option && option.model) { + this.props.onChange({ + target: { + value: option.model, + }, + }); + } + }, +}); diff --git a/src/forms/form-fields/drop-down.js b/src/forms/form-fields/drop-down.js new file mode 100644 index 000000000..34819a0cd --- /dev/null +++ b/src/forms/form-fields/drop-down.js @@ -0,0 +1,226 @@ +import React from "react"; +import PropTypes from "prop-types"; +import SelectField from "material-ui/SelectField/SelectField"; +import TextField from "material-ui/TextField"; +import isString from "d2-utilizr/lib/isString"; +import Dialog from "material-ui/Dialog"; +import FlatButton from "material-ui/FlatButton"; +import MenuItem from "material-ui/MenuItem/MenuItem"; + +class Dropdown extends React.Component { + constructor(props, context) { + super(props, context); + + this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); + + this._onChange = this._onChange.bind(this); + this.openDialog = this.openDialog.bind(this); + this.closeDialog = this.closeDialog.bind(this); + + this.state = { + value: + this.props.value !== undefined && this.props.value !== null ? this.props.value : "", + options: this.getOptions(this.props.options, this.props.isRequired), + dialogOpen: false, + }; + } + + UNSAFE_componentWillReceiveProps(newProps) { + this.setState({ + // value: this.state.value || ((newProps.defaultValue !== undefined && newProps.defaultValue !== null) ? newProps.defaultValue : ''), + options: this.getOptions(newProps.options, newProps.isRequired), + }); + } + + getOptions(options, _required = false) { + let opts = options.map(option => { + return { + value: option.value, + text: option.text, + }; + }); + + return opts.map(option => { + if (option.text && this.props.translateOptions) { + option.text = isString(option.text) + ? this.getTranslation(option.text.toLowerCase()) + : option.text; + } + return option; + }); + } + + _onChange(event, index, value) { + this.props.onChange({ + target: { + value, + }, + }); + } + + openDialog() { + this.setState({ dialogOpen: true, filterText: "" }); + } + + closeDialog() { + this.setState({ dialogOpen: false }); + } + + getOptionText(value) { + return value && this.state.options.length + ? this.state.options.find(option => option.value === value).text + : ""; + } + + renderDialogOption(value, label) { + return ( +
    { + this.props.onChange({ target: { value: value } }); + this.setState({ dialogOpen: false, value: value }); + }} + > + {label} +
    + ); + } + + render() { + const { + onFocus, + onBlur, + labelText, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + translateOptions, + isRequired, + options, + model, + limit, + fullWidth, + translateLabel, + ...other + } = this.props; + + return this.state.options.length > limit ? ( +
    + , + ]} + > + { + this.setState({ filterText: value }); + }} + style={{ marginBottom: 16 }} + /> + {!this.props.isRequired && + this.renderDialogOption(null, this.getTranslation("no_value"))} + {this.state.options + .filter( + o => + !this.state.filterText || + this.state.filterText + .trim() + .toLocaleLowerCase() + .split(" ") + .every(f => + o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) + ) + ) + .map(o => this.renderDialogOption(o.value, o.text))} + + +
    + open_in_new +
    +
    + ) : ( + + {this.renderOptions()} + + ); + } + + renderOptions() { + const options = this.state.options.map((option, index) => ( + + )); + + if (!this.props.isRequired) { + // When the value is not required we add an item that sets the value to null + // For this value we pass an empty label to not show the label no_value + // when this option is selected. + options.unshift([ + , + ]); + } + + return options; + } +} + +Dropdown.propTypes = { + defaultValue: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.number, + PropTypes.bool, + ]), + onFocus: PropTypes.func, + onBlur: PropTypes.func, + options: PropTypes.array.isRequired, + isRequired: PropTypes.bool, + labelText: PropTypes.string.isRequired, + translateOptions: PropTypes.bool, + limit: PropTypes.number, +}; +Dropdown.defaultProps = { + limit: 50, +}; +Dropdown.contextTypes = { + d2: PropTypes.any, +}; + +export default Dropdown; diff --git a/src/forms/form-fields/helpers/QuickAddLink.component.js b/src/forms/form-fields/helpers/QuickAddLink.component.js new file mode 100644 index 000000000..bf35cc3f3 --- /dev/null +++ b/src/forms/form-fields/helpers/QuickAddLink.component.js @@ -0,0 +1,46 @@ +import React from "react"; +import IconButton from "material-ui/IconButton/IconButton"; +import AddCircleOutlineIcon from "material-ui/svg-icons/content/add-circle-outline"; +import RefreshIcon from "material-ui/svg-icons/navigation/refresh"; +import { getSectionForType } from "../../../config/maintenance-models"; +import { Link } from "react-router"; + +export default function QuickAddLink(props) { + const { referenceType, onRefreshClick } = props; + + const sectionForReferenceType = getSectionForType(referenceType); + + const styles = { + quickAddWrap: { + display: "flex", + }, + hidden: { + display: "none", + }, + }; + + if (!sectionForReferenceType) { + return
    ; + } + + return ( +
    + + + + + + + + +
    + ); +} diff --git a/src/forms/form-fields/helpers/RefreshMask.component.js b/src/forms/form-fields/helpers/RefreshMask.component.js new file mode 100644 index 000000000..d1a4883e7 --- /dev/null +++ b/src/forms/form-fields/helpers/RefreshMask.component.js @@ -0,0 +1,31 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { CircularProgress } from "@material-ui/core"; + +export default function RefreshMask({ horizontal }, { d2 }) { + const styles = { + fieldMask: { + position: "absolute", + zIndex: 1000, + backgroundColor: "rgba(0, 0, 0, 0.2)", + top: 0, + bottom: 0, + left: 0, + right: 0, + display: "flex", + alignItems: "center", + justifyContent: "center", + flexDirection: horizontal ? "row" : "column", + }, + }; + + return ( +
    + +
    {d2.i18n.getTranslation("reloading_available_values")}
    +
    + ); +} +RefreshMask.contextTypes = { + d2: PropTypes.object, +}; diff --git a/src/forms/form-fields/icon-picker.js b/src/forms/form-fields/icon-picker.js new file mode 100644 index 000000000..d3cf7ef88 --- /dev/null +++ b/src/forms/form-fields/icon-picker.js @@ -0,0 +1,20 @@ +import React from "react"; +import IconPicker from "d2-ui/lib/icon-picker/IconPicker.component"; + +export default function IconPickerField(props) { + function transformChange(value) { + props.onChange({ + target: { + value, + }, + }); + } + + const { options, ...otherProps } = props; + + const iconPickerOptions = options.map(option => option.value); + + return ; +} + +IconPickerField.propTypes = IconPicker.propTypes; diff --git a/src/forms/form-fields/multi-select.js b/src/forms/form-fields/multi-select.js new file mode 100644 index 000000000..50ffe6c5c --- /dev/null +++ b/src/forms/form-fields/multi-select.js @@ -0,0 +1,373 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; +import Store from "d2-ui/lib/store/Store"; +import { getInstance } from "d2/lib/d2"; +import GroupEditor from "d2-ui/lib/group-editor/GroupEditor.component"; +import GroupEditorWithOrdering from "d2-ui/lib/group-editor/GroupEditorWithOrdering.component"; +import Action from "d2-ui/lib/action/Action"; +import Translate from "d2-ui/lib/i18n/Translate.mixin"; +import TextField from "material-ui/TextField/TextField"; +import log from "loglevel"; +import QuickAddLink from "./helpers/QuickAddLink.component"; +import RefreshMask from "./helpers/RefreshMask.component"; + +export const multiSelectActions = Action.createActionsFromNames([ + "addItemsToModelCollection", + "removeItemsFromModelCollection", +]); + +function unique(values) { + return Array.from(new Set(values).values()); +} + +function filterModelsMapOnItemIds(map, items) { + return Array.from(map.values()).filter(model => items.indexOf(model.id) !== -1); +} + +multiSelectActions.addItemsToModelCollection.subscribe(({ data, complete, error }) => { + try { + const [modelsToAdd, propertyName, model] = data; + + if (!model[propertyName]) { + error(`Model does not have property called '${propertyName}'`); + } + + modelsToAdd.forEach(itemToAdd => { + model[propertyName].add(itemToAdd); + }); + + complete(); + } catch (e) { + log.error(e); + } +}); + +multiSelectActions.removeItemsFromModelCollection.subscribe(({ data, complete, error }) => { + const [modelsToRemove, propertyName, model] = data; + + if (!model[propertyName]) { + error(`Model does not have property called '${propertyName}'`); + } + + modelsToRemove.forEach(itemToRemove => { + model[propertyName].remove(itemToRemove); + }); + + complete(); +}); + +export default createReactClass({ + propTypes: { + referenceType: PropTypes.string.isRequired, + referenceProperty: PropTypes.string.isRequired, + model: PropTypes.object.isRequired, + labelText: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + value: PropTypes.oneOfType([ + PropTypes.shape({ values: PropTypes.func.isRequired }), + PropTypes.arrayOf(PropTypes.func), + ]), + }, + + mixins: [Translate], + + getInitialState() { + const itemStore = Store.create(); + const assignedItemStore = Store.create(); + + itemStore.state = []; + assignedItemStore.state = []; + + return { + itemStore, + assignedItemStore, + filterText: "", + isRefreshing: false, + canCreate: false, + }; + }, + + UNSAFE_componentWillMount() { + if (!this.props.referenceType) { + return; + } + + getInstance() + .then(this.checkCreateAuthority) + .then(this.loadAvailableItems) + .then(this.populateItemStore) + .then(this.populateAssignedStore); + }, + + renderGroupEditor() { + if ( + this.props.model.modelDefinition.modelValidations[this.props.referenceProperty] && + this.props.model.modelDefinition.modelValidations[this.props.referenceProperty] + .ordered && + this.props.referenceProperty !== + "aggregationLevels" /* TODO: The aggregation levels should either not be "ordered" or should be returned from the API properly */ + ) { + return ( + + ); + } + + return ( + + ); + }, + + render() { + const styles = { + labelStyle: { + float: "left", + position: "relative", + display: "block", + width: "calc(100% - 60px)", + lineHeight: "24px", + color: "rgba(0,0,0,0.3)", + marginTop: "1rem", + fontSize: 16, + }, + + labelWrap: { + display: "flex", + }, + fieldWrap: { + position: "relative", + }, + }; + + return ( +
    + {this.state.isRefreshing ? : null} +
    + + {this.state.canCreate ? ( + + ) : null} +
    + + {this.renderGroupEditor()} +
    +
    + ); + }, + + _orderChanged(newOrder) { + const itemList = this.state.itemStore.getState(); + + // TODO: Move the following mutation to an `Action` + // Reset the ModelCollectionProperty / ModelCollection + this.props.model[this.props.referenceProperty].clear(); + + // Add the items back in the correct order + newOrder.forEach(item => { + if (itemList.has(item)) { + this.props.model[this.props.referenceProperty].add(itemList.get(item)); + } + }); + + // Set the state to the store to emit the value to all subscribers + this.state.assignedItemStore.setState( + this.props.model[this.props.referenceProperty].toArray().map(value => value.id) + ); + }, + + _assignItems(items) { + if (this.props.referenceProperty === "aggregationLevels") { + const newList = Array.from( + new Set( + (this.props.model[this.props.referenceProperty] || []).concat(items.map(Number)) + ).values() + ); + + this.props.onChange({ + target: { + value: newList, + }, + }); + this.state.assignedItemStore.setState(newList); + return Promise.resolve(); + } + + return new Promise((resolve, reject) => { + const modelsToAdd = filterModelsMapOnItemIds(this.state.itemStore.state, items); + + multiSelectActions + .addItemsToModelCollection( + modelsToAdd, + this.props.referenceProperty, + this.props.model + ) + .subscribe(() => { + const newAssignedItems = [] + .concat(this.state.assignedItemStore.getState()) + .concat(items) + .filter(value => value); + + this.state.assignedItemStore.setState(unique([].concat(newAssignedItems))); + + this.props.onChange({ + target: { + value: this.props.model[this.props.referenceProperty], + }, + }); + + resolve(); + }, reject); + }); + }, + + _removeItems(items) { + if (this.props.referenceProperty === "aggregationLevels") { + const newList = Array.from( + new Set( + (this.props.model[this.props.referenceProperty] || []).filter( + v => items.map(Number).indexOf(v) === -1 + ) + ).values() + ); + + this.props.onChange({ + target: { + value: newList, + }, + }); + this.state.assignedItemStore.setState(newList); + return Promise.resolve(); + } + + return new Promise((resolve, reject) => { + const modelsToRemove = filterModelsMapOnItemIds(this.state.itemStore.state, items); + + multiSelectActions + .removeItemsFromModelCollection( + modelsToRemove, + this.props.referenceProperty, + this.props.model + ) + .subscribe(() => { + const newAssignedItems = [] + .concat(this.state.assignedItemStore.getState()) + .filter(item => items.indexOf(item) === -1) + .filter(value => value); + + this.updateForm(newAssignedItems); + resolve(); + }, reject); + }); + }, + + _setFilterText(event) { + this.setState({ + filterText: event.target.value, + }); + }, + + updateForm(newAssignedItems) { + this.state.assignedItemStore.setState(unique([].concat(newAssignedItems))); + + this.props.onChange({ + target: { + value: this.props.model[this.props.referenceProperty], + }, + }); + }, + + reloadAvailableItems() { + this.setState({ + isRefreshing: true, + }); + + getInstance() + .then(this.loadAvailableItems) + .then(this.populateItemStore) + .then(() => { + this.setState({ + isRefreshing: false, + }); + }); + }, + + checkCreateAuthority(d2) { + const key = this.props.referenceType; + if (d2.currentUser.canCreate(d2.models[key])) { + this.setState({ canCreate: true }); + } + return d2; + }, + + loadAvailableItems(d2) { + if (d2.models[this.props.referenceType]) { + const multiSelectSourceModelDefinition = d2.models[this.props.referenceType]; + + // When there are any special filters set we need to apply them to the modelDefinition before loading + // the items. An array of filters can be passed to the filter property of the options to the .list() call + // As the default should always be filtered out we concat the set filters with default filter that filters + // out anything with the name 'default' + const filters = ["name:ne:default"].concat(this.props.queryParamFilter).filter(f => f); + + return multiSelectSourceModelDefinition.list({ + paging: false, + fields: "displayName|rename(name),id,level", + filter: filters, + }); + } + return Promise.reject(`${this.props.referenceType} is not a model on d2.models`); + }, + + populateItemStore(availableItems) { + if (this.props.referenceProperty === "aggregationLevels") { + this.state.itemStore.setState( + Array.from(availableItems.values()).map(model => { + return { + value: model.level, + text: model.displayName || model.name, + }; + }) + ); + return; + } + + this.state.itemStore.setState(availableItems); + }, + + populateAssignedStore() { + if (!this.props.value) { + return this.state.assignedItemStore.setState([]); + } + + if (Array.isArray(this.props.value)) { + this.state.assignedItemStore.setState(Array.from(this.props.value)); + } else { + this.state.assignedItemStore.setState( + Array.from(this.props.value.values()).map(value => value.id) + ); + } + }, +}); diff --git a/src/forms/form-fields/multi-toggle.js b/src/forms/form-fields/multi-toggle.js new file mode 100644 index 000000000..e226df736 --- /dev/null +++ b/src/forms/form-fields/multi-toggle.js @@ -0,0 +1,79 @@ +import React from "react"; +import createReactClass from 'create-react-class'; +import PropTypes from "prop-types"; + +// Material UI +import Checkbox from "material-ui/Checkbox/Checkbox"; + +export default createReactClass({ + propTypes: { + label: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + items: PropTypes.arrayOf( + PropTypes.shape({ + name: PropTypes.string.isRequired, + value: PropTypes.bool, + text: PropTypes.string.isRequired, + }) + ), + style: PropTypes.object, + }, + + contextTypes: { + muiTheme: PropTypes.object, + }, + + getInitialState() { + return { + values: this.props.items.reduce((prev, curr) => { + if (curr.value) { + prev.push(curr.name); + } + return prev; + }, []), + }; + }, + + render() { + const style = Object.assign({}, this.context.muiTheme.forms, this.props.style); + return ( +
    +
    {this.props.label}
    + {this.props.items.map(item => { + return ( + + ); + })} +
    + ); + }, + + _handleToggle(value, event, checked) { + this.setState( + oldState => { + if (checked) { + if (oldState.values.indexOf(value) === -1) { + oldState.values.push(value); + } + } else { + if (oldState.values.indexOf(value) !== -1) { + oldState.values.splice(oldState.values.indexOf(value), 1); + } + } + return oldState; + }, + () => { + this.props.onChange({ target: { value: this.state.values } }); + } + ); + }, +}); diff --git a/src/forms/form-fields/text-field.js b/src/forms/form-fields/text-field.js new file mode 100644 index 000000000..520c544cf --- /dev/null +++ b/src/forms/form-fields/text-field.js @@ -0,0 +1,96 @@ +import React, { Component } from "react"; +import PropTypes from "prop-types"; +import TextField from "material-ui/TextField/TextField"; +import Action from "d2-ui/lib/action/Action"; + +export default class TextFormField extends Component { + constructor(props, ...args) { + super(props, ...args); + this.state = { + fieldValue: props.value || "", + }; + + this.updateOnChange = Action.create(`updateOnKeyUp - ${props.name}`); + this._onValueChanged = this._onValueChanged.bind(this); + } + + componentDidMount() { + // Debounce the value, so the request handler does not get executed on each change event + this.disposable = this.updateOnChange + .debounce(300) + .map(action => action.data) + .distinctUntilChanged() + .subscribe(value => { + this.props.onChange({ + target: { + value, + }, + }); + }); + } + + componentWillUnmount() { + if (this.disposable && this.disposable.dispose) { + this.disposable.dispose(); + } + } + + UNSAFE_componentWillReceiveProps(newProps) { + // Keep local state in sync with the passed in value + if (newProps.value !== this.props.value) { + this.setState({ + fieldValue: newProps.value, + }); + } + } + + render() { + const { + label, + labelText, + multiLine, + model, + modelDefinition, + models, + referenceType, + referenceProperty, + isInteger, + translateOptions, + isRequired, + options, + ...rest + } = this.props; + const errorStyle = { + lineHeight: multiLine ? "48px" : "12px", + marginTop: multiLine ? -16 : -12, + }; + + return ( + + ); + } + + _onValueChanged(event) { + event.preventDefault(); + event.stopPropagation(); + // Keep local state to keep the field responsiveness + this.setState({ + fieldValue: event.currentTarget.value, + }); + + // Fire the update handler + this.updateOnChange(event.currentTarget.value); + } +} +TextFormField.propTypes = { + labelText: PropTypes.string.isRequired, + multiLine: PropTypes.bool, +}; diff --git a/src/i18n/i18n_module_ar.properties b/src/i18n/i18n_module_ar.properties new file mode 100644 index 000000000..48f3cfd24 --- /dev/null +++ b/src/i18n/i18n_module_ar.properties @@ -0,0 +1,249 @@ +yes=Yes +no=No +last_updated=Last updated +id=Id +of_page=of +search_by_name=Search by name +created=Created +details=Show details +share=Sharing settings +public_access=Public access +href=Api URL +actions=Actions +public_can_edit=Public view/edit +public_none=No public access +define_associations=Assign to organisation units +period_dates=Set output/outcome period dates +period_dates_for_year=Set output/outcome period dates for $$year$$ +delete=Delete +edit=Edit +clone=Clone +select=Select +all=All +assign_all=Assign all +description=Description +value_required=This field is required +value_not_unique=This field requires a unique value +deselect=Deselect +select_all=Select all +deselect_all=Deselect all +select_all_in_tree=Select all in tree +deselect_all_in_tree=Deselect all in tree +confirm=Confirm +for_organisation_units_within=For organisation units within +for_all_organisation_units=Select/deselect all organisation units in +tree=tree +code=Code +short_name=Short name +display_name=Name +display_description=Description +subsection=Subsection +origin=Origin +disaggregation=Disaggregation +no_value= +filter_organisation_units_by_name=Filtering organisation units by name +organisation_units_selected=Organisation units selected +no_roots_found=No roots found +period_type=Period type +expiry_days=Expiry days +expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock +notify_completing_user=Send notification to completing user +open_future_periods=Open future periods for data entry +save=Save +data_input_periods=Data input periods +day=Day +week=Week +month=Month +jan=January +feb=February +mar=March +apr=April +may=May +jun=June +jul=July +aug=August +sep=September +oct=October +nov=November +dec=December +biMonth=Bi-month +jan-feb=January-February +mar-apr=March-April +may-jun=May-June +jul-aug=July-August +sep-oct=September-October +nov-dec=November-December +quarter=Quarter +Q1=Q1: January-March +Q2=Q2: April-June +Q3=Q3: July-September +Q4=Q4: October-December +sixMonth=Half year +jan-jun=January-June +jul-dec=July-December +opening_date=Opening date +closing_date=Closing date +year=Year +next=Next +previous=Previous +sharing=Sharing +show_closed_projects=Show closed projects +linked_project=Linked project +data_input_period=Data input period +no_project_linked=No project linked +step_initial_configuration=Initial configuration +step_general_information=General information +step_core_indicators=Core indicators +step_non_core_indicators=Donor and Local Indicators +step_disaggregation=Disaggregation +step_grey_fields=Grey fields +step_sharing=Sharing +core_competencies=Core competencies +confirm_wizard_cancel=Data will be lost, are you sure you want cancel? +confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. +wizard_presave_message=The data set is finished. Press the button Save to save the data +wizard_save_message=The data set is being saved, please wait +wizard_save_error_message=There was an error saving the dataset, administrators have been notified +dataset_saved=Dataset saved successfully +data_input_start_date=Start date of data input +data_input_end_date=End date of data input +no_elements_found=No elements found +section_config=Section configuration +show_row_totals=Show row totals +show_column_totals=Show column totals +select_one_core_competency=You must select at least one core competency +select_one_organisation_unit=You must select at least one organisation unit +close=Close +login=Login +not_logged=No user logged in +not_logged_or_expired=No user logged in or the session has expired +determining_your_root_orgunits=Determining your root organisation units +public_can_view=Public view +can_edit=Can Edit +reloading_available_values=Reloading available values +search_available_selected_items=Search available/selected items +select_a_parent_organisation_unit=Select a parent organisation unit +all=All +theme=Theme +group=Group +status=Status +select_a_data_element_before_applying_an_override=Select a data element before applying an override +override_data_element_category_combo=Add disaggregate +no_override= +countries=Countries +select_at_least_one_country=Select at least one country +none=None +enabled=Enabled +disabled=Disabled +section=Section +group_data_elements_in_section=Group data elements in sections +core_competency=Core competency +settings=Configuration settings +setting_category_projects_id=Projects category +setting_category_combo_id=Category combination +setting_expiry_days=Default expiry days +setting_data_element_group_set_core_competency_id=Core competencies data element group set +setting_data_element_group_output_id=Output data element group +setting_data_element_group_outcome_id=Outcome data element group +setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set +setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set +setting_data_element_group_set_theme_id=Data element theme group set +setting_data_element_group_set_origin_id=Data element origin group set +setting_data_element_group_set_status_id=Data element status group set +setting_indicator_group_set_theme_id=Indicator theme group set +setting_indicator_group_set_origin_id=Indicator origin group set +setting_indicator_group_set_status_id=Indicator status group set +setting_attribute_group_id=Group attribute +setting_organisation_unit_level_for_countries_id=Country organisation unit level +setting_admin_user_group=Administrator user group +setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute +setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute +setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items +setting_data_period_output_dates_attribute_id=Attribute for output dates +setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates +setting_data_period_interval_dates_attribute_id=Attribute for interval dates +setting_output_end_date=Default Output End Date +setting_outcome_end_date=Default Outcome End Date +setting_output_last_year_end_date=Default Output Time Period End Date (Last year) +setting_outcome_last_year_end_date=Default Outcome Time Period End Date (Last year) +sharing_countries_description=Please select the regions you want to share this dataset with +sharing_warning=Note that, if modified, your sharing settings will also be changed +confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? +dataset_deleted=Dataset(s) deleted +this_and_n_others=$$this$$ and $$n$$ others +members=members +update_strategy=Bulk update strategy +update_strategy_merge=Merge +update_strategy_replace=Replace +orgunits_settings=Organisation Units +sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. +validation_error=Validation error. Please contact the Dhis2 Administrator with this error: +more_errors=[and $$n$$ more errors...] +cannot_disaggregate=Your user cannot create category combos, so this step is disabled +config_tab_general=General +config_tab_sections=Sections +total=Total +value=Value +sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. +action_add=Create: $$title$$ +action_edit=Edit: $$title$$ +action_clone=Clone from $$sourceTitle$$: $$title$$ +help=Help +help_initial_configuration= +help_general_information= +help_organisation_unit= +help_core_indicators= +help_non_core_indicators= +help_disaggregation= +help_grey_fields= +help_sharing= +help_save= +help_landing_page= +logs=Logs +logs_none=No logs +logs_loading=Loading logs... +logs_older=Load logs older than +logs_no_older=No logs older than +display_only_datasets_created_by_app=Only created by the app +loading=Loading... +user_access=User access +user_group_access=User group access +dataset_name_exists=There is already a dataset with this name +output_start_date=Output Start Date +output_end_date=Output End Date +outcome_start_date=Outcome Start Date +outcome_end_date=Outcome End Date +apply_periods_to_all=Apply same dates for every year +output_dates=Output Dates +outcome_dates=Outcomes Dates +start_date_before_project_start=Start date should be after the start of the project +current_date_out_of_period=Current date out of accepted period +no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. +Add users and user groups=Add users and user groups +Anyone can view without login=Anyone can view without login +Can capture and view=Can capture and view +Cancel=Cancel +Can edit and view=Can edit and view +Can view only=Can view only +Close=Close +Created by=Created by +DATA=DATA +Enter names=Enter names +External access=External access +METADATA=METADATA +No access=No access +Public access=Public access +Save=Save +Sharing settings=Sharing settings +Who has access=Who has access +Update strategy=Update strategy +Merge=Merge +Replace=Replace +end_date_for_year=Change output/outcome end date for year +not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ +units=Units +cannot_set_only_start_or_end_dates=Start and end dates are compulsory +end_dates_empty=Some end dates are empty, so old values will be kept +output_outcome_dates_compulsory=All output and outcome dates are compulsory +no_project_selected=No linked project has been selected. It is highly recommended to select a project +select_a_project=It is highly recommended to select a project in the first step diff --git a/src/i18n/i18n_module_en.properties b/src/i18n/i18n_module_en.properties new file mode 100644 index 000000000..f9128b37c --- /dev/null +++ b/src/i18n/i18n_module_en.properties @@ -0,0 +1,249 @@ +yes=Yes +no=No +last_updated=Last updated +id=Id +of_page=of +search_by_name=Search by name +created=Created +details=Show details +share=Sharing settings +public_access=Public access +href=Api URL +actions=Actions +public_can_edit=Public view/edit +public_none=No public access +define_associations=Assign to organisation units +period_dates=Set output/outcome period dates +period_dates_for_year=Set output/outcome period dates for $$year$$ +delete=Delete +edit=Edit +clone=Clone +select=Select +all=All +assign_all=Assign all +description=Description +value_required=This field is required +value_not_unique=This field requires a unique value +deselect=Deselect +select_all=Select all +deselect_all=Deselect all +select_all_in_tree=Select all in tree +deselect_all_in_tree=Deselect all in tree +confirm=Confirm +for_organisation_units_within=For organisation units within +for_all_organisation_units=Select/deselect all organisation units in +tree=tree +code=Code +short_name=Short name +display_name=Name +display_description=Description +subsection=Subsection +origin=Origin +disaggregation=Disaggregation +no_value= +filter_organisation_units_by_name=Filtering organisation units by name +organisation_units_selected=Organisation units selected +no_roots_found=No roots found +period_type=Period type +expiry_days=Expiry days +expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock +notify_completing_user=Send notification to completing user +open_future_periods=Open future periods for data entry +save=Save +data_input_periods=Data input periods +day=Day +week=Week +month=Month +jan=January +feb=February +mar=March +apr=April +may=May +jun=June +jul=July +aug=August +sep=September +oct=October +nov=November +dec=December +biMonth=Bi-month +jan-feb=January-February +mar-apr=March-April +may-jun=May-June +jul-aug=July-August +sep-oct=September-October +nov-dec=November-December +quarter=Quarter +Q1=Q1: January-March +Q2=Q2: April-June +Q3=Q3: July-September +Q4=Q4: October-December +sixMonth=Half year +jan-jun=January-June +jul-dec=July-December +opening_date=Opening date +closing_date=Closing date +year=Year +next=Next +previous=Previous +sharing=Sharing +show_closed_projects=Show closed projects +linked_project=Linked project +data_input_period=Data input period +no_project_linked=No project linked +step_initial_configuration=Initial configuration +step_general_information=General information +step_core_indicators=Core indicators +step_non_core_indicators=Donor and Local Indicators +step_disaggregation=Disaggregation +step_grey_fields=Grey fields +step_sharing=Sharing +core_competencies=Core competencies +confirm_wizard_cancel=Data will be lost, are you sure you want cancel? +confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. +wizard_presave_message=The data set is finished. Press the button Save to save the data +wizard_save_message=The data set is being saved, please wait +wizard_save_error_message=There was an error saving the dataset, administrators have been notified +dataset_saved=Dataset saved successfully +data_input_start_date=Start date of data input +data_input_end_date=End date of data input +no_elements_found=No elements found +section_config=Section configuration +show_row_totals=Show row totals +show_column_totals=Show column totals +select_one_core_competency=You must select at least one core competency +select_one_organisation_unit=You must select at least one organisation unit +close=Close +login=Login +not_logged=No user logged in +not_logged_or_expired=No user logged in or the session has expired +determining_your_root_orgunits=Determining your root organisation units +public_can_view=Public view +can_edit=Can Edit +reloading_available_values=Reloading available values +search_available_selected_items=Search available/selected items +select_a_parent_organisation_unit=Select a parent organisation unit +all=All +theme=Theme +group=Group +status=Status +select_a_data_element_before_applying_an_override=Select a data element before applying an override +override_data_element_category_combo=Add disaggregate +no_override= +countries=Countries +select_at_least_one_country=Select at least one country +none=None +enabled=Enabled +disabled=Disabled +section=Section +group_data_elements_in_section=Group data elements in sections +core_competency=Core competency +settings=Configuration settings +setting_category_projects_id=Projects category +setting_category_combo_id=Category combination +setting_expiry_days=Default expiry days +setting_data_element_group_set_core_competency_id=Core competencies data element group set +setting_data_element_group_output_id=Output data element group +setting_data_element_group_outcome_id=Outcome data element group +setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set +setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set +setting_data_element_group_set_theme_id=Data element theme group set +setting_data_element_group_set_origin_id=Data element origin group set +setting_data_element_group_set_status_id=Data element status group set +setting_indicator_group_set_theme_id=Indicator theme group set +setting_indicator_group_set_origin_id=Indicator origin group set +setting_indicator_group_set_status_id=Indicator status group set +setting_attribute_group_id=Group attribute +setting_organisation_unit_level_for_countries_id=Country organisation unit level +setting_admin_user_group=Administrator user group +setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute +setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute +setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items +setting_data_period_output_dates_attribute_id=Attribute for output dates +setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates +setting_data_period_interval_dates_attribute_id=Attribute for interval dates +setting_output_end_date=Default Output End Date +setting_outcome_end_date=Default Outcome End Date +setting_output_last_year_end_date=Default Output Time Period End Date (Last year) +setting_outcome_last_year_end_date=Default Outcome Time Period End Date (Last year) +sharing_countries_description=Please select the regions you want to share this dataset with +sharing_warning=Note that, if modified, your sharing settings will also be changed +confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? +dataset_deleted=Dataset(s) deleted +this_and_n_others=$$this$$ and $$n$$ others +members=members +update_strategy=Bulk update strategy +update_strategy_merge=Merge +update_strategy_replace=Replace +orgunits_settings=Organisation Units +sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. +validation_error=Validation error. Please contact the Dhis2 Administrator with this error: +more_errors=[and $$n$$ more errors...] +cannot_disaggregate=Your user cannot create category combos, so this step is disabled +config_tab_general=General +config_tab_sections=Sections +total=Total +value=Value +sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. +action_add=Create: $$title$$ +action_edit=Edit: $$title$$ +action_clone=Clone from $$sourceTitle$$: $$title$$ +help=Help +help_initial_configuration= +help_general_information= +help_organisation_unit= +help_core_indicators= +help_non_core_indicators= +help_disaggregation= +help_grey_fields= +help_sharing= +help_save= +help_landing_page= +logs=Logs +logs_none=No logs +logs_loading=Loading logs... +logs_older=Load logs older than +logs_no_older=No logs older than +display_only_datasets_created_by_app=Only created by the app +loading=Loading... +user_access=User access +user_group_access=User group access +dataset_name_exists=There is already a dataset with this name +output_start_date=Output Start Date +output_end_date=Output End Date +outcome_start_date=Outcome Start Date +outcome_end_date=Outcome End Date +apply_periods_to_all=Apply same dates for every year +output_dates=Output Dates +outcome_dates=Outcome Dates +start_date_before_project_start=Start date should be after the start of the project +current_date_out_of_period=Current date out of accepted period +no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. +Add users and user groups=Add users and user groups +Anyone can view without login=Anyone can view without login +Can capture and view=Can capture and view +Cancel=Cancel +Can edit and view=Can edit and view +Can view only=Can view only +Close=Close +Created by=Created by +DATA=DATA +Enter names=Enter names +External access=External access +METADATA=METADATA +No access=No access +Public access=Public access +Save=Save +Sharing settings=Sharing settings +Who has access=Who has access +Update strategy=Update strategy +Merge=Merge +Replace=Replace +end_date_for_year=Change output/outcome end date for year +not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ +units=Units +cannot_set_only_start_or_end_dates=Start and end dates are compulsory +end_dates_empty=Some end dates are empty, so old values will be kept +output_outcome_dates_compulsory=All output and outcome dates are compulsory +no_project_selected=No linked project has been selected. It is highly recommended to select a project +select_a_project=It is highly recommended to select a project in the first step diff --git a/src/i18n/i18n_module_es.properties b/src/i18n/i18n_module_es.properties new file mode 100644 index 000000000..efaa663bf --- /dev/null +++ b/src/i18n/i18n_module_es.properties @@ -0,0 +1,249 @@ +yes=Sí +no=No +last_updated=Última actualización +id=Id +of_page=de +search_by_name=Buscar por nombre +created=Creado +details=Mostrar detalles +share=Compartir +public_access=Acceso público +href=Api URL +actions=Acciones +public_can_edit=Acceso público de lectura/edición +public_none=Sin acceso público +define_associations=Asignar a unidad organizativa +period_dates=Asignar fechas de salida/resultados +period_dates_for_year=Asignar fechas de salida/resultados para el añor $$year$$ +delete=Borrar +edit=Editar +clone=Clonar +select=Seleccionar +all=Todos +assign_all=Assignar todos +description=Descripción +value_required=Este campo es obligatorio +value_not_unique=Este campo debe ser único, ya existe un objeto con este valor +deselect=Deseleccionar +select_all=Seleccionar todo +deselect_all=Deseleccionar todo +select_all_in_tree=Seleccionar todo en árbol +deselect_all_in_tree=Deseleccionar todo en árbol +confirm=Confirmar +for_organisation_units_within=Solo para unidades organizativas +for_all_organisation_units=Seleccionar/deseleccionar todas las unidades organizativas en el +tree=árbol +code=Código +short_name=Nombre corto +display_name=Nombre +display_description=Descripción +subsection=Subsección +origin=Origen +disaggregation=Disagregación +no_value= +filter_organisation_units_by_name=Filtrando unidades organizativas por nombre +organisation_units_selected=Unidades organizativas seleccionadas +no_roots_found=No se han encontrado elementos raíz +period_type=Tipo de periodo +expiry_days=Días para vencimiento +expiry_days_help=Establece el periodo en el que es posible introducir datos. Ej: 5 significa: después del 5/Feb, ya no se pueden hacer cambiar de Enero. 0 desactiva cualquier limitación +notify_completing_user=Enviar notificación al usuario que lo completó +open_future_periods=Permitir periodos en el futuro para introducción de datos +save=Guardar +data_input_periods=Periodos de entrada de datos +day=Día +week=Semana +month=Mes +jan=Enero +feb=Febrero +mar=Marzo +apr=Abril +may=Mayo +jun=Junio +jul=Julio +aug=Agosto +sep=Septiembre +oct=Octubre +nov=Noviembre +dec=Diciembre +biMonth=Bimensual +jan-feb=Enero-Febrero +mar-apr=Marzo-Abril +may-jun=Mayo-Junio +jul-aug=Julio-Agosto +sep-oct=Septiembre-Octubre +nov-dec=Noviembre-Diciembre +quarter=Trimestre +Q1=T1: Enero-Marzo +Q2=T2: Abril-Junio +Q3=T3: Julio-Septiembre +Q4=T4: Octubre-Diciembre +sixMonth=Medio año +jan-jun=Enero-Junio +jul-dec=Julio-Diciembre +opening_date=Apertura +closing_date=Cierre +year=Año +next=Siguiente +previous=Anterior +sharing=Compartido +show_closed_projects=Muestra proyectos cerrados +linked_project=Proyecto asociado +data_input_period=Periodo de entrada de datos +no_project_linked=Sin proyecto asociado +step_initial_configuration=Configuración inicial +step_general_information=Información general +step_core_indicators=Indicadores básicos +step_non_core_indicators=Indicatores locales +step_disaggregation=Desagregación +step_grey_fields=Campos sobreados +step_sharing=Compartir +core_competencies=Competencias básicas +confirm_wizard_cancel=Se perderán los datos, ¿está seguro de que quiere cancelar? +confirm_project_updates=¿Confirma que quiere usar la información del proyecto para establecer valores por defecto del dataset? Se modificarán en el dataset: nombre, fechas de introducción de datos, unidades organizativas, países en compartición. +wizard_presave_message=El dataset ha sido completado, pulse [guardar] para persistirlo. +wizard_save_message=El dataset se está guardando, por favor espere. +wizard_save_error_message=Se produjo un error guardando el dataset, se ha notificado a los administratores +dataset_saved=Dataset guardado con éxito +data_input_start_date=Fecha de inicio de entrada de datos +data_input_end_date=Fecha de fin de entrada de datos +no_elements_found=No se han encontrado elementos +section_config=Configuración de sección +show_row_totals=Mostrar totales de fila +show_column_totals=Mostrar totales de columna +select_one_core_competency=Debes seleccionar al menos una competencia básica +select_one_organisation_unit=Debes seleccionar al menos una unidad organizativa +close=Cerrar +login=Acceder +not_logged=No hay sesión activa +not_logged_or_expired=No hay sesión activa o ha expirado +determining_your_root_orgunits=Estableciendo tus unidades organizativas +public_can_view=Acceso público de lectura +can_edit=Acceso de edición +reloading_available_values=Recargando valores disponibles +search_available_selected_items=Buscar elementos disponibles/seleccionados +select_a_parent_organisation_unit=Selecciona una unidad organizativa padre +all=Todos +theme=Tema +group=Grupo +status=Estado +select_a_data_element_before_applying_an_override=No hay elementos de datos seleccionados +override_data_element_category_combo=Añadir desgregación +no_override= +countries=Países +select_at_least_one_country=Select at least one country +none=Ninguno +enabled=Activo +disabled=Inactivo +section=Sección +group_data_elements_in_section=Agrupa elementos de datos en secciones +core_competency=Competencia básica +settings=Parámetros de configuración +setting_category_projects_id=Categoría de proyectos +setting_category_combo_id=Combinación de categoría por defecto +setting_expiry_days=Días de expiración por defecto +setting_data_element_group_set_core_competency_id=Competencias básica (data element group set) +setting_data_element_group_output_id=Salida (data element group) +setting_data_element_group_outcome_id=Resultados (data element group) +setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set +setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set +setting_data_element_group_set_theme_id=Tema (data element group set) +setting_data_element_group_set_origin_id=Origen (element origin group set) +setting_data_element_group_set_status_id=Estado (data element group set) +setting_indicator_group_set_theme_id=Tema (indicator group set) +setting_indicator_group_set_origin_id=Origen (indicator group set) +setting_indicator_group_set_status_id=Estado (indicator group set) +setting_attribute_group_id=Grupo (attribute) +setting_organisation_unit_level_for_countries_id=Nivel organizativo de país +setting_admin_user_group=Grupo de usuario con derechos administrativos +setting_hide_in_data_set_app_attribute_id=Atributo de ocultación en dataset +setting_created_by_data_set_configuration_attribute_id=Creado por Dataset Configuration (atributo) +setting_exclusion_rule_core_user_group_id=Grupo de usuario excluido de seleccionar elementos básicos +sharing_countries_description=Por favor, selecciona las regiones con las que quieres compartir el dataset +setting_data_period_output_dates_attribute_id=Atributo para fechas de salida +setting_data_period_outcome_dates_attribute_id=Atributo para fechas de resultados +setting_data_period_interval_dates_attribute_id=Atributo para intérvalo de fechas +setting_output_end_date=Fin de fecha por defecto de salida +setting_outcome_end_date=Fin de fecha port defecto de resultados +sharing_warning=Nota: si modifica este campo, la configuración de compartición también cambiará +setting_output_last_year_end_date=Periodo de fin de fecha de salida por defecto (último año) +setting_outcome_last_year_end_date=Periodo de fin de fecha de resultador por defecto (último año) +confirm_delete_dataset=¿Estás seguro de que quieres eliminar este(os) dataset? +dataset_deleted=Dataset(s) eliminado(s) +this_and_n_others=$$this$$ y otros $$n$$ +members=miembros +update_strategy=Estrategia de actualización +update_strategy_merge=Unir +update_strategy_replace=Reemplazar +orgunits_settings=Unidades organizativas +sharing_settings_help=La estrategia UNIR actualiza solo los accesos visibles; REEMPLAZAR sobreescribe todos los accesos. Solo se actualizan cambios cuando se cambia el valor de algún acceso. +validation_error=Error en la validación. Por favor contacte con el administrador Dhis2 con este error: +more_errors=[y $$n$$ errores más...] +cannot_disaggregate=Este usuario no tiene permisos para crear combinaciones de categoría, así que este paso está deshabilitado +config_tab_general=General +config_tab_sections=Secciones +total=Total +value=Value +sections_many_items_selected=Advertencia: Ha seleccionado un total de $$itemsCount$$ elementos (entre elementos de datos e indicadores). El límite recomendado para evitar tiempos elevados de carga de formularios es $$warningItemsCount$$. +action_add=Crear: $$title$$ +action_edit=Editar: $$title$$ +action_clone=Clonar $$sourceTitle$$: $$title$$ +help=Ayuda +help_initial_configuration= +help_general_information= +help_organisation_unit= +help_core_indicators= +help_non_core_indicators= +help_disaggregation= +help_grey_fields= +help_sharing= +help_save= +help_landing_page= +logs=Logs +logs_none=Ningún registro +logs_loading=Cargando logs... +logs_older=Cargar logs anteriores a +logs_no_older=No hay logs anteriores a +display_only_datasets_created_by_app=Solo creados por la aplicación +loading=Cargando... +user_access=Acceso de usuarios +user_group_access=Acceso de grupos de usuario +dataset_name_exists=Ya existe un dataset con este nombre +output_start_date=Salida - Fecha inicial +output_end_date=Salida - Fecha final +outcome_start_date=Resultados - Fecha inicial +outcome_end_date=Resultados - Fecha final +apply_periods_to_all=Aplica las mismas fechas para todos los años +output_dates=Salida - Fechas +outcome_dates=Resultados - Fechas +start_date_before_project_start=La fecha de inicio debe ser posterior al inicio del proyecto +current_date_out_of_period=La fecha actual está fuera del periodo válido +no_match_start_end_dates=Atención: La fecha de inicio/fin no coincide para todos los datasets. Los nuevos valores de fecha de inicio/fin se sobreescribirán +Add users and user groups=Añadir usuarios y grupos de usuario +Anyone can view without login=Acceso sin login +Can capture and view=Puede capturar y ver +Cancel=Cancelar +Can edit and view=Puede editar y ver +Can view only=Solo ver +Close=Cerrar +Created by=Creado po +DATA=DATOS +Enter names=Introduzca nombres +External access=Acceso externo +METADATA=METADATA +No access=Sin acceso +Public access=Acceso público +Save=Guardar +Sharing settings=Compartir +Who has access=¿Quién tiene acceso? +Update strategy=Estrategia +Merge=Mezclar +Replace=Reemplazar +end_date_for_year=Cambiar la fecha final de salida/resultados +not_all_datasets_contain_year=Todos los datasets seleccionados deben contener el año $$year$$ para la entrada de datos +units=Unidades +cannot_set_only_start_or_end_dates=Las fechas de inicio y fin son obligatorias +end_dates_empty=Algunas fechas de final están vacías, así que los valores antiguos se mantendrán +output_outcome_dates_compulsory=Todas las fechas de salida y resultados son obligatorias +no_project_selected=No se ha seleccionado un proyecto asociado. Es altamente recomendado seleccionar un proyecto +select_a_project=Es altamente recomendado seleccionar un proyecto en el primer paso diff --git a/src/i18n/i18n_module_fr.properties b/src/i18n/i18n_module_fr.properties new file mode 100644 index 000000000..f076dd5d1 --- /dev/null +++ b/src/i18n/i18n_module_fr.properties @@ -0,0 +1,249 @@ +yes=Yes +no=No +last_updated=Last updated +id=Id +of_page=of +search_by_name=Search by name +created=Created +details=Show details +share=Sharing settings +public_access=Public access +href=Api URL +actions=Actions +public_can_edit=Public view/edit +public_none=No public access +define_associations=Assign to organisation units +period_dates=Set output/outcome period dates +period_dates_for_year=Set output/outcome period dates for $$year$$ +delete=Delete +edit=Edit +clone=Clone +select=Select +all=All +assign_all=Assign all +description=Description +value_required=This field is required +value_not_unique=This field requires a unique value +deselect=Deselect +select_all=Select all +deselect_all=Deselect all +select_all_in_tree=Select all in tree +deselect_all_in_tree=Deselect all in tree +confirm=Confirm +for_organisation_units_within=For organisation units within +for_all_organisation_units=Select/deselect all organisation units in +tree=tree +code=Code +short_name=Short name +display_name=Name +display_description=Description +subsection=Subsection +origin=Origin +disaggregation=Disaggregation +no_value= +filter_organisation_units_by_name=Filtering organisation units by name +organisation_units_selected=Organisation units selected +no_roots_found=No roots found +period_type=Period type +expiry_days=Expiry days +expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock +notify_completing_user=Send notification to completing user +open_future_periods=Open future periods for data entry +save=Save +data_input_periods=Data input periods +day=Day +week=Week +month=Month +jan=January +feb=February +mar=March +apr=April +may=May +jun=June +jul=July +aug=August +sep=September +oct=October +nov=November +dec=December +biMonth=Bi-month +jan-feb=January-February +mar-apr=March-April +may-jun=May-June +jul-aug=July-August +sep-oct=September-October +nov-dec=November-December +quarter=Quarter +Q1=Q1: January-March +Q2=Q2: April-June +Q3=Q3: July-September +Q4=Q4: October-December +sixMonth=Half year +jan-jun=January-June +jul-dec=July-December +opening_date=Opening date +closing_date=Closing date +year=Year +next=Next +previous=Previous +sharing=Sharing +show_closed_projects=Show closed projects +linked_project=Linked project +data_input_period=Data input period +no_project_linked=No project linked +step_initial_configuration=Initial configuration +step_general_information=General information +step_core_indicators=Core indicators +step_non_core_indicators=Donor and Local Indicators +step_disaggregation=Disaggregation +step_grey_fields=Grey fields +step_sharing=Sharing +core_competencies=Core competencies +confirm_wizard_cancel=Data will be lost, are you sure you want cancel? +confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. +wizard_presave_message=The data set is finished. Press the button Save to save the data +wizard_save_message=The data set is being saved, please wait +wizard_save_error_message=There was an error saving the dataset, administrators have been notified +dataset_saved=Dataset saved successfully +data_input_start_date=Start date of data input +data_input_end_date=End date of data input +no_elements_found=No elements found +section_config=Section configuration +show_row_totals=Show row totals +show_column_totals=Show column totals +select_one_core_competency=You must select at least one core competency +select_one_organisation_unit=You must select at least one organisation unit +close=Close +login=Login +not_logged=No user logged in +not_logged_or_expired=No user logged in or the session has expired +determining_your_root_orgunits=Determining your root organisation units +public_can_view=Public view +can_edit=Can Edit +reloading_available_values=Reloading available values +search_available_selected_items=Search available/selected items +select_a_parent_organisation_unit=Select a parent organisation unit +all=All +theme=Theme +group=Group +status=Status +select_a_data_element_before_applying_an_override=Select a data element before applying an override +override_data_element_category_combo=Add disaggregate +no_override= +countries=Countries +select_at_least_one_country=Select at least one country +none=None +enabled=Enabled +disabled=Disabled +section=Section +group_data_elements_in_section=Group data elements in sections +core_competency=Core competency +settings=Configuration settings +setting_category_projects_id=Projects category +setting_category_combo_id=Category combination +setting_expiry_days=Default expiry days +setting_data_element_group_set_core_competency_id=Core competencies data element group set +setting_data_element_group_output_id=Output data element group +setting_data_element_group_outcome_id=Outcome data element group +setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set +setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set +setting_data_element_group_set_theme_id=Data element theme group set +setting_data_element_group_set_origin_id=Data element origin group set +setting_data_element_group_set_status_id=Data element status group set +setting_indicator_group_set_theme_id=Indicator theme group set +setting_indicator_group_set_origin_id=Indicator origin group set +setting_indicator_group_set_status_id=Indicator status group set +setting_attribute_group_id=Group attribute +setting_organisation_unit_level_for_countries_id=Country organisation unit level +setting_admin_user_group=Administrator user group +setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute +setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute +sharing_countries_description=Please select the regions you want to share this dataset with +sharing_warning=Note that, if modified, your sharing settings will also be changed +setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items +setting_data_period_output_dates_attribute_id=Attribute for output dates +setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates +setting_data_period_interval_dates_attribute_id=Attribute for interval dates +setting_output_end_date=Default Output End Date +setting_outcome_end_date=Default Outcome End Date +setting_output_last_year_end_date=Default Output Time Period End Date (Last year) +setting_outcome_last_year_end_date=Default Output Time Period End Date (Last year) +confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? +dataset_deleted=Dataset(s) deleted +this_and_n_others=$$this$$ and $$n$$ others +members=members +update_strategy=Bulk update strategy +update_strategy_merge=Merge +update_strategy_replace=Replace +orgunits_settings=Organisation Units +sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. +validation_error=Validation error. Please contact the Dhis2 Administrator with this error: +more_errors=[and $$n$$ more errors...] +cannot_disaggregate=Your user cannot create category combos, so this step is disabled +config_tab_general=General +config_tab_sections=Sections +total=Total +value=Value +sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. +action_add=Create: $$title$$ +action_edit=Edit: $$title$$ +action_clone=Clone from $$sourceTitle$$: $$title$$ +help=Help +help_initial_configuration= +help_general_information= +help_organisation_unit= +help_core_indicators= +help_non_core_indicators= +help_disaggregation= +help_grey_fields= +help_sharing= +help_save= +help_landing_page= +logs=Logs +logs_none=No logs +logs_loading=Loading logs... +logs_older=Load logs older than +logs_no_older=No logs older than +display_only_datasets_created_by_app=Only created by the app +loading=Loading... +user_access=User access +user_group_access=User group access +dataset_name_exists=There is already a dataset with this name +output_start_date=Output Start Date +output_end_date=Output End Date +outcome_start_date=Outcome Start Date +outcome_end_date=Outcome End Date +apply_periods_to_all=Apply same dates for every year +output_dates=Output Dates +outcome_dates=Outcomes Dates +start_date_before_project_start=Start date should be after the start of the project +current_date_out_of_period=Current date out of accepted period +no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. +Add users and user groups=Add users and user groups +Anyone can view without login=Anyone can view without login +Can capture and view=Can capture and view +Cancel=Cancel +Can edit and view=Can edit and view +Can view only=Can view only +Close=Close +Created by=Created by +DATA=DATA +Enter names=Enter names +External access=External access +METADATA=METADATA +No access=No access +Public access=Public access +Save=Save +Sharing settings=Sharing settings +Who has access=Who has access +Update strategy=Update strategy +Merge=Merge +Replace=Replace +end_date_for_year=Change output/outcome end date for year +not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ +units=Units +cannot_set_only_start_or_end_dates=Start and end dates are compulsory +end_dates_empty=Some end dates are empty, so old values will be kept +output_outcome_dates_compulsory=All output and outcome dates are compulsory +no_project_selected=No linked project has been selected. It is highly recommended to select a project +select_a_project=It is highly recommended to select a project in the first step diff --git a/src/models/CustomForm.js b/src/models/CustomForm.js new file mode 100644 index 000000000..ee5df2891 --- /dev/null +++ b/src/models/CustomForm.js @@ -0,0 +1,240 @@ +import velocity from "velocityjs"; +import htmlencode from "htmlencode"; +import I18n from "d2/lib/i18n/I18n"; +import _ from "../utils/lodash-mixins"; +import { getCategoryCombo } from "../utils/Dhis2Helpers"; + +/* eslint import/no-webpack-loader-syntax: off */ +import customFormTemplate from "!!raw-loader!./custom-form-resources/sectionForm.vm"; +import customFormJs from "!!raw-loader!./custom-form-resources/script.js"; +import customFormCss from "!!raw-loader!./custom-form-resources/style.css"; + +const data = { + template: customFormTemplate, + css: customFormCss, + js: customFormJs, +}; + +const a = obj => (obj.toArray ? obj.toArray() : obj); +const _a = (...args) => _(a(...args)); + +class Map { + constructor(obj) { + this.obj = obj; + } + + keys() { + return Object.keys(this.obj).sort(); + } + + get(key) { + if (this.obj[key] !== undefined) { + return this.obj[key]; + } else { + const keys = JSON.stringify(Object.keys(this.obj), null, 4); + throw new Error( + `[post-custom-form] No key ${JSON.stringify(key)} in object with keys: ${keys}` + ); + } + } + + getOr(key, defaultValue) { + return this.obj[key] !== undefined ? this.obj[key] : defaultValue; + } +} + +const map = obj => new Map(obj); + +const createViewDataElement = de => ({ + id: de.id, + displayFormName: de.displayName, + url: de.href, + hasUrl: () => !!de.href, + valueType: de.valueType, + optionSet: de.optionSetValue, + hasDescription: () => !!de.description, + displayDescription: de.description, +}); + +const getVisibleOptionCombos = (greyedFields, optionCombos, dataElements) => + _a(optionCombos) + .filter(coc => _a(dataElements).some(de => !greyedFields[`${de.id}.${coc.id}`])) + .value(); + +const getGroupedItems = sections => + _a(sections) + .map(section => { + const groupedItemsForSection = _a(section.items) + .values() + .filter(item => item.selected) + .groupByKeys(["theme", "group"], map) + .value(); + return [section.id, groupedItemsForSection]; + }) + .fromPairs() + .value(); + +const getKey = cos => + _a(cos) + .map("id") + .sortBy() + .uniq() + .join("-"); + +const getOrderedCategoryOptionCombos = categoryCombos => + _a(categoryCombos) + .map(categoryCombo => { + const categoryOptionsForCategories = _.cartesianProduct( + ...a(categoryCombo.categories).map(category => a(category.categoryOptions)) + ); + const cocByCosKey = _.keyBy(a(categoryCombo.categoryOptionCombos), coc => + getKey(coc.categoryOptions) + ); + const orderedCocs = a(categoryOptionsForCategories).map( + cos => cocByCosKey[getKey(cos)] + ); + + return [categoryCombo.id, orderedCocs]; + }) + .fromPairs() + .value(); + +// coc.categoryOptionCombo.categoryOptions return an unorder set, so it cannot be used to +// univocaly relate a coc with its categoryOptions. Use sets comparison. +const getHeaders = (categories, categoryOptionCombos) => { + const categoryOptionsForCategories = a(categories).map(category => a(category.categoryOptions)); + const allCategoryOptions = _.cartesianProduct(...categoryOptionsForCategories); + const categoryOptionsByCategoryOptionKey = _.keyBy(allCategoryOptions, getKey); + + return a(categories).map((category, catIndex) => + _a(categoryOptionCombos) + .map(coc => categoryOptionsByCategoryOptionKey[getKey(coc.categoryOptions)]) + .groupConsecutiveBy(cos => + _a(cos) + .map(co => co.id) + .take(catIndex + 1) + .value() + ) + .map(group => { + const categoryOption = group[0][catIndex]; + return { + colSpan: group.length, + name: categoryOption.name, + displayName: categoryOption.displayName, + }; + }) + .value() + ); +}; + +const getGreyedFields = dataset => + _a(dataset.sections) + .flatMap(section => a(section.greyedFields)) + .map(field => [field.dataElement.id + "." + field.categoryOptionCombo.id, true]) + .fromPairs() + .value(); + +const getRowTotalId = (dataElement, optionCombos) => + ["row", dataElement.id, ...a(optionCombos).map(coc => coc.id)].join("-"); + +const getContext = (d2, i18n, dataset, richSections, allCategoryCombos) => { + const sections = richSections.filter(richSection => + _(richSection.items) + .values() + .some("selected") + ); + const categoryComboByDataElementId = _a(dataset.dataSetElements) + .map(dse => [dse.dataElement.id, getCategoryCombo(dse)]) + .fromPairs() + .value(); + const categoryCombosId = _a(dataset.dataSetElements) + .map(dse => getCategoryCombo(dse).id) + .uniq() + .value(); + const categoryCombos = _a(allCategoryCombos) + .keyBy("id") + .at(categoryCombosId) + .value(); + const orderedCategoryOptionCombos = getOrderedCategoryOptionCombos(categoryCombos); + const orderedCategories = _a(categoryCombos) + .map(cc => [cc.id, cc.categories]) + .fromPairs() + .value(); + const getDataElementsByCategoryCombo = dataElements => + _a(dataElements) + .groupBy(de => categoryComboByDataElementId[de.id].id) + .thru(map) + .value(); + const getDataElementsByCategoryComboForIndicators = indicators => + _a(indicators) + .flatMap("dataElements") + .groupBy(de => categoryComboByDataElementId[de.id].id) + .thru(map) + .value(); + const greyedFields = getGreyedFields(dataset); + + return { + helpers: { + getDataElementsByCategoryCombo, + getDataElementsByCategoryComboForIndicators, + createViewDataElement, + getHeaders, + getVisibleOptionCombos: getVisibleOptionCombos.bind(null, greyedFields), + getRowTotalId, + }, + i18n: { + getString: key => i18n.getTranslation(key), + }, + encoder: { + htmlEncode: htmlencode.htmlEncode, + }, + auth: { + // Used in automatic form, cannot be calculated for a static custom form, leave it as true + hasAccess: (_app, _key) => true, + }, + dataSet: { + renderAsTabs: dataset.renderAsTabs, + dataElementDecoration: dataset.dataElementDecoration, + }, + sections: sections, + groupedItems: map(getGroupedItems(sections)), + orderedCategoryOptionCombos: map(orderedCategoryOptionCombos), + orderedCategories: map(orderedCategories), + greyedFields: map(greyedFields), + }; +}; + +// d2.i18n contains uiLocale translations, a custom form should use dbLocale translations. +const getI18n = d2 => { + const { keyUiLocale, keyDbLocale } = d2.currentUser.settings; + + if (!keyDbLocale || keyDbLocale === keyUiLocale) { + return Promise.resolve(d2.i18n); + } else { + const locales = _([keyDbLocale, "en"]) + .compact() + .uniq() + .value(); + const sources = locales.map(locale => `./i18n/i18n_module_${locale}.properties`); + const i18n = new I18n(sources); + return i18n.load().then(() => i18n); + } +}; + +const get = async (d2, dataset, periodDates, sections, categoryCombos) => { + const i18n = await getI18n(d2); + const context = getContext(d2, i18n, dataset, sections, categoryCombos); + const config = { env: "development", escape: false }; + const htmlForm = velocity.render(data.template, context, {}, config); + + return ` + + + ${htmlForm} + `; +}; + +export default get; diff --git a/src/models/DataSetStore.js b/src/models/DataSetStore.js new file mode 100644 index 000000000..bd1753ab7 --- /dev/null +++ b/src/models/DataSetStore.js @@ -0,0 +1,969 @@ +import fp from "lodash/fp"; +import _ from "../utils/lodash-mixins"; +import { generateUid } from "d2/lib/uid"; +import moment from "moment"; +import { + getCategoryCombos, + collectionToArray, + getAsyncUniqueValidator, + sendMessage, + getUserGroups, + mapPromise, + getOrgUnitsForLevel, + getCountryCode, + getSharing, + deepMerge, + buildSharingFromUserGroupNames, + postMetadata, + update, + sendMessageToGroups, + getCategoryCombo, + setAttributes, + getOwnedPropertyJSON, +} from "../utils/Dhis2Helpers"; + +import { getCoreCompetencies, getProject } from "./dataset"; +import * as Section from "./Section"; +import getCustomForm from "./CustomForm"; +import * as dataPeriods from "./data-periods"; +import { ProjectsService } from "./ProjectService"; + +const toArray = collectionToArray; +const dataInputPeriodDatesFormat = "YYYYMMDD"; + +function parseDate(value) { + const date = moment(value, dataInputPeriodDatesFormat); + return value && date.isValid() ? date.toDate() : undefined; +} + +function parsePeriodDates(stringDate) { + // Example: "2018=20180501-20180531,2019=20190501-20190531" + return _((stringDate || "").split(",")) + .map(stringDateForYear => { + const [year, stringDateInterval] = stringDateForYear.split("="); + const [start, end] = (stringDateInterval || "").split("-").map(parseDate); + return year ? [year, { start, end }] : null; + }) + .compact() + .fromPairs() + .value(); +} + +class Factory { + constructor(d2, config) { + this.d2 = d2; + this.config = config; + } + + get() { + const dataset = this.getInitialModel(); + return this.getStore(dataset, "add"); + } + + getFromDB(id) { + return this.getDataset(id).then(dataset => { + return this.getStore(dataset, "edit"); + }); + } + + cloneFromDB(id) { + return this.getDataset(id).then(dataset => { + dataset.id = undefined; + dataset._sourceId = id; + dataset._sourceName = dataset.name; + dataset.code = undefined; + dataset.dataInputPeriods.forEach(dip => { + dip.id = generateUid(); + }); + dataset.dataSetElements.forEach(dse => { + dse.dataSet = { id: undefined }; + }); + toArray(dataset.sections).forEach(section => { + section.id = undefined; + }); + // On dataset clone, the custom form is reused, clear the field explicitly + dataset.dataEntryForm = undefined; + return this.getStore(dataset, "clone"); + }); + } + + getStore(dataset, action) { + return this.getCountries().then(countries => + this.getAssociations(dataset, countries).then( + associations => + new DataSetStore(action, this.d2, this.config, countries, dataset, associations) + ) + ); + } + + getDataset(id) { + const fields = [ + "*,dataSetElements[*,categoryCombo[*,categories[id,name,displayName]],dataElement[*,categoryCombo[*]]]", + "sections[*,code,href],organisationUnits[*],dataEntryForm[id]", + ].join(","); + return this.d2.models.dataSets.get(id, { fields }); + } + + getCountries() { + const countryLevelId = this.config.organisationUnitLevelForCountriesId; + return countryLevelId + ? getOrgUnitsForLevel(this.d2, countryLevelId) + : Promise.reject("No country level configured"); + } + + getInitialModel() { + return this.d2.models.dataSet.create({ + attributeValues: [], + name: undefined, + code: undefined, + description: undefined, + expiryDays: 0, + openFuturePeriods: 1, + periodType: "Monthly", + dataInputPeriods: [], + categoryCombo: { id: this.config.categoryComboId }, + notifyCompletingUser: false, + noValueRequiresComment: false, + legendSets: [], + organisationUnits: [], + skipOffline: false, + dataElementDecoration: true, + renderAsTabs: true, + indicators: [], + dataSetElements: [], + sections: [], + publicAccess: "--------", + }); + } + + getCountriesFromSharing(dataset, countries) { + const datasetId = dataset.id || dataset._sourceId; + + if (datasetId) { + const _dataset = this.d2.models.dataSets.create({ id: datasetId }); + const countriesByCode = _.keyBy(countries, getCountryCode); + const getCode = userGroupAccess => userGroupAccess.displayName.split("_")[0]; + return getSharing(this.d2, _dataset) + .then(sharing => + _(sharing.object.userGroupAccesses) + .map(getCode) + .compact() + .uniq() + .value() + ) + .then(sharingCountryCodes => + _(countriesByCode) + .at(sharingCountryCodes) + .compact() + .value() + ) + .catch(err => { + console.error( + "Cannot get sharing for dataset, default to empty countries", + err + ); + return []; + }); + } else { + return Promise.resolve([]); + } + } + + getUserRolesForCurrentUser() { + // d2.currentUser.getUserRoles generates an invalid URL. Use directly endpoint /api/me instead. + const api = d2.Api.getApi(); + return api + .get("/me", { fields: "userCredentials[userRoles[id,name]]" }) + .then(user => user.userCredentials.userRoles); + } + + getAssociations(dataset, countries) { + const promises = [ + getProject(this.d2, this.config, dataset), + getCoreCompetencies(this.d2, this.config, dataset), + this.getCountriesFromSharing(dataset, countries), + this.getUserRolesForCurrentUser(), + ]; + + return Promise.all(promises).then( + ([project, coreCompetencies, sharingCountries, userRoles]) => ({ + project, + coreCompetencies, + initialOrgUnits: collectionToArray(dataset.organisationUnits), + initialSections: collectionToArray(dataset.sections), + initialCoreCompetencies: coreCompetencies, + processedCoreCompetencies: coreCompetencies, + sections: collectionToArray(dataset.sections), + countries: sharingCountries, + userRoles, + ...dataPeriods.getDataInputDates(dataset, this.config), + ...this.getPeriodAssociations(dataset), + }) + ); + } + + getPeriodAssociations(dataset) { + const { dataPeriodOutputDatesAttributeId, dataPeriodOutcomeDatesAttributeId } = this.config; + + const valueByAttrId = _(dataset.attributeValues) + .map(av => [av.attribute.id, av.value]) + .fromPairs() + .value(); + + const output = parsePeriodDates(valueByAttrId[dataPeriodOutputDatesAttributeId]); + const outcome = parsePeriodDates(valueByAttrId[dataPeriodOutcomeDatesAttributeId]); + + const hasSameDatesAcrossYears = datesByYear => { + return _(datesByYear) + .values() + .map(dates => + _(dates) + .values() + .map(date => (date ? moment(date).format("MM-DD") : undefined)) + .value() + ) + .unzip() + .every(datesGroup => datesGroup.length > 1 && _.uniq(datesGroup).length === 1); + }; + + return { + periodDatesApplyToAll: { + output: hasSameDatesAcrossYears(output), + outcome: hasSameDatesAcrossYears(outcome), + }, + periodDates: { output, outcome }, + }; + } +} + +export default class DataSetStore { + constructor(action, d2, config, countries, dataset, associations) { + this.action = action; + this.d2 = d2; + this.api = d2.Api.getApi(); + this.config = config; + this.countriesByCode = _.keyBy(countries, getCountryCode); + this.countriesById = _.keyBy(countries, "id"); + this.countryLevel = _.isEmpty(countries) ? null : countries[0].level; + this.dataset = dataset; + this.associations = associations; + window.store = this; + } + + getTranslation(...args) { + return this.d2.i18n.getTranslation(...args); + } + + static add(d2, config) { + const factory = new Factory(d2, config); + return factory.get(); + } + + static edit(d2, config, datasetId) { + const factory = new Factory(d2, config); + return factory.getFromDB(datasetId); + } + + static clone(d2, config, datasetId) { + const factory = new Factory(d2, config); + return factory.cloneFromDB(datasetId); + } + + static getPeriodAssociations(d2, config, dataset) { + const factory = new Factory(d2, config); + return factory.getPeriodAssociations(dataset); + } + + isSharingStepVisible() { + return !this.associations.project; + } + + getPeriodYears() { + const { dataInputStartDate, dataInputEndDate } = this.associations; + if (!dataInputStartDate || !dataInputEndDate) { + return []; + } else { + const startYear = moment(dataInputStartDate).year(); + const endYear = moment(dataInputEndDate) + .add(1, "year") + .year(); + return _.range(startYear, endYear); + } + } + + getPeriodDates() { + const { associations } = this; + const { periodDatesApplyToAll, periodDates } = associations; + const years = this.getPeriodYears(); + const firstYear = years[0]; + const processDate = (date, index) => + date + ? moment(date) + .add(index, "years") + .format("YYYY-MM-DD") + : undefined; + + return _(periodDates) + .mapValues((datesByYear, type) => { + const datesFirstYear = periodDates[type][firstYear]; + const applyToAll = periodDatesApplyToAll[type]; + return _(years) + .map((year, index) => { + const dates = datesByYear[year]; + const value = + applyToAll && datesFirstYear + ? { + start: processDate(datesFirstYear.start, 0), + end: processDate(datesFirstYear.end, index), + } + : { + start: dates ? processDate(dates.start, 0) : undefined, + end: dates ? processDate(dates.end, 0) : undefined, + }; + return [year, value]; + }) + .fromPairs() + .value(); + }) + .value(); + } + + async _getCustomForm(saving, categoryCombos_) { + const { richSections, dataset } = saving; + const periodDates = this.getPeriodDates(); + const categoryCombos = categoryCombos_ || (await this.getCategoryCombos(dataset)); + const id = (dataset.dataEntryForm ? dataset.dataEntryForm.id : null) || generateUid(); + + return getCustomForm(this.d2, dataset, periodDates, richSections, categoryCombos).then( + htmlCode => ({ + id: id, + style: "NORMAL", + htmlCode, + name: [dataset.id, id].join("-"), // Form name must be unique + }) + ); + } + + getDataInputPeriods(options) { + const { dataInputStartDate: startDate, dataInputEndDate: endDate, periodDates } = options; + if (!startDate || !endDate) return []; + + const outputStart = _.min(_.compact(_.values(periodDates.output).map(x => x.start))); + const outputEnd = _.max(_.compact(_.values(periodDates.output).map(x => x.end))); + const outcomeStart = _.min(_.compact(_.values(periodDates.outcome).map(x => x.start))); + const outcomeEnd = _.max(_.compact(_.values(periodDates.outcome).map(x => x.end))); + + const dataInputStart = _.min(_.compact([startDate, outputStart, outcomeStart])); + const dataInputEnd = _.max(_.compact([endDate, outputEnd, outcomeEnd])); + + const endDateM = moment(endDate); + let currentDateM = moment(startDate); + let periods = []; + + while (currentDateM <= endDateM) { + periods.push({ + id: generateUid(), + period: { id: currentDateM.format("YYYYMM") }, + openingDate: formatDateToISO(dataInputStart), + closingDate: formatDateToISO(dataInputEnd), + }); + currentDateM.add(1, "month").startOf("month"); + } + + return periods; + } + + getOpenFuturePeriods(endDate) { + if (endDate) { + const endDateM = moment(endDate); + const currentDate = moment(); + const monthsDiff = Math.ceil(moment(endDateM).diff(currentDate, "months", true)); + return monthsDiff > 0 ? monthsDiff + 1 : 1; + } else { + return 1; + } + } + + getDataFromProject(dataset, associations) { + const { project } = associations; + this.associations.countries = this.getSharingCountries(); + + if (project) { + const newDataset = dataset; + const newAssociations = _.clone(associations); + + newDataset.name = project.displayName ? `${project.displayName} DataSet` : ""; + newAssociations.dataInputStartDate = project.startDate + ? new Date(project.startDate) + : undefined; + newAssociations.dataInputEndDate = project.endDate + ? new Date(project.endDate) + : undefined; + newDataset.openFuturePeriods = this.getOpenFuturePeriods( + newAssociations.dataInputEndDate + ); + newDataset.dataInputPeriods = this.getDataInputPeriods(newAssociations); + newDataset.organisationUnits = project.organisationUnits; + return { dataset: newDataset, associations: newAssociations }; + } else { + const newDataset = dataset; + const newAssociations = _.clone(associations); + + newDataset.name = ""; + newAssociations.dataInputStartDate = undefined; + newAssociations.dataInputEndDate = undefined; + newAssociations.countries = []; + newDataset.openFuturePeriods = this.getOpenFuturePeriods( + newAssociations.dataInputEndDate + ); + newDataset.dataInputPeriods = this.getDataInputPeriods(newAssociations); + newDataset.organisationUnits.clear(); + return { dataset: newDataset, associations: newAssociations }; + } + } + + getSharingCountries() { + const { dataset, associations, countriesByCode, countriesById } = this; + const { project } = associations; + const projectCountryCode = + project && project.code ? project.code.slice(0, 2).toUpperCase() : null; + + const dataSetCountryIds = _(toArray(dataset.organisationUnits)) + .map(ou => ou.path.split("/")[3]) + .uniq() + .value(); + + if (projectCountryCode && countriesByCode[projectCountryCode]) { + return [countriesByCode[projectCountryCode]]; + } else { + return _(countriesById) + .at(dataSetCountryIds) + .compact() + .value(); + } + } + + setDefaultPeriodValues() { + const { + outputEndDate, + outcomeEndDate, + outputLastYearEndDate, + outcomeLastYearEndDate, + } = this.config; + const { dataInputStartDate, dataInputEndDate } = this.associations; + if (!(dataInputStartDate && dataInputEndDate)) return; + + const years = this.getPeriodYears(); + const lastYear = _.last(years); + const dataInputEndDateM = moment(dataInputEndDate); + + const getPeriodDates = (years, endDate, endDateOffset) => { + const { month = 4, day = 1 } = endDate; + const { units, value } = endDateOffset; + + return _(years) + .map(year => { + const defaultEndM = moment([year + 1, month - 1, day]); + const lastYearEndDateM = + units && value + ? dataInputEndDateM.clone().add(value, units) + : dataInputEndDateM; + const endM = year === lastYear ? lastYearEndDateM : defaultEndM; + const start = dataInputStartDate; + const period = { start, end: endM.toDate() }; + return [year, period]; + }) + .fromPairs() + .value(); + }; + + _.assign(this.associations, { + periodDatesApplyToAll: { + output: false, + outcome: false, + }, + periodDates: { + output: getPeriodDates(years, outputEndDate, outputLastYearEndDate), + outcome: getPeriodDates(years, outcomeEndDate, outcomeLastYearEndDate), + }, + }); + } + + updateLinkedFields(fieldPath, oldValue) { + const { dataset, associations } = this; + + switch (fieldPath) { + case "associations.project": + if (!oldValue || window.confirm(this.getTranslation("confirm_project_updates"))) { + const { + dataset: newDataset, + associations: newAssociations, + } = this.getDataFromProject(dataset, associations); + this.dataset = newDataset; + this.associations = newAssociations; + this.setDefaultPeriodValues(); + } + break; + case "associations.dataInputStartDate": + case "associations.dataInputEndDate": + const { dataInputEndDate } = associations; + this.setDefaultPeriodValues(); + this.dataset.openFuturePeriods = this.getOpenFuturePeriods(dataInputEndDate); + this.dataset.dataInputPeriods = this.getDataInputPeriods(associations); + break; + case "associations.organisationUnits": + this.associations.countries = this.getSharingCountries(); + break; + default: + if (fieldPath.startsWith("associations.periodDates")) { + this.dataset.dataInputPeriods = this.getDataInputPeriods(associations); + } + break; + } + } + + updateField(fieldPath, newValue) { + const oldValue = fp.get(fieldPath, this); + _.set(this, fieldPath, newValue); + this.updateLinkedFields(fieldPath, oldValue); + } + + processDatasetSections(dataset, stateSections) { + this.associations.processedCoreCompetencies = this.associations.coreCompetencies; + return Section.processDatasetSections(this.d2, this.config, dataset, stateSections); + } + + setGreyedFields(greyedFieldsForSections) { + const sections = collectionToArray(this.dataset.sections); + + if (sections.length !== greyedFieldsForSections.length) { + throw new Error("setGreyedFields: invalid input array length"); + } + _(sections) + .zip(greyedFieldsForSections) + .each(([section, greyedFields]) => update(section, { greyedFields })); + } + + hasSections() { + return collectionToArray(this.dataset.sections).length > 0; + } + + getCategoryCombos(dataset) { + const categoryComboIds = _(dataset.dataSetElements) + .flatMap(dse => [ + _.get(dse, "dataElement.categoryCombo.id"), + _.get(dse, "categoryCombo.id"), + ]) + .compact() + .uniq() + .value(); + + return getCategoryCombos(this.d2, { + cocFields: "id,categoryOptions[id]", + filterIds: categoryComboIds, + }); + } + + /* Save */ + + _getInitialSaving() { + const { countries, project } = this.associations; + const userGroups$ = this.d2.models.userGroups.list({ paging: false, fields: "id,name" }); + const project$ = project + ? this.d2.models.categoryOption.get(project.id) + : Promise.resolve(null); + const categoryCombos$ = this.getCategoryCombos(this.dataset); + + const countryCodes = _(countries) + .map(getCountryCode) + .compact() + .value(); + + return Promise.all([userGroups$, project$, categoryCombos$]).then( + ([userGroups, project, categoryCombos]) => { + return { + dataset: this.dataset, + warnings: [], + project: project, + countryCodes: countryCodes, + userGroups: toArray(userGroups), + metadata: {}, + categoryCombos: categoryCombos, + }; + } + ); + } + + _processDisaggregation(saving) { + const { dataset, categoryCombos } = saving; + + const existingCategoryCombos = new Set(toArray(categoryCombos).map(cc => cc.id)); + const dataSetElements = collectionToArray(dataset.dataSetElements); + const removeUnusedGreyedFields = (sections, newCategoryCombos) => { + const categoryComboOptionsByCCId = _(collectionToArray(saving.categoryCombos)) + .concat(newCategoryCombos) + .map(cc => [cc.id, toArray(cc.categoryOptionCombos).map(coc => coc.id)]) + .fromPairs() + .value(); + + const allowedGreyedFieldKeys = new Set( + _(dataSetElements) + .flatMap(dse => + _([dse.dataElement.id]) + .cartesianProduct(categoryComboOptionsByCCId[getCategoryCombo(dse).id]) + .map(([dataElementId, cocId]) => dataElementId + "." + cocId) + .value() + ) + .value() + ); + + return collectionToArray(sections).map(section => { + const allowedGreyedFields = section.greyedFields.filter(greyedField => { + const key = + greyedField.dataElement.id + "." + greyedField.categoryOptionCombo.id; + return allowedGreyedFieldKeys.has(key); + }); + section.greyedFields = allowedGreyedFields; + return section; + }); + }; + + const newCategoryCombos = _(dataSetElements) + .map(getCategoryCombo) + .uniqBy(cc => cc.id) + .filter(cc => !existingCategoryCombos.has(cc.id)) + .map(cc => this._addSharingToCategoryCombo(saving, cc)) + .value(); + const newCategoryComboOptions = _(newCategoryCombos) + .flatMap(cc => toArray(cc.categoryOptionCombos)) + .value(); + + dataset.sections = removeUnusedGreyedFields(dataset.sections, newCategoryCombos); + + const savingWithAllCategoryCombos = { + ...saving, + categoryCombos: saving.categoryCombos.toArray().concat(newCategoryCombos), + }; + + return this._addMetadataOp(savingWithAllCategoryCombos, { + create_and_update: { + categoryCombos: newCategoryCombos, + categoryOptionCombos: newCategoryComboOptions, + }, + }); + } + + _setDatasetId(saving) { + const { dataset } = saving; + const datasetId = dataset.id || generateUid(); + return _.imerge(saving, { dataset: update(dataset, { id: datasetId }) }); + } + + async _saveDataset(saving) { + const { dataset, categoryCombos } = saving; + + const form = await this._getCustomForm(saving, categoryCombos); + + // Cleanup dataSetElements to avoid "circular references" error on POST + const datasetPayload = getOwnedPropertyJSON(dataset); + const newDataSetElements = dataset.dataSetElements.map(dataSetElement => ({ + dataSet: { id: dataset.id }, + dataElement: { id: dataSetElement.dataElement.id }, + categoryCombo: { id: getCategoryCombo(dataSetElement).id }, + })); + datasetPayload.dataSetElements = newDataSetElements; + datasetPayload.dataEntryForm = { id: form.id }; + datasetPayload.expiryDays = 0; + + return this._addMetadataOp(saving, { + create_and_update: { + dataSets: [datasetPayload], + dataEntryForms: [form], + }, + }); + } + + _setDatasetCode(saving) { + const { dataset, warnings } = saving; + const { project } = this.associations; + const projectCode = project ? project.code : null; + + if (projectCode) { + const datasetCode = projectCode + " Data Set"; + const codeValidator = getAsyncUniqueValidator(this.d2.models.dataSet, "code"); + return codeValidator(datasetCode) + .then(() => _.imerge(saving, { dataset: update(dataset, { code: datasetCode }) })) + .catch(_err => + _.imerge(saving, { + warnings: warnings.concat(["Dataset code already used: " + datasetCode]), + }) + ); + } else { + return Promise.resolve(saving); + } + } + + _setDatasetShortName(saving) { + const { dataset, warnings } = saving; + const shortName = dataset.name.slice(0, 50); + const validator = getAsyncUniqueValidator(this.d2.models.dataSet, "shortName"); + + return validator(shortName) + .then(() => _.imerge(saving, { dataset: update(dataset, { shortName: shortName }) })) + .catch(_err => + _.imerge(saving, { + warnings: warnings.concat(["Dataset shortName already used: " + shortName]), + }) + ); + } + + _addSharingToCategoryCombo(saving, categoryCombo) { + const userGroupSharingByName = _(saving.countryCodes) + .map(countryCode => [countryCode + "_Users", { access: "r-------" }]) + .fromPairs() + .value(); + const sharing = buildSharingFromUserGroupNames( + {}, + saving.userGroups, + userGroupSharingByName + ); + return update(categoryCombo, sharing.object); + } + + _addWarnings(saving, msgs) { + return _.imerge(saving, { warnings: saving.warnings.concat(msgs) }); + } + + _addSharingToDataset(saving) { + const { dataset } = saving; + + const userGroupSharingByName = _(saving.countryCodes) + .flatMap(countryCode => [ + [countryCode + "_Users", { access: "r-rw----" }], + [countryCode + "_Administrators", { access: "rwrw----" }], + ]) + .fromPairs() + .value(); + + const baseSharing = { object: { publicAccess: dataset.publicAccess } }; + const sharing = buildSharingFromUserGroupNames( + baseSharing, + saving.userGroups, + userGroupSharingByName + ); + const datasetWithSharing = update(dataset, sharing.object); + return _.imerge(saving, { dataset: datasetWithSharing }); + } + + _processSections(saving) { + const { dataset } = saving; + const { coreCompetencies, initialCoreCompetencies } = this.associations; + return Section.getSections( + this.d2, + this.config, + dataset, + initialCoreCompetencies, + coreCompetencies + ).then(sectionsArray => { + const sections = _.keyBy(sectionsArray, "name"); + const { errors, dataset: newDataset } = this.processDatasetSections(dataset, sections); + + return _(errors).isEmpty() + ? _.imerge(saving, { dataset: newDataset, richSections: sectionsArray }) + : Promise.reject("Cannot get sections. Go to sections step for more details"); + }); + } + + _saveSections(saving) { + const { dataset } = saving; + const { initialSections } = this.associations; + const sections = collectionToArray(dataset.sections); + + const datasetId = dataset.id; + const sectionsToSave = _(sections) + .filter(section => section.dataElements.size > 0 || section.indicators.size > 0) + .sortBy(section => section.name) + .map(section => update(section, { dataSet: { id: datasetId } })) + .value(); + const sectionsToSaveIds = sectionsToSave.map(section => section.id); + const sectionsToDelete = initialSections.filter( + existingSection => + existingSection.id && !_.includes(sectionsToSaveIds, existingSection.id) + ); + + // Metadata API for sections delete returns 500 (see https://jira.dhis2.org/browse/DHIS2-2541), + // so we will use metada only to create/update sections. Delete sections using non-batch d2 methods. + const deleteSections$ = mapPromise(sectionsToDelete, section => { + return section.delete().catch(err => { + if (err && err.httpStatusCode === 404) { + return Promise.resolve(true); + } else { + throw err; + } + }); + }); + return deleteSections$.then(() => + this._addMetadataOp(saving, { create_and_update: { sections: sectionsToSave } }) + ); + } + + _addMetadataOp(saving, metadata) { + return deepMerge(saving, { metadata: metadata }); + } + + _addOrgUnitsToProject(saving) { + const { dataset, project } = saving; + + const orgUnits = collectionToArray(dataset.organisationUnits); + const initialOrgUnitIds = _.sortBy(this.associations.initialOrgUnits.map(ou => ou.id)); + const newOrgUnitIds = _.sortBy(toArray(dataset.organisationUnits).map(ou => ou.id)); + const orgUnitsWereChanged = !_.isEqual(initialOrgUnitIds, newOrgUnitIds); + const projectsService = new ProjectsService(this.api, this.config); + + if (project && !_(orgUnits).isEmpty() && orgUnitsWereChanged) { + return projectsService + .updateOrgUnits(project, orgUnits) + .then(() => saving) + .catch(err => { + const errStr = JSON.stringify(err); + const msg = `Error adding orgUnits to ${project.displayName}: ${errStr}`; + return this._addWarnings(saving, [msg]); + }); + } else { + return Promise.resolve(saving); + } + } + + _getUserGroupsForNotifications() { + return _(this.associations.countries) + .map(getCountryCode) + .compact() + .map(countryCode => countryCode + "_M&EDatasetCompletion") + .concat(["GL_GlobalAdministrator"]) + .value(); + } + + _sendNotificationMessages(saving) { + const { dataset, warnings } = saving; + const d2 = this.d2; + const userName = this.d2.currentUser.name; + const op = this.action === "edit" ? "edited" : "created"; + const warningsList = warnings.map(s => "- " + s).join("\n"); + const msg = { + subject: + `Dataset ${op}: ${dataset.name}` + + (_(warnings).isEmpty() ? "" : " (with warnings)"), + body: + `Dataset ${op}: ${dataset.name} by ${userName}.` + + (_(warnings).isEmpty() ? "" : `\n\nWarnings: \n\n${warningsList}`), + }; + const userGroupNames = this._getUserGroupsForNotifications(); + + return getUserGroups(d2, userGroupNames) + .then(toArray) + .then(userGroups => sendMessage(d2, msg.subject, msg.body, userGroups)) + .then(() => saving) + .catch(err => { + // An error sending a notification message is not critical, log and continue + console.error("Could not send message", err); + return saving; + }); + } + + _runMetadataOps(saving) { + return postMetadata(this.d2, saving.metadata).then(() => saving); + } + + _notifyError(err) { + const datasetName = this.dataset.name; + const stringErr = err.message || err; + const title = `[dataset-configuration] Error when saving dataset '${datasetName}'`; + const currentUser = this.d2.currentUser; + const currentUserInfo = `User: ${currentUser.username} (${currentUser.id})`; + const body = [ + `There has been an error when dataset '${datasetName}' was being saved.`, + currentUserInfo, + stringErr, + ].join("\n\n"); + const userGroupNames = this._getUserGroupsForNotifications(); + + sendMessageToGroups(this.d2, userGroupNames, title, body); + throw err; + } + + _setAttributes(saving) { + const attributeKeys = [ + "createdByDataSetConfigurationAttributeId", + "dataPeriodIntervalDatesAttributeId", + ]; + + const missingAttributeKeys = attributeKeys.filter(key => !this.config[key]); + + if (!_(missingAttributeKeys).isEmpty()) { + this._notifyError({ + message: `Missing settings: ${missingAttributeKeys.join(", ")}`, + }); + return Promise.resolve(saving); + } + + const dataInterval = [ + dataPeriods.formatDate(this.associations.dataInputStartDate), + dataPeriods.formatDate(this.associations.dataInputEndDate), + ].join("-"); + + const attributeValues = dataPeriods.getAttributeValues(this, saving.dataset); + const valuesByKey = { + createdByDataSetConfigurationAttributeId: "true", + dataPeriodIntervalDatesAttributeId: dataInterval, + }; + const values = _.mapKeys(valuesByKey, (_value, key) => this.config[key]); + const newAttributeValues = setAttributes(attributeValues, values); + saving.dataset.attributeValues = newAttributeValues; + return Promise.resolve(saving); + } + + _processSave(methods) { + const reducer = (accPromise, method) => accPromise.then(method.bind(this)); + return methods + .reduce(reducer, this._getInitialSaving()) + .catch(err => this._notifyError(err)); + } + + buildCustomForm(categoryCombos) { + return this._processSections({ dataset: this.dataset }).then(saving => + this._getCustomForm(saving, categoryCombos) + ); + } + + save() { + return this._processSave([ + this._setAttributes, + this._setDatasetId, + this._setDatasetCode, + this._setDatasetShortName, + this._addSharingToDataset, + this._processSections, + this._processDisaggregation, + this._saveSections, + this._saveDataset, + this._runMetadataOps, + this._addOrgUnitsToProject, + this._sendNotificationMessages, + ]); + } +} + +function formatDateToISO(date) { + if (!date) return undefined; + + const dateParts = [ + padDigits(date.getFullYear(), 4), + padDigits(date.getMonth() + 1, 2), + padDigits(date.getDate(), 2), + ]; + return dateParts.join("-") + "T00:00:00.000"; +} + +function padDigits(number: number, digits: number): string { + return Array(Math.max(digits - String(number).length + 1, 0)).join("0") + number; +} diff --git a/src/models/ProjectService.js b/src/models/ProjectService.js new file mode 100644 index 000000000..a9af16474 --- /dev/null +++ b/src/models/ProjectService.js @@ -0,0 +1,66 @@ +import _ from "lodash"; +import { collectionToArray } from "../utils/Dhis2Helpers"; + +export class ProjectsService { + constructor(api, config) { + this.api = api; + this.config = config; + } + + async updateOrgUnits(project, orgUnits) { + const categoryOptionUrl = `/categoryOptions/${project.id}`; + const categoryOption = await this.api.get(categoryOptionUrl, { fields: ":owner" }); + const payload = { + ...categoryOption, + organisationUnits: orgUnits.map(ou => ({ id: ou.id })), + }; + return this.api.update(`/categoryOptions/${project.id}`, payload); + } + + async updateOrgUnitsFromDataSets(dataSetRefs) { + if (!this.config.categoryProjectsId) return; + + const projectCategoryUrl = `/categories/${this.config.categoryProjectsId}`; + const projectCategory = await this.api.get(projectCategoryUrl, { + fields: "categoryOptions[id,name]", + }); + if (!projectCategory) return; + + const { dataSets } = await this.api.get("/dataSets", { + fields: "id,name,organisationUnits[id]", + filter: `id:in:[${dataSetRefs.map(ds => ds.id)}]`, + }); + + const allProjects = projectCategory.categoryOptions; + + const orgUnitsByProjectId = _(dataSets) + .map(dataSet => { + const project = allProjects.find(project => _.includes(dataSet.name, project.name)); + return project ? [project.id, collectionToArray(dataSet.organisationUnits)] : null; + }) + .compact() + .fromPairs() + .value(); + + const projectIds = _.keys(orgUnitsByProjectId); + if (_.isEmpty(projectIds)) return; + + const res = await this.api.get(`/categoryOptions`, { + fields: ":owner", + filter: `id:in:[${projectIds.join(",")}]`, + }); + + const projects = res.categoryOptions || []; + + const projectsUpdated = projects.map(categoryOption => { + const orgUnits = orgUnitsByProjectId[categoryOption.id]; + return { ...categoryOption, organisationUnits: orgUnits.map(ou => ({ id: ou.id })) }; + }); + + const postRes = await this.api.post(`/metadata`, { categoryOptions: projectsUpdated }); + + if (postRes.status !== "OK") { + throw new Error(`Error updating projects: ${res.status}`); + } + } +} diff --git a/src/models/Section.js b/src/models/Section.js new file mode 100644 index 000000000..83156a5ae --- /dev/null +++ b/src/models/Section.js @@ -0,0 +1,649 @@ +import { generateUid } from "d2/lib/uid"; +import _ from "lodash"; +import { update, collectionToArray, subQuery, getOwnedPropertyJSON } from "../utils/Dhis2Helpers"; +import fp from "lodash/fp"; +import memoize from "nano-memoize"; + +const toArray = collectionToArray; + +/* Return an array of sections containing its data elements and associated indicators. Schema: + + [{ + name: string + showRowTotals: boolean + showColumnTotals: boolean + items: {id: { + type: "dataElement" | "indicator" + id: string + name: string + selected: boolean + origin: string + disaggregation: string + group: string + } + }] + +Notes: + + * DataElements can only be used within one section. Since we are getting DataElements from + indicators, we can have duplicated items that must be removed. +*/ +export const getSections = (d2_, config, dataset, initialCoreCompetencies, coreCompetencies) => { + const d2 = getCachedD2(d2_); + + const data$ = [ + getDataElementGroupRelations(d2), + getIndicatorGroupRelations(d2), + getIndicatorsByGroupName(d2, coreCompetencies), + getOutputDataElementsByCoreCompetencyId(d2, config, coreCompetencies), + ]; + + return Promise.all(data$).then( + ([degRelations, igRelations, indicatorsByGroupName, dataElementsByCCId]) => { + return Promise.all( + _.flatMap(coreCompetencies, coreCompetency => { + const opts = { + d2, + config, + coreCompetency, + degRelations, + igRelations, + indicatorsByGroupName, + dataElementsByCCId, + }; + return [getOutputSection(opts), getOutcomeSection(opts)]; + }) + ).then(sections => + updateSectionsFromD2Sections( + sections, + collectionToArray(dataset.sections), + initialCoreCompetencies + ) + ); + } + ); +}; + +// Cache d2.models[].list() +let cachedD2; + +const getCachedD2 = d2 => { + if (cachedD2) { + return cachedD2; + } else { + const models = _(d2.models) + .mapValues(model => { + const model2 = model.clone(); + model2.list = memoize(opts => model.list(opts), { serializer: JSON.stringify }); + return model2; + }) + .value(); + cachedD2 = { ...d2, models }; + return cachedD2; + } +}; + +const validateCoreItemsSelectedForCurrentUser = (_d2, _config) => { + return false; +}; + +/* Return an object with the info of the sections and selected dataElements/indicators and errors: + + { + sections: [d2.models.Section] + dataSetElements: [dataSetElement] + indicators: [Indicator] + errors: [String] + } +*/ +export const getDataSetInfo = (d2, config, dataset, sections) => { + const validateCoreSelected = validateCoreItemsSelectedForCurrentUser(d2, config); + + const d2Sections = _(sections) + .map(section => getD2Section(d2, dataset, section)) + .map((d2s, index) => _.set(d2s, "sortOrder", index)) + .value(); + const dataElements = _(d2Sections) + .flatMap(d2s => toArray(d2s.dataElements)) + .value(); + const indicators = _(d2Sections) + .flatMap(d2s => toArray(d2s.indicators)) + .value(); + const dataSetElements = dataElements.map(dataElement => ({ + id: generateUid(), + dataSet: {}, + categoryCombo: dataElement.categoryCombo, + dataElement: { + id: dataElement.id, + displayName: dataElement.displayName, + categoryCombo: dataElement.categoryCombo, + }, + })); + const dataElementsById = _(dataElements) + .keyBy("id") + .value(); + const dataElementErrors = _(dataElements) + .map("id") + .countBy() + .map((count, deId) => (count > 1 ? deId : null)) + .compact() + .map(repeatedId => { + const deName = dataElementsById[repeatedId].displayName; + const invalidSections = d2Sections + .filter(d2Section => d2Section.dataElements.has(repeatedId)) + .map(d2Section => d2Section.name); + return { + key: "data_element_in_multiple_sections", + message: `Data element '${deName}' is used in multiple sections: ${invalidSections.join( + ", " + )}`, + }; + }) + .value(); + const emptyCoreCompetenciesErrors = _(sections) + .groupBy(section => section.coreCompetency.name) + .toPairs() + .filter( + ([_ccName, sectionsForCC]) => + !_(sectionsForCC) + .flatMap(section => _.values(section.items)) + .some("selected") + ) + .map(([ccName, _sectionsForCC]) => ({ + key: "core_competency_no_items", + message: `Core competency ${ccName} has no data elements or indicators selected`, + })) + .value(); + + const nonCoreItemsSelectedErrors = () => + _(sections) + .groupBy(section => section.coreCompetency.name) + .toPairs() + .filter( + ([_ccName, sectionsForCC]) => + !_(sectionsForCC) + .flatMap(section => _.values(section.items)) + .some(item => item.selected && item.isCore) + ) + .map(([ccName, _sectionsForCC]) => ({ + key: "core_competency_no_core_items", + message: `Core competency ${ccName} has no core data elements or indicators selected`, + })) + .value(); + + const errors = _.concat( + dataElementErrors, + emptyCoreCompetenciesErrors, + validateCoreSelected ? nonCoreItemsSelectedErrors() : [] + ); + return { sections: d2Sections, dataSetElements, indicators, errors }; +}; + +/* Return status key of item (dataElement or indicator). + + Values: "unknown" | "active" | "inactive" | "phased-out" +*/ +export const getItemStatus = item => { + if (!item.status) { + return "unknown"; + } else if (item.status.startsWith("Active")) { + return "active"; + } else if (item.status.startsWith("Inactive")) { + return "inactive"; + } else if (item.status.startsWith("Phased")) { + return "phased-out"; + } else { + return "unknown"; + } +}; + +export const processDatasetSections = (d2, config, dataset, stateSections) => { + const { sections, dataSetElements, indicators, errors } = getDataSetInfo( + d2, + config, + dataset, + _.values(stateSections) + ); + + const prevSections = collectionToArray(dataset.sections); + const sectionsByName = _(sections) + .keyBy("name") + .value(); + const prevSectionsByName = _(prevSections) + .keyBy("name") + .value(); + const allNames = _(sections) + .concat(prevSections) + .map("name") + .uniq() + .value(); + + const mergedSections = allNames.map(name => { + const section = sectionsByName[name]; + if (section) { + // Keep id/href/greyedFields for existing sections + const prevSection = prevSectionsByName[name] || {}; + update(section, _.pick(prevSection, ["id", "href", "greyedFields"])); + return section; + } else { + // Section has no DE/indicators in this new configuration + const section = prevSectionsByName[name]; + section.dataElements.clear(); + section.indicators.clear(); + return section; + } + }); + + // Don't override dataSetElements (disaggregation) + const newDataSetElements = _.keyBy(dataSetElements, dse => dse.dataElement.id); + const prevDataSetElements = _.keyBy(dataset.dataSetElements || [], dse => dse.dataElement.id); + const mergedDataSetElements = _({ ...newDataSetElements, ...prevDataSetElements }) + .at(_.keys(newDataSetElements)) + .value(); + + const newDataset = update(dataset, { + sections: mergedSections, + dataSetElements: mergedDataSetElements, + indicators: indicators, + }); + return { errors, dataset: newDataset }; +}; + +export const sectionSelectedItemsCount = sections => { + return _(sections) + .flatMap((section, _sectionName) => _.values(section.items)) + .filter(item => item.selected) + .flatMap(item => (item.type === "dataElement" ? 1 : item.dataElements.length + 1)) + .sum(); +}; + +/* Private functions */ + +const sectionSep = "@"; + +const getSectionName = d2Section => { + return d2Section.name.split(sectionSep)[0]; +}; + +const updateSectionsFromD2Sections = (sections, d2Sections, initialCoreCompetencies) => { + const d2SectionsByName = _(d2Sections) + .groupBy(getSectionName) + .value(); + const updateSection = section => { + const d2SectionsForSection = d2SectionsByName[section.name]; + const sectionWasInInitialCoreCompetencies = _(initialCoreCompetencies).some( + cc => cc.id === section.coreCompetency.id + ); + + if (d2SectionsForSection) { + const d2Section = d2SectionsForSection[0]; + const itemsIds = new Set( + _(d2SectionsForSection) + .flatMap(d2s => [ + collectionToArray(d2s.dataElements).map(de => "dataElement-" + de.id), + collectionToArray(d2s.indicators).map(ind => "indicator-" + ind.id), + ]) + .flatten() + .value() + ); + + section.showRowTotals = d2Section.showRowTotals; + section.showColumnTotals = d2Section.showColumnTotals; + section.items = _.mapValues(section.items, item => + fp.merge(item, { selected: itemsIds.has(item.type + "-" + item.id) }) + ); + } else if (sectionWasInInitialCoreCompetencies) { + // This section was not persisted, but its core compentency was amongst the initial ones, + // meaning that no items were selected. So clear all default _selected_ values. + section.items = _.mapValues(section.items, obj => fp.merge(obj, { selected: false })); + } + + // Add attribute selectedOnLoad required to sort items by the default criteria + section.items = _(section.items) + .mapValues(obj => _.set(obj, "selectedOnLoad", obj.selected)) + .value(); + return section; + }; + + return sections.map(updateSection); +}; + +const getD2Section = (d2, dataset, section) => { + const items = _(section.items) + .values() + .filter("selected") + .value(); + const dataElements = _(items) + .flatMap(item => (item.type === "dataElement" ? [item] : item.dataElements)) + .map(de => ({ + id: de.id, + displayName: de.displayName, + categoryCombo: de.categoryCombo, + })) + .uniqBy("id") + .value(); + const indicators = _(items) + .flatMap(item => (item.type === "indicator" ? [item] : [])) + .map(ind => ({ id: ind.id, displayName: ind.displayName, name: ind.displayName })) + .uniqBy("id") + .value(); + const sectionTypeCode = section.type.toUpperCase() + "S"; + + // On creation, a data set has no ID, use a random string (prefix used only to observe uniqueness) + const randomId = dataset.id || getRandomString(); + + return d2.models.sections.create({ + name: section.name, + code: [randomId, sectionTypeCode, section.coreCompetency.code].join("_"), + displayName: section.name, + showRowTotals: section.showRowTotals, + showColumnTotals: section.showColumnTotals, + dataElements: dataElements, + indicators: indicators, + greyedFields: [], + }); +}; + +const getOutputSection = opts => { + const { config, degRelations, coreCompetency, dataElementsByCCId } = opts; + const sectionName = coreCompetency.name + " Outputs"; + const dataElements = dataElementsByCCId[coreCompetency.id]; + const getDataElementInfo = dataElement => { + const groupSets = _(toArray(dataElement.dataElementGroups)) + .map(deg => [degRelations[deg.id], deg]) + .fromPairs() + .value(); + const degSetOrigin = groupSets[config.dataElementGroupSetOriginId]; + const theme = groupSets[config.dataElementGroupSetThemeId]; + const group = _(dataElement.attributeValues).find( + av => av.attribute.id === config.attributeGroupId + ); + const attributes = _(dataElement.attributeValues) + .map(av => [av.attribute.id, av.value]) + .fromPairs() + .value(); + const mandatoryIndicatorId = config.dataElementGroupGlobalIndicatorMandatoryId; + const degSetStatus = groupSets[config.dataElementGroupSetStatusId]; + const status = degSetStatus ? degSetStatus.displayName : null; + + return { + type: "dataElement", + id: dataElement.id, + code: dataElement.code, + name: dataElement.name, + displayName: dataElement.displayName, + description: dataElement.description, + sectionName: sectionName, + coreCompetency: coreCompetency, + theme: theme ? theme.displayName : null, + group: group ? group.value : null, + categoryCombo: dataElement.categoryCombo, + isCore: degSetOrigin && degSetOrigin.id === mandatoryIndicatorId, + selected: false, + origin: degSetOrigin ? degSetOrigin.displayName : null, + status: status, + hidden: attributes[config.hideInDataSetAppAttributeId] === "true", + disaggregation: + dataElement.categoryCombo.name !== "default" + ? dataElement.categoryCombo.displayName + : "None", + }; + }; + const indexedDataElementsInfo = _(dataElements) + .map(getDataElementInfo) + .filter(item => getItemStatus(item) !== "inactive" && !item.hidden) + .keyBy("id") + .value(); + + return { + type: "output", + id: coreCompetency.id + "-output", + name: sectionName, + showRowTotals: false, + showColumnTotals: false, + items: indexedDataElementsInfo, + coreCompetency: getOwnedPropertyJSON(coreCompetency), + }; +}; + +const getOutcomeSection = opts => { + const { d2, config, igRelations, indicatorsByGroupName, coreCompetency } = opts; + const sectionName = coreCompetency.name + " Outcomes"; + const indicators = indicatorsByGroupName[coreCompetency.name] || []; + const getIndicatorInfo = (indicator, dataElements) => { + const indicatorGroupSets = _(toArray(indicator.indicatorGroups)) + .map(ig => [igRelations[ig.id], ig]) + .fromPairs() + .value(); + const origin = indicatorGroupSets[config.indicatorGroupSetOriginId]; + const theme = indicatorGroupSets[config.indicatorGroupSetThemeId]; + const group = _(indicator.attributeValues).find( + av => av.attribute.id === config.attributeGroupId + ); + const attributes = _(indicator.attributeValues) + .map(av => [av.attribute.id, av.value]) + .fromPairs() + .value(); + const mandatoryIndicatorId = config.indicatorGroupGlobalIndicatorMandatoryId; + const igSetStatus = indicatorGroupSets[config.indicatorGroupSetStatusId]; + const status = igSetStatus ? igSetStatus.displayName : null; + + return { + type: "indicator", + dataElements: dataElements.map(de => + _.assign(getOwnedPropertyJSON(de), { displayName: de.displayName }) + ), + dataElementsNumeric: dataElements.filter(de => de.code && !de.code.endsWith("-C")), + id: indicator.id, + code: indicator.code, + name: indicator.name, + displayName: indicator.displayName, + description: indicator.description, + sectionName: sectionName, + coreCompetency: coreCompetency, + theme: theme ? theme.displayName : null, + group: group ? group.value : indicator.displayName, + categoryCombo: null, + selected: false, + isCore: origin && origin.id === mandatoryIndicatorId, + origin: origin ? origin.displayName : null, + status: status, + disaggregation: null, + hidden: attributes[config.hideInDataSetAppAttributeId] === "true", + }; + }; + + return getDataElementsByIndicator(d2, indicators).then(dataElementsByIndicator => { + const indexedIndicatorsInfo = _(indicators) + .filter(indicator => !_(dataElementsByIndicator[indicator.id]).isEmpty()) + .map(indicator => getIndicatorInfo(indicator, dataElementsByIndicator[indicator.id])) + .filter(item => getItemStatus(item) !== "inactive" && !item.hidden) + .keyBy("id") + .value(); + + return { + type: "outcome", + id: coreCompetency.id + "-outcome", + name: sectionName, + showRowTotals: false, + showColumnTotals: false, + items: indexedIndicatorsInfo, + coreCompetency: getOwnedPropertyJSON(coreCompetency), + }; + }); +}; + +const getDataElementsByIndicator = (d2, indicators) => { + const filtersForIndicator = indicators.map(indicator => { + const fromNumerator = getDeIdsFromFormula(indicator.numerator).map(id => ["id", id]); + const fromDenominator = getDeIdsFromFormula(indicator.denominator).map(id => ["id", id]); + const fromComments = indicator.code ? [["code", indicator.code + "-C"]] : []; + return { indicator, filters: _.flatten([fromNumerator, fromDenominator, fromComments]) }; + }); + const getMapping = dataElements => { + return _(filtersForIndicator) + .map(({ indicator, filters }) => { + const dataElementsForIndicator = _(filters) + .flatMap(([key, value]) => dataElements.filter(de => de[key] === value)) + .value(); + return [indicator.id, dataElementsForIndicator]; + }) + .fromPairs() + .value(); + }; + const allFilters = _(filtersForIndicator) + .flatMap("filters") + .value(); + + return getDataElements(d2, allFilters).then(getMapping); +}; + +const matchAll = (string, re) => { + let match, + matches = []; + const globalRe = new RegExp(re, "g"); + do { + match = globalRe.exec(string); + if (match) { + matches.push(match[1]); + } + } while (match); + return matches; +}; + +const getDeIdsFromFormula = formula => { + return matchAll(formula, /#{(\w+)/); +}; + +const filterDataElements = (dataElements, requiredDegIds) => { + return dataElements.filter(dataElement => { + const degIds = new Set(toArray(dataElement.dataElementGroups).map(deg => deg.id)); + return requiredDegIds.every(requiredDegId => degIds.has(requiredDegId)); + }); +}; + +/* Return object {dataElementGroupId: dataElementGroupSetId} */ +const getDataElementGroupRelations = d2 => { + return d2.models.dataElementGroupSets + .list({ fields: "id,name,displayName,dataElementGroups[id,name,displayName]" }) + .then(collection => + toArray(collection).map(degSet => + _(toArray(degSet.dataElementGroups)) + .map(deg => [deg.id, degSet.id]) + .fromPairs() + .value() + ) + ) + .then(relationsArray => _.reduce(relationsArray, _.extend, {})); +}; + +/* Return object {indicatorGroupId: indicatorGroupSetId} */ +const getIndicatorGroupRelations = d2 => { + return d2.models.indicatorGroupSets + .list({ fields: "id,displayName,indicatorGroups[id,displayName]" }) + .then(collection => + toArray(collection).map(igSet => + _(toArray(igSet.indicatorGroups)) + .map(ig => [ig.id, igSet.id]) + .fromPairs() + .value() + ) + ) + .then(relationsArray => _.reduce(relationsArray, _.extend, {})); +}; + +/* Return a promise with an array of d2 items filtered by an array of [field, value] pairs */ +const getFilteredItems = (model, filters, listOptions) => { + if (_.isEmpty(filters)) { + return Promise.resolve([]); + } else { + // rootJunction=OR does not work on 2.26 (it returns all unfiltered objects) + // build a request for each filter (we have at most 2), and join the results. + const requests = _(filters) + .groupBy(([key, _value]) => key) + .mapValues(pairs => pairs.map(([_key, value]) => value)) + .map((values, field) => + model + .list({ + paging: false, + filter: `${field}:in:[${values.join(",")}]`, + ...listOptions, + }) + .then(collectionToArray) + ); + return Promise.all(requests).then(_.flatten); + } +}; + +const getDataElements = async (d2, dataElementFilters) => { + const fields = [ + "id", + "displayName", + "code", + "description", + "valueType", + "categoryCombo[id]", + "dataElementGroups[id]", + "attributeValues[value,attribute[id]]", + ]; + + const dataElementGroupsFields = "id,name,displayName"; + + const categoryComboFields = + "id,name,displayName,categoryOptionCombos[id,name,displayName,categoryOptions[id,displayName]]," + + "categories[id,name,displayName,categoryOptions[id,name,displayName]]"; + + const dataElements = await getFilteredItems(d2.models.dataElements, dataElementFilters, { + fields: fields.join(","), + }); + + const dataElementsWithCatCombos = await subQuery( + d2, + dataElements, + "categoryCombo", + categoryComboFields + ); + + const dataElementsWithGroups = await subQuery( + d2, + dataElementsWithCatCombos, + "dataElementGroups", + dataElementGroupsFields + ); + + return dataElementsWithGroups; +}; + +const getOutputDataElementsByCoreCompetencyId = (d2, config, coreCompetencies) => { + const ccFilters = coreCompetencies.map(cc => ["dataElementGroups.id", cc.id]); + return getDataElements(d2, ccFilters).then(dataElements => { + return _(coreCompetencies) + .map(cc => [ + cc.id, + filterDataElements(dataElements, [cc.id, config.dataElementGroupOutputId]), + ]) + .fromPairs() + .value(); + }); +}; + +const getIndicatorsByGroupName = (d2, coreCompetencies) => { + const filters = coreCompetencies.map(cc => ["name", cc.name]); + const fields = [ + "id", + "name", + "displayName", + "indicators[id,displayName,code,numerator,denominator,indicatorGroups[id,displayName],attributeValues[value,attribute]]", + ].join(","); + + return getFilteredItems(d2.models.indicatorGroups, filters, { fields }).then(indicatorGroups => + _(indicatorGroups) + .map(indGroup => [indGroup.displayName, toArray(indGroup.indicators)]) + .fromPairs() + .value() + ); +}; + +function getRandomString() { + return (new Date().getTime().toString() + Math.random()).replace(".", ""); +} diff --git a/src/models/Settings.js b/src/models/Settings.js new file mode 100644 index 000000000..af4bea373 --- /dev/null +++ b/src/models/Settings.js @@ -0,0 +1,295 @@ +import _ from "../utils/lodash-mixins"; +import { currentUserIsSuperuser, getExistingUserRoleByName } from "../utils/Dhis2Helpers"; +import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; + +export default class Settings { + dataStoreNamespace = "dataset-configuration"; + + dataStoreSettingsKey = "settings"; + + adminRoleAttributes = { + name: "DataSet Configuration admin", + description: "Can change settings of the DataSet Configuration app", + authorities: ["M_Dataset_Configuration"], + }; + + fieldDefinitions = [ + { + name: "categoryProjectsId", + type: "d2-object", + model: "category", + defaultFilter: "code:eq:GL_Project", + }, + { + name: "categoryComboId", + type: "d2-object", + model: "categoryCombo", + defaultFilter: "code:eq:GL_CATBOMBO_ProjectCCTarAct", + }, + { + name: "dataElementGroupSetCoreCompetencyId", + type: "d2-object", + model: "dataElementGroupSet", + defaultFilter: "code:eq:GL_CoreComp_DEGROUPSET", + }, + { + name: "expiryDays", + type: "value", + defaultValue: 0, + }, + { + name: "outputEndDate", + type: "yearlyDate", + defaultValue: { month: 4, day: 1 }, + }, + { + name: "outcomeEndDate", + type: "yearlyDate", + defaultValue: { month: 5, day: 1 }, + }, + { + name: "outputLastYearEndDate", + type: "timePeriod", + defaultValue: { units: "month", value: 0 }, + }, + { + name: "outcomeLastYearEndDate", + type: "timePeriod", + defaultValue: { units: "month", value: 0 }, + }, + { + name: "dataElementGroupOutputId", + type: "d2-object", + model: "dataElementGroup", + defaultFilter: "code:eq:GL_Output_DEGROUP", + }, + { + name: "dataElementGroupGlobalIndicatorMandatoryId", + type: "d2-object", + model: "dataElementGroup", + defaultFilter: "code:eq:GL_MAND_DEGROUP", + }, + { + name: "indicatorGroupGlobalIndicatorMandatoryId", + type: "d2-object", + model: "indicatorGroup", + defaultFilter: "name:eq:Global Indicators (Mandatory)", + }, + { + name: "dataElementGroupSetThemeId", + type: "d2-object", + model: "dataElementGroupSet", + defaultFilter: "code:eq:GL_DETHEME_DEGROUPSET", + }, + { + name: "indicatorGroupSetThemeId", + type: "d2-object", + model: "indicatorGroupSet", + defaultFilter: "name:eq:Theme", + }, + { + name: "dataElementGroupSetOriginId", + type: "d2-object", + model: "dataElementGroupSet", + defaultFilter: "code:eq:GL_DEORIGIN_DEGROUPSET", + }, + { + name: "indicatorGroupSetOriginId", + type: "d2-object", + model: "indicatorGroupSet", + defaultFilter: "name:eq:Indicator Origin", + }, + { + name: "dataElementGroupSetStatusId", + type: "d2-object", + model: "dataElementGroupSet", + defaultFilter: "code:eq:GL_DESTATUS_DEGROUPSET", + }, + { + name: "indicatorGroupSetStatusId", + type: "d2-object", + model: "indicatorGroupSet", + defaultFilter: "name:eq:Status", + }, + { + name: "attributeGroupId", + type: "d2-object", + model: "attribute", + defaultFilter: "code:eq:DE_IND_GROUP", + }, + { + name: "organisationUnitLevelForCountriesId", + type: "d2-object", + model: "organisationUnitLevel", + defaultFilter: "name:eq:Country", + }, + { + name: "hideInDataSetAppAttributeId", + type: "d2-object", + model: "attributes", + defaultFilter: "code:eq:Hide in data set app", + }, + { + name: "createdByDataSetConfigurationAttributeId", + type: "d2-object", + model: "attributes", + defaultFilter: "code:eq:GL_CREATED_BY_DATASET_CONFIGURATION", + }, + { + name: "dataPeriodOutputDatesAttributeId", + type: "d2-object", + model: "attributes", + defaultFilter: "code:eq:GL_OUTPUT_DATES", + }, + { + name: "dataPeriodOutcomeDatesAttributeId", + type: "d2-object", + model: "attributes", + defaultFilter: "code:eq:GL_OUTCOME_DATES", + }, + { + name: "dataPeriodIntervalDatesAttributeId", + type: "d2-object", + model: "attributes", + defaultFilter: "code:eq:GL_INTERVAL_DATES", + }, + { + name: "exclusionRuleCoreUserGroupId", + type: "d2-object", + model: "userGroup", + defaultFilter: "name:eq:GL_AllAdmins", + }, + ]; + + constructor(d2) { + this.d2 = d2; + } + + init() { + if (currentUserIsSuperuser(this.d2)) { + return this._createOrUpdateAdminRole().then(this._saveInitialConfig.bind(this)); + } else { + return Promise.resolve(true); + } + } + + get() { + return this._getStoreNamespace().then(ns => ns.get(this.dataStoreSettingsKey)); + } + + save(config) { + return this._save(saved => _.imerge(saved, config)); + } + + getFields() { + const models = _(this.fieldDefinitions) + .filter(fd => fd.type === "d2-object") + .map("model") + .uniq(); + const optionsForModelPairs$ = models.map(model => + this.d2.models[model] + .list({ paging: false, fields: "id,displayName" }) + .then(collection => collection.toArray()) + .then(objects => objects.map(obj => ({ text: obj.displayName, value: obj.id }))) + .then(options => [model, options]) + ); + + return Promise.all(optionsForModelPairs$) + .then(_.fromPairs) + .then(optionsForModel => + this.fieldDefinitions.map(fd => this._getField(fd, optionsForModel)) + ); + } + + _getStoreNamespace() { + return this.d2.dataStore.get(this.dataStoreNamespace); + } + + _save(merger) { + const names = this.fieldDefinitions.map(fd => fd.name); + + return this._getStoreNamespace().then(namespace => { + return namespace + .get(this.dataStoreSettingsKey) + .catch(() => ({})) + .then(saved => { + const newConfig = _.pick(merger(saved), names); + if (_.isEqual(saved, newConfig)) { + return true; + } else { + return namespace.set(this.dataStoreSettingsKey, newConfig); + } + }); + }); + } + + _saveInitialConfig() { + return this._getDefaultValues().then(defaults => + this._save(saved => _.imerge(defaults, saved)) + ); + } + + _getDefaultValue(fieldDefinition) { + switch (fieldDefinition.type) { + case "d2-object": + return this.d2.models[fieldDefinition.model] + .list({ filter: fieldDefinition.defaultFilter, fields: "id" }) + .then(collection => collection.toArray().map(obj => obj.id)[0]); + case "value": + case "yearlyDate": + case "timePeriod": + return Promise.resolve(fieldDefinition.defaultValue); + default: + throw new Error(`Unknown field type: ${fieldDefinition.type}`); + } + } + + _getField(fieldDefinition, optionsForModel) { + const base = _.imerge(fieldDefinition, { + i18n_key: "setting_" + camelCaseToUnderscores(fieldDefinition.name), + }); + + switch (fieldDefinition.type) { + case "d2-object": + return _.imerge(base, { options: optionsForModel[fieldDefinition.model] }); + case "value": + case "yearlyDate": + case "timePeriod": + return base; + default: + throw new Error(`Unknown field type: ${fieldDefinition.type}`); + } + } + + _getDefaultValues() { + const defaultValuesPairs$ = this.fieldDefinitions.map(field => + this._getDefaultValue(field).then(defaultValue => [field.name, defaultValue]) + ); + return Promise.all(defaultValuesPairs$).then(_.fromPairs); + } + + _createOrUpdateAdminRole() { + const attrs = this.adminRoleAttributes; + + return getExistingUserRoleByName(this.d2, attrs.name).then(existingUserRole => { + if (existingUserRole) { + const existingUserRoleHasRequiredAuthorities = _(attrs.authorities) + .difference(existingUserRole.authorities) + .isEmpty(); + if (existingUserRoleHasRequiredAuthorities) { + return true; + } else { + existingUserRole.authorities = _.union( + existingUserRole.authorities, + attrs.authorities + ); + existingUserRole.dirty = true; + return existingUserRole.save(); + } + } else { + const adminRole = this.d2.models.userRoles.create(attrs); + return adminRole.create(); + } + }); + } +} diff --git a/src/models/Sharing.js b/src/models/Sharing.js new file mode 100644 index 000000000..412cc1ec6 --- /dev/null +++ b/src/models/Sharing.js @@ -0,0 +1,38 @@ +import _ from "lodash"; + +const sharingFields = ["externalAccess", "publicAccess", "userAccesses", "userGroupAccesses"]; + +function normalizeAccesses(accesses) { + return _(accesses || []) + .map(info => _.pick(info, ["id", "access"])) + .sortBy("id") + .value(); +} + +function getNormalizedSharing(data) { + const sharing = _.pick(data, sharingFields); + return { + ...sharing, + userGroupAccesses: normalizeAccesses(sharing.userGroupAccesses), + userAccesses: normalizeAccesses(sharing.userAccesses), + }; +} + +export function getChanges(models, newSharings) { + const sharingById = _(newSharings) + .keyBy(sharing => sharing.id) + .value(); + const newModels = models.map(model => { + const sharing = sharingById[model.id]; + const sharingChanged = + sharing && !_(getNormalizedSharing(model)).isEqual(getNormalizedSharing(sharing)); + return sharingChanged ? { ...model, ...sharing } : model; + }); + const updatedModels = _(models) + .zip(newModels) + .map(([model, newModel]) => (model !== newModel ? newModel : null)) + .compact() + .value(); + + return { updated: updatedModels, all: newModels }; +} diff --git a/src/models/custom-form-resources/script.js b/src/models/custom-form-resources/script.js new file mode 100644 index 000000000..ee348383d --- /dev/null +++ b/src/models/custom-form-resources/script.js @@ -0,0 +1,393 @@ +var _ = window._; +var $ = window.$; +var periodDates = {}; + +/* eslint-disable no-unused-vars */ +function setPeriodDates(periodDates_) { + periodDates = periodDates_; +} + +(function() { + _.mixin({ + cartesianProduct: function(args) { + return _.reduce( + args, + function(a, b) { + return _.flatten( + _.map(a, function(x) { + return _.map(b, function(y) { + return x.concat([y]); + }); + }), + true + ); + }, + [[]] + ); + }, + + groupConsecutiveBy: function(xs, mapper) { + mapper = mapper || _.identity; + var reducer = (acc, x) => { + if (_.isEmpty(acc)) { + return acc.concat([[x]]); + } else { + var last = _.last(acc); + if (_.isEqual(mapper(_.last(last)), mapper(x))) { + last.push(x); + return acc; + } else { + return acc.concat([[x]]); + } + } + }; + return _(xs).reduce(reducer, []); + }, + }); + + var debugElapsed = (label, fn) => { + var start = new Date().getTime(); + fn(); + var elapsed = new Date().getTime() - start; + console.debug(`[elapsed] ${label}: ${elapsed} ms`); + }; + + var loadCss = function(url) { + $("", { + rel: "stylesheet", + type: "text/css", + href: url, + }).appendTo(document.head); + }; + + var loadJs = function(url, cb) { + $.getScript(url, cb); + }; + + var repeat = function(times, n) { + return Array.from(Array(times), () => n); + }; + + var splitWideTables = function() { + var splitedTablesCount = 0; + var createTablesCount = 0; + + $(".sectionTable") + .get() + .map($) + .forEach((table, _count) => { + if (tableFitsInViewport(table)) return; + splitedTablesCount++; + var firstRow = table.find("tbody tr:first-child td .entryfield"); + if (firstRow.size() === 0) return; + var cocIds = firstRow.get().map( + input => + $(input) + .attr("id") + .split("-")[1] + ); + var allCategoryOptions = table + .find("thead tr") + .get() + .map(tr => + _.chain( + $(tr) + .find("th[scope=col]") + .get() + ) + .map(th => [ + repeat( + parseInt($(th).attr("colspan")), + $(th) + .text() + .trim() + ), + ]) + .flatten() + .value() + ); + + var categoryOptions = _.zip.apply(null, allCategoryOptions); + var uniqCategories = allCategoryOptions.map(categoryOptions => + _.uniq(categoryOptions) + ); + if (categoryOptions.length !== cocIds.length) { + alert("Error: parsing of form failed"); + } + var cocs = _.zip(categoryOptions, cocIds).map(pair => ({ + cos: pair[0], + id: pair[1], + })); + + var rows = _.chain(table.find("tbody tr").get()) + .map($) + .map(tr => { + var td = tr.find("td:first-child"); + var tdId = td.attr("id"); + + if (tdId) { + var deId = tdId.split("-")[0]; + var deName = td.text().trim(); + var valuesByCocId = _.chain(tr.find("td .entryfield").get()) + .map($) + .map(input => { + var cocId = input.attr("id").split("-")[1]; + return [cocId, { td: input.parent("td"), coc: cocId }]; + }) + .object() + .value(); + return { + de: { id: deId, name: deName, td: td }, + valuesByCocId: valuesByCocId, + }; + } else { + return null; + } + }) + .compact() + .value(); + + var data = { + group: table + .find("nrcinfoheader") + .text() + .trim(), + categories: uniqCategories, + cocs: cocs, + rows: rows, + showRowTotals: + table + .find("tbody tr:first-child td:last-child input.dataelementtotal") + .size() > 0, + showColumnTotals: + table + .find("tbody tr:last-child td:nth-child(2) input.dataelementtotal") + .size() > 0, + }; + + var newTables = splitTables(data, { categoryIndex: 0, tableIndex: 0 }); + createTablesCount += newTables.length; + table.replaceWith($("
    ").append(newTables)); + }); + + console.log( + "Split tables: " + splitedTablesCount + ", tables created: " + createTablesCount + ); + }; + + var splitTables = function(data, options) { + var categoryIndex = options.categoryIndex; + var nCategories = data.categories.length; + var renderDataElementInfo = options.tableIndex === 0; + var table = buildTable(data, renderDataElementInfo); + + if (categoryIndex >= nCategories - 1 || tableFitsInViewport(table)) { + return [table]; + } else { + return _.chain(data.cocs) + .groupConsecutiveBy(coc => coc.cos.slice(0, categoryIndex + 1)) + .map((splitCocs, splitTableIndex) => + splitTables(_.extend({}, data, { cocs: splitCocs }), { + categoryIndex: categoryIndex + 1, + tableIndex: options.tableIndex + splitTableIndex, + }) + ) + .flatten(1) + .value(); + } + }; + + var buildTable = function(data, renderDataElementInfo) { + var getValues = row => data.cocs.map(coc => row.valuesByCocId[coc.id]); + var nCategories = data.categories.length; + var categoryThsList = _.range(nCategories).map(categoryIndex => { + return _.chain(data.cocs) + .groupConsecutiveBy(coc => coc.cos.slice(0, categoryIndex + 1)) + .map(group => { + var label = group[0].cos[categoryIndex]; + return $("", { + class: "nrcdataheader", + colspan: group.length, + scope: "col", + }).text(label); + }) + .value(); + }); + + return $("", { id: "sectionTable", class: "sectionTable", cellspacing: "0" }).append( + [ + $("").append( + categoryThsList.map((categoryThs, index) => + $("").append( + $("").append( + data.rows.map(row => { + // id = "row-DE-COC1-COC2-.." + var rowTotalId = ["row", row.de.id] + .concat(getValues(row).map(val => val.coc)) + .join("-"); + var rowTotal = $("", { + class: "dataelementtotal", + type: "text", + disabled: "", + id: rowTotalId, + }); + var cssClass = [ + "derow", + "de-" + row.de.id, + renderDataElementInfo ? "primary" : "secondary", + ].join(" "); + return $("", { class: cssClass }).append( + $("").append( + $(" - - - {row.map(({ label, cocs }, colNum) => ( - - ))} - - ); - }); - } - - renderCheckbox(dataSetElement, categoryOptions) { - const { dataElement } = dataSetElement; - const key = getKey(getCategoryCombo(dataSetElement), categoryOptions); - const categoryOptionCombo = this.state.cocByCategoryKey[key]; - if (!dataElement || !categoryOptionCombo) return; - - const fieldId = [dataElement.id, categoryOptionCombo.id].join("."); - const isGreyed = !!this.state.greyedFields[fieldId]; - const toggleBoggle = () => { - this.setState({ - greyedFields: _.merge(this.state.greyedFields, { [fieldId]: !isGreyed }), - }); - }; - - return ( - - ); - } - - _getDataSetElements(categoryComboId) { - const categoryCombo = this.state.categoryCombosById[categoryComboId]; - const currentSectionDataElementIds = this._sectionsMap(section => - section.dataElements.toArray().map(de => de.id) - ); - - return this.props.dataSet.dataSetElements - .filter(dse => currentSectionDataElementIds.includes(dse.dataElement.id)) - .filter(dse => getCategoryCombo(dse).id === categoryCombo.id) - .sort( - (a, b) => - currentSectionDataElementIds.indexOf(a.dataElement.id) - - currentSectionDataElementIds.indexOf(b.dataElement.id) - ); - } - - renderDataElements(dataSetElements, categoryOptionCombos) { - return dataSetElements.map((dse, deNum) => { - return ( - - - {categoryOptionCombos.map(cos => this.renderCheckbox(dse, cos))} - - ); - }); - } - - _sectionsMap(sectionMapper) { - const { currentSection } = this.state; - const sections = currentSection ? [currentSection] : this.props.sections; - return _.flatMap(sections, sectionMapper); - } - - _getCategoryComboLabel(categoryCombo) { - if (categoryCombo) { - return categoryCombo.displayName === "default" - ? this.getTranslation("none") - : categoryCombo.displayName; - } else { - return ""; - } - } - - _renderForm() { - const { currentCategoryCombo } = this.state; - const sectionDataElementIds = new Set( - this._sectionsMap(section => section.dataElements.toArray().map(de => de.id)) - ); - const categoryCombosForVisibleSections = _(this.props.dataSet.dataSetElements) - .filter(dse => sectionDataElementIds.has(dse.dataElement.id)) - .map(dse => getCategoryCombo(dse)) - .uniqBy("id") - .sortBy("displayName") - .value(); - - const categoryCombosToShow = currentCategoryCombo - ? [currentCategoryCombo] - : categoryCombosForVisibleSections; - - const renderTable = (categoryCombo, cocs) => { - const dataSetElements = this._getDataSetElements(categoryCombo.id); - const key = [categoryCombo, ..._.flatten(cocs)].map(x => x.id).join("-"); - - return ( -
    ", { class: "nrcinfoheader" }).html( + renderDataElementInfo && index === 0 ? data.group : " " + ), + categoryThs, + index === 0 && data.showRowTotals + ? $("", { + class: "nrctotalheader", + rowspan: nCategories, + verticalAlign: "top", + }).text("Total") + : null + ) + ) + ), + $("
    ", { class: "nrcindicatorName" }) + .css("opacity", renderDataElementInfo ? 1 : 0) + .html(row.de.name), + getValues(row).map(val => val.td.clone()), + data.showRowTotals ? $("").append(rowTotal) : null + ); + }), + + data.showColumnTotals + ? $("
    ", { class: "nrcindicatorName" }).text( + renderDataElementInfo ? "Total" : "" + ), + getValues(data.rows[0]).map(val => + $("").append( + $("", { + class: "dataelementtotal", + type: "text", + id: "col-" + val.coc, + disabled: "", + }) + ) + ) + ) + : null + ), + ] + ); + }; + + var tableFitsInViewport = function(table) { + // TODO: get input size and use tableWidth + // var tableWidth = table.width(); + return table.find("thead tr:last th").size() - 1 <= 16; + }; + + var fixActionsBox = function() { + // Button does not fit in the box, add some more width. + $("#completenessDiv").css("width", "+=5px"); + }; + + var renumerateInputFields = function() { + var lastIndex = + _.chain($("[tabindex]").get()) + .map(x => parseInt($(x).attr("tabindex"))) + .max() + .value() || 0; + $("#contentDiv .entryfield").each((i, input) => + $(input).attr("tabindex", lastIndex + i + 1) + ); + }; + + var highlightDataElementRows = function() { + var setClass = function(ev, className, isActive) { + var tr = $(ev.currentTarget); + var de_class = (tr.attr("class") || "") + .split(" ") + .filter(cl => cl.startsWith("de-"))[0]; + if (de_class) { + var deId = de_class.split("-")[1]; + var el = $(".de-" + deId); + el.toggleClass(className, isActive); + if (tr.hasClass("secondary")) { + var opacity = isActive ? 1 : 0; + tr.find(".nrcindicatorName") + .clearQueue() + .delay(500) + .animate({ opacity: opacity }, 100); + } + } + }; + + $("tr.derow") + .mouseover(ev => setClass(ev, "hover", true)) + .mouseout(ev => setClass(ev, "hover", false)) + .focusin(ev => setClass(ev, "focus", true)) + .focusout(ev => setClass(ev, "focus", false)); + }; + + var setTabsVisibility = function(type, isDateOutsidePeriod, info) { + const tabContents = $(".type-" + type); + + if (isDateOutsidePeriod) { + tabContents.find(".in-period").hide(); + tabContents.find(".out-of-period").show(); + tabContents.find(".out-of-period .info").text(info); + } else { + tabContents.find(".in-period").show(); + tabContents.find(".out-of-period").hide(); + } + }; + + var applyPeriodDates = function() { + /* eslint-disable no-undef */ + const selectedPeriod = dhis2.de.getSelectedPeriod(); + if (!selectedPeriod || !selectedPeriod.startDate) return; + const getDate = isoDate => (isoDate ? new Date(isoDate.split("T")[0]) : null); + const getFormatDate = isoDate => + isoDate ? formatDate(new Date(isoDate.split("T")[0]), "dd/MM/yyyy") : null; + const startDate = selectedPeriod.startDate; + const periodYear = startDate.split("-")[0]; + const today = new Date(); + console.debug("applyPeriodDates", { periodDates, selectedPeriod, periodYear, today }); + + ["output", "outcome"].forEach(type => { + const obj = (periodDates[type] || {})[periodYear]; + const isDateOutsidePeriod = + obj !== undefined && ((obj.start && today < getDate(obj.start)) || (obj.end && today > getDate(obj.end))); + let info; + if (isDateOutsidePeriod){ + const ns = { from: getFormatDate(obj.start) || "-", to: getFormatDate(obj.end) || "-" }; + info = `${ns.from} -> ${ns.to}`; + } + + setTabsVisibility(type, isDateOutsidePeriod, info); + }); + }; + + var applyChangesToForm = function() { + if (!$("#tabs").hasClass("dataset-configuration-custom-form")) return; + + applyPeriodDates(); + debugElapsed("Split tables", splitWideTables); + highlightDataElementRows(); + renumerateInputFields(); + fixActionsBox(); + }; + + var init = function() { + if (window.datasetConfigurationCustomFormLoaded) return; + window.datasetConfigurationCustomFormLoaded = true; + $(document).on("dhis2.de.event.formLoaded", applyChangesToForm); + applyChangesToForm(); + $("#selectedPeriodId").change(applyPeriodDates); + loadJs("../dhis-web-commons/bootstrap/js/bootstrap.min.js"); + loadCss("../dhis-web-commons/bootstrap/css/bootstrap.min.css"); + }; + + $(init); +})(); diff --git a/src/models/custom-form-resources/sectionForm.vm b/src/models/custom-form-resources/sectionForm.vm new file mode 100644 index 000000000..cfacd57ed --- /dev/null +++ b/src/models/custom-form-resources/sectionForm.vm @@ -0,0 +1,275 @@ +#macro(renderIndicators $indicators) + #if( $indicators.size() > 0 ) + #set( $mark = 0 ) +
    + + #foreach( $indicator in $indicators ) + #if( $mark == 1 ) + #set( $mark = 0 ) + #else + #set( $mark = 1 ) + #end + + + + + + + #end +
    + $indicator.displayName + + +
    +
    + #end +#end + +#macro(renderSectionTable $dataElements $categoryComboId $group $groupCount) + #set( $allOptionCombos = $orderedCategoryOptionCombos.get( $categoryComboId ) ) + + + #set( $categories = $orderedCategories.get( $categoryComboId ) ) + #set( $mark = 0 ) + #set( $optionCombos = $helpers.getVisibleOptionCombos($allOptionCombos, $dataElements) ) + + + #set( $rowTotalRendered = false ) + + #foreach( $headersRow in $helpers.getHeaders($categories, $optionCombos ) ) + + + + #foreach( $header in $headersRow ) + + #end + + #if( $section.showRowTotals && $!rowTotalRendered && $optionCombos.size() > 1) + #set( $rowTotalRendered = true ) + + #end + + #end + + + + #foreach( $modelDataElement in $dataElements ) + #set ($dataElement = $helpers.createViewDataElement($modelDataElement)) + #set( $rowTotalIds = "row-$dataElement.id" ) + #set( $cellCounter = 1 ) + + #if( $mark == 1 ) + #set( $mark = 0 ) + #else + #set( $mark = 1 ) + #end + + + + + #foreach( $optionCombo in $optionCombos ) + #set( $dataEntryId = "${dataElement.id}-${optionCombo.id}-val" ) + #set( $commentId = "${dataElement.id}-${optionCombo.id}-comment" ) + #set( $rowTotalIds = "${rowTotalIds}-$optionCombo.id" ) + #set( $greyedField = false ) + #set( $greyedField = $greyedFields.getOr( "${dataElement.id}.${optionCombo.id}", false ) ) + + #if( $dataElement.valueType == "BOOLEAN" ) + + #elseif( $dataElement.valueType == "TRUE_ONLY" ) + + #elseif( "LONG_TEXT" == $dataElement.valueType ) + + #elseif( "FILE_RESOURCE" == $dataElement.valueType ) + + #elseif( $dataElement.valueType == "TIME" ) + + #else + #if( $dataElement.optionSet ) + + #else + + #end + #end + + #set( $tabIndex = $tabIndex + 1 ) + #end + + #set( $needRowColumnTotal = false ) + #if($section.showRowTotals && $optionCombos.size() > 1 ) + #set( $needRowColumnTotal = true ) + + #end + + #end + + #if($section.showColumnTotals && $dataElements.size() > 1) + #if( $mark == 1 ) + #set( $mark = 0 ) + #else + #set( $mark = 1 ) + #end + + + + + #set( $columnTotalIds = "col" ) + + #foreach( $optionCombo in $optionCombos ) + #set( $columnTotalIds = "${columnTotalIds}-$optionCombo.id" ) + + #end + + #if( $needRowColumnTotal ) + + #end + + #end + +
    #if ($group != "null" && $velocityCount == 1 && $groupCount == 1) $group #end + + #if( $header.displayName == 'default' ) + ${i18n.getString( "value" )} + #else + ${encoder.htmlEncode( $header.displayName )} + #end + + + ${i18n.getString( "total" )} +
    + + #if( $decoration && $!dataElement.hasUrl() )#end${encoder.htmlEncode( $dataElement.displayFormName )}#if( $decoration && $dataElement.hasUrl() )#end + + + + + + + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + + + +
    + ${i18n.getString( "total" )} + + + + +
    +#end + +#macro( renderSection $section $title ) +
    +

    $!encoder.htmlEncode( $title )

    + #if ( $description ) +
    $!encoder.htmlEncode( $description )
    + #end + #set( $themes = $groupedItems.get( $section.id ) ) + + #foreach( $theme in $themes.keys() ) + #set( $identifier = "theme-" + $section.id + "-" + $velocityCount ) + +
      +
    • + + +
      + #set( $groups = $themes.get( $theme ) ) + #foreach( $group in $groups.keys() ) + #set( $items = $groups.get( $group ) ) + + #if ($section.type == "output") + #set( $dataElementsByCategoryCombo = $helpers.getDataElementsByCategoryCombo($items) ) + + #foreach( $categoryComboId in $dataElementsByCategoryCombo.keys() ) + #set( $dataElements = $dataElementsByCategoryCombo.get( $categoryComboId ) ) + #renderSectionTable($dataElements $categoryComboId $group $velocityCount) + #end + #elseif ($section.type == "outcome") + #set( $dataElementsByCategoryCombo = $helpers.getDataElementsByCategoryComboForIndicators($items) ) + + #foreach( $categoryComboId in $dataElementsByCategoryCombo.keys() ) + #set( $dataElements = $dataElementsByCategoryCombo.get( $categoryComboId ) ) + #renderSectionTable($dataElements $categoryComboId $group $velocityCount) + #end + + #renderIndicators($items) + #end + #end +
      +
    • +
    + #end + +
    +
    + +#end + +#set( $tabIndex = 1 ) +#set( $hasAccess = $auth.hasAccess( "dhis-web-dataentry", "saveValue" ) ) +#set( $decoration = $dataSet.dataElementDecoration ) + +#if( $dataSet.renderAsTabs ) +
    + + + #foreach( $section in $sections ) +
    +
    + #renderSection( $section ) +
    + + +
    + #end +
    +#else + #foreach( $section in $sections ) + #renderSection( $section $section.name ) + #end +#end diff --git a/src/models/custom-form-resources/style.css b/src/models/custom-form-resources/style.css new file mode 100644 index 000000000..6de5dd03f --- /dev/null +++ b/src/models/custom-form-resources/style.css @@ -0,0 +1,217 @@ +.formSection { + border: 1px solid #cacaca; + border-radius: 3px; + margin: 0; + padding: 1px 4px 1px 4px; +} + +.formSection h3 { + color: #000; + font-size: 16px; + text-align: left; + font-weight: bold; + padding: 0; +} + +.formSection td { + text-align: center; + min-width: 75px; + padding: 1; +} + +.formSection th { + font-weight: normal; + font-size: 14px; + text-align: center; + white-space: normal !important; + max-width: 75px; + background-color: #eaf7fb; + max-width: 200px; +} + +.indicatorArea { + margin-top: 0px; + margin-bottom: 5px; + border-top: none; +} + +.indicatorArea td { + width: 100% !important; + text-align: left !important; +} + +.entryfield, +.indicator { + max-width: 75px; +} + +.entryarea { + max-width: 300px; +} + +#contentDiv .nrcsubsection { + background-color: #fff; + height: 5px; +} + +#contentDiv input.entryfield { + width: 70px; + height: 18px; + padding: 2px; +} + +#contentDiv input.dataelementtotal { + width: 70px; + height: 16px; + padding: 2px; +} + +#contentDiv input.indicator { + width: 70px; + height: 18px; + padding: 2px; +} + +#contentDiv tr.derow { + background-color: #fff; +} + +#contentDiv tr.focus { + background-color: #e5f5e5; +} + +#contentDiv tr.hover, +#contentDiv tr:hover { + background-color: #e5e5e5; +} + +#contentDiv th { + border-style: hidden !important; +} + +#contentDiv td { + padding: 2px !important; + height: 16px; + text-align: center; + border-style: none !important; +} + +#contentDiv td.nrcindicatorName { + text-align: left; + white-space: normal; + max-width: 33%; +} + +#contentDiv tr.secondary td.nrcindicatorName { + font-style: italic; +} + +#contentDiv td.lastinrow { + background-color: #eee; + text-align: center; +} + +#contentDiv th.nrcinfoheader { + text-align: left; + border-bottom-style: hidden; + border-left-style: hidden; + border-top-style: hidden; + width: 100%; + white-space: nowrap; + background-color: #fff; + padding: 2px !important; +} + +#contentDiv th.nrcdataheader { + text-align: center; + border-bottom: 1px solid #ddd !important; + background-color: #eaf7fb; + white-space: nowrap; + padding-top: 2px !important; + padding-bottom: 2px !important; + padding-left: 10px; + padding-right: 10px; + word-wrap: break-word; +} + +#contentDiv th.nrctotalheader { + text-align: center; + border-bottom: 1px solid #ddd !important; + background-color: #eee; + white-space: nowrap; + padding-top: 2px !important; + padding-bottom: 2px !important; + padding-left: 10px; + padding-right: 10px; +} + +#contentDiv .panel { + margin-bottom: 7px; +} + +#contentDiv .panel-body { + padding-top: 0; + padding-left: 8px; + padding-right: 8px; + padding-bottom: 4px; +} + +#contentDiv .panel-default > .panel-heading { + background-color: #3c3c3c !important; + border-color: #3c3c3c; + padding: 7px; + margin-bottom: 5px; + cursor: pointer; +} + +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #053e21; +} + +.ui-widget-header { + background: none; + background-color: #2f3867; +} + +#contentDiv a.nrc-panel-title { + color: white; + cursor: pointer; +} + +#contentDiv .accordion-toggle:after { + font-family: FontAwesome; + content: "\f077"; + float: right; + color: white !important; +} + +#contentDiv .panel-heading.collapsed .accordion-toggle:after { + content: "\f078"; +} + +#contentDiv .sectionTable { + margin-bottom: 0px !important; + margin-top: 5px; +} + +.page p, +.page td, +.page th, +.page input, +.page select, +.page textarea { + font-size: 9pt; +} + +.page th { + text-align: left; + color: #39547d; + padding: 3px 0 3px 1px; + font-size: 13px; + font-weight: bold; + border-collapse: collapse; + border-bottom: 1px solid #cad5e5; + min-height: 28px; +} diff --git a/src/models/data-periods.js b/src/models/data-periods.js new file mode 100644 index 000000000..60a0f4091 --- /dev/null +++ b/src/models/data-periods.js @@ -0,0 +1,338 @@ +import moment from "moment"; +import { generateUid } from "d2/lib/uid"; + +import _ from "../utils/lodash-mixins"; +import { + setAttributes, + postMetadata, + getCategoryCombos, + mapPromise, + getOwnedPropertyJSON, +} from "../utils/Dhis2Helpers"; +import Settings from "./Settings"; +import DataSetStore from "./DataSetStore"; + +const dataInputPeriodDatesFormat = "YYYYMMDD"; + +export async function getDataSets(d2, ids) { + return await d2.models.dataSets + .list({ + fields: + "id,displayName,attributeValues,dataInputPeriods[id,openingDate,closingDate,period]", + filter: `id:in:[${ids.join(",")}]`, + paging: false, + }) + .then(collection => collection.toArray()); +} + +export function getAttributeValues(store, dataset) { + const { config } = store; + const attributeKeys = [ + "dataPeriodOutputDatesAttributeId", + "dataPeriodOutcomeDatesAttributeId", + "dataPeriodIntervalDatesAttributeId", + ]; + const missingAttributeKeys = attributeKeys.filter(key => !config[key]); + const oldAttributeValues = (dataset && dataset.attributeValues) || []; + + if (!_(missingAttributeKeys).isEmpty()) { + console.error(`Missing settings: ${missingAttributeKeys.join(", ")}`); + return oldAttributeValues; + } + + const periodDates = store.getPeriodDates(); + const years = store.getPeriodYears(); + const dataInterval = [ + formatDate(store.associations.dataInputStartDate), + formatDate(store.associations.dataInputEndDate), + ].join("-"); + + const valuesByKey = { + dataPeriodOutputDatesAttributeId: formatPeriodDates(periodDates.output, years), + dataPeriodOutcomeDatesAttributeId: formatPeriodDates(periodDates.outcome, years), + dataPeriodIntervalDatesAttributeId: dataInterval, + }; + const newValues = _.mapKeys(valuesByKey, (_value, key) => config[key]); + + return setAttributes(oldAttributeValues, newValues); +} + +let categoryCombos = null; + +async function getCachedCategoryCombos(d2) { + categoryCombos = + categoryCombos || (await getCategoryCombos(d2, { cocFields: "id,categoryOptions[id]" })); + return categoryCombos; +} + +export async function saveDataSets(d2, store, dataSets) { + return saveDataSetsWithMapper(d2, store, dataSets, dataSet => ({ + ...getOwnedPropertyJSON(dataSet), + attributeValues: getAttributeValues(store, dataSet), + dataInputPeriods: store.getDataInputPeriods(store.associations), + openFuturePeriods: store.dataset.openFuturePeriods, + })); +} + +export async function saveDataSetsEndDate(d2, store, dataSets, endYear) { + const { config, associations } = store; + const newPartialPeriodDates = associations.periodDates; + + return saveDataSetsWithMapper(d2, store, dataSets, dataSet => { + const { periodDates } = DataSetStore.getPeriodAssociations(d2, config, dataSet); + + // Modify only periodDates for end date and endYear. + const newPeriodDates = { + output: _.mapValues(periodDates.output, (interval, year) => + parseInt(year) === endYear + ? { + start: interval.start, + end: newPartialPeriodDates.output[year].end || interval.end, + } + : interval + ), + outcome: _.mapValues(periodDates.outcome, (interval, year) => + parseInt(year) === endYear + ? { + start: interval.start, + end: newPartialPeriodDates.outcome[year].end || interval.end, + } + : interval + ), + }; + + const newAssociations = { + ...associations, + ...getDataInputDates(dataSet, config), + periodDatesApplyToAll: { output: false, outcome: false }, + periodDates: newPeriodDates, + }; + store.associations = newAssociations; + + const newDataset = { + ...getOwnedPropertyJSON(dataSet), + attributeValues: getAttributeValues(store, dataSet), + dataInputPeriods: store.getDataInputPeriods(newAssociations), + }; + + return newDataset; + }); +} + +export async function saveDataSetsWithMapper(d2, store, dataSets, mapper) { + const dataSetsWithForms = await d2.models.dataSets + .list({ + fields: ":owner,dataEntryForm[:owner]", + filter: `id:in:[${dataSets.map(ds => ds.id).join(",")}]`, + paging: false, + }) + .then(collection => collection.toArray()); + + const periodDates = store.getPeriodDates(); + categoryCombos = null; + + const pairs = await mapPromise(dataSetsWithForms, async dataSet => { + const htmlCode = (dataSet.dataEntryForm && dataSet.dataEntryForm.htmlCode) || ""; + const regexp = /setPeriodDates\({.*}\)/; + const newJsCode = `setPeriodDates(${JSON.stringify(periodDates)})`; + + const formPayload = htmlCode.match(regexp) + ? { htmlCode: htmlCode.replace(regexp, newJsCode) } + : await store.buildCustomForm(await getCachedCategoryCombos(d2)); + + const id = (dataSet.dataEntryForm ? dataSet.dataEntryForm.id : null) || generateUid(); + const dataEntryFormUpdated = { + ...dataSet.dataEntryForm, + ...formPayload, + id: id, + name: [dataSet.id, id].join("-"), + }; + dataSet.dataEntryForm = { id: dataEntryFormUpdated.id }; + + return [dataSet, dataEntryFormUpdated]; + }); + const [dataSetsClean, dataEntryFormsUpdated] = _.unzip(pairs); + + const dataSetsUpdated = dataSetsClean.map(dataSet => mapper(dataSet)); + + const payload = { + create_and_update: { + dataSets: dataSetsUpdated, + dataEntryForms: _.compact(dataEntryFormsUpdated), + }, + }; + + return postMetadata(d2, payload); +} + +function areDatesUniq(dates) { + const uniqValues = _.uniq(dates.map(date => (date ? date.toISOString() : null))); + return uniqValues.length === 1 && uniqValues[0]; +} + +export async function getDataSetsForPeriodsEndDate(d2, dataSetIds, endYear) { + const dataSets = await getDataSets(d2, dataSetIds); + const config = await new Settings(d2).get(); + const store = await DataSetStore.edit(d2, config, dataSetIds[0]); + const t = d2.i18n.getTranslation.bind(d2.i18n); + + const [startDates, endDates] = _(dataSets) + .map(dataset => getDataInputDates(dataset, config)) + .map(o => [o.dataInputStartDate, o.dataInputEndDate]) + .unzip() + .value(); + + const allDataSetsContainYear = + _.every(startDates, startDate => startDate && startDate.getFullYear() <= endYear) && + _.every(endDates, endDate => endDate && endDate.getFullYear() >= endYear); + + if (!allDataSetsContainYear) + return { error: t("not_all_datasets_contain_year", { year: endYear }) }; + + const dataSetsData = dataSets.map(dataSet => + DataSetStore.getPeriodAssociations(d2, config, dataSet) + ); + + const outputEnds = dataSetsData.map(data => data.periodDates.output[endYear].end); + const outputEnd = areDatesUniq(outputEnds) ? outputEnds[0] : null; + + const outcomeEnds = dataSetsData.map(data => data.periodDates.outcome[endYear].end); + const outcomeEnd = areDatesUniq(outcomeEnds) ? outcomeEnds[0] : null; + + // If all datasets have the same date, pre-fill it; otherwise, show empty field. + _.assign(store.associations, { + periodDates: { + output: { [endYear]: { end: outputEnd } }, + outcome: { [endYear]: { end: outcomeEnd } }, + }, + }); + + return { store, dataSets }; +} + +export async function getDataSetsForPeriods(d2, dataSetIds) { + const dataSets = await getDataSets(d2, dataSetIds); + const config = await new Settings(d2).get(); + const store = await DataSetStore.edit(d2, config, dataSetIds[0]); + const t = d2.i18n.getTranslation.bind(d2.i18n); + + const [startDates, endDates] = _(dataSets) + .map(dataset => getDataInputDates(dataset, config)) + .map(o => [o.dataInputStartDate, o.dataInputEndDate]) + .unzip() + .value(); + + const areDatesEqual = dates => + _(dates) + .map(date => (date ? date.toISOString() : null)) + .uniq() + .thru(dates => dates.length === 1) + .value(); + + const allDatesEqual = areDatesEqual(startDates) && areDatesEqual(endDates); + + if (!allDatesEqual) { + _.assign(store.associations, { + dataInputStartDate: undefined, + dataInputEndDate: undefined, + periodDatesApplyToAll: { + output: false, + outcome: false, + }, + periodDates: { + output: {}, + outcome: {}, + }, + }); + } + + const warning = allDatesEqual ? null : t("no_match_start_end_dates"); + + return { store, dataSets, warning }; +} + +export function getDataInputDates(dataset, config) { + const getDate = value => (value ? new Date(value) : undefined); + + const adjustDateString = value => + value + ? [value.slice(0, 4), value.slice(4, 6), value.slice(6, 8)].join("-") + "T00:00:00.000" + : undefined; + + const startFromDataInputPeriods = _(dataset.dataInputPeriods) + .map("openingDate") + .compact() + .min(); + const endFromDataInputPeriods = _(dataset.dataInputPeriods) + .map("closingDate") + .compact() + .max(); + + const attributeValueInterval = dataset.attributeValues.find( + av => av.attribute.id === config.dataPeriodIntervalDatesAttributeId + ); + + const interval = attributeValueInterval ? attributeValueInterval.value : ""; + const [startFromAttribute, endFromAttribute] = interval.split("-").map(adjustDateString); + + return { + dataInputStartDate: getDate(startFromAttribute || startFromDataInputPeriods), + dataInputEndDate: getDate(endFromAttribute || endFromDataInputPeriods), + }; +} + +export function formatDate(value) { + const date = moment(value); + return value && date.isValid() ? date.format(dataInputPeriodDatesFormat) : ""; +} + +function formatPeriodDates(dates, years) { + return _(dates) + .toPairs() + .sortBy(([year, _period]) => year) + .filter(([year, _period]) => years.includes(parseInt(year))) + .map(([year, { start, end }]) => `${year}=${formatDate(start)}-${formatDate(end)}`) + .join(","); +} + +export function getPeriodsValidationsErrors(store, options) { + const { associations } = store; + const t = store.d2.i18n.getTranslation.bind(store.d2.i18n); + + const { dataInputStartDate, dataInputEndDate } = associations; + const areBothDataInputDatesSet = Boolean(dataInputStartDate && dataInputEndDate); + + return _.compact([ + areBothDataInputDatesSet ? null : t("cannot_set_only_start_or_end_dates"), + getOutputOutcomeValidation(store, options), + ]); +} + +function getOutputOutcomeValidation(store, options) { + const { associations } = store; + const t = store.d2.i18n.getTranslation.bind(store.d2.i18n); + + if (options.validateOutputOutcome) { + const years = store.getPeriodYears(); + + const allDatesFilled = _(years).every(year => { + const outputPeriod = associations.periodDates.output[year]; + const outcomePeriod = associations.periodDates.outcome[year]; + + return ( + outputPeriod && + outcomePeriod && + _.every([ + outputPeriod.start, + outputPeriod.end, + outcomePeriod.start, + outcomePeriod.end, + ]) + ); + }); + + return allDatesFilled ? null : t("output_outcome_dates_compulsory"); + } else { + return null; + } +} diff --git a/src/models/dataset.js b/src/models/dataset.js new file mode 100644 index 000000000..500bbde32 --- /dev/null +++ b/src/models/dataset.js @@ -0,0 +1,46 @@ +import _ from "lodash"; + +export function getCoreCompetencies(d2, config, dataset) { + const extractCoreCompetenciesCodesFromSection = section => { + const { code } = section; + if (!code) { + console.error(`Section has not code: ${section.id}`); + return; + } + const [_prefix, _type, ...ccCodeParts] = section.code.split("_"); + return ccCodeParts.join("_"); + }; + + const coreCompetencyCodes = _(dataset.sections.toArray()) + .map(extractCoreCompetenciesCodesFromSection) + .compact() + .uniq() + .value(); + + return d2.models.dataElementGroups + .filter() + .on("groupSets.id") + .equals(config.dataElementGroupSetCoreCompetencyId) + .list({ + paging: false, + filter: `code:in:[${coreCompetencyCodes.join(",")}]`, + fields: "id,code,name,displayName", + }) + .then(collection => collection.toArray()); +} + +export function getProject(d2, config, dataset) { + if (dataset.name) { + return d2.models.categoryOptions + .filter() + .on("categories.id") + .equals(config.categoryProjectsId) + .list({ fields: "id,code,displayName", paging: false }) + .then(collection => collection.toArray()) + .then(projects => + _(projects).find(project => _.includes(dataset.name, project.displayName)) + ); + } else { + return Promise.resolve(null); + } +} diff --git a/src/router.js b/src/router.js new file mode 100644 index 000000000..2545bd7c2 --- /dev/null +++ b/src/router.js @@ -0,0 +1,30 @@ +import React from "react"; +import { Router, Route, hashHistory, IndexRedirect } from "react-router"; +import App from "./App/App.component"; +import DataSets from "./DataSets/DataSets.component"; +import DataSetFormSteps from "./DataSets/FormSteps.component"; + +const wizard = action => props => ; + +const routes = ( + + + + + + + + + + +); + +export function goToRoute(url) { + hashHistory.push(url); +} + +export function goBack() { + hashHistory.goBack(); +} + +export default routes; diff --git a/src/scripts/README.md b/src/scripts/README.md new file mode 100644 index 000000000..3c5fb27f1 --- /dev/null +++ b/src/scripts/README.md @@ -0,0 +1,5 @@ +To run the scripts, copy and execute in a node/TS/d2-api project (i.e d2-tools): + +``` +$ npx ts-node src/scripts/name.ts ARGS +``` diff --git a/src/scripts/example.ts b/src/scripts/example.ts deleted file mode 100644 index 2d092db58..000000000 --- a/src/scripts/example.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { command, run, string, option } from "cmd-ts"; -import path from "path"; -import { D2Api } from "$/types/d2-api"; - -function main() { - const cmd = command({ - name: path.basename(__filename), - description: "Show DHIS2 instance info", - args: { - url: option({ - type: string, - long: "dhis2-url", - short: "u", - description: "DHIS2 base URL. Example: http://USERNAME:PASSWORD@localhost:8080", - }), - }, - handler: async args => { - const api = new D2Api({ baseUrl: args.url }); - const info = await api.system.info.getData(); - console.debug(info); - }, - }); - - run(cmd, process.argv.slice(2)); -} - -main(); diff --git a/src/scripts/migrate-datasets-input-periods.ts b/src/scripts/migrate-datasets-input-periods.ts new file mode 100644 index 000000000..8a7b7387f --- /dev/null +++ b/src/scripts/migrate-datasets-input-periods.ts @@ -0,0 +1,306 @@ +import moment from "moment"; +import _ from "lodash"; +import fs from "fs"; +import { ArgumentParser } from "argparse"; +import { D2Api, MetadataPick } from "../types/d2-api"; + +/* 2021/12/20: This scripts migrates data sets with output/outcome dates, but no attribute + for period dates. Steps: + + - For each data set: + - Get data input periods opening/closing dates. + - Get output/outcome dates (from attributes). + - Set new opening/closing dates from min/max of these periods. + - Set new period dates attributes from min/max of opening/closing dates. + + NOTE: Run this script within a dhis2 typescript project (copy to src/scripts): + + $ npx ts-node src/scripts/nrc-migrate-datasets-input-periods.ts \ + -u 'EyeSeeTea:PASSWORD' --url="https://gorsdev.nrc.no" --name-pattern="" +*/ + +type DateObj = { year: number; month: number; day: number }; + +const metadata = { + attributes: { + createdByApp: "wA748YSs3Qk", + dataInputDates: "YyqT5dfIwL7", + outcomeDates: "mrpeo3N3qcy", + outputDates: "fhTYUbHAWiX", + }, +}; + +interface Args { + auth: string; + dhis2Url: string; + namePattern: string; +} + +function getArgs() { + const parser = new ArgumentParser({ + description: "Migrate NRC data sets input periods", + }); + + parser.add_argument("-u", "--user-auth", { + required: true, + metavar: "USERNAME:PASS", + dest: "auth", + }); + + parser.add_argument("--url", { + required: true, + help: "DHIS2 Base URL", + metavar: "URL", + dest: "dhis2Url", + }); + + parser.add_argument("--name-pattern", { + required: true, + help: "Datasets name pattern", + metavar: "STRING", + dest: "namePattern", + }); + + return parser.parse_args() as Args; +} + +async function getDataSets(api: D2Api, options: { namePattern: string }): Promise { + const { dataSets } = await api.metadata + .get({ + dataSets: { + fields: { $owner: true, attributeValues: { attribute: { id: true }, value: true } }, + filter: { name: { like: options.namePattern } }, + }, + }) + .getData(); + + return dataSets; +} + +function getApi(args: Args) { + const [username = "", password = ""] = args.auth.split(":", 2); + const api = new D2Api({ baseUrl: args.dhis2Url, auth: { username, password } }); + return api; +} + +function writeJson(path: string, obj: unknown): void { + const json = JSON.stringify(obj, null, 4); + fs.writeFileSync(path, json); + console.debug(`Written: ${path}`); +} + +function getAttributeValue( + obj: Obj, + attributeId: string +): string | undefined { + const attributeValue = obj.attributeValues.find(av => av.attribute.id === attributeId); + return attributeValue ? attributeValue.value : undefined; +} + +const request = { + dataSets: { + fields: { $owner: true }, + }, +}; + +interface D2AttributeValue { + attribute: { id: string }; + value: string; +} + +type D2DataSetBase = MetadataPick["dataSets"][number]; + +interface D2DataSet extends Omit { + attributeValues: D2AttributeValue[]; +} + +function addOneMonth(date: DateObj): DateObj { + return date.month === 12 + ? { ...date, year: date.year + 1, month: 1 } + : { ...date, month: date.month + 1 }; +} + +function setAttribute( + attributeValues: D2AttributeValue[], + attributeId: string, + value: string +): D2AttributeValue[] { + const attributeFound = _(attributeValues).some(av => av.attribute.id === attributeId); + + return attributeFound + ? attributeValues.map(av => (av.attribute.id === attributeId ? { ...av, value } : av)) + : attributeValues.concat([{ attribute: { id: attributeId }, value }]); +} + +function getDates(datesListStr: string | undefined): Array<{ start: DateObj; end: DateObj }> { + const parts = (datesListStr || "").split(","); + + return _(parts) + .map(part => { + const interval = part.split("=")[1]; + const [startS, endS] = (interval || "").split("-"); + const start = getDateObjFromString(startS); + const end = getDateObjFromString(endS); + return start && end ? { start, end } : undefined; + }) + .compact() + .value(); +} + +function getDateObjFromString( + dateStr: string | undefined, + defaults: { month: number; day: number } = { month: 1, day: 1 } +): DateObj | undefined { + if (!dateStr) return; + + const [s1, s2, s3] = [dateStr.slice(0, 4), dateStr.slice(4, 6), dateStr.slice(6, 8)]; + const year = parseInt(s1); + const month = s2 ? parseInt(s2) : defaults.month; + const day = s3 ? parseInt(s3) : defaults.day; + return year && month && day ? { year, month, day } : undefined; +} + +function dateToIso(date: DateObj): string { + const dateParts = [padDigits(date.year, 4), padDigits(date.month, 2), padDigits(date.day, 2)]; + return dateParts.join("-") + "T00:00:00.000"; +} + +function dateToString(date: DateObj): string { + const dateParts = [padDigits(date.year, 4), padDigits(date.month, 2), padDigits(date.day, 2)]; + return dateParts.join(""); +} + +function padDigits(number: number, digits: number): string { + return Array(Math.max(digits - String(number).length + 1, 0)).join("0") + number; +} + +function processDataSets(dataSets: D2DataSet[]): [D2DataSet[], D2DataSet[]] { + const data = _(dataSets) + .filter(dataSet => getAttributeValue(dataSet, metadata.attributes.createdByApp) === "true") + .map(dataSet => { + const dataSetUpdated = updateDataSet(dataSet); + return _.isEqual(dataSetUpdated, dataSet) + ? undefined + : { original: dataSet, updated: dataSetUpdated }; + }) + .compact() + .value(); + + const dataSetsOriginal = data.map(d => d.original); + const dataSetsUpdated = data.map(d => d.updated); + + return [dataSetsOriginal, dataSetsUpdated]; +} + +function getDateFromISO(s: string | undefined): DateObj | undefined { + if (!s) return; + const m0 = moment.utc(s); + // Tipically hours > 12 indicate a time-offset due to time-zone, then increment 1 day. + const m = + m0.hour() > 12 + ? m0 + .clone() + .add(1, "day") + .startOf("day") + : m0.clone().startOf("day"); + return { year: m.year(), month: m.month() + 1, day: m.date() }; +} + +function updateDataSet(dataSet: D2DataSet): D2DataSet { + const { attributes } = metadata; + + const periodDates = getAttributeValue(dataSet, attributes.dataInputDates); + const outputDatesS = getAttributeValue(dataSet, attributes.outputDates); + const outcomeDatesS = getAttributeValue(dataSet, attributes.outcomeDates); + const outputDates = getDates(outputDatesS); + const outcomeDates = getDates(outcomeDatesS); + + const minFromDipsOpening = getDateFromISO( + _(dataSet.dataInputPeriods) + .map(dip => dip.openingDate) + .compact() + .min() + ); + + const maxFromDipsClosing = getDateFromISO( + _(dataSet.dataInputPeriods) + .map(dip => dip.closingDate) + .compact() + .max() + ); + + const periods = dataSet.dataInputPeriods.map(dip => dip.period.id as string); + const _minFromDips = getDateObjFromString(_.min(periods)); + const maxFromDips0 = getDateObjFromString(_.max(periods)); + const _maxFromDips = maxFromDips0 ? addOneMonth(maxFromDips0) : maxFromDips0; + + const minStartDate = _(outputDates.map(date => date.start)) + .concat(outcomeDates.map(date => date.start)) + //.concat(minFromDips ? [minFromDips] : []) + .minBy(dateToIso); + + const maxEndDate = _(outputDates.map(date => date.end)) + .concat(outcomeDates.map(date => date.end)) + //.concat(maxFromDips ? [maxFromDips] : []) + .maxBy(dateToIso); + + const dataSetS = `${dataSet.name} [${dataSet.id}]`; + + if (periodDates) { + console.debug(`${dataSetS}: already has period dates`); + return dataSet; + } else if (!outputDatesS && !outcomeDatesS) { + console.debug(`${dataSetS}: no output/outcome info`); + return dataSet; + } else if (!minStartDate) { + console.debug(`${dataSetS}: no start dates`); + return dataSet; + } else if (!maxEndDate) { + console.debug(`${dataSetS}: no end dates`); + return dataSet; + } else if (!minFromDipsOpening || !maxFromDipsClosing) { + console.debug(`${dataSetS}: no dataInputPeriods data`); + return dataSet; + } else { + const dataInputPeriodsUpdated = dataSet.dataInputPeriods.map(dip => ({ + ...dip, + openingDate: dateToIso(minStartDate), + closingDate: dateToIso(maxEndDate), + })); + + const dipsUpdated = [ + dateToString(minFromDipsOpening), + dateToString(maxFromDipsClosing), + ].join("-"); + + return { + ...dataSet, + attributeValues: setAttribute( + dataSet.attributeValues, + attributes.dataInputDates, + dipsUpdated + ), + dataInputPeriods: dataInputPeriodsUpdated, + }; + } +} + +/* Main */ + +async function runMigration() { + const args = getArgs(); + const api = getApi(args); + const dataSets = await getDataSets(api, args); + console.debug(`Data sets with pattern '${args.namePattern}': ${dataSets.length}`); + + const [dataSetsOriginal, dataSetsUpdated] = processDataSets(dataSets); + + console.debug(`Data sets with changes: ${dataSetsUpdated.length}`); + writeJson("datasets-original.json", { dataSets: dataSetsOriginal }); + + _.chunk(dataSetsUpdated, 500).forEach((dataSetsGroup, idx) => { + writeJson(`datasets-updated-${idx + 1}.json`, { dataSets: dataSetsGroup }); + }); +} + +runMigration(); diff --git a/src/scripts/tsconfig.json b/src/scripts/tsconfig.json deleted file mode 100644 index be7f725e1..000000000 --- a/src/scripts/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "es2015", - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "commonjs", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "preserve", - "noUnusedParameters": false, - "noUnusedLocals": false, - "experimentalDecorators": true, - "lib": ["dom", "dom.iterable", "esnext"] - }, - "include": ["src"] -} diff --git a/src/tests/setup.js b/src/tests/setup.js deleted file mode 100644 index d5919ffd1..000000000 --- a/src/tests/setup.js +++ /dev/null @@ -1,9 +0,0 @@ -import { expect, afterEach } from "vitest"; -import { cleanup } from "@testing-library/react"; -import matchers from "@testing-library/jest-dom/matchers"; - -expect.extend(matchers); - -afterEach(() => { - cleanup(); -}); diff --git a/src/types/d2-api.ts b/src/types/d2-api.ts deleted file mode 100644 index b8db7a3ac..000000000 --- a/src/types/d2-api.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { D2Api } from "@eyeseetea/d2-api/2.36"; -import { getMockApiFromClass } from "@eyeseetea/d2-api"; - -export { CancelableResponse } from "@eyeseetea/d2-api"; -export { D2Api } from "@eyeseetea/d2-api/2.36"; -export type { MetadataPick } from "@eyeseetea/d2-api/2.36"; -export const getMockApi = getMockApiFromClass(D2Api); diff --git a/src/types/d2-ui.d.ts b/src/types/d2-ui.d.ts deleted file mode 100644 index c80113fbc..000000000 --- a/src/types/d2-ui.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module "@dhis2/ui" { - export function HeaderBar(props: { className?: string; appName?: string }): React.ReactElement; -} diff --git a/src/types/d2.d.ts b/src/types/d2.d.ts deleted file mode 100644 index 8de6a6bdf..000000000 --- a/src/types/d2.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module "d2" { - import { D2 } from "./d2"; - - export function init(config: { baseUrl: string; headers?: any; schemas?: string[] }): D2; - export function generateUid(): string; -} diff --git a/src/types/declarations.d.ts b/src/types/declarations.d.ts deleted file mode 100644 index 0357e4f19..000000000 --- a/src/types/declarations.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "*.png"; -declare module "*.svg"; -declare module "*.jpeg"; -declare module "*.jpg"; diff --git a/src/types/i18n.d.ts b/src/types/i18n.d.ts deleted file mode 100644 index 636fc4968..000000000 --- a/src/types/i18n.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "@dhis2/d2-i18n" { - export function t(value: string, namespace?: object): string; - export function changeLanguage(locale: string); - export function setDefaultNamespace(namespace: string); -} diff --git a/src/utils/Dhis2Helpers.js b/src/utils/Dhis2Helpers.js new file mode 100644 index 000000000..0646f9f47 --- /dev/null +++ b/src/utils/Dhis2Helpers.js @@ -0,0 +1,633 @@ +import { getJSONForProperties } from "d2/lib/model/helpers/json"; +import { generateUid } from "d2/lib/uid"; +import _ from "./lodash-mixins"; + +function collectionToArray(collectionOrArray) { + const array = + collectionOrArray && collectionOrArray.toArray + ? collectionOrArray.toArray() + : collectionOrArray || []; + return _.compact(array); +} + +const toArray = collectionToArray; + +const accesses = { + none: "--------", + read: "r-------", + write: "rw------", +}; + +function update(obj1, obj2) { + const obj1c = obj1; + _(obj2).each((value, key) => { + obj1c[key] = value; + }); + return obj1c; +} + +function mapPromise(items, mapper) { + const reducer = (promise, item) => + promise.then(mappedItems => mapper(item).then(res => mappedItems.concat([res]))); + return items.reduce(reducer, Promise.resolve([])); +} + +function redirectToLogin(baseUrl) { + const loginUrl = `${baseUrl}/dhis-web-commons/security/login.action`; + window.location.assign(loginUrl); +} + +function getCategoryCombos(d2, { cocFields, filterIds } = {}) { + return d2.models.categoryCombos.list({ + fields: _([ + "id,name,displayName,isDefault", + "categories[id,name,displayName,categoryOptions[id,name,displayName]]", + cocFields ? `categoryOptionCombos[${cocFields}]` : null, + ]) + .compact() + .join(","), + filter: _.compact([ + "dataDimensionType:eq:DISAGGREGATION", + filterIds ? `id:in:[${filterIds.join(",")}]` : null, + ]), + paging: false, + }); +} + +function getCountryCode(orgUnit) { + return orgUnit && orgUnit.code ? orgUnit.code.split("_")[0] : null; +} + +function getOrgUnitsForLevel(d2, levelId) { + return d2.models.organisationUnitLevels.get(levelId, { fields: "id,level" }).then(ouLevel => { + return d2.models.organisationUnits + .list({ + fields: "id,displayName,code,level,children::isNotEmpty", + filter: "level:eq:" + ouLevel.level, + order: "displayName:asc", + paging: false, + }) + .then(collection => toArray(collection).filter(ou => ou.children)); + }); +} + +// Keep track of the created categoryCombos so objects are reused +let cachedCategoryCombos = {}; + +function getDisaggregationForCategories(d2, dataElement, categoryCombos, categories) { + const categoriesById = _(categoryCombos) + .flatMap(cc => toArray(cc.categories)) + .uniqBy("id") + .keyBy("id") + .value(); + const getCategoryIds = categories => + _(collectionToArray(categories)) + .map("id") + .uniqBy() + .value(); + const deCategories = _.at( + categoriesById, + collectionToArray(dataElement.categoryCombo.categories).map(c => c.id) + ); + const allCategories = _(deCategories) + .concat(collectionToArray(categories)) + .uniqBy("id") + .value(); + + // Special category should be used only when no other category is present, remove otherwise + const allValidCategories = + allCategories.length > 1 + ? allCategories.filter( + category => categoriesById[category.id].displayName !== "default" + ) + : allCategories; + const combinedCategoriesIds = getCategoryIds(allValidCategories); + const existingCategoryCombo = categoryCombos.find(cc => + _(getCategoryIds(cc.categories)) + .sortBy() + .isEqual(_.sortBy(combinedCategoriesIds)) + ); + const cacheKey = combinedCategoriesIds.join("."); + const cachedCategoryCombo = cachedCategoryCombos[cacheKey]; + + if (existingCategoryCombo) { + return existingCategoryCombo; + } else if (cachedCategoryCombo) { + return cachedCategoryCombo; + } else { + const newCategoryComboId = generateUid(); + const categories = _.at(categoriesById, combinedCategoriesIds); + const categoryOptions = categories.map(c => toArray(c.categoryOptions)); + const categoryOptionCombos = _.cartesianProduct(...categoryOptions).map(cos => ({ + id: generateUid(), + name: cos.map(co => co.name).join(", "), + displayName: cos.map(co => co.displayName).join(", "), + categoryCombo: { id: newCategoryComboId }, + categoryOptions: cos, + })); + const ccName = allValidCategories.map(cc => cc.name).join("/"); + const newCategoryCombo = d2.models.categoryCombo.create({ + id: newCategoryComboId, + dataDimensionType: "DISAGGREGATION", + name: ccName, + displayName: ccName, + categories: categories, + categoryOptionCombos: categoryOptionCombos, + }); + cachedCategoryCombos[cacheKey] = newCategoryCombo; + return newCategoryCombo; + } +} + +function getAsyncUniqueValidator(model, field, uid = null) { + return value => { + if (!value || !value.trim()) { + return Promise.resolve(true); + } else { + const baseFilteredModel = model + .filter() + .on(field) + .equals(value); + const filteredModel = !uid + ? baseFilteredModel + : baseFilteredModel + .filter() + .on("id") + .notEqual(uid); + + return filteredModel.list().then(collection => { + if (collection.size > 0) { + return Promise.reject("value_not_unique"); + } else { + return Promise.resolve(true); + } + }); + } + }; +} + +function getExistingUserRoleByName(d2, name) { + return d2.models.userRoles + .filter() + .on("name") + .equals(name) + .list({ fields: "*" }) + .then(collection => toArray(collection)[0]); +} + +function getUserGroups(d2, names) { + return d2.models.userGroups.list({ + filter: "name:in:[" + names.join(",") + "]", + paging: false, + }); +} + +function getSharing(d2, object) { + const api = d2.Api.getApi(); + const fields = [ + "id", + "name", + "publicAccess", + "userAccesses", + "userGroupAccesses", + "externalAccess", + ].join(","); + + return api + .get(`${object.modelDefinition.plural}/${object.id}?fields=${fields}`) + .then(object => ({ object })); +} + +function getKey(s) { + return s.toLocaleLowerCase(); +} + +function buildSharingFromUserGroupNames(baseSharing, userGroups, userGroupSharingByName) { + const userGroupsByName = _.keyBy(userGroups, userGroup => getKey(userGroup.name)); + const userGroupAccesses = _(userGroupSharingByName) + .map((sharing, name) => { + const userGroup = userGroupsByName[getKey(name)]; + if (userGroup) { + return _.imerge(sharing, { id: userGroup.id }); + } else { + console.log(`User has no access to user group: ${name}`); + return null; + } + }) + .compact() + .value(); + + return buildSharing(deepMerge(baseSharing, { object: { userGroupAccesses } })); +} + +function buildSharing(sharing) { + const base = { + meta: { + allowPublicAccess: true, + allowExternalAccess: false, + }, + object: { + userGroupAccesses: [], + publicAccess: "r-------", + externalAccess: false, + }, + }; + return deepMerge(base, sharing); +} + +function setSharings(d2, objects, userGroupAccessByName) { + const api = d2.Api.getApi(); + let userGroupAccesses$; + + if (_.isEmpty(userGroupAccessByName)) { + userGroupAccesses$ = Promise.resolve([]); + } else { + const [userGroupNames, userGroupAccesses] = _.zip(...userGroupAccessByName); + userGroupAccesses$ = getUserGroups(d2, userGroupNames).then(userGroupsCollection => + _(toArray(userGroupsCollection)) + .keyBy(userGroup => userGroup.name) + .at(userGroupNames) + .zip(userGroupAccesses) + .map(([userGroup, access]) => (userGroup ? { id: userGroup.id, access } : null)) + .compact() + .value() + ); + } + + return userGroupAccesses$.then(userGroupAccesses => + mapPromise(objects, object => + api.post( + `sharing?type=${object.modelDefinition.name}&id=${object.id}&mergeMode=MERGE`, + { + meta: { + allowPublicAccess: true, + allowExternalAccess: false, + }, + object: { + userGroupAccesses: userGroupAccesses, + publicAccess: "r-------", + externalAccess: false, + }, + } + ) + ) + ); +} + +function sendMessage(d2, subject, text, recipients) { + const api = d2.Api.getApi(); + const recipientsByModel = _(recipients) + .groupBy(recipient => recipient.modelDefinition.name) + .mapValues(models => models.map(model => ({ id: model.id }))) + .value(); + const message = { + subject: subject, + text: text, + users: recipientsByModel.user, + userGroups: recipientsByModel.userGroup, + organisationUnits: recipientsByModel.organisationUnit, + }; + + if (_.isEmpty(recipients)) { + return Promise.resolve(); + } else { + return api.post("/messageConversations", message); + } +} + +const validStrategies = new Set(["create_and_update", "create", "update", "delete"]); + +function deepMerge(obj1, obj2) { + const isModel = obj => obj && obj.modelDefinition; + const cloneCustomizer = value => (isModel(value) ? value : undefined); + const mergeCustomizer = (objValue, srcValue, _key, _object, _source, _stack) => { + if (isModel(srcValue)) { + return srcValue; + } else if (_(objValue).isArray()) { + return objValue.concat(srcValue); + } else { + return undefined; + } + }; + const clonedObj1 = _.cloneDeepWith(obj1, cloneCustomizer); + + return _.mergeWith(clonedObj1, obj2, mergeCustomizer); +} + +function postMetadata(d2, metadata) { + const api = d2.Api.getApi(); + + const sendRequest = payloadWithStrategy => { + const { strategy, payload } = payloadWithStrategy; + // Payload values may be d2 models or plain objects, get JSON only for models. + const jsonPayload = _(payload) + .mapValues(objs => + objs.map(obj => (obj.modelDefinition ? getOwnedPropertyJSON(obj) : obj)) + ) + .value(); + const path = `metadata?mergeMode=REPLACE&importStrategy=${strategy.toUpperCase()}`; + + return api.post(path, jsonPayload).then(response => { + if (response.status !== "OK") { + const msg = [ + `POST ${api.baseUrl}/${path}`, + "Request: " + JSON.stringify(jsonPayload, null, 4), + "Response: " + JSON.stringify(response, null, 4), + ].join("\n\n"); + throw new Error(msg); + } else { + return response; + } + }); + }; + + // When saving simultaneously a new dataset and its sections, the server responds with a + // <500 ERROR at index 0> whenever greyedFields are sent. However, perfoming this same call + // to sections *after* the dataset has been created raises no error, so it seems a dhis2 + // bug. We have no option but to make the calls for sections in another, separate call. + const payloadsWithStrategy = _(metadata) + .flatMap((payload, strategy) => { + if (!validStrategies.has(strategy)) { + console.error("Invalid strategy: " + strategy); + return []; + } else if (_(payload).isEmpty()) { + return []; + } else { + return _(payload) + .toPairs() + .partition(([modelName, _objs]) => modelName !== "sections") + .map(pairs => + _(pairs).isEmpty() ? null : { strategy, payload: _.fromPairs(pairs) } + ) + .compact() + .value(); + } + }) + .value(); + + return mapPromise(payloadsWithStrategy, sendRequest); +} + +function getUids(d2, length) { + if (length <= 0) { + return Promise.resolve([]); + } else { + const api = d2.Api.getApi(); + return api.get("system/uid", { limit: length }).then(res => res.codes); + } +} + +function sendMessageToGroups(d2, userGroupNames, title, body) { + return getUserGroups(d2, userGroupNames) + .then(userGroups => sendMessage(d2, title, body, toArray(userGroups))) + .catch(_err => { + alert("Could not send DHIS2 message"); + }); +} + +function collectionString(d2, objects, field, maxShown) { + const array = collectionToArray(objects); + const base = _(array) + .take(maxShown) + .map(field) + .join(", "); + + if (array.length <= maxShown) { + return base; + } else { + return d2.i18n.getTranslation("this_and_n_others", { + this: base, + n: array.length - maxShown, + }); + } +} + +function currentUserHasAdminRole(d2) { + return ( + _(d2.currentUser.userGroups).some(userGroup => userGroup.name === "GL_AllAdmins") || + currentUserIsSuperuser(d2) + ); +} + +function currentUserIsSuperuser(d2) { + return d2.currentUser.authorities.has("ALL"); +} + +const requiredAuthorities = ["F_SECTION_DELETE", "F_SECTION_ADD"]; + +function hasAuthorities(d2, authorities) { + return authorities.every(authority => d2.currentUser.authorities.has(authority)); +} + +function hasRequiredAuthorities(d2) { + return hasAuthorities(d2, requiredAuthorities); +} + +function canManage(d2, datasets) { + return datasets.every(dataset => dataset.access.manage); +} + +function canCreate(d2) { + return d2.currentUser.canCreatePrivate(d2.models.dataSets) && hasRequiredAuthorities(d2); +} + +function canDelete(d2, datasets) { + const userHasRequiredAuthorities = + currentUserIsSuperuser(d2) || + hasAuthorities(d2, [ + "F_DATASET_DELETE", + "F_SECTION_DELETE", + // DHIS2 asks for indicator update permissions to remove dataSet references + "F_INDICATOR_PUBLIC_ADD", + "F_INDICATOR_PRIVATE_ADD", + ]); + + const userCanDeleteDataSetsAndUpdateTheirIndicators = _(datasets).every(dataset => { + return ( + dataset.access.delete && + dataset.indicators.toArray().every(indicator => indicator.access.update) + ); + }); + + return userHasRequiredAuthorities && userCanDeleteDataSetsAndUpdateTheirIndicators; +} + +function canUpdate(d2, datasets) { + const publicDatasetsSelected = _(datasets).some(dataset => dataset.publicAccess.match(/^r/)); + const privateDatasetsSelected = _(datasets).some(dataset => dataset.publicAccess.match(/^-/)); + const datasetsUpdatable = _(datasets).every(dataset => dataset.access.update); + const privateCondition = + !privateDatasetsSelected || d2.currentUser.canCreatePrivate(d2.models.dataSets); + const publicCondition = + !publicDatasetsSelected || d2.currentUser.canCreatePublic(d2.models.dataSets); + + return hasRequiredAuthorities(d2) && privateCondition && publicCondition && datasetsUpdatable; +} + +async function getFilteredDatasets(d2, config, page, sorting, filters) { + const { searchValue, showOnlyCreatedByApp } = filters; + const model = d2.models.dataSets; + const attributeByAppId = config.createdByDataSetConfigurationAttributeId; + + const filterByAppId = attributeByAppId && showOnlyCreatedByApp; + const order = sorting ? sorting.join(":") : ""; + const fields = + "id,name,displayName,displayDescription,shortName,created,lastUpdated,externalAccess," + + "publicAccess,userAccesses,userGroupAccesses,user,access,attributeValues," + + "periodType,sections[id,code,name],dataInputPeriods~paging(1;1),indicators[id,access[update]]"; + const cleanOptions = options => + _.omitBy(options, value => _.isArray(value) && _.isEmpty(value)); + const baseFilters = _.compact([searchValue ? `displayName:ilike:${searchValue}` : null]); + + if (filterByAppId) { + // The API does not allow to simultaneously filter by attributeValue.attribute.id AND attributeValue.value, + // so we need to make a double request: first get non-paginated datasets, filter manually by the attribute, + // and finally make a query on paginated datasets filtering by those datasets. + const attributeFields = "id,attributeValues[value,attribute[id]]"; + const options = cleanOptions({ order, fields, filter: filters, page }); + const paramsSize = _(options) + .map((value, key) => `${key}=${encodeURIComponent(value)}`) + .join("&").length; + + const dataSetsCollectionNoPaging = await model.list({ + fields: attributeFields, + paging: false, + order: "lastUpdated:desc", + }); + const datasetsByApp = toArray(dataSetsCollectionNoPaging).filter(dataset => + _(dataset.attributeValues).some( + av => av.attribute.id === attributeByAppId && av.value.toString() === "true" + ) + ); + // Truncate IDs to avoid 413 URL too large + const maxUids = (8192 - paramsSize - 1000) / (11 + 3); + const fullFilters = [ + ...baseFilters, + `id:in:[${_(datasetsByApp) + .take(maxUids) + .map("id") + .join(",")}]`, + ]; + return model.list(cleanOptions({ order, fields, filter: fullFilters, page })); + } else { + return model.list(cleanOptions({ order, fields, filter: baseFilters, page })); + } +} + +async function subQuery(d2, objects, field, subfields) { + const filter = + "id:in:[" + + _(objects) + .map(obj => obj[field]) + .flatMap(obj => (obj.toArray ? toArray(obj).map(o => o.id) : [obj.id])) + .uniq() + .join(",") + + "]"; + + const subObjects = await d2.models[field] + .list({ + paging: false, + fields: subfields, + filter: filter, + }) + .then(collection => toArray(collection)); + + const subObjectsById = _.keyBy(subObjects, "id"); + + return objects.map(obj => { + const value = obj[field]; + obj[field] = value.toArray + ? { toArray: () => toArray(value).map(v => subObjectsById[v.id]) } + : subObjectsById[value.id]; + return obj; + }); +} + +function getCategoryCombo(dataSetElement) { + const { dataElement, categoryCombo } = dataSetElement; + + if (categoryCombo) { + return categoryCombo; + } else if (dataElement && dataElement.categoryCombo) { + return dataElement.categoryCombo; + } else { + throw new Error( + `Cannot get category combo for dataSetElement: ${JSON.stringify(dataSetElement)}` + ); + } +} + +function setAttributes(initialAttributeValues, valuesByAttributeId) { + return _(valuesByAttributeId) + .toPairs() + .reduce((attributeValues, [attributeId, value]) => { + const attributeValueExists = _(attributeValues).some( + av => av.attribute.id === attributeId + ); + + if (attributeValueExists) { + return attributeValues.map(av => + av.attribute.id === attributeId ? _.imerge(av, { value }) : av + ); + } else { + const newAttributeValue = { value, attribute: { id: attributeId } }; + return attributeValues.concat([newAttributeValue]); + } + }, initialAttributeValues); +} + +function getDseId(dse) { + const parts = [dse.dataSet, dse.dataElement, dse.categoryCombo]; + return _(parts) + .compact() + .map(obj => obj.id) + .join("."); +} + +function getOwnedPropertyJSON(model) { + const ownedProperties = [ + ...model.modelDefinition.getOwnedPropertyNames(), + "publicAccess", + "userAccesses", + "userGroupAccesses", + ]; + + return getJSONForProperties(model, ownedProperties); +} + +export { + getDseId, + accesses, + redirectToLogin, + getCategoryCombos, + collectionToArray, + getExistingUserRoleByName, + getDisaggregationForCategories, + getAsyncUniqueValidator, + setSharings, + sendMessage, + getUserGroups, + mapPromise, + getCountryCode, + getOrgUnitsForLevel, + getSharing, + buildSharingFromUserGroupNames, + postMetadata, + buildSharing, + getUids, + deepMerge, + update, + sendMessageToGroups, + collectionString, + currentUserHasAdminRole, + currentUserIsSuperuser, + canManage, + canCreate, + canDelete, + canUpdate, + getFilteredDatasets, + subQuery, + getCategoryCombo, + setAttributes, + getOwnedPropertyJSON, +}; diff --git a/src/utils/ObservedEvents.mixin.js b/src/utils/ObservedEvents.mixin.js new file mode 100644 index 000000000..f3760315c --- /dev/null +++ b/src/utils/ObservedEvents.mixin.js @@ -0,0 +1,45 @@ +import { Subject } from "rx/dist/rx.all"; +import log from "loglevel"; + +const ObservedEvents = { + getInitialState() { + this.events = {}; + this.eventSubjects = {}; + + return {}; + }, + + createEventObserver: (function createEventObserver() { + const subjectMap = new Map(); + + return function ObservedEventHandler(referenceName) { + let subject; + + if (!subjectMap.has(referenceName)) { + subject = new Subject(); + subjectMap.set(referenceName, subject); + } else { + subject = subjectMap.get(referenceName); + } + + if (!this.events[referenceName]) { + // Run a map that keeps a copy of the event + this.events[referenceName] = subject.map(event => Object.assign({}, event)); + } + + return event => { + subject.onNext(event); + }; + }; + })(), + + componentWillUnmount() { + // Complete any eventsSubjects + Object.keys(this.eventSubjects).forEach(eventSubjectKey => { + log.debug(`Completing: ${[this.constructor.name, eventSubjectKey].join(".")}`); + this.eventSubjects[eventSubjectKey].onCompleted(); + }); + }, +}; + +export default ObservedEvents; diff --git a/src/utils/ObserverRegistry.mixin.js b/src/utils/ObserverRegistry.mixin.js new file mode 100644 index 000000000..693e48bfc --- /dev/null +++ b/src/utils/ObserverRegistry.mixin.js @@ -0,0 +1,15 @@ +const ObserverRegistry = { + UNSAFE_componentWillMount() { + this.observerDisposables = []; + }, + + componentWillUnmount() { + this.observerDisposables.forEach(disposable => disposable.dispose()); + }, + + registerDisposable(disposable) { + this.observerDisposables.push(disposable); + }, +}; + +export default ObserverRegistry; diff --git a/src/utils/i18n-typed.ts b/src/utils/i18n-typed.ts deleted file mode 100644 index ea917bfd1..000000000 --- a/src/utils/i18n-typed.ts +++ /dev/null @@ -1,38 +0,0 @@ -// @ts-ignore -import i18n from "$/locales"; - -export function getModuleForNamespace(namespace: string) { - return { - t: function (...args: I18nTArgs): string { - const [s, options] = args; - return i18n.t(s, { ...options, ns: namespace }); - }, - changeLanguage: i18n.changeLanguage.bind(i18n), - setDefaultNamespace: i18n.setDefaultNamespace.bind(i18n), - }; -} - -type I18nTArgs = Interpolations extends Record - ? [Str] | [Str, Partial] - : [Str, Interpolations & Partial]; - -interface Options { - ns: string; // namespace - nsSeparator: string | boolean; // By default, ":", which breaks strings containing that char - lng: string; // language -} - -type Interpolations = Record, string | number>; - -type ExtractVars = Str extends `${string}{{${infer Var}}}${infer StrRest}` - ? Var | ExtractVars - : never; - -/* Tests */ - -type IsEqual = [T1] extends [T2] ? ([T2] extends [T1] ? true : false) : false; -const assertEqualTypes = (_eq: IsEqual): void => {}; - -assertEqualTypes, never>(true); -assertEqualTypes, "name">(true); -assertEqualTypes, "name" | "age">(true); diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts deleted file mode 100644 index 94c5c1fbd..000000000 --- a/src/utils/i18n.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { getModuleForNamespace } from "./i18n-typed"; - -export default getModuleForNamespace("d2-dataset-configuration"); diff --git a/src/utils/lodash-mixins.js b/src/utils/lodash-mixins.js new file mode 100644 index 000000000..5ef40bfd6 --- /dev/null +++ b/src/utils/lodash-mixins.js @@ -0,0 +1,64 @@ +import _ from "lodash"; +import fp from "lodash/fp"; + +function imerge(obj1, obj2) { + return _.assign({}, obj1, obj2); +} + +function deepMerge(object, source) { + return _.mergeWith(object, source, function(objValue, srcValue) { + if (_.isObject(objValue) && srcValue) { + return deepMerge(objValue, srcValue); + } + }); +} + +function cartesianProduct(...rest) { + return fp.reduce((a, b) => fp.flatMap(x => fp.map(y => x.concat([y]))(b))(a))([[]])(rest); +} + +function groupConsecutiveBy(xs, mapper = _.identity) { + const reducer = (acc, x) => { + if (_.isEmpty(acc)) { + return acc.concat([[x]]); + } else { + const last = _.last(acc); + if (_.isEqual(mapper(_.last(last)), mapper(x))) { + last.push(x); + return acc; + } else { + return acc.concat([[x]]); + } + } + }; + + return _(xs).reduce(reducer, []); +} + +function transpose(xss) { + return _.zip(...xss); +} + +function groupByKeys(objs, keys, thruFn = _.identity) { + if (_(keys).isEmpty()) { + return objs; + } else { + return _(objs) + .groupBy(keys[0]) + .map((vs, k) => [k, _.groupByKeys(vs, keys.slice(1), thruFn)]) + .fromPairs() + .thru(thruFn) + .value(); + } +} + +_.mixin({ + imerge, + deepMerge, + cartesianProduct, + groupConsecutiveBy, + transpose, + groupByKeys, +}); + +export default _; diff --git a/src/utils/tests.tsx b/src/utils/tests.tsx deleted file mode 100644 index f1f82e386..000000000 --- a/src/utils/tests.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { render, RenderResult } from "@testing-library/react"; -import { SnackbarProvider } from "@eyeseetea/d2-ui-components"; -import { ReactNode } from "react"; -import { AppContext, AppContextState } from "$/webapp/contexts/app-context"; -import { getTestCompositionRoot } from "$/CompositionRoot"; -import { createAdminUser } from "$/domain/entities/__tests__/userFixtures"; - -export function getTestContext() { - const context: AppContextState = { - currentUser: createAdminUser(), - compositionRoot: getTestCompositionRoot(), - }; - - return context; -} - -export function getReactComponent(children: ReactNode): RenderResult { - const context = getTestContext(); - - return render( - - {children} - - ); -} diff --git a/src/utils/ts-utils.ts b/src/utils/ts-utils.ts deleted file mode 100644 index 1eb926f33..000000000 --- a/src/utils/ts-utils.ts +++ /dev/null @@ -1,76 +0,0 @@ -export type Maybe = T | undefined; - -export type Dictionary = Record; - -export type PartialBy = Omit & Partial>; - -export type Expand = {} & { [P in keyof T]: T[P] }; - -export type GetValue = T[keyof T]; - -export type UnionFromValues> = T[number]; - -export type RequireAtLeastOne = Pick> & - { - [K in Keys]-?: Required> & Partial>>; - }[Keys]; - -/* Like Partial, but recursive on object values */ -export type RecursivePartial = { - [P in keyof T]?: T[P] extends (infer U)[] - ? RecursivePartial[] - : T[P] extends object - ? RecursivePartial - : T[P]; -}; - -/* -Extract properties from an object of a certain type: - type Person = {name: string, age: number, address: string}, - type StringFields = GetPropertiesByType - // "name" | "address" -*/ -export type GetPropertiesByType = { - [Key in keyof T]: T[Key] extends FieldType ? Key : never; -}[keyof T]; - -export type RequiredProps = { - [P in keyof T]-?: NonNullable; -}; - -export function isValueInUnionType(value: S, values: readonly T[]): value is T { - return (values as readonly S[]).indexOf(value) >= 0; -} - -export function fromPairs( - pairs: Array<[Key, Value]> -): Record { - const empty = {} as Record; - return pairs.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), empty); -} - -/* Define only the value type of an object and infer the keys: - // values :: Record<"key1" | "key2", {value: string}> - const values = recordOf<{value: string}>()({ - key1: {value: "1"}, - key2: {value: "2"}, - }) -*/ -export function recordOf() { - return function (obj: { [K in keyof Obj]: T }) { - return obj; - }; -} - -/* Use as default case for exhaustive switch-blocks: - switch (type) { - case "active": - case "inactive": - ... - default: - assertUnreachable(type); - } -*/ -export function assertUnreachable(value: never, message = `Invalid union value: ${value}`) { - throw new Error(message); -} diff --git a/src/utils/uid.ts b/src/utils/uid.ts deleted file mode 100644 index 9032ebb7d..000000000 --- a/src/utils/uid.ts +++ /dev/null @@ -1,52 +0,0 @@ -// @ts-ignore -import MD5 from "md5.js"; - -// DHIS2 UID :: /^[a-zA-Z][a-zA-Z0-9]{10}$/ -const asciiLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -const asciiNumbers = "0123456789"; -const asciiLettersAndNumbers = asciiLetters + asciiNumbers; -const uidSize = 10; -const range = Array.from(new Array(uidSize).keys()); -const uidStructure = [asciiLetters, ...range.map(() => asciiLettersAndNumbers)]; -const maxHashValue = uidStructure.map(cs => cs.length).reduce((acc, n) => acc * n, 1); - -/* Return pseudo-random UID from seed string */ -export function getUid(seed: string): string { - const md5hash: string = new MD5().update(seed).digest("hex"); - const nHashChars = Math.ceil(Math.log(maxHashValue) / Math.log(16)); - const hashInteger = parseInt(md5hash.slice(0, nHashChars), 16); - const result = uidStructure.reduce( - (acc, chars) => { - const { n, uid } = acc; - const nChars = chars.length; - const quotient = Math.floor(n / nChars); - const remainder = n % nChars; - const uidChar = chars[remainder]; - return { n: quotient, uid: uid + uidChar }; - }, - { n: hashInteger, uid: "" } - ); - - return result.uid; -} - -function randomWithMax(max: number) { - return Math.floor(Math.random() * max); -} - -export function generateUid(): string { - // First char should be a letter - let randomChars = asciiLetters.charAt(randomWithMax(asciiLetters.length)); - - for (let i = 1; i <= uidSize; i += 1) { - randomChars += asciiLettersAndNumbers.charAt(randomWithMax(asciiLettersAndNumbers.length)); - } - - return randomChars; -} - -const fullUidRegex = /^[a-zA-Z]{1}[a-zA-Z0-9]{10}$/; - -export function isValidUid(code: string | undefined | null): boolean { - return !!code && fullUidRegex.test(code); -} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/webapp/components/card-grid/CardGrid.tsx b/src/webapp/components/card-grid/CardGrid.tsx deleted file mode 100644 index 9ddd3d74e..000000000 --- a/src/webapp/components/card-grid/CardGrid.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import styled from "styled-components"; -import { PageHeader } from "$/webapp/components/page-header/PageHeader"; -import { MenuCard, MenuCardProps } from "./MenuCard"; - -export const CardGrid: React.FC = React.memo(({ title, cards, onBackClick }) => { - return ( - - {!!title && } - - - {cards.map(({ key, title, children }) => ( -
    - {!!title && {title}} - - {children.map(props => ( - - ))} -
    - ))} -
    -
    - ); -}); - -export interface CardGridProps { - cards: Card[]; - title?: string; - onBackClick?: () => void; -} - -export interface Card { - title?: string; - key: string; - children: MenuCardProps[]; -} - -const Container = styled.div` - margin-left: 30px; - display: flex; - flex-direction: column; -`; - -const Title = styled.h1` - font-size: 24px; - font-weight: 300; - color: rgba(0, 0, 0, 0.87); - padding: 15px 0px 15px; - margin: 0; -`; diff --git a/src/webapp/components/card-grid/MenuCard.tsx b/src/webapp/components/card-grid/MenuCard.tsx deleted file mode 100644 index 61680cc7e..000000000 --- a/src/webapp/components/card-grid/MenuCard.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { - Card as MUICard, - CardActions as MUICardActions, - CardContent as MUICardContent, - CardHeader as MUICardHeader, - IconButton, - Tooltip, -} from "@material-ui/core"; -import AddIcon from "@material-ui/icons/Add"; -import ViewListIcon from "@material-ui/icons/ViewList"; -import React from "react"; -import styled from "styled-components"; -import i18n from "$/utils/i18n"; - -export const MenuCard: React.FC = React.memo( - ({ name, description, addAction, listAction = () => {} }) => { - return ( - -
    - - {description} - - - {addAction && ( - - - - - - )} - - {listAction && ( - - - - - - )} - - - ); - } -); - -export interface MenuCardProps { - name: string; - description?: string; - addAction?: () => void; - listAction?: () => void; -} - -const Card = styled(MUICard)` - padding: 0; - margin: 0.5rem; - float: left; - width: 230px; -`; - -const Content = styled(MUICardContent)` - height: 120px; - padding: 0.5rem 1rem; - font-size: 14px; -`; - -const Actions = styled(MUICardActions)` - margin-left: auto; -`; - -const Header = styled(MUICardHeader)` - padding: 1rem; - height: auto; - border-bottom: 1px solid #ddd; - cursor: pointer; - font-size: 15px; - font-weight: 500; -`; diff --git a/src/webapp/components/page-header/PageHeader.tsx b/src/webapp/components/page-header/PageHeader.tsx deleted file mode 100644 index dc7a4f1ad..000000000 --- a/src/webapp/components/page-header/PageHeader.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { ButtonProps, Icon, IconButton as MUIIConButton, Tooltip } from "@material-ui/core"; -import { Variant } from "@material-ui/core/styles/createTypography"; -import Typography from "@material-ui/core/Typography"; -import { DialogButton } from "@eyeseetea/d2-ui-components"; -import React, { PropsWithChildren } from "react"; -import styled from "styled-components"; -import i18n from "$/utils/i18n"; - -export const PageHeader: React.FC = React.memo(props => { - const { variant = "h5", title, onBackClick, helpText, children } = props; - return ( -
    - {!!onBackClick && ( - - arrow_back - - )} - - - {title} - - - {helpText && } - - {children} -
    - ); -}); - -export interface PageHeaderProps extends PropsWithChildren { - variant?: Variant; - title: string; - onBackClick?: () => void; - helpText?: string; -} - -const Title = styled(Typography)` - display: inline-block; - font-weight: 300; -`; - -const Button: React.FC = ({ onClick }) => ( - - - help - - -); - -const HelpButton: React.FC<{ text: string }> = ({ text }) => ( - -); - -const IconButton = styled(MUIIConButton)` - margin-bottom: 8px; -`; - -const BackButton = styled(IconButton)` - padding-top: 10px; - margin-bottom: 5px; -`; diff --git a/src/webapp/components/share/Share.tsx b/src/webapp/components/share/Share.tsx deleted file mode 100644 index bde3749d8..000000000 --- a/src/webapp/components/share/Share.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import React from "react"; -import logo from "./logo-eyeseetea.png"; - -interface ShareProps { - visible: boolean; -} - -interface ShareState { - expanded: boolean; - hover: boolean; -} - -class Share extends React.PureComponent { - state: ShareState = { expanded: false, hover: false }; - - toggleExpanded = () => { - this.setState({ expanded: !this.state.expanded }); - }; - - openMainPage = () => { - window.open("http://www.eyeseetea.com/", "_blank"); - }; - - openTwitter = () => { - window.open("https://twitter.com/eyeseetealtd", "_blank"); - }; - - setHover = () => { - this.setState({ hover: true }); - }; - - unsetHover = () => { - this.setState({ hover: false }); - }; - - render() { - const { visible } = this.props; - const { expanded, hover } = this.state; - const shareStyles = hover ? { ...styles.share, ...styles.shareHover } : styles.share; - - if (!visible) return null; - - return ( -
    -
    - -
    - - {expanded && ( -
    -

    - -

    - -

    - -

    -
    - )} -
    - ); - } -} - -const styles = { - eyeseeteaShare: { - backgroundColor: "rgb(243,243,243)", - position: "fixed" as const, - bottom: "0px", - right: "100px", - borderRadius: "0px", - height: "auto", - opacity: ".85", - paddingBottom: "30px", - width: "65px", - zIndex: 10001, - textAlign: "center" as const, - }, - - eyeseeteaShareButtons: { - width: "35px", - cursor: "pointer" as const, - backgroundColor: "white", - borderradius: 0, - opacity: 1, - color: "white", - boxShadow: "none", - textShadow: "none", - border: "0px", - textAlign: "center" as const, - }, - - eyeseeteaIcon: { - width: "15px", - }, - - twitterIcon: { - color: "#477726", - fontSize: "20px", - }, - - shareTab: { - bottom: "-3px", - right: "100px", - position: "fixed" as const, - zIndex: 10002, - }, - - share: { - textShadow: "none", - backgroundColor: "#ff9800", - color: "white", - width: "65px", - height: "38.5px", - cursor: "pointer", - border: "1px solid rgba(0, 0, 0, 0.1)", - borderRadius: "2px", - backgroundClip: "padding-box", - boxShadow: "0 4px 16px rgba(0, 0, 0, 0.2)", - }, - - shareHover: { - border: "2px solid #ff9800", - }, -}; - -export default Share; diff --git a/src/webapp/components/share/logo-eyeseetea.png b/src/webapp/components/share/logo-eyeseetea.png deleted file mode 100644 index 6368320f3edcee7d769c80f3e7ca3ec35e43a060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16196 zcmZv@by!qi^fyY%08-L0lqj82gEWeRBF)e#-7`pcioh_S2$BNQLzlEj4k+D?bPCea z_wfC__ulut&;4VbnRCwGd&OCMt-U^LO_YWjl!SFryIOra5 zC#+PN6Zj&8D;vDU!V+M=`(S(L$$0`d>D`s|-L+k9+`TN^tg#fVT;Eu;zI3**wbrt> zu<}9lT1#VL$qv7KuAt*RvpX;6%DB}c`1jypQR!$dai7wKC4a>kR#6`b9IdVFmnw?= z`jSN7D6gSyWQr$ojTT-l3QrY{GR`G}tHQ8puyvmXkP~foT1*XmAtHZL;*!<|%PBHb6 zD)M|55+q}Iq^EW?`G~AHYC;i$6F}BwO?z+_@u;1GJi7SVlSZSsT8?%KJ3lVchhvA6 z3JPXgkE7sthK$jE(Y*GL&ne{v!w~7M8RJw)wr%96vu>FBf&e{pYCN9oJIRdSTPL7V>C>#>I| zYHUT(xilQB@?K%WG)K4JBiiWRv=8t_NEL!Zq#~DDoAzD=OnqSK)dv`^*A^nx7FyV! zilY%RB$Hu?L2v3t?BQAVy$Bd>Grv!EIC(aq^wkaT8%bAkEW=7noZlgPWzR#Bq$<~Nk%q_Fhki;o9ZPmZ$_)t?a)EpdJ zby{Y|_pBr;J^vL$IQy{>9p-$t&TyHXOk18*3}0!el;{s(_sfY)`XaA`RkGIP*P^&Q zP;zARnX`kS2C#xvRMb-tbkm%xo1q)jja!Ov+&FjSVx>S0WtgYiTpM@ji(Xbe1S<$t zwa@A(5Gj9qqeu$smVGalo#e|3&d%cqtsD#XPY~C{S_1JGF|gCAe&=4S!+Ed-`a}5Q zml)pN`$pbf`h$_sP)+#}=_EJ#fHpc>>$LY0Vb}TqpFX zF!|F@!cZCq3XB@h)IQW%@_3(G%wN09PN zS2Fvjjpst1FJ9+9owyIYK%;TUz#_AKl$uXEhwd;g@DBc&gV$YMYo6OqKaz*wNZrd} zf?q6EOS2A&KJ(hrjd+s*>Nb5Z7LVJ{3Jyst?nc<8R|+oQ+kA9F1>6v8gY+$apLo#n z=3X%zPaMxuhm4YcSVcJOL|Fs`{cTBsoDeykj2U|?ADLWAB8RmbDRf)uB=)ib+VqD?5W(U4U942*4J z7CAMeMh&f@5y`Dgc7&eCtkpES5JgP!i~3mHUsB=h?v)N;+f%hQl!RWRUIe>4HyuF= zR1@JPtSd7NXzl4+OgSOf`@M0R%1^ixda+;X6^7rOrMIyJ3O9^V@j&f()0DME=Zo7Z z3{AvPA_;J=NMI~roh$@78E~$&Jy;@p%|NAjt`)*RRxIo%#f+BN-iGU)C_gR$S=8AX;rs$vs( zW1FlVJAl44VLAA>W6oa*!`TZNmYxYqZrthKPH`NfD>jnLC^i^Ch0^d6>Q?H>c&hql z1H1&PmHO#K2|bdou6YItMN`O%5975{=*0fbh9-G}poJaEltXY!RbT@=nGhTKx;?C# z4#)Fa{jE=Z$5B6XA#((KJtYCA1Rfq;+?|d7kfa-z#6$>%6OjJGlsT`3vwzaOlP|6Y zkDuDn4HnlbB<@+4c?#HewuZM;LwA%3TlhDu|VCgx7 z#`r1obOCxtoFx$Y#lLuyx8dw_MGk!2!7TYrvKcd^7qfOjuG+!ek8_~o}-A>E#x*>O%p ztYC}M4;()Z;^5(A4R7-YNk_t3C{S>I4{n*E2gm7^&^xa6pNs%HU5BlFfroqT`AqHo!lp}V7=z5_K%Kbu52Qj1AQxFcdPJKf2e>VYSga{i`~(Vl2*%z>f#FjXqP~Qh}$x-#%__`FR-=x%lDSWV@ zx5K$JiS+Ox_m+iE&j2n$5-+a)@hmA*-WSD&NJOyv_q>ML&8PJ%)We=UXII z_YsJcyco%ocboZt=gdF@A-}ISNOq&(;SRL{yPNLWhiT{=LzXY2ByEz$paEHrNzx1N z*C43FXcY-&aAVx8F&K^G$DDqC&_ws?=v8%$Q5hk$aLN?7wcvbr(7uuNOA(#{W$Ka3 z(N=WYcLkz83j%bX>0YJ7Hy#gN6!d&HCbczo)EyzEqEN_?i?j@=(6IO>EOh&L{(d1i zJ1lYKT#FnHDnkE6rj>bT@Zqn+*+kQfv;WvK+TapHxh5()%Uh;op7sl>Y4@w*;=ZlY zu^^?zc{`Q0tp!n3Y3W~xyL}Cds1X$^h++HGElAr@RW?2E7jVfJ&hF8uBJoium(1ea z1!T^~N5K6kk~(rt1ETo0h34I{G@tFXhu*Fg8y^{M`-rX&zOYfEVQyujgv3?tIbJHI z<-3Y;pW0UPqzJXYy@PGQQFNOSv&kc40P0lX$FGycoN6f#bR3qMRJ0flWE&+m?h3*p zDNXV;?DD))T*TFr&_BIpn%5+ys8Jea2|7#zqWC%wl8$<1R&-zkVTb0w1c!_1iyL9s zz5-;wIwC5JC5kqDm@6z3*|7qOcxaozd_RI6tC{Sl zLgqRM1jW)njN-roPD)tq6jc;2HL!tSxUh0oVA?AATLrOOm4PMw+iIEjrmi0291g50NOpT4&?BN?r2L zUQX{{#OG|Mh$d;fjvz-)29%C&|4t`ZmljnOdVuEXD>Y2iVl9ZE zg;MtkxbZg12@E6hVV`~U)x>~9zXgaziaH7K>}*c7Nt}%q5$sNs?<0vV><;e-{Pkr1 zR8*C2|6u98P`dh;C=Jn&du5#e`oa#MzXd@r^q9Jv%Cx3-YtdSek$#~$6$J>HlGNaj zKj{ToqPpB*dwW(=8XQe8ZmRt^Y+MDY&mbdL@?dL@QTfCL0lYlKt0iSz9E4y*wmhB! zH<&GAMJUKG=W*7sg5>ZC58x_)U<7DFt3D_AgaiI}>XA*08jv$g8khxcs{8L@IguaX zny!|&u1nN&o;yAQXY1ptVwHNvw|?)(b>jmoKyYN(!PrydU*LGbWPgaESex`q%893< z*sS2CXMq1DM`5{tAe6+a$UPz>1uj^@*uViZ7@k{s@9yE>Y=Ts*#wE_htC~>}UBHm) zhPOO^{XeGjzfHgcY)U?78V_r48yM}LMV+PXgoA}ojtYj~J^Fvm4Vd%)bL;=63yf7> z?7L&nqRlMugmdZ6W}iCq0Bo)Ox5)p8Bv$(ePpNUdA$nVYDVnP_y`V-a6xI-+s{du( zKoFRCO)1ZrP7EbS{fHE3y1^xa-iiGm#SwiGRjdplY7}q<>>_}cJVYx&1-J*FIAPI% zXr;7XZL8ZFV$W^<&#b#JxVv4-5$w6sK^_Iqb?9co{!hAKfxBJXT*UFe=stDg0cU&L z6yvm0Bu$wCu>#Berw&B%!2RwH%{9R22#^?wQ=+i`E|HYM!#}1w-~gKc-K`60e*rKB z0@(dMM~wo00H=dw2OPV+1-`BaC@iO9i8OBzG~GP-C!)8dxR{qkBJr|ULeAs&_=^7) zj)V!~fcIkEI^Hzq^k{OSeV^srE_Gk9^rC7BYIi0#*^ti~;P3}SEYTks zg_b~%tFX^6qMy2e^S1&fy0G|IS{k2zJ#%aMP~nHIgD! zo7$on=WTMR8*?%T*2zjbHL9MNpZorXLLrZnm$_PXgg~c`2`R1VSw{7|Z3cU-{kb9L zC_+g3!2Wc*J|l9?Vj>6eOSTlDBdJwa$KOaCw|`>AMs6$neL*+rsBCJ5Dhb%;)8l!M zXag?OBiKEjI{wQzQzGgF+_DqsSAu&wm|rI`r^G11&(}+Y3tXg4i4pqRbu3EejbMnAr942%(nul^Cnby9|6)c>h2mW-q@kqTKo0d~& z`bc;#A#HdS>5owzHno~3{L+H&xF4}d{GOE@9L%}?9&oP_R%8^euQ~s+QFU@2U+(%q z==urzq>Fg|@L6Pa$-ljpH3GiKt@d);=}Upr>f*(#(let!{a#zW&knho_B>Un)-&?NfuClre-zLSREFisz2W)Rt(m1Abg*!m)=SNrW37(71jHkKI zmPz)91KybUtExJcTp*vIdVjg4Cfz>7Hxk&S5BfQQ*Mnj^H!!O+p+dpmvJPZs!3&>S zg-rq|m?vYSnRZ;i_o(pvWC|Jxzz=0ee=>6H9eX}O!SO=gXBpq`EvLQt2V+LDFM+P_ zcb?NNE3;~a=oy4zxJIA$B0O7Ce(3o?n2DjA>a3(yXX;PAvy=+k{9S*)q_l0xXYvxb zymDt;QqELF+;pDcmMVmG8va}<=}IF75?0$p$WMlU?jHJ@sxQ2D5PA}?Xi*wLT%^@I zF50k%rKKE4@#%I%OCT?j&L)>ceAN;TPHrw+An3IVWJ7wQ10G*MNXd>@~MB%8hqnAS&4YL^j;&qT$L)ig6d;R9&7uDg@|RY z*=tRyA&H}nY-ZxS=Xl|{@Lbw#NMBh&Ik8f`kuo!V0u{=glWx(DkP8_l)&2p6mmBur zCt>dgkB_tG&nbuGH&U^PXgjD}57P$ix3d)>BTvLl-W^K6Vv~H?q;i*@$Ul%$$ymdd zRJ(k@4z{l^;s}1#Y1(O45D#`BT~ZG7Nn+9w=w>GXQri*#f>bOXv2h@eFuE#n7wzGJgwXWn;3G%Qv$8U2_l$Qex#~gEzse+D+#_;7No$=S zCE|h3&ExF1OaSzO+_OBKUG0rIy9y+n-8pGOYQ~m2+VU4<>HRi^h8Pi$nEv)}q*Rf# z8*IBc#*pgPH`VF2p3i;(Aea#*Kn$JOb_!Xmbi8zEJH_0=UGi4ZHtu>uLne0$;;ola zUm`~pGKV~-1b~1o4im-SR}`o$w{XSuS!yU`MAN>x^CRih{Bt191bh%V#5J59(z~SQ zUPJ_K9MFDhZu{T7NI;jRTh0`yddhn=n_ASU@o$8 z)Ur?hgG=K6E+_?dK*j-#V2(TNEdWJSxfeKms z!>ll_&qL|9xgK(TjHxVN4d7QG>qJ3t`?K8e#@U-C?zs7umqv(r3PgXC>vdP#ls~JR z-}RVPAA{SN#30=Oq%sWHrbR(fB;FEeR%KqbyavzZ1~>%ZD4um4l3>2U!;SRfM*BL! zbH|lAEOt1)tQ`E!L-&pR(pr-+Rm*3yebHcn>%e%QSFh+Z2ZM^D%gLnnjBe?wpMQ6ED>P2 zeI*iYOR-ll$=X8P9~a<|fLH=4nRu@#UIsvenq#PfDc;%Ir`I}W&RJG**>7XFj}Im5x{vjaVwN&0JYf)L=g4Jg~&x-6HD-b~O zcDONrI#?Jdlm`~rqy#)lcZB=I#~5HUbtF_ZzTCgwjSSoMb#gV0vferii)f_@3QUW7 zT|nIWMg5Af`na+AqV;yaBzMr;6oz`L3kw{s6?nS@>Lp zqMP?DzB^elry>qA*V-g`H;e|=tp#=_q$c^&t=*nQ_Weg zP0FBKFbtl+oiv8+!tI-9Vv)>haiGj!XCI^9p{Ym3iUH>z{5%NNQ-czMv3g4#Y84wUo`B*j+{(*CTc~m`9X8wF7 zdB;XgnJ==eA;($J)Q1bDRcpalIW16iu9e2$Xgu1P@$XW}E2{Wz7~0oAO%c&VwDOb+ zlTtSNEu|bPv+(3m*7}+P0>6k@IefS3s-5TEti;8fA5);Q8>oyr z3YK12_GZYBpIb}zPGoUq@1MJ$X@}EOHD==5tiivxNQLy_+S@3%_iWMC67n>ggS7O> z9T_yT&A3Z0;p{csbdl40BBV>s zL_KNf9s~`U{kPv{5XG2K;YQ8Y$p@bdlpcb!W3eT*#kAz9eUb@sw=1km-iDu`M6tc7 zC|ws;B@8jCifbSfH1i7T_Crz@)<#iux;+tqg3s$yYQ*c`b5F972Vm`%5&hw!q%2lj zj!mG16Ad7)m5;z7WW^YRo6}b+aOhyH1dx=cCO2H@iojJWThi$P{Qaq(jA>&%fOqkn?gapWJcNxs0V9gc5wM-(N?#=6(R^{qS1A}ou^iZ@Dd`=Ncf;gQ zdLGOdwNof3y#3-x_~h>AKY3$vLD6UBTWZv(A6h4NZlusg?WV2;w8mKPaWzZ#o+N?c zSFha+v>To{o%Mw5Y3v;%P9GcfFos|CNdIK;0QDB!Cmb94ms4bdM}vN7`o`X5cB%la zJC}9EpX5C^$&lgkg<$175M^;@_2Q~upE-Q)g5(ea{<&UBe%thqz%Oy2>O_#!w>w_u zlXyC&1i`5*Va{o!bBr2*3_6_-F#>hJY0i{>>_%2!tatW;CORm2>=!9};}b#eLNy^c z_^)C*p@v^;-^i>)*=*9zqcz5RPpetf4(k9WVI{UYk~oiJdcn-j#MWm!66X(KUAf*4U1oa|1;)eY$h@olci<7)W z2aC*~Lljk!a^fQmgFv7&+j&q8HgI+WHofEa7rUreT^~u}vfezlL=ELqj@%T(Ds6dyT8$>Y z66_2v=Xbi_1z=s4lnR!+Kik+i0>RHibCB9Yy_V!OA`oEiz#P2Cu2A}E9-4hJ0^X7V4KL#j#e#2WeCF+4b_CJrg z5<4v91_n*UBZYfx@dJA&x#>J|0A1)3ta3G7KF>&Y7a4eVpdSO=D#NpSJr?CMK~VQ^ zQC+(hGWro9=!i|f5}$D8k!1)d&7bZgfCCecKWwM?-4Q&e4qJUT{?Nqs5@OD4FOg<( z8$>&?;5ZHfb;aN-VrDaA^|g(oinfTEbc zl&iM>zz8qS5g*xrN+uNu%Eb#}$2uEztoSoF3rAQi;<{R_}(9ET8)JuVA(3ufc z_^fU+#V5`KErU>axQ9jk=T@eCApHzuzWxUk!XK1>ySLU7bS>>-emWA{XL_-+6y5q% z|H7$`d9vkVUrs%P8vr56-*-gF`xh!L_+%&^=4P`&$~QM)*IDlvQ${0({3W{62nxy^ zmOvSWq$}6obq#pCxiLPVkCrBZ~7jJ+8U&S9t#1HmyLYIBTLEi)F6Y>`w*UP z{pZi}mqBJ!Mf!FUP@N6e026j9HvjBE=vYELx0XdRLDc0504`1{xCDaXEei#uMSc|+ z4Hek*f$RZ&5C{7=IUUZ7CX>S7q=xZ%!P%Sg;9Pm+Brd;JwBSy1RzjrZ+-~#MFI8ot zpM_lNV7EW!mylGt=typIkF+G$WP!O)oW4()F}$tZ@3YbixnQUYXVw=IvmbaW-DrK* zAR3Yrqo?OP5Rn($U<)O#y#fvY5;2D(d*=8=)AWcHsA++N7WE=IfR6A|k!f?ujxf~5 zWTo1@GwdR7R|p&xD(7J5a=zAMAAFm;tpQ#uFVqSYq+_H;!Dc6SdAs7<0ki%U=Jrwi zmHe7A6j!*L5?Z7s`h^SJ@w(cz1`@^DXdLG(s=;rG`ot6s-LiImQ+=(H$e6(RwmEUC z-G%QF3l-60>oGDWY|(xWEyQ_EX}YX|_RrmPx$1F%B zO;UA!3|$@TcV3XmTbmTq)PLSK@N7{#RMrMTU!5MA-Pj2R#U4${Lp+lla-`nO-6~0I%ym}Zl*BACljx1 zS)(I8=7u2;-Em74$J!XX4M&ixZZX`dNdsK6sc3TM71^!{q51K=%(si=ZwetW@x(%6 zVDTo^`4&_Zrh~aub0=$2eho*Htwm7YWGdg zj0fHNtiMAeV7ZmbOH(@<>FV`93G*($>YxW=x>x5qJ5}r^#r^1qmV9m{+~Jmj#a-?S zzMdFCF&#-yb>FIJ_-lqM_nr1DW5I~6$~bX>cn`J zgFBwbREHID*p(#L-Z+~z8AMo~g;n-AAcn)H6l}XPcMPo^Io4_v1t)WeFnjObI9=~&*9Z=*qR`v;TPVhX(I?iOl^PQgRD%-mZJaFGlhbSw0*0()`5?woAo9aedO zRw3AE%h^;+Z9*ru*td`wb5f{+%?+NVjTYYGAe~`k;fL8m(9F|H+uudh=D`U}gC~6R zg@cE|yPfN6?Ug2N5asdZm3IM-XWEaOjAdSk!Iu&oVChd5*R8YLg|-bK-x?>M|V9pEE5@q0CF(if?}-ohb2< zJ|(P*byt|EHEi{esAet%zLmWZRmd})N1VUdz|n$CupldCh0tgM zri)7E(jsPdurtw+@hFF$u#VreG>)N9wYrrDY4{+FZA!@vDCYI$g=h z+OFf?I)}CP-wov1aSwr3yToTXU(AtGD;TC*VY%x+<+nG(FVD`~I5o4S-Ka!WOs5we z$GW!6yLCnFYU=lF{7;5fXdqWjFttUYyVrf{V$z&O6gEGXD@5G-kqX4lnsC zlxZW1>Fv*x=6p25V1-9{N#9wBv}y;D@m)tXuHV=>w)$P58OQo3zh^ZLVFynz3`UfI z(2eHlgUSI@)hq!fiQcP)5q5SR|g##8ppMf zSn1$*1|qh@PzN?4e9dqbFv#Ks zv%gy}6cHbKkUcTwOss5p1dmT!rllh_&WmtUY^A)T5old)huC~kB!B6TR#nRP;g-+Bgawve@m5M@jH=%b zSlbxCge*Aiayak`j^5k*)mHzx_A(`fvq(iBA}&P7zt`H-`)&_r^otOqI&L}le9Lrx zS9(XyYrE=_n^h&PjR)W_L)@dhJ7Tcr`lH|%RkN$0XY$?n3!^3zjLw^CGMhgJX+`u^ zW-U}8MBR18d zYINF-2PsqQ>P<${$lh=P{Aq(reBGc=+zxoZH*QW1iX49Up4QUjGW|kFSMb6+j2{?6 z3ocNlPU1~JKP1&YBW@nu8zIZ_JITl)SwV8j{5vO$1_Ld1p_MNe{`_dQxYG2{NVlI1 z%=+S0{{3~emtKlh|Dsea*UHxkIU;D=l>wotmW;$L8F;kMEE>Ez@a5&>P6c+kJA-wFTTs@v3Os7o13nwm}BoE+6-Z(iVHauk_MQi4T# zW=?8ipZI&8U>4^u4DxsYuBv*gn;xU)+lX?pc8)Oj3WGSj~ToJtqH+Aw42{zCT(j&bjXl$p>0dFV<$45jQDJ z#640e#|M!E9gh@qh*w4>@N<|e#z|d{;H#$Za?G7dZFjyUQ^p%@y%l^p8yBnERxd~w z(<;1c0?F@XqHLQoTqNo-@)=*Zm7vj(G5z*$s-By!fOMZxX3E1&&8!JVfTG6U8ffss zp6(`mI*XUXc>M?I<>Ln3Z$G%xdLD5^@NP;>v#Jj5v>fMVjWw}in|{e<(;WDu)=k0{Ov#gVfNcMj5oIGiV_6b{+ZCob!< zl*l{=VyM?B&Y`c#Vg&|!dM64ZK_|9bpX^HL#X+ZX;+?i#S+|s|7l*+5@>I>2BK{~P zI$)O{PFermx7leZR@6}xDs>!c8aJZp2i zzFOZoO4Lpt=Um~M7s#l$68bBMj_U0yg40e!kjaO0Vy5@X(v;Mu`lke z>Pa94yH$;iW28ONPst`^Dxcl4&DyB`-Ap1u4Btw+^3704T5f&Tj+V2o{0oU~TYK9t zPO3uP{j+@YeVU~ofYndu>m*)}rFc~bjxT3wj!%^YBLyyN=L@;%R+g^bZN!=!p^aFaZG8e5Z>9CnLJ+yghIw zroHm7Ig-UjHfM+H_S#gz%MdA%q` zS2hM4djurM@vBLMzj4obA!ct8L<}4eA}rD5oV=t0#ZOJmINUz;*qi z6H9&1%6D%3itasg#GrUAf4(_VBg1;q(Uk(VHpf=Jh2p9LqV@GmR_e~mh7y2!GjiHrnTKabV~>uKX?`9{STxT|jEx8{S=*E;*~SVgwj4YPS#kD^2b6*o zcu?I35|%pPDt|cWauM@b?_+_z4`F{XGiK{uwCBZ>a%Ob~6Ult%B^Rl85bnQ5l5WlM zo#7c%o&Ht!x;xRYsy3sf(B1ET3YHwCcx`bD28>3#j3-FVA>@8`)W%Eg)YPmrSiZv- zc6{1sh}ro<+d%a(K~(miwddKqr|G(x<2t*YyL@*oZ<*YNVUEYUSW=Ai)bid=*(`4? z@l_J4+P7eLR2s2DGjCh%toQ_f?d3M&!5ktxt%IosgC4IVa^C(RH&DTM$Sr_BWmxi*6F>{w^ zx5(@iTEnkmH+hI9V1Z61JrA6Zf$5xi~DYIus2xd9=GN3j4^}bQ4$f72G+hAZlrg?$NZV4(9M% zNQU!eOLU+wRvUpO=UnO|w84Mi*UJT0Sk|aG@>0>HhWaN>aI7=I( zF*bs-0!~`iUI--g^NyM2)kVIE*JfF<+>J}pH=gR(B|fK&nvzLV8I8Nr<;-WqCCnb> zTH$p?p^yce4W_3CN~tBIdG;q{;y{8K%P>4K z(Xtryzi+SAHC6e%&2$|zp(AqqvTPu-sa?rT!0DG(jAqcYhc z9D6?AGK&d&xIdtMw%xCZ@6$ysgqYgkdn%Iqc<~I5&lj^=lbZ6USwZ|j(F6-%!R^!rm|N7;5 z6|V#E)69v`prQl;$o^{h0=kYA(K_jpZ8YMv_jKgLu2get(RVf8a~iL4x14M5_R(Ek zDDE9@9^R5!L5|UX;=1#>CA!TLY9GE}zI$;x|4>y5#2CDCdZ@KAw3_{$-Bp zeN3Q+*7#IyG#3Z8YSnVVBAIrC^Sq{4z+<|tRPQIsjh;*e72w>R>6`ZAvLDi_i$-`$ z({5f{6B1ZTdMKt623ncHVho~fd?oOL{Ez9dO!=WX*#4fcp~)UU-kK@VU`f_*Q-%#3oZ{W;VU3WXb&Fl>;G?iSml(__S`;!7!1#8INSAdFH#P`mrpE~k=g8#^rS zGfow?TB$YOQhhXW#|aHQ;cIJQuv7CtV`*#L@Ri6z2ky|}3EN51!&8WWFslqfl~0@9 z2RRTX5n1iOY0zjv9zRc$*`a(#4<^>#HADGWmPSOMc;7+AaRbjvBy@PCKps*iHsbH7 z`pR&bjTN6=BgDuVXJ|#~w#ig^g+9LeYik9k&)9m5G+jX|whjv2Ja*pqpWI(`87Xp+`(B1P)pAM+v zsN%(m$dU4Go~iMc4+k<@F4nia^5%@Mu0G2}m(AMS_{5q6g%~g_*6XM~lxXA#;EEM& zL?55G%SVNsBHl(5A4*a95Il;4a4b`;DACXM@rPUa|M{G1AcV7~2atIaVB{wM!sFt( z2=R-oIry>Nms8+;yW865M8irKvfLqD>RbaekitEDRGo%0$9q)-(E3B#Go@-9Z$J$2 zS~^!hAnY7)N~Q|y@484USWNV+RC8oo*d2xejm_iWuj%EFlz7HzL;jUz%jK>JWx{=C$+oGDL2iN zvB4%P1)J!nK5lnNaxwf_!fJcYdlM@Tz?*a-BkhPn9|q2Ef79|gb3gGo8!vRbOmK!$ za6JYe#q6^lJwN9lSWSB(L97qz*))x{%qFQeShVqM!G2W+sIH$j4Ijx1>Y0LZq9Qr= z(IRFYTy)q=%BLQDb=-a&jzqnn<-w|TXH(|I!S7jWn%37bcIX#|DGWb3nZ>Z+taI2QQzfGT;>E0^0vJ>d&!L z7#+mtykIiyBq^@on(5qYltaJN5CYxg`mljqUX$#U_J2j`EJ{xs&B zDR)!6#@*5ElMzDr1nZ=7y$6))6Mc`kyGVUq*p zCak-j$p87#^Ykc6oH8543Xb?XU2r#sZ-Iau^{8As5i(AN)m}OHb;tdqA|hWBE8H?O z!*+5dinE&%J3NQyz;|LRWgTdf4>)}adrzr~tziav5#eU0J+>_k0|q_7PNhH%TW_SG z#$z7Sai;W&Va48uqD#pOQV`FByCZX^khU7Jl&0 z$~v`;kisUaEU85HrpUVHJ0Fl~J{D3ay$FOo#SNAS zx48?Y{pWs#O^&CcErUsBN!nOIo0p3Lf|TaQu70_k|26}r3-i!C=U3wx!6%YuyJ^M3 b#j^OIh?chRB?JBekM&YX?RlA^dFcNIZM>@f diff --git a/src/webapp/contexts/app-context.ts b/src/webapp/contexts/app-context.ts deleted file mode 100644 index 3e044f54f..000000000 --- a/src/webapp/contexts/app-context.ts +++ /dev/null @@ -1,19 +0,0 @@ -import React, { useContext } from "react"; -import { CompositionRoot } from "$/CompositionRoot"; -import { User } from "$/domain/entities/User"; - -export interface AppContextState { - currentUser: User; - compositionRoot: CompositionRoot; -} - -export const AppContext = React.createContext(null); - -export function useAppContext() { - const context = useContext(AppContext); - if (context) { - return context; - } else { - throw new Error("App context uninitialized"); - } -} diff --git a/src/webapp/main.tsx b/src/webapp/main.tsx deleted file mode 100644 index 38cccb57a..000000000 --- a/src/webapp/main.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import ReactDOM from "react-dom/client"; -import { Dhis2App } from "./pages/app/Dhis2App"; - -const domElementId = "root"; -const root = document.getElementById(domElementId); -if (!root) throw new Error(`Root DOM element not found: id=${domElementId}`); -ReactDOM.createRoot(root).render(); diff --git a/src/webapp/pages/Router.tsx b/src/webapp/pages/Router.tsx deleted file mode 100644 index e011f989c..000000000 --- a/src/webapp/pages/Router.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import { HashRouter, Route, Switch } from "react-router-dom"; -import { ExamplePage } from "./example/ExamplePage"; -import { LandingPage } from "./landing/LandingPage"; - -export function Router() { - return ( - - - } - /> - - {/* Default route */} - } /> - - - ); -} diff --git a/src/webapp/pages/app/App.css b/src/webapp/pages/app/App.css deleted file mode 100644 index 4f0ed8f11..000000000 --- a/src/webapp/pages/app/App.css +++ /dev/null @@ -1,13 +0,0 @@ -html { - background-color: #f3f3f3; - font-family: Roboto, Arial, sans-serif; - overflow-y: scroll; -} - -body { - margin: 0; -} - -li { - line-height: 1.75; -} diff --git a/src/webapp/pages/app/App.tsx b/src/webapp/pages/app/App.tsx deleted file mode 100644 index 281778757..000000000 --- a/src/webapp/pages/app/App.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import styled from "styled-components"; -import { HeaderBar } from "@dhis2/ui"; -import { SnackbarProvider } from "@eyeseetea/d2-ui-components"; -import { MuiThemeProvider } from "@material-ui/core/styles"; -//@ts-ignore -import OldMuiThemeProvider from "material-ui/styles/MuiThemeProvider"; -import React, { useEffect, useState } from "react"; -import { CompositionRoot } from "$/CompositionRoot"; -import { AppContext, AppContextState } from "$/webapp/contexts/app-context"; -import { Router } from "$/webapp/pages/Router"; -import "./App.css"; -import muiThemeLegacy from "./themes/dhis2-legacy.theme"; -import { muiTheme } from "./themes/dhis2.theme"; - -export interface AppProps { - compositionRoot: CompositionRoot; -} - -function App(props: AppProps) { - const { compositionRoot } = props; - const [loading, setLoading] = useState(true); - const [appContext, setAppContext] = useState(null); - - useEffect(() => { - async function setup() { - const currentUser = await compositionRoot.users.getCurrent.execute().toPromise(); - if (!currentUser) throw new Error("User not logged in"); - - setAppContext({ currentUser, compositionRoot }); - setLoading(false); - } - setup(); - }, [compositionRoot]); - - if (loading) return null; - - return ( - - - - - -
    - - - -
    -
    -
    -
    - ); -} - -const StyledHeaderBar = styled(HeaderBar)` - div:first-of-type { - box-sizing: border-box; - } -`; - -export default React.memo(App); diff --git a/src/webapp/pages/app/Dhis2App.tsx b/src/webapp/pages/app/Dhis2App.tsx deleted file mode 100644 index e1c0dc507..000000000 --- a/src/webapp/pages/app/Dhis2App.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import React from "react"; -import i18n from "@dhis2/d2-i18n"; -import { Provider } from "@dhis2/app-runtime"; -import { D2Api } from "$/types/d2-api"; -import App from "./App"; -import { CompositionRoot, getWebappCompositionRoot } from "$/CompositionRoot"; - -export function Dhis2App(_props: {}) { - const [compositionRootRes, setCompositionRootRes] = React.useState({ - type: "loading", - }); - - React.useEffect(() => { - getData().then(setCompositionRootRes); - }, []); - - switch (compositionRootRes.type) { - case "loading": - return

    Loading...

    ; - case "error": { - const { baseUrl, error } = compositionRootRes.error; - return ( -

    -

    {error.message}

    - - Login {baseUrl} - - - ); - } - case "loaded": { - const { baseUrl, compositionRoot } = compositionRootRes.data; - const config = { baseUrl, apiVersion: 30 }; - - return ( - - - - ); - } - } -} - -type Data = { - compositionRoot: CompositionRoot; - baseUrl: string; -}; - -async function getData(): Promise { - const baseUrl = await getBaseUrl(); - - const auth = env["VITE_DHIS2_AUTH"]; - const [username = "", password = ""] = auth.split(":"); - const api = auth - ? new D2Api({ baseUrl: baseUrl, auth: { username, password } }) - : new D2Api({ baseUrl: baseUrl }); - const compositionRoot = getWebappCompositionRoot(api); - - const userSettings = await api.get<{ keyUiLocale: string }>("/userSettings").getData(); - configI18n(userSettings); - - try { - return { type: "loaded", data: { baseUrl, compositionRoot } }; - } catch (err) { - return { type: "error", error: { baseUrl, error: err as Error } }; - } -} - -const env = import.meta.env; -const isDev = env.DEV; - -async function getBaseUrl() { - if (isDev) { - return "/dhis2"; // See src/setupProxy.js - } else { - const manifest = await fetch("manifest.webapp").then(res => res.json()); - return manifest.activities.dhis.href; - } -} - -const isLangRTL = (code: string) => { - const langs = ["ar", "fa", "ur"]; - const prefixed = langs.map(c => `${c}-`); - return langs.includes(code) || prefixed.filter(c => code && code.startsWith(c)).length > 0; -}; - -const configI18n = ({ keyUiLocale }: { keyUiLocale: string }) => { - i18n.changeLanguage(keyUiLocale); - document.documentElement.setAttribute("dir", isLangRTL(keyUiLocale) ? "rtl" : "ltr"); -}; - -type Result = - | { type: "loading" } - | { type: "loaded"; data: Data } - | { type: "error"; error: E }; - -type CompositionRootResult = Result; diff --git a/src/webapp/pages/app/__tests__/App.spec.tsx b/src/webapp/pages/app/__tests__/App.spec.tsx deleted file mode 100644 index 8bdd000ee..000000000 --- a/src/webapp/pages/app/__tests__/App.spec.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { fireEvent, render } from "@testing-library/react"; - -import App from "$/webapp/pages/app/App"; -import { getTestContext } from "$/utils/tests"; -import { Provider } from "@dhis2/app-runtime"; - -describe("App", () => { - it("navigates to page", async () => { - const view = getView(); - - fireEvent.click(await view.findByText("John")); - - expect(await view.findByText("Hello John")).toBeInTheDocument(); - expect(view.asFragment()).toMatchSnapshot(); - }); -}); - -function getView() { - const { compositionRoot } = getTestContext(); - return render( - - - - ); -} diff --git a/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap b/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap deleted file mode 100644 index 077af0848..000000000 --- a/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap +++ /dev/null @@ -1,48 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`App > navigates to page 1`] = ` - -
    -
    -
    - -
    - Detail page -
    -
    -

    - Hello John -

    -
    - -`; diff --git a/src/webapp/pages/example/ExamplePage.tsx b/src/webapp/pages/example/ExamplePage.tsx deleted file mode 100644 index c444f3b1e..000000000 --- a/src/webapp/pages/example/ExamplePage.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react"; -import { useHistory } from "react-router-dom"; -import styled from "styled-components"; -import i18n from "$/utils/i18n"; -import { PageHeader } from "$/webapp/components/page-header/PageHeader"; - -export const ExamplePage: React.FC = React.memo(props => { - const { name } = props; - const title = i18n.t("Hello {{name}}", { name }); - const history = useHistory(); - - const goBack = React.useCallback(() => { - history.goBack(); - }, [history]); - - return ( - - - {title} - - ); -}); - -const Title = styled.h2` - color: blue; -`; - -interface ExamplePageProps { - name: string; -} diff --git a/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx b/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx deleted file mode 100644 index b4ea226cf..000000000 --- a/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { getReactComponent } from "$/utils/tests"; -import { ExamplePage } from "$/webapp/pages/example/ExamplePage"; - -describe("ExamplePage", () => { - it("renders the feedback component", async () => { - const view = getView(); - - expect(await view.findByText("Hello Mary")).toBeInTheDocument(); - expect(view.asFragment()).toMatchSnapshot(); - }); -}); - -function getView() { - return getReactComponent(); -} diff --git a/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap b/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap deleted file mode 100644 index b1962f721..000000000 --- a/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap +++ /dev/null @@ -1,40 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`ExamplePage > renders the feedback component 1`] = ` - -
    - -
    - Detail page -
    -
    -

    - Hello Mary -

    -
    -`; diff --git a/src/webapp/pages/landing/LandingPage.tsx b/src/webapp/pages/landing/LandingPage.tsx deleted file mode 100644 index 2166c73da..000000000 --- a/src/webapp/pages/landing/LandingPage.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Typography } from "@material-ui/core"; -import React from "react"; -import { useHistory } from "react-router-dom"; -import { Card, CardGrid } from "$/webapp/components/card-grid/CardGrid"; -import { useAppContext } from "$/webapp/contexts/app-context"; -import i18n from "$/utils/i18n"; - -export const LandingPage: React.FC = React.memo(() => { - const history = useHistory(); - const { currentUser } = useAppContext(); - - const cards: Card[] = [ - { - title: i18n.t("Section"), - key: "main", - children: [ - { - name: "John", - description: "Entry point 1", - listAction: () => history.push("/for/John"), - }, - { - name: "Mary", - description: "Entry point 2", - listAction: () => history.push("/for/Mary"), - }, - ], - }, - ]; - - return ( - <> - - Current user: {currentUser.name} [{currentUser.id}] - - - - - ); -}); diff --git a/test/app/App.test.js b/test/app/App.test.js new file mode 100644 index 000000000..a17452c28 --- /dev/null +++ b/test/app/App.test.js @@ -0,0 +1,58 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import log from 'loglevel'; + +import App from '../../src/app/App'; +import HeaderBar from 'd2-ui/lib/app-header/HeaderBar'; +import Sidebar from 'd2-ui/lib/sidebar/Sidebar.component'; + +describe('App', () => { + let appComponent; + + beforeEach(() => { + appComponent = shallow(); + }); + + it('should render the startup text', () => { + expect(appComponent.find('.main-content').text()).to.equal('Hello, John! Your app skeleton set up correctly!'); + }); + + it('should render the custom name if it is passed', () => { + appComponent = shallow(); + + expect(appComponent.find('.main-content').text()).to.equal('Hello, Mark! Your app skeleton set up correctly!'); + }); + + xit('should render the HeaderBar component from d2-ui', () => { + expect(appComponent.find(HeaderBar)).to.have.length(1); + }); + + it('should render the Sidebar component from d2-ui', () => { + expect(appComponent.find(Sidebar)).to.have.length(1); + }); + + it('should pass two sections to the Sidebar component', () => { + const sidebarComponent = appComponent.find(Sidebar); + + expect(sidebarComponent.props().sections).to.have.length(2); + }); + + it('should pass the key and label properties for the sections', () => { + const sidebarComponent = appComponent.find(Sidebar); + const sidebarSections = sidebarComponent.props().sections; + + expect(sidebarSections).to.deep.equal([ + { key: 'item1', label: 'Item 1' }, + { key: 'item2', label: 'Item 2' }, + ]); + }); + + it('should log to console when a sidebar onChangeSection is called', () => { + spy(log, 'info'); + + const sidebarComponent = appComponent.find(Sidebar); + sidebarComponent.props().onChangeSection('item1'); + + expect(log.info).to.be.calledWith('Clicked on ', 'item1'); + }); +}); diff --git a/test/tests.js b/test/tests.js new file mode 100644 index 000000000..167d70d80 --- /dev/null +++ b/test/tests.js @@ -0,0 +1,11 @@ +beforeEach(function beforeEachSetup() { + this.sandbox = global.sinon.sandbox.create(); + global.stub = this.sandbox.stub.bind(this.sandbox); + global.spy = this.sandbox.spy.bind(this.sandbox); +}); + +afterEach(function afterEachSetup() { + delete global.stub; + delete global.spy; + this.sandbox.restore(); +}); diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 0b6c2b784..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noUncheckedIndexedAccess": true, - "noEmit": true, - "jsx": "react-jsx", - "baseUrl": "./src", - "paths": { - "$/*": ["./*"] - } - }, - "include": ["src"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/tsconfig.node.json b/tsconfig.node.json deleted file mode 100644 index 13b35d0ba..000000000 --- a/tsconfig.node.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 1e062a847..000000000 --- a/vite.config.ts +++ /dev/null @@ -1,73 +0,0 @@ -/// -import { defineConfig, loadEnv } from "vite"; -import react from "@vitejs/plugin-react"; -import checker from "vite-plugin-checker"; -import nodePolyfills from "vite-plugin-node-stdlib-browser"; -import * as path from "path"; - -export default ({ mode }) => { - const env = { ...process.env, ...loadEnv(mode, process.cwd()) }; - const proxy = getProxy(env); - - // https://vitejs.dev/config/ - return defineConfig({ - base: "", // Relative paths - plugins: [ - nodePolyfills(), - react(), - checker({ - overlay: false, - typescript: true, - eslint: { - lintCommand: 'eslint "./src/**/*.{ts,tsx}"', - dev: { - logLevel: ["warning"], - }, - }, - }), - ], - test: { - environment: "jsdom", - include: ["**/*.spec.{ts,tsx}"], - setupFiles: "./src/tests/setup.js", - exclude: ["node_modules", "src/tests/playwright"], - globals: true, - }, - server: { - port: parseInt(env.VITE_PORT), - proxy: proxy, - }, - resolve: { - alias: { - $: path.resolve(__dirname, "./src"), - }, - }, - }); -}; - -function getProxy(env: Record) { - const dhis2UrlVar = "VITE_DHIS2_BASE_URL"; - const dhis2AuthVar = "VITE_DHIS2_AUTH"; - const targetUrl = env[dhis2UrlVar]; - const auth = env[dhis2AuthVar]; - const isBuild = env.NODE_ENV === "production"; - - if (isBuild) { - return {}; - } else if (!targetUrl) { - console.error(`Set ${dhis2UrlVar}`); - process.exit(1); - } else if (!auth) { - console.error(`Set ${dhis2AuthVar}`); - process.exit(1); - } else { - return { - "/dhis2": { - target: targetUrl, - changeOrigin: true, - auth: auth, - rewrite: path => path.replace(/^\/dhis2/, ""), - }, - }; - } -} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..7a68d719c --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,133 @@ +"use strict"; + +var webpack = require("webpack"); +var path = require("path"); +var colors = require("colors"); + +const isDevBuild = process.argv[1].indexOf("webpack-dev-server") !== -1; +const dhisConfigPath = process.env.DHIS2_HOME + ? `${process.env.DHIS2_HOME}/config` + : `${__dirname}/config`; +let dhisConfig; + +try { + dhisConfig = require(dhisConfigPath); + console.log("\nLoaded DHIS config:"); +} catch (e) { + // Failed to load config file - use default config + console.warn(`\nWARNING! Failed to load DHIS config:`, e.message); + console.info("Using default config"); + dhisConfig = { + baseUrl: "http://localhost:8031", + authorization: "Basic YWRtaW46ZGlzdHJpY3Q=", // admin:district + }; +} +console.log(JSON.stringify(dhisConfig, null, 2), "\n"); + +function log(req, res, opt) { + req.headers.Authorization = dhisConfig.authorization; + console.log( + "[PROXY]".cyan.bold, + req.method.green.bold, + req.url.magenta, + "=>".dim, + opt.target.dim + ); +} + +const webpackConfig = { + context: __dirname, + contentBase: __dirname, + entry: "./src/app.js", + devtool: "source-map", + output: { + path: __dirname + "/build", + filename: "app.js", + publicPath: "http://localhost:8081/", + }, + module: { + loaders: [ + { + test: /\.jsx?$/, + exclude: /node_modules/, + loader: "babel", + query: { + presets: ["es2015", "stage-0", "react"], + }, + }, + { + test: /\.css$/, + loader: "style!css", + }, + { + test: /\.scss$/, + loader: "style!css!sass", + }, + { + test: /\.json$/, + loader: "json-loader", + }, + ], + }, + resolve: { + extensions: ["", ".js", ".jsx"], + alias: { + react: path.resolve("./node_modules/react"), + "material-ui": path.resolve("./node_modules/material-ui"), + d2: __dirname + "/node_modules/d2", + }, + }, + devServer: { + progress: true, + colors: true, + port: 8081, + inline: true, + compress: true, + proxy: [ + { path: "/api/*", target: dhisConfig.baseUrl, bypass: log }, + { path: "/dhis-web-commons/*", target: dhisConfig.baseUrl, bypass: log }, + { path: "/icons/*", target: dhisConfig.baseUrl, bypass: log }, + { path: "/css/*", target: "http://localhost:8081/build", bypass: log }, + { path: "/i18n/*", target: "http://localhost:8081/src", bypass: log }, + { + path: "/jquery.min.js", + target: "http://localhost:8081/node_modules/jquery/dist", + bypass: log, + }, + { + path: "/polyfill.min.js", + target: "http://localhost:8081/node_modules/babel-polyfill/dist", + bypass: log, + }, + ], + }, +}; + +if (!isDevBuild) { + webpackConfig.plugins = [ + // Replace any occurance of process.env.NODE_ENV with the string 'production' + new webpack.DefinePlugin({ + "process.env.NODE_ENV": '"production"', + DHIS_CONFIG: JSON.stringify({}), + }), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.OccurenceOrderPlugin(), + /* + new webpack.optimize.UglifyJsPlugin({ + // compress: { + // warnings: false, + // }, + comments: false, + beautify: true, + }), + */ + ]; +} else { + webpackConfig.plugins = [ + new webpack.DefinePlugin({ + DHIS_CONFIG: JSON.stringify(dhisConfig), + }), + ]; +} + +module.exports = webpackConfig; diff --git a/yarn.lock b/yarn.lock index 32fec85df..c3a43653d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,4812 +2,1273 @@ # yarn lockfile v1 -"$@link:./src": - version "0.0.0" - uid "" - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@adobe/css-tools@^4.0.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" - integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== - -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/generator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" + integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== - -"@babel/core@^7.0.0-0", "@babel/core@^7.16.0", "@babel/core@^7.20.12": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" - integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.20" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.16" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.20" - "@babel/types" "^7.22.19" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/eslint-parser@^7.16.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" - integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.1" - -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.4.0" jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" - integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/parser@^7.22.15", "@babel/parser@^7.22.16": - version "7.22.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/types" "^7.0.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/helper-split-export-declaration@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" + integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/types" "^7.4.0" -"@babel/plugin-proposal-class-properties@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" -"@babel/plugin-proposal-decorators@^7.16.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz#dc774eae73ab8c28a644d490b45aa47a85bb0bf5" - integrity sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" +"@babel/parser@^7.0.0", "@babel/parser@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.0.tgz#6de669e73ac3a32c754280d0fef8fca6aad2c416" + integrity sha512-ZmMhJfU/+SXXvy9ALjDZopa3T3EixQtQai89JRC48eM9OUwrxJjYjuM/0wmdl2AekytlzMVhPY8cYdLb13kpKQ== -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== +"@babel/runtime@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.42.tgz#352e40c92e0460d3e82f49bd7e79f6cda76f919f" + integrity sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + core-js "^2.5.3" + regenerator-runtime "^0.11.1" -"@babel/plugin-proposal-numeric-separator@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" + integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + regenerator-runtime "^0.13.2" -"@babel/plugin-proposal-optional-chaining@^7.16.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== +"@babel/template@^7.1.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" + integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" -"@babel/plugin-proposal-private-methods@^7.16.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== +"@babel/traverse@^7.0.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" + integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@babel/types@^7.0.0", "@babel/types@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" + integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" +"@emotion/hash@^0.7.1": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" + integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== +"@material-ui/core@^4.6.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.7.0.tgz#84c02a6d1c99c7900e184538c5f9d87e30cf4c23" + integrity sha512-mwLehUo0Q9ZxjuWo7J1uy1/Grh3nRxlOAaWJ3EtKeJP2HwqlSy8bWrcvRQYlapaYIPXa5jN8zWbTwi8Pk30VQg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/runtime" "^7.4.4" + "@material-ui/styles" "^4.6.0" + "@material-ui/system" "^4.5.2" + "@material-ui/types" "^4.1.1" + "@material-ui/utils" "^4.5.2" + "@types/react-transition-group" "^4.2.0" + clsx "^1.0.2" + convert-css-length "^2.0.1" + hoist-non-react-statics "^3.2.1" + normalize-scroll-left "^0.2.0" + popper.js "^1.14.1" + prop-types "^15.7.2" + react-transition-group "^4.3.0" -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== +"@material-ui/icons@^4.5.1": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.5.1.tgz#6963bad139e938702ece85ca43067688018f04f8" + integrity sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/runtime" "^7.4.4" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@material-ui/styles@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.6.0.tgz#15679fab6dcbe0cc2416f01a22966f3ea26607c5" + integrity sha512-lqqh4UEMdIYcU1Yth4pQyMTah02uAkg3NOT3MirN9FUexdL8pNA6zCHigEgDSfwmvnXyxHhxTkphfy0DRfnt9w== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + "@babel/runtime" "^7.4.4" + "@emotion/hash" "^0.7.1" + "@material-ui/types" "^4.1.1" + "@material-ui/utils" "^4.5.2" + clsx "^1.0.2" + csstype "^2.5.2" + hoist-non-react-statics "^3.2.1" + jss "^10.0.0" + jss-plugin-camel-case "^10.0.0" + jss-plugin-default-unit "^10.0.0" + jss-plugin-global "^10.0.0" + jss-plugin-nested "^10.0.0" + jss-plugin-props-sort "^10.0.0" + jss-plugin-rule-value-function "^10.0.0" + jss-plugin-vendor-prefixer "^10.0.0" + prop-types "^15.7.2" + +"@material-ui/system@^4.5.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.5.2.tgz#7143bd8422a3f33f435c23f378136254004bbd60" + integrity sha512-h9RWvdM9XKlHHqwiuhyvWdobptQkHli+m2jJFs7i1AI/hmGsIc4reDmS7fInhETgt/Txx7uiAIznfRNIIVHmQw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.5.2" + prop-types "^15.7.2" -"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== +"@material-ui/types@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b" + integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@types/react" "*" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@material-ui/utils@^4.5.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.5.2.tgz#4c2fb531d357cf0da8cece53b588dff9b0bde934" + integrity sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/runtime" "^7.4.4" + prop-types "^15.7.2" + react-is "^16.8.6" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== +"@types/react-transition-group@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470" + integrity sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@types/react" "*" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@types/react@*": + version "16.9.13" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.13.tgz#b3ea5dd443f4a680599e2abba8cc66f5e1ce0059" + integrity sha512-LikzRslbiufJYHyzbHSW0GrAiff8QYLMBFeZmSxzCYGXKxi8m/1PHX+rsVOwhr7mJNq+VIu2Dhf7U6mjFERK6w== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@types/prop-types" "*" + csstype "^2.2.0" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +accepts@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + mime-types "~2.1.11" + negotiator "0.6.1" -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + acorn "^4.0.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +acorn@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" +acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== +ajv@^4.9.1: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + co "^4.6.0" + json-stable-stringify "^1.0.1" -"@babel/plugin-syntax-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== +ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" - integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + color-convert "^1.9.0" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" - integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + arrify "^1.0.0" + micromatch "^2.1.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +aproba@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + sprintf-js "~1.0.2" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + ast-types-flow "0.0.7" + commander "^2.11.0" -"@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" + arr-flatten "^1.0.1" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + define-properties "^1.1.2" + es-abstract "^1.7.0" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" - integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== - dependencies: - "@babel/helper-module-transforms" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + util "0.10.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" - integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -"@babel/plugin-transform-react-jsx-self@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" -"@babel/plugin-transform-react-jsx-source@^7.19.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" - -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.16.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" - integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typescript@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.16.4": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== - dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" +async@1.x, async@^1.3.0, async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -"@babel/preset-react@^7.16.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" - integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" - -"@babel/preset-typescript@^7.16.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz#43db30516fae1d417d748105a0bc95f637239d48" - integrity sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-typescript" "^7.22.15" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.1", "@babel/runtime@^7.9.2": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.5.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" - integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" - integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.16" - "@babel/types" "^7.22.19" - debug "^4.1.0" - globals "^11.1.0" +async@^0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" - integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.19" - to-fast-properties "^2.0.0" +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== +author-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-0.2.1.tgz#8bdefaac6065a931799bec07eeef51b940e08f3c" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" dependencies: - "@jridgewell/trace-mapping" "0.3.9" + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" -"@date-io/core@1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.6.tgz#5c518cee6fa011e754293aebc6f1192360061797" - integrity sha512-cihiu8YaTHh7IqrzekbZcA7dh+7uhViHgWyxcKAO2cg1DYGYC5J7z4/rnGGL7swrK5xFVLIeyoxJ+sacziIRKg== +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -"@date-io/core@1.x", "@date-io/core@^1.0.2": - version "1.3.13" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" - integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -"@date-io/core@2.13.1": - version "2.13.1" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.13.1.tgz#f041765aff5c55fbc7e37fdd75fc1792733426d6" - integrity sha512-pVI9nfkf2qClb2Cxdq0Q4zJhdawMG4ybWZUVGifT78FDwzRMX2SwXBb55s5NRJk0HcIicDuxktmCtemZqMH1Zg== +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -"@date-io/core@^2.13.1": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" - integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== +aws4@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== -"@date-io/moment@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-1.0.2.tgz#898ca98d2031376cfed3c7258a8078a26892a501" - integrity sha512-iQFRMH49cFYH/jzgYhdvmO+YfLRmsBZX293Vcfrvkfk+ovrd2g5KOtP5Je3CBlywfqNOQlCC3tKAxsIvaIDSYw== +axobject-query@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: - "@date-io/core" "^1.0.2" + ast-types-flow "0.0.7" -"@date-io/moment@2.13.1": - version "2.13.1" - resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-2.13.1.tgz#122a51e4bdedf71ff3babb264427737dc022c1e6" - integrity sha512-XX1X/Tlvl3TdqQy2j0ZUtEJV6Rl8tOyc5WOS3ki52He28Uzme4Ro/JuPWTMBDH63weSWIZDlbR7zBgp3ZA2y1A== +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: - "@date-io/core" "^2.13.1" + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.1.4, babel-core@^6.24.0, babel-core@^6.7.2: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.0" + babel-helpers "^6.23.0" + babel-messages "^6.23.0" + babel-register "^6.24.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" -"@dhis2-ui/alert@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-6.12.0.tgz#7661759c505334674bab668d5b82828f87b4768d" - integrity sha512-adPF4xzo1D1h5LPBD4LrEGYssBow3Lqw6LSOUoek5lmaKqqcZmKB9KZyvFIRiUWEvoO63Jka/dmE4i++oL8oOQ== +babel-eslint@9.x: + version "9.0.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" + integrity sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g== dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +babel-generator@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" + dependencies: + babel-helper-explode-assignable-expression "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.23.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-define-map@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" + dependencies: + babel-helper-function-name "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-explode-class@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" + dependencies: + babel-helper-bindify-decorators "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" + dependencies: + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + +babel-helper-get-function-arity@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-hoist-variables@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-optimise-call-expression@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.23.0" + +babel-helper-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" + dependencies: + babel-helper-optimise-call-expression "^6.23.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + +babel-helpers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.23.0" + +babel-loader@^6.2.4: + version "6.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^0.2.16" + mkdirp "^0.5.1" + object-assign "^4.0.1" -"@dhis2-ui/alert@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-6.15.2.tgz#95d2de9ba0f316798d55339cb672ea632b470018" - integrity sha512-dDjHQ+5eWIPPTxBlWLIM3lPa/3Bd4DHenODi6pLsajMKKpSmrdqVo/AazQVYIqUWquVpZv2Cm/pqs4lmziNiNQ== +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/alert@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-8.2.0.tgz#a7e5bf4acdce1339267fdadbee9bf6af0dbd4208" - integrity sha512-JqQO0bJJ9D/1ifw53fW8uHDVrbMnlVwGagayqnZuICDCQ68ihFid/QcbyBpC/ReJj6vIo0Nsfk6rfz2Vzv6Vtw== +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: - "@dhis2-ui/portal" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/box@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-6.12.0.tgz#a0c16b7a8a12351c2ab3a19b4f9dbba6482f9ea7" - integrity sha512-rymrenQ+O5x0WnKDIpLvB3wRFszHCPU2GTtomg4jC/m00XJeCzwI4gQioKgbTx6Y2yF9XFe5ql9SW2VgK1gk+w== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" -"@dhis2-ui/box@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-6.15.2.tgz#7b27190363ad9250a7ea092646ab11f39c86a9cb" - integrity sha512-HXAQcFDjwEgjM8ZPS49hbkfV/bTkjC/aqPuXyJ6mqPS6S7r5bl4zzGVhVOSmi5V81Lhspx5qr16b79t6TukJTg== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" -"@dhis2-ui/box@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-8.2.0.tgz#3f90e1e697e31f33f96dfed41f5e1d170e30ff07" - integrity sha512-wMaFsiYn5dNPSD5kCEeelns9G4BJ6/mdLizYspOCDYyDTfaA5uHD74JPsE9ViznRdbZjwp2XgF3sQdSXaBoCig== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" -"@dhis2-ui/button@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-6.12.0.tgz#263fa2c90a5f28629f49f0cd57cdad0d8c998651" - integrity sha512-mcy0Z+QI0QUjVwo4seU+fTuzVX8OhzyGuxGT27g6qxYhPvYrL5Z2i8uIWKpZRhvQPTA/l7eoo/DU2SwRmQWMMA== - dependencies: - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" -"@dhis2-ui/button@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-6.15.2.tgz#bdf44efa7ebd17df031c75495c833b6f8c4a8cae" - integrity sha512-MIhCN3fxHNOrlRCXVNqAi+sgZYCPfFzE/2hbMNLAtRWOQTBNqnicwfGNtcJY2wzkhO+y/8OJilmY2pBjZBjY1A== - dependencies: - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" -"@dhis2-ui/button@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-8.2.0.tgz#30147f089ac1db4361cc02ea7c4104a42efb610c" - integrity sha512-rFes1K8FMLQEA7Sp9T6SvU4+ZfhGGRspDzAFpSsf3tSvIM/KhcRr7JO2GqdvvtSi72DPN6eHL9yCEtLoNBUqWw== - dependencies: - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" -"@dhis2-ui/card@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-6.12.0.tgz#86c576ca7aa2a5c12e83e98df8db49b3cf3f1b77" - integrity sha512-dptmtz+FovTgUtjMo9F3O/rpfX0529UT6NtGgyM+9hJ3l4rnDKNZqzNy2GXMRItBcDErSKy24ywDBNU8JnNjrQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" -"@dhis2-ui/card@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-6.15.2.tgz#ac1db093fc1f3bc40fbca78f803e2a7d38dd69bb" - integrity sha512-y1KClCq1P9Kb5cqi/GgFeA593nrRnznXkK4mqW9xiygoB0R2ongPHSOAwJTSklff31Hzi9l2DIi1ZUgX871eaw== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" -"@dhis2-ui/card@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-8.2.0.tgz#2f316f08e362152c940782e24f7a4d13ef96f4ed" - integrity sha512-anNv47HHUatbUAnHJwlpY16viEdF/ouQ+hU+Hh9PkuL0ADfzbmtmsdyeR7Z3jnuCPQbZK5CwVINfDkqMr5RulA== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" -"@dhis2-ui/center@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-6.12.0.tgz#53b891d65618580bbc1ef6b23d1bde6a435bd58b" - integrity sha512-7ifx/ICrcHeQs1yGulodv7NbJTZrkRAdhB5tQaTfP236dpd2Tb2wZT1WMmZtcAddCIyp5WlAmfS3ABu9/8/INw== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" -"@dhis2-ui/center@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-6.15.2.tgz#7e4461c165c30b87d629bf390f03e54e8dbcb2c8" - integrity sha512-pjXWJ5nbYwNpf0t8iy/7DVN+bJnvO8XWRz3uraS8NJ7IjhHtLl0sktpG0tIatiAzjrtO1QLD9ds0o4oRgT52MQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" -"@dhis2-ui/center@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-8.2.0.tgz#f7b3499e455ccd28a91ce495dc3d9d5e9409f8dc" - integrity sha512-+O2apPf4umYJUWmy6KPAnR+0IEDRGIhkEgKBqShVZDq2oveSrVRf6qKmPfuBDNJS/HS/N+0yttm6OrafRbapIQ== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" -"@dhis2-ui/checkbox@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-6.12.0.tgz#b0d802e9f6468a2a1602c103f4bcd3b9519363c9" - integrity sha512-hgyRemDSbqSxjbNAx67RgJso/vSbMdNJWwszgz4Nyb8gqtva8um7jMNFAMqWXzHdEZwiSUt467AEdKnJfpM7WQ== - dependencies: - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/required" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" -"@dhis2-ui/checkbox@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-6.15.2.tgz#673d5f33025b4cb81984eb2c729eca5b14e12581" - integrity sha512-jM7KDsgq/fMOSoWTa08P3Qq6JzUM6zySsmCdEC4AHBmsD0u/2Eb1ktyv/BZQkPMx14lInSMtPsvcWCPaNtCtJg== +babel-plugin-transform-async-generator-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" dependencies: - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/required" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" -"@dhis2-ui/checkbox@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-8.2.0.tgz#c7cf14303609dd91aec3eff69331af5ce65fa384" - integrity sha512-Wm5hSdcTWs8DIoFiANPmzgM/szUTQRK77AjvDpwAJDJK2POEniBWzM7sDx44CeuMjrh1tMf6ol9pSb4Yy6XPgw== +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" dependencies: - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/required" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/chip@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-6.12.0.tgz#f90bac4f9b3cb5e4a374f8e14d8fb9c5d8c26269" - integrity sha512-llEsIp/N1tz6FKky/mrS0EHYWzuTocz2pne1ghHRjF0mBt+z/z28/2VaIGcMlDrSmzt1VbqLDjBa1tSyHeeG1g== +babel-plugin-transform-class-constructor-call@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -"@dhis2-ui/chip@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-6.15.2.tgz#8684980c993bb208eeca6bf625b112be346ac14c" - integrity sha512-G8DBc0EG2bIouZQ4uBWu5iB9QbWgX9WdPuGCnf6ZVIKQcM/NHFc74e2WW2XLrqqbpvm0xhNyopSAZhtZ+9YYzw== +babel-plugin-transform-class-properties@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-function-name "^6.23.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" -"@dhis2-ui/chip@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-8.2.0.tgz#e7bc668281b6f5664830f2781c6f6d976f704df2" - integrity sha512-JNVcR8L6WZASd+IwJHgO84JiwjkHKIjKzVjzinb0zk6exqbT9mu2YiI0N3MNo+xmGmXvsVzu7wbfPtlVaDNC+g== +babel-plugin-transform-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-explode-class "^6.22.0" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/cover@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-6.12.0.tgz#73549cc9a36ace5ddcd08d3c086c7d090942e1d0" - integrity sha512-HI2lo8xXdGsBShDjMpitrVokldtnm4fR09plnYJg39tJ23RuQEJDTYQczSXfYC6t60dGc/2mHsYFW3IMsraXsg== +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/cover@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-6.15.2.tgz#a946e696b27f6b2425f67d8f97db83e998dbeca3" - integrity sha512-iyio99zj7X88kmFBKN94MY3KLEUfFfJaDpwrrq683igBaOyd8wqkLnu+rDE4v7sSklsQoeuficJFJoRwA3CDCw== +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/cover@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-8.2.0.tgz#abce07cde4d407eca2884a9fcd65198530389482" - integrity sha512-NWaPMHBt40zBoABay72VqqwDHjBzM0X5WZjaHa0d1fQtKqMCH05EyGOFnnR0uOY7KiD0RbrqIDW+zc3oiVy80A== +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/css@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-6.12.0.tgz#886da44a8a860ce37471a0ebfdefdfc51058780f" - integrity sha512-SsGkVMmc0u2iYX6zhAA0s0bl7sIX5QiF0pxXU3u2IYdNZLgpndBBVtOoaI1r4pCe8fCn2SmB8DuINtj3pNG21A== +babel-plugin-transform-es2015-block-scoping@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + lodash "^4.2.0" -"@dhis2-ui/css@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-6.15.2.tgz#82cdf63d42a00d4b1a9b6233c031e226898a2135" - integrity sha512-fCA0xMCHA4piMC3EcImBuC8/XR8rlBcBFWTITtOQGrE8yHsTfv+Ik8SF+j9sW/jfg7p9mZXt9s1KnT3uOdg2Kw== +babel-plugin-transform-es2015-classes@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-define-map "^6.23.0" + babel-helper-function-name "^6.23.0" + babel-helper-optimise-call-expression "^6.23.0" + babel-helper-replace-supers "^6.23.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" -"@dhis2-ui/css@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-8.2.0.tgz#f82ffc8cdc50deb4c1c845d9d0a6c6a7827f6bed" - integrity sha512-u2QYaYPp5V6dXmcaVeT0s5kCH+K11MRL75ZwzXGQfE6PZaAD9UzBtiF+0Ug/S0v8PwW5FzR2kFvndMvQY+iwMA== +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -"@dhis2-ui/divider@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-6.12.0.tgz#c442518e6ce2ee2b1a938c96ba29556f919a2687" - integrity sha512-2E5kJe948n6b47JpU4Na6H01juvmJ73PKvyHWaZmCOlItiXErSSN/LnsSQjXx6+AUe1Jhv4B1NngSvTO3NUFRA== +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/divider@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-6.15.2.tgz#009678eef72b1018849958b6d25572b29235ddc5" - integrity sha512-HCmrd5T7mK5YsVZO8fZDkYUBueuo5wdC8BGvY73s5PiwkQI0q1becj6dCjqGhaTlEY7z1RbXO0A/YQ62CkbDOQ== +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/divider@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-8.2.0.tgz#e3bd02588151d8e357727c2aba3a2684631a1d75" - integrity sha512-Qd8YF44Zjsz0BTD4FbnC5qa6hfvNe6XhXUJ+59sMe85Y2gQn1nPekSaxoJORig4cNEBjCJrO01bJEB0LWsbeUA== +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/field@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-6.12.0.tgz#f29e51f6b4f5d01a410a645dfad9d8770fd1dbd0" - integrity sha512-4eseArRKJeZJMzqKqfCgglycti6EnvkbwuN4UPy45ISboPLDXrp7NldUpy3fFOG1y8riGLR3Vn4xJutyiSznkA== - dependencies: - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/help" "6.12.0" - "@dhis2-ui/label" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/field@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-6.15.2.tgz#45939045db980fe1f6eb95c3c31aa3b59134a3ef" - integrity sha512-2b3gYg9W/gQlHiKoHHCsHbLF9WXjWPVkeRnBx1BF+E04rImbfwL6FPjin4RqtwJkskfW64/mVZW5V+Dn51cA6g== - dependencies: - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/help" "6.15.2" - "@dhis2-ui/label" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/field@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-8.2.0.tgz#f6cbac95907dce32e91e28d6b1a5a0e27b660a56" - integrity sha512-wetCSmXY6YvPBwaycSp7JrUS+AFaUzehWN927YayM/FkCEAEue31wVTkinRnYI03oXlXWADkjZikO4jt3g2guA== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/help" "8.2.0" - "@dhis2-ui/label" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/file-input@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-6.12.0.tgz#ed1abb1e8dfb7f4e35a7a96b881ed51a4253157b" - integrity sha512-dFgdtAJ7JrgwlS32WWABvpB6LUAizTlipYEAJXloPvS5sqny+DTKtYTbyFALGmFiQaKwEjZAwghhkIqqjfK1qw== - dependencies: - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/label" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" -"@dhis2-ui/file-input@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-6.15.2.tgz#18b170df11e89ed67af416f4d71d185dd5606fde" - integrity sha512-ehDgzscRp1m89My9Fk8EvgFUFuQyi7i1nhcFIGni+70vvmlPe/g4PvYSj8rju4MK3KR/2+7PoR6BLvyFE+H0LQ== - dependencies: - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/label" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-modules-amd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -"@dhis2-ui/file-input@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-8.2.0.tgz#e17030822aa06eb31417397c2735c762aca71c3e" - integrity sha512-nGiayFHm2mEF2RJJkDT/xanjAY3j6hpxAnVSoeEEY8jbp2z9qqCjnBR+S7g1AoZ8Ax0Jr5kcCbajgCoXrQLYyw== - dependencies: - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/label" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/status-icon" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-modules-commonjs@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" + dependencies: + babel-plugin-transform-strict-mode "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-types "^6.23.0" -"@dhis2-ui/header-bar@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-6.12.0.tgz#6b5c5c33a87c58e3d0281d3396427634d48c2155" - integrity sha512-VOeLUgYMEQj34U5SwMwRncS7o0iQJXxx2mb4cmmW9nZdj9EPyZSY1n7zyekGmWGTIpOCqwDXqwfNK9fdJUM1KQ== - dependencies: - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/divider" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/logo" "6.12.0" - "@dhis2-ui/menu" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-modules-systemjs@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" -"@dhis2-ui/header-bar@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-6.15.2.tgz#5a0ef910759c955e28a9a6157010c0596e3edaf7" - integrity sha512-tZP54F6WWCTmO6HHbS2BvWKQVfFz1dYqCUir07XoLCFUhRsBcK325C/zASC6+PzrB24n7vLXS5jSdSMXSlX6Ew== - dependencies: - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/divider" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/logo" "6.15.2" - "@dhis2-ui/menu" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-modules-umd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" -"@dhis2-ui/header-bar@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-8.2.0.tgz#e095d39c7806c6201c5beb9a6c14a3af66c59d11" - integrity sha512-mAcXDnYOo7FA7PqGV3Pvy8x/TkNiyfl5lvq9XYtgyN+VrPd7m7HXeRyFXBXgriUt7KCn4DcTm3YK/z+MjrYyJw== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/center" "8.2.0" - "@dhis2-ui/divider" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/logo" "8.2.0" - "@dhis2-ui/menu" "8.2.0" - "@dhis2-ui/user-avatar" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - moment "^2.29.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" + dependencies: + babel-helper-replace-supers "^6.22.0" + babel-runtime "^6.22.0" -"@dhis2-ui/help@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-6.12.0.tgz#cc269822c20399b25e98e8191d7f38309b617d69" - integrity sha512-tpfPC0HSPqPNipndM+aTdskhedEMmSjlYFbeJvYRJizqFBZrIjBIW9+CSsE7AEIigrGCdwQDyyP/lQvCa5r/dQ== +babel-plugin-transform-es2015-parameters@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-call-delegate "^6.22.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" -"@dhis2-ui/help@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-6.15.2.tgz#ad009f14fc1721b5b1d736e4b1662208d9453ff8" - integrity sha512-mNsmR0TjhunEgJ8et3r21Bw5Q3WQaB38g6nY9W8Nbjdxt4mBgXxNKsAxCSLYrAdcNdUDzaY/tCBGWqbVkRcdFg== +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/help@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-8.2.0.tgz#b2a813571f75585e9a40a1dcf77b774ab14b47cc" - integrity sha512-CWRQfGRfW1zrV8BCBFSW9HRGyUbp9abwpCkRWg6kj0n+g0zqnalHPq2hQxgdeSlqcC2El6WWev++SXmZurVFNg== +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/input@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-6.12.0.tgz#d4a7eaee2649e97836f0074e3a099e282efeb3f0" - integrity sha512-uno4TJ0j95LFLMmjfeb8V3J1qcS7xqFJBrUVXDtq7AGjJCN/HYEdL+bNza5Um5NoC+RKy+PNUkkKyBKMGYVeIw== - dependencies: - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/input@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-6.15.2.tgz#f58a102ac5b35eca590c42af195c32aae1c6e891" - integrity sha512-Nt2bVJ21RAP5uDGoYbY+5joOjrcyQwBwjx7BOScLseC5Zb7MphRLmFGTxAy1kSIvl+9XFG/QTXS4lQTrXOYrlw== - dependencies: - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" -"@dhis2-ui/input@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-8.2.0.tgz#b38e4ba65b2b97c4911bb4ef75ff48af208b0fd6" - integrity sha512-fD0foDSuh9tMRuZVePZoCwo2hJ0jFcMexeZVlSofkUpz678RIjvcLb0amxIke7tvmwurIvSpNDIJ8bEswX1PFQ== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/status-icon" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" -"@dhis2-ui/intersection-detector@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-6.12.0.tgz#06228f0691496d619e10651f9196fa5c35d08468" - integrity sha512-r42BNUWbBqxtGBbX17A9W+Rz4VCLQQEAkYiUvmKKflRedKsy08JZma6HFV9zZFgLl9IuYE5A/aG/xQ9q0xMbLA== +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" -"@dhis2-ui/intersection-detector@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-6.15.2.tgz#cf9db0a7826f7c454864e7ea801f3a9aec456226" - integrity sha512-tP6wqu09cZHg5tvNLJteozk+YQQ4iAt1i4uaJrv4SF+iSir0EJ3hOkNQuxgkqi1qMFzmu4IVtF8OhZS1iCE0Cg== +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/intersection-detector@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-8.2.0.tgz#06ca6410cac37657fe327c59d254f74dc5700d95" - integrity sha512-QOtM8xwUR5cabFLCCsfOlK15ErY98+o1Vwn/BiqLbDfaLjpvPCo4mqCps9e5+pCMi6fwZ8NJwl0DFqACS65pSA== +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/label@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-6.12.0.tgz#1d9eef81c8b3b44c1095e26d50381923286d94cd" - integrity sha512-iuMvT4zYm+mqGPAUOOi5CSyCSVeFq5HGBHGNUvmznCaW7tp6X7PfeOYDMIK8wlac2VVk/OyEz8S/izfYrKBk4A== - dependencies: - "@dhis2-ui/required" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - -"@dhis2-ui/label@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-6.15.2.tgz#c6e703c9b9f129f6f4419baf0ef7ad3c9a974126" - integrity sha512-xNq1jFwj33TJADyYzyN4C6JTQxuZscoY3tUi93Mh2a2Pl8h+tz9FhM+7cM9H4FfTbYZpttBCwsP2v08viYE7Sg== - dependencies: - "@dhis2-ui/required" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - -"@dhis2-ui/label@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-8.2.0.tgz#2944acc4b7c97ae8f3cae65e012fee4cefccb2fb" - integrity sha512-YNdJv43ZuOuK9KsFlhA+UoToWmqlnDGkeeohaDdSz8Ptf8yXWwVczWd21wdD5gQCcvmZdunflA7VJvEc+1Yv8Q== - dependencies: - "@dhis2-ui/required" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" -"@dhis2-ui/layer@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-6.12.0.tgz#6a2d8cc5448f99fbe2f54dc5e4b19654952921bd" - integrity sha512-l+FJI1ONyoJn7mZmP3v7dvjMTt8sxUPQIC4VqruekJKMeQd5doT+yfSZcwUepQp/pIkY2Yo/KI5bHF4I9jg03w== +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/layer@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-6.15.2.tgz#46eac6f539351fa63f3fe1e0351556cf68c19594" - integrity sha512-MGf5rMGUT5a8MgFOEgafYAriU0WBQmjpAghcAumOVG+qPUrKzn0Ao7Fo8FsNcrUfW5VsAZUiYrJPXl9HAvv6sw== +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/layer@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-8.2.0.tgz#888b2a1256d609224331617663fd70e786887660" - integrity sha512-pjVcPoSsAtk1ygBa3c4ZMqV7wfqYcvCsUUEpElskC7Cmfe+y1XXJJxUgVuKH4eOyt05tetO0YOfL7cbJcHhCog== +babel-plugin-transform-react-display-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" dependencies: - "@dhis2-ui/portal" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" -"@dhis2-ui/legend@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-6.12.0.tgz#6f7f3a65b4047ffd6983c8806c76283f19857eba" - integrity sha512-HvvwoAU3tpb9mwKdkMrR9prAEGzarRjTdwBiLe1TqE3MKeYaVDAxrg+Fa+CXV5YwiiGn/aYYNlN49q+ZHJBPWQ== +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" dependencies: - "@dhis2-ui/required" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/legend@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-6.15.2.tgz#15f1d5ce387654147b4912fc180a17500e6323e4" - integrity sha512-miN75VfTU4SPA0kL1De5BBKot47NssRJRuohYlsIguEe2kqFZaP6mJBSsw+JG73PRX0eiCWjh6JEAEWX4Czuyw== +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" dependencies: - "@dhis2-ui/required" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/legend@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-8.2.0.tgz#1ce798125c84e8456acf1daeffd011efafc4333b" - integrity sha512-m3rJ4/hjwc7+MllW7IAySTsZXb+tY244PqbZ5iQJ5R74K6mOoL1ZsvXki8bhy0tFbeu09+7qF3Ohud5U9I6P/w== +babel-plugin-transform-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" dependencies: - "@dhis2-ui/required" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-helper-builder-react-jsx "^6.23.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" -"@dhis2-ui/loader@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-6.12.0.tgz#73c0531bd8fc9b86d657fc2b78493caf4731f7d8" - integrity sha512-d10Y+RD9YcWdjtu/fEjFeu86kDYLOlq+Ec2wxCOGx3NiiTY0xqtcvJIq870HwG4NFo97tp9h0JA0RQCM7eFUSw== +babel-plugin-transform-regenerator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" + regenerator-transform "0.9.8" -"@dhis2-ui/loader@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-6.15.2.tgz#e770f976acce4ff8c91c183f2f5e0b91faa93d0e" - integrity sha512-MZOzbDYYKOky62a/DVsNTmATmoWErgBDDyA+bdab0U2gvImHi9NjrRM3vbTMz6746BaX4ChqSPtvmXHB4zmZFw== +babel-plugin-transform-strict-mode@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -"@dhis2-ui/loader@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-8.2.0.tgz#1a234ea3098f59cb0ea62a24225fa4dc4de51c49" - integrity sha512-DBRzaj7mCT9rndFGF+3hfkg2fHTSR12EolhJHerhMEl8NM5i9vtitxWmGVyhWew6Va2F7Q/W+9RG8nXLNyJvmA== +babel-polyfill@^6.7.2: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/logo@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-6.12.0.tgz#0e8cee990209829a6afa7557979afcb1eefaf1f9" - integrity sha512-xSc0d847QzqaqPmnccYeXX+m9l34JHVsbiZfasYMAo1mb562LLGJd1oUF2VjOBTowaK0rigNoLVWM8TLNGpjzA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/logo@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-6.15.2.tgz#6750613acbcc71f9d2d3ce55f00994c41732deec" - integrity sha512-2sBAh1QOO3X95aGVocKn3HrrrynB66+iUV7dbmOMJPem8QiDLD+Fsa9y20DdGt0a4+I83SlFp1ao8mU6TGwDvg== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/logo@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-8.2.0.tgz#117c53a031a613746a476f23bc942507177e9db0" - integrity sha512-5Eh3PAQSG8HrtcE+ZGTVcg8GTBw4qt3M4VhgdT+Tdmm47eYicnKlDelCaJ2Xd4GBuwMq3OjgdzxFzPldyThZQA== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/menu@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-6.12.0.tgz#840883489b3a2d0566e40932a26d972fb9fb05e2" - integrity sha512-LDCjHO0edb9rWIFl4uWHSAsvO5UGTcpoKpvl7Nxl2WgpcdHwQexSpS7P37mLDG25a745F+0hHDgqPEMTeGcAgA== - dependencies: - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/divider" "6.12.0" - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/menu@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-6.15.2.tgz#7cf5dd281b2e61240d58791dc840fcaff13f842d" - integrity sha512-bXzPz2PK5JGOIEV619gIaBHZkoo3MCGCWys/r3Vzut2Z/qO69F0gjc5kH6DXad0SKO6UIsR+cWfRehmcAKNewQ== - dependencies: - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/divider" "6.15.2" - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/menu@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-8.2.0.tgz#053ac3ee109bffda50159b76a670ab925ad9256a" - integrity sha512-y+SWbJAQpkcgp0UlficzLj0mXaT+W2ejfyIUulswb5La0xoBhQvFsw1NXcaUGRfcW0p6bCfWchaR9LaAvgkDoQ== - dependencies: - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/divider" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2-ui/portal" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/modal@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-6.12.0.tgz#86f782cd4a37886549ce5b73ba91bae1b3b7a960" - integrity sha512-YCl75ngAefYA9gKKN9Xdjwv22eCJQYN9GrGD36OCvQPT97dxpvr/GescnH4ZpDtQ7THSxVgE5SoTiKX4CkK1hg== - dependencies: - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/center" "6.12.0" - "@dhis2-ui/layer" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/modal@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-6.15.2.tgz#4d92831584a1ec8f6dbd7756a3042a2aa5ffd099" - integrity sha512-2A/k3VEqgYguOe0bJyZzy95OfOUSEChkuvNx7cQ1dsSlyq8/Il7/w5CLsgBwSI+vNQu4gBqqMFQMcs0NQsDMRA== - dependencies: - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/center" "6.15.2" - "@dhis2-ui/layer" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/modal@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-8.2.0.tgz#c395f11a91573791e9e2cb9715e5648f03c67622" - integrity sha512-7nE9VzkGOARecRGJJr+YsLHqmW+Dzt+K/g6mmiuOHP0uJm2F0tPewOa17hNEsdbXR233heeZHToTPP4pwNMejA== - dependencies: - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/center" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/portal" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/node@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-6.12.0.tgz#6b1e0c6cff0b9cb092bbf1e68fc15ada77db0188" - integrity sha512-s4jv0v7yKMRvlH0cyHQHQAwXpAcbs3TRr/MEXtTdlLrX2iGuLB8PmCeDavF3X9d/dFwfpJcYdv5plsmjzOgwtw== - dependencies: - "@dhis2-ui/loader" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/node@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-6.15.2.tgz#72ba545771af69dbfb6653d1aa8b4a2f606ba21d" - integrity sha512-IKA28wWMNRzoU8LycY4z4b/yA0ljxEvhIcZUKq+em164dKKIMdIIfxN9WbN9+TkpJKJpmCJ+E4yVBDb8amrJUw== - dependencies: - "@dhis2-ui/loader" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/node@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-8.2.0.tgz#5042d50c76007a5afe8faeccf3bfc91ca5e846a1" - integrity sha512-26DcMCDz7nWc6lmGn7X5IebXgCZ7vYXAuTbWVrBHvv03qOOwe2Y/uilCdx1Kx20uDyMgaz8eG/g+GGhwUdkQlA== - dependencies: - "@dhis2-ui/loader" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/notice-box@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-6.12.0.tgz#e239733c6fde80ca3dc6b742dcdf76859af5eb72" - integrity sha512-k7ihDB5eZaIC4thHScfUH2NrOEs8TL8t05EkBW5QMuR5EmHlpNMDP2fPDXyqr5kP9C0r1J7/weKW0NqvcCnV2w== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/notice-box@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-6.15.2.tgz#eb99e3a8af770bfad349d929f0fd0e0877c5d714" - integrity sha512-Vj4HyD+zzseza+SdboOneiq4gNsI3JFW5QygWoEiHk03qLweZuFkTczfPRokE46ns0TWEtH3zIeuCnQyFJataA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/notice-box@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-8.2.0.tgz#1b1f27712118733ec76ae7662ac7773bf8d6280e" - integrity sha512-5qq8dwlBCm33G+e4VD8FSEMuFP7LFD6A0ARe2k0WKMpCzIFzxLzPNWmm/5Rj8F+dpOfsWZGFYRpr4aCEoEhsKQ== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/organisation-unit-tree@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-6.12.0.tgz#82c0d5c9755c8e977e0d929bc826f9de9bc9dfe9" - integrity sha512-06ok1YBjwjxwhQZYLSUA6qgutqMqId08zYY/T79ZPFuNBPdSDl5B7L4yUWxsMFaaM9R1YQzLLfIluxV7FpxW4w== - dependencies: - "@dhis2-ui/checkbox" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2-ui/node" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/organisation-unit-tree@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-6.15.2.tgz#90560588fbc3e92a524d2d2fbf8763f806fe5f1e" - integrity sha512-ibnOCWhZzw/rsdX8JNdqYd7XNYrf5ek4EcbeMHsD2ai7NCeZgaErbQCPdavEaWdvEOLNvXB1HAHcSV/THS9qsg== - dependencies: - "@dhis2-ui/checkbox" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2-ui/node" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/organisation-unit-tree@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-8.2.0.tgz#3b046d4eb5d69c5c7007eb89c057922bfd8125fe" - integrity sha512-7EdBkeHqQJK+hajlTaIM48jkggyzhj8ZOifvM4uDEQRcjSxMxzN1bfUzK1ep7R8x7KUDXtekVH2q22Osl4n9JQ== - dependencies: - "@dhis2-ui/checkbox" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/node" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/pagination@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-6.12.0.tgz#d92914ec18ec984548b744488d96edca4bd660fa" - integrity sha512-EwHaftRzqnrN4kazqyDpzoX7tqyFxgyVJOez8GJB5AZOfLaZDKl6BZv5aUfC4Sy8P2Ng2aJGQWvxa5WGnVv7vw== - dependencies: - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/select" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/pagination@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-6.15.2.tgz#f81dc3310e61d428a7fd8fd934551cb5da79f5d0" - integrity sha512-A9ZHWPfX0f4QRrwpsMfvnuM3gZktdW8fjwyW1yJj46FeP5iKg3U3ztV4T+2NjRxhjJBT/mnYWJ0viWgH+PsEEQ== - dependencies: - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/select" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/pagination@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-8.2.0.tgz#b993a1cf86c092da2778ad13cfca3dd21e8c6fc4" - integrity sha512-O+8c4DAjs5o4OoiA07JPpCOgy5bJa6U/B+YwUhOpx5gvOBXEvx+H4vexFy/BuPjX1pITsau8H8Y9ARq26nm94g== - dependencies: - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/select" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/popover@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-6.12.0.tgz#a6227d1573f65fad7368b1647d2406b3970cc2fd" - integrity sha512-zFY3Yv53hwjs5qf8YkMs+3YruMVNKk1+YJIo/VozeXK4ZX3iMCTK0vvVlt+evIwgwVuLY9aVK3YYt3qeFszLpQ== - dependencies: - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/popover@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-6.15.2.tgz#8c1a11f4a755d61596900139baf316673c7a8578" - integrity sha512-xIuYqVSoc6BrSiS11tTen4r92XJYgFhc4c97gD0UKkTKQS+AjonIx0MJRhjaTaCFrFGIcyq+Y1BGtV4mW6xhHw== - dependencies: - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/popover@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-8.2.0.tgz#ec2bd6ed80bd8c7e393f5254dd4a67fe7cda65ad" - integrity sha512-9VLEbcdnEWfWHC0wQqRAOigyHQakOlxWzKhP5BqQmquRPtYyj0TXj1ty5yakUPG8VrWUAWFxEgEv8Xg88TpZLQ== - dependencies: - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/popper@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-6.12.0.tgz#07800aeefb31c571dbd3fa539edd1565e54e6ea8" - integrity sha512-KtEskgPHMU7t53OR+HMdtJyazxH1njE1RhqN59wOyLf8Zog6gRbYsRd/UWPgqnnB8xgLKotyWWUShslCp0XTRw== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@popperjs/core" "^2.6.0" - classnames "^2.3.1" - prop-types "^15.7.2" - react-popper "^2.2.5" - resize-observer-polyfill "^1.5.1" - -"@dhis2-ui/popper@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-6.15.2.tgz#1c62ba43c1376dcfb62df480782ad649b35cf43d" - integrity sha512-QZ06ACjy4NV04zp+6j9rd5SapDuBBSnu8OliQJ24bWPIcWIYC86N4HBKuRUiwfflT/j1zNfNWvM9IvoNrYscQg== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@popperjs/core" "^2.6.0" - classnames "^2.3.1" - prop-types "^15.7.2" - react-popper "^2.2.5" - resize-observer-polyfill "^1.5.1" - -"@dhis2-ui/popper@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-8.2.0.tgz#d24ec045e9fd2dbf16927dc605e66b8708b7007a" - integrity sha512-OJVwov24HDboNFuvA/130jsmLQbYP+yfgIFP54ZXprwnG0ENd5tfXPdbdJIbYfSXxefWdVLZyJFsZXU7nTzKbw== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@popperjs/core" "^2.10.1" - classnames "^2.3.1" - prop-types "^15.7.2" - react-popper "^2.2.5" - resize-observer-polyfill "^1.5.1" - -"@dhis2-ui/portal@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/portal/-/portal-8.2.0.tgz#0af5b63a7fe28e4dde952888066c8416c42da1f6" - integrity sha512-qxgXIc+KFCWY1J/3XtVyzgcoS+R9XV14dEUCtTn3uq0xJF4LLia7jlEeorvXjx949JMKWXheLF0WuYt8Yw7eUg== - dependencies: - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/radio@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-6.12.0.tgz#7e1c0815c8a317b49e36e54a959053c188a4d783" - integrity sha512-l/WSppUpc5B4mu2DNfK0x5R8xpq7hj8/mQcvdWnZz7ycl/gf69lhoyQVi6YGdJOez0sJYzJnYya7ekf4Okmlqw== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/radio@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-6.15.2.tgz#eb2506f991f4053c074bc14e5b1fb5501d5ff340" - integrity sha512-zONnVmxehxX7UVdv59XYEQxXGKRg33hDHRKZTwdECuKvAguFM4XXcaRNqnQr1hBdTiOQocCPd+TUqV4xyukWcA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/radio@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-8.2.0.tgz#581988d083c0b60ed9ec262c6c308238a44fb3e6" - integrity sha512-CK7Cd9cjjm9MsFdQwBc34QpT1wQqJTdqC+1aHiMF/64rrpcDjqgna8H0Gnx6rzudqORxop5cNaUiJD7/LNSilg== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/required@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-6.12.0.tgz#28c6a209f681e8eeeb30c752d467a023bf2c3b5d" - integrity sha512-t8j8Xe4MbmiDgQLiCIkmWLyuJjndPeVO9oHAaFp02IZ3YV9FrNtvlXkg2ydXEZgNaGbqCh+PwD6opstrTsSi5g== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/required@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-6.15.2.tgz#3cdff92ca19d8e053327e28bedc1f96f63caf102" - integrity sha512-ydZVBwm0gujka9bGmBb31SEqRAoLNcNHVBPjxv0S952CQsWaebOEY+baQS/3lIjb3gvEtWcIxc5UXO2+0FcuSQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/required@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-8.2.0.tgz#b9c220217c3344755967643853439c424f52c5d8" - integrity sha512-SPMnk8d3XGHUa/6Xy49x2rk0WEQ+lVo0wUtwthh7NB2/mGk5q/dxnl389NCTZybyVdqleTWXTCCrbjkGWFi7eg== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/segmented-control@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/segmented-control/-/segmented-control-8.2.0.tgz#fb8fafc62cb1b677b06c4822cd1411e8941dc2e2" - integrity sha512-WjTG0bZ3I71/QjZQNkwtHE4a9JLTgZ/kYbvA01bJlyqVK3o1Us1IUxB9suWs1ApMBarr+maM9n07aha42wVFqQ== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/select@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-6.12.0.tgz#eda5175b769d853922c6280bcded89049ded96d7" - integrity sha512-yCLTcWP+/hM8j0P6V7/gt81aAVPYrDxcFfuZku12kAWIJ0Cg+LXDC4sIhd9FEqxBICq/2Wizsw5s2Cy8Jjhf5g== - dependencies: - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/checkbox" "6.12.0" - "@dhis2-ui/chip" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/select@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-6.15.2.tgz#abe0d30483713bd3c592540f000a50a52a0799b2" - integrity sha512-VuRRXNIyBnhyeevLnrc6j29qFjD9MH0YdS0rmmjqddq0reAVT0gNyYQSWFOSOkaFxiKKYI7tRNE5GR0kHmEpdA== - dependencies: - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/checkbox" "6.15.2" - "@dhis2-ui/chip" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/select@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-8.2.0.tgz#f065fbcf160ceb8d461abf2bb567b9b21b024560" - integrity sha512-7FUkBk7dv8HccVxfjk9fuJA/+uDGmfmJP/CcuG5XVJweOLge+oYjLrlIWiDsUSVb/kkmWCN0qAbVVLirsvDv2Q== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/checkbox" "8.2.0" - "@dhis2-ui/chip" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2-ui/status-icon" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/selector-bar@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/selector-bar/-/selector-bar-8.2.0.tgz#333f3158d28ce7382cebb621df2fa4c5c9b62735" - integrity sha512-fM3u4YyEaMt/5Zk4PCv6Vewu+Mcw5DkoJ2KGRAviWBkvuEGEefSVLVbjy830BLpuDnwIMhSZhm+I/GAFGs6atA== - dependencies: - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - "@testing-library/react" "^12.1.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/sharing-dialog@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/sharing-dialog/-/sharing-dialog-8.2.0.tgz#6973cc3914779b6350af9f30c51e90c72947875a" - integrity sha512-4DSCixOof+ftw8tObJ88AdqJCW0HhI7ORtSN80NTaAxPIz4h+3zIj8Gt54hXYozkTBnJSV4Oi406q2pX9DMAzw== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/divider" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/menu" "8.2.0" - "@dhis2-ui/modal" "8.2.0" - "@dhis2-ui/notice-box" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2-ui/select" "8.2.0" - "@dhis2-ui/tab" "8.2.0" - "@dhis2-ui/tooltip" "8.2.0" - "@dhis2-ui/user-avatar" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - "@react-hook/size" "^2.1.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/status-icon@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/status-icon/-/status-icon-8.2.0.tgz#9e8a374f8901741500bad1c345f890103d7736ab" - integrity sha512-v3z65yYy4WHYVNseQs7XzLFgEwxebd9tiABQeMlBQvIvcEvwRL/Lm5hMtNZ+in0up4AuAXZc1wM2OMsRaAnCcA== - dependencies: - "@dhis2-ui/loader" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/switch@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-6.12.0.tgz#582b855c8bde610c12b7fbb8f16f1f4bf2fe8a87" - integrity sha512-6GcKYsTezpOV7Bi1HJbV44gkud6QViDtoloTn7MyCAxfgzTIy8iZlumUSeMut6dFpJBpLIhTXrTtzOKbjD/gAw== - dependencies: - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/required" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/switch@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-6.15.2.tgz#f06406b6882c22d660d425c15111ccfe0a971298" - integrity sha512-SxEmlvWIFZnd97PZkVKJyvrq+ftC+OAlF9Xa22mptAUYJr6XwykkkC9wd370fwiYHXCRVbqB+id963xkz1k4ZQ== - dependencies: - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/required" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/switch@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-8.2.0.tgz#473dfeca88737d5884202539b2c5fc7b03c0e4d0" - integrity sha512-sNO8cNKRHyiZv7dtKaAO72Y/GfbdiwrsEYG/GvrmiPqRzobytPTq3LWCFoucq08DzqkJrzlEMAiYC7JCX1w6bQ== - dependencies: - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/required" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tab@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-6.12.0.tgz#0de1e20e985a55a35a59f45ac666942015eda024" - integrity sha512-lWjfO8Ed13JYTddxI8SPezsuuAy+5PlNjzjZpceIXWJAuz6HfSlZUL9pxAnTy/0zhalLc+U5mJGfCEmDKtzS0g== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tab@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-6.15.2.tgz#f05a6ba4cfe06ee731887775d8ae2cdd4f3b6b67" - integrity sha512-/gGYcOQJYzrU/Lr3s7VrjA7va/unAVSDFTMETlgt9V3erQQ4t+OBk6p3JpLfuvrsdgZkXIreYbROicYmkqODAg== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tab@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-8.2.0.tgz#1437217b9c322c5ee1b5f6484921ce2d24a6d0e3" - integrity sha512-JiR3MEVNiBxuGRG8oCR3UVcJKdh6dJwRnHYpXGD/ut4TpyHJijn502ohs93li03JiUz3NWER8W1dBwPZ2CJbXw== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/table@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-6.12.0.tgz#025fac9284a8ddbb798946689632cdf7790b93ba" - integrity sha512-4peWNZaOLES3CHf3FLp0V+hubwch7VU8Z0XNnsuYvtmGaEcAqitbjIAjvYMmYa/rBTQhku7gtXWdoOazlmi9VA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/table@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-6.15.2.tgz#a7b9578a0bbe7ebe52aa4a5d152d9b0668012fda" - integrity sha512-Fib8YfGSwMT+08dt4QtcrtoHKbTR/0i+HM4AEloJWUuBjF1E93aeC6yH4oDTQnxKH2vR6rvyQWgLQ54X87H3OA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/table@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-8.2.0.tgz#4f0d699b59a49bb882ea45790d68f0ea917cee03" - integrity sha512-0eLvTcdOsCkR276qJbzWOxGutgmS+DjkyQ/Oumqkkrus40qapNw0w5k/Q1DkiT2E36U61lAGSbJ6kCt/JQ+pdQ== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tag@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-6.12.0.tgz#ced24b5d7da7d5f45419ede0d26d8ccfa7b00ef8" - integrity sha512-kAKSCBddBmB+eL6+5c72QouyvHj8Hr4oRlBW90fP97CYweHYaThvXmTbnobE2txjhRjZ10r9692xhCjpruozQQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tag@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-6.15.2.tgz#b7943c7d6202af179ca978608822084bfef9661c" - integrity sha512-F3u70BS37+y5fU8kM5hSNdEDH8DAZ4HZASXPDxIqpSzOYFmHwd9h/K5k8Dx9E28RqKh1feY61mmfbom9/7RYzw== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tag@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-8.2.0.tgz#851693c4f9bdc5ea529c33ba8e8708557ddeff0a" - integrity sha512-DHDI0XHYzt1N6KnflGUnkRyvUuI7CRCe6ZUUbyuYjvLa+cdg7tQNpSutrjppMsOW1t+AYC1NanDnj2UryKd0WA== - dependencies: - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/text-area@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-6.12.0.tgz#233d8347cdf3cf85613b76af00bed54b46a2f840" - integrity sha512-oY/39hFPMPNSg8kRl1Lxo9InD08gXIZdWeg1AINGSOBiiIKZ9ZU5AGS3Jf1AVYRpqnUjbERrqZU8AH5tQ2plWQ== - dependencies: - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/text-area@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-6.15.2.tgz#e7b575e053aeb4ff443140942886184aebe1ebf0" - integrity sha512-0BkNkc0dtFMfQalrPBpcj8SqFh275ZgkZjcnmjc1OSiGaDn22oYtQqL1/ER3TZYJRGPMGaXVfBjZOhkr939Zuw== - dependencies: - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/text-area@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-8.2.0.tgz#e5069ec3a032aca3a805acd00d7ff7c17106eb02" - integrity sha512-QIWBwbNkv4qZDBJXNAOL5XXzQH4AZairB1TAXRI3nguy+99MIJwOwL4sxeT/apHUN/eSyTI2xzIzsqsStgGewQ== - dependencies: - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/status-icon" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tooltip@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-6.12.0.tgz#5eb14753419a2cd6ba6eee376e9022102f7ed8b8" - integrity sha512-nCgvApdVMQMnhmKzE7th8aWrJMYK+aSKsB9374NtAh+Pg0HZmOezPKRedWhmcNWcYr3EkG0gMhcRaR6t6DqzOw== - dependencies: - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tooltip@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-6.15.2.tgz#c96b2a0623c6c9004a6cc544f899f8e5b4e0ad3e" - integrity sha512-gdpuMS/rOav/c7KHGGDz0VxQbxeVHIK/j9V3sl2H7s2uj+0FWMMA1RiPqEofFIiKsV+RRwrCK3faus7jai6HXw== - dependencies: - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/tooltip@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-8.2.0.tgz#685fd000cd59a7203ab4cbf8c3a6faf6b70f21ab" - integrity sha512-YCAJv+V8RD2B6DXfYiUNhYnfiNhiL+yHTmXe8lBA7kBy/qZfLRN3xnJpSuWT9nEF4lpjgRbrJKhbh2OxTHXSnA== - dependencies: - "@dhis2-ui/popper" "8.2.0" - "@dhis2-ui/portal" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/transfer@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-6.12.0.tgz#8b395fce3408ee309081e590b60742dd57959fbc" - integrity sha512-LRBXj71MNwc7RPgagpn9Nf/fMEcQTuKw+N6x6fDXrit3kK2u3mfTS//NuMvRCFLknEmjBbmAOW9RHUzWxcBWSw== - dependencies: - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/intersection-detector" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/transfer@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-6.15.2.tgz#f0a99ac7840dae924ee824da6302a3f1aa5d8f14" - integrity sha512-DtY273nqsb25EKBcSrvm90o7vLu1EOiaoZI3ZaLuFVBOqCNpLm/fDJZqQngy6PbkWna57dyc78JYa/gAXyoUpg== - dependencies: - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/intersection-detector" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/transfer@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-8.2.0.tgz#60a5bfbb2cbb49b8827d004f4c569d46c5bbb3b5" - integrity sha512-aKzTs1cwXc2htninrSNHRmycnk3LsWXUKt0dLtWRTTXzHluOqpbD8oUi7uH1tTtjIzzM1RzDG7ukLHrKRk+WbA== - dependencies: - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/intersection-detector" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2-ui/user-avatar@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2-ui/user-avatar/-/user-avatar-8.2.0.tgz#e01bc5a08260409af21e14cd03d08507123e5f1b" - integrity sha512-HiT7+0uciTfdMUBjgh+HLzhEYtRl3MQH1cnkF1Ofo0heZaqntFt2p10oHD7xOGmIoxKn9aAQlayYgNH0fhoNqg== - dependencies: - "@dhis2/prop-types" "^3.0.0" - "@dhis2/ui-constants" "8.2.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2/app-runtime@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-2.8.0.tgz#83ca6e96c299686ee72eea3e1825e04aa53cd5d2" - integrity sha512-Ru6x9L61fD7ITzVaxFqx88kV5/ypB9xSr8nHgRj4EE/kHl/aVejXuwnSS2OIWh80J3mtD1dpNRN/GJ8o0x0HYg== - dependencies: - "@dhis2/app-service-alerts" "2.8.0" - "@dhis2/app-service-config" "2.8.0" - "@dhis2/app-service-data" "2.8.0" - -"@dhis2/app-service-alerts@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-2.8.0.tgz#f480043a15b5a2b7d90a6e74931ddd3ebb65aa1c" - integrity sha512-hpMqdxCG9w5H2EZyLPQKcKzCdp/Sof68ZGd85lNHo+1c10+1pWhKAjt/p3zoRllHppp17TbEgKoXa1oRx2NeHg== - -"@dhis2/app-service-config@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-2.8.0.tgz#4ce7520e28a7700fa11ad7bcba6468a0a58751a4" - integrity sha512-SZnoa2EjsgV8a1QfnSk6fqxORV3pRcA+SYyz/H/nkr/VodkdgmO5CiwlZxXW8pG+4i6sbMGjGualam2jHF34wg== - -"@dhis2/app-service-data@2.8.0": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-2.8.0.tgz#9cd347127968cb6f3c8a4ab0fc6699ea7058f835" - integrity sha512-5doyL4bxRMdMXY4RtWo2O3NVGwSDOSUY3hGPXaF1TeFWAqujlPTx17uDw6wEelN6LaryAnVwId2Ep3FOV8v5MA== - -"@dhis2/d2-i18n-extract@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n-extract/-/d2-i18n-extract-1.0.8.tgz#9d98690d522a51895c8ef3fe7136f026b0f8dacd" - integrity sha512-wjQ5J0v8Td12+KcQYSuuZ1tQLReXJ1gBSqkyImf2aNtLwJKERaTOjZ71da+GXdHtd6ph/DP1ezQvFDFKhBHa/A== - dependencies: - argparse "^1.0.10" - i18next-conv "^6.0.0" - i18next-scanner "^2.4.4" - -"@dhis2/d2-i18n-generate@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n-generate/-/d2-i18n-generate-1.2.0.tgz#4b7944eb4046bb1452b9ce7598b13b5c5b80c984" - integrity sha512-1jdcRs6ZA+WvK2h93y4nGSPAnvqlhAMR5YMEv4+c7bs6fjcG7UHevIK8xdm95hRATYGVhbegQRIuNWWAQ8/ylw== - dependencies: - argparse "^1.0.10" - handlebars "^4.0.11" - i18next-conv "^6.0.0" - moment "^2.22.1" - rimraf "^2.6.2" - -"@dhis2/d2-i18n@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.0.6.tgz#2914be8acf296f3a6bf7b51c76c46da6a120b0ff" - integrity sha512-7YdA4ppFosjuyf7ZMm47BrdsA5TWLM9lmS0lUPgjcCVeeWfUgagqzf4W5JGB9XQ3w1vzK+yy5zH2Ij8IgRAGhA== - dependencies: - i18next "^10.3" - moment "^2.24.0" - -"@dhis2/d2-i18n@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.1.0.tgz#ec777c5091f747e4c5aa4f9801c62ba4d1ef3d16" - integrity sha512-x3u58goDQsMfBzy50koxNrJjofJTtjRZOfz6f6Py/wMMJfp/T6vZjWMQgcfWH0JrV6d04K1RTt6bI05wqsVQvg== - dependencies: - i18next "^10.3" - moment "^2.24.0" - -"@dhis2/d2-i18n@1.1.3", "@dhis2/d2-i18n@^1.0.5": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.1.3.tgz#ad73030f7cfceeed1b5bcaad86a9b336130bdfb1" - integrity sha512-vOu6RDNumOJM396mHt35bETk9ai9b6XJyAwlUy1HstUZNvfET61F8rjCmMuXZU6zJ8ELux8kMFqlH8IG0vDJmA== - dependencies: - "@types/i18next" "^11.9.0" - i18next "^10.3" - moment "^2.24.0" - -"@dhis2/d2-ui-core@7.4.3": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-core/-/d2-ui-core-7.4.3.tgz#d880ad82f0ce28833db02fe64016242c3031610d" - integrity sha512-X+ZlTVB4IbAaQlKKWoXjHXCaTfw5jDxHy2KRIWRskIVPhXfiTiyqzdKN/DSi2/99HDQ6PSq9eqmCY4AeTJb3Kw== - dependencies: - babel-runtime "^6.26.0" - d2 "~31.7" - lodash "^4.17.10" - material-ui "^0.20.0" - rxjs "^5.5.7" - -"@dhis2/prop-types@^1.6.4": - version "1.6.4" - resolved "https://registry.yarnpkg.com/@dhis2/prop-types/-/prop-types-1.6.4.tgz#ec4d256c9440d4d00071524422a727c61ddaa6f6" - integrity sha512-qkVj8OuyjDmSxzYDlCWZllvC9hIbrIImMp79/U5CVsIRbjUF0zA/tfbv4rWnsWALmwEHOQFbzl5GnO5D8RNneA== - dependencies: - prop-types "^15" - -"@dhis2/prop-types@^3.0.0", "@dhis2/prop-types@^3.0.0-beta.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@dhis2/prop-types/-/prop-types-3.1.2.tgz#65b8ad2da8cd2f72bc8b951049a6c9d1b97af3e9" - integrity sha512-eM0jjLOWvtXWqSFp5YC4DHFpkP8Y1D2eUwGV7MBWjni+o27oesVan+oT7WHeOeLdlAd4acRJrnaaAyB4Ck1wGQ== - -"@dhis2/ui-constants@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-6.12.0.tgz#e2dd4d2f888434c498fc538e6d0257c3e41599e8" - integrity sha512-prTkl5KQv5azobItN9wyhLgiLKYuOoGavqFUgOonheLPF2Nf8XEg2ipdFPwj/5eDeb/DC5bd71mlmDUHYWidyQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - prop-types "^15.7.2" - -"@dhis2/ui-constants@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-6.15.2.tgz#3df26e9fa5683b87b85e75cc5b9c930ec2115b29" - integrity sha512-Ayprow4LPAbfyHcZ92KLSlSHgo7zRTa9aU+ZV/Ov3fjI+a9I7fJwgjvRXMBzZkS6NvuWFrHmOXkUMDreN7ZxAg== - dependencies: - "@dhis2/prop-types" "^1.6.4" - prop-types "^15.7.2" - -"@dhis2/ui-constants@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-8.2.0.tgz#01bfceacc3b5895d8d5d7cf4d3fc311e020c046d" - integrity sha512-OLNVNvURbVB88ax5zhxSywpIGcQlEQ7zc0entDp3acEHmDd+3/YnCMDn1zAVo4VWfaTX7m/C5dT/mbwHe+NxSA== - dependencies: - prop-types "^15.7.2" - -"@dhis2/ui-core@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-core/-/ui-core-6.12.0.tgz#9af04b601d56ebb0881ee25e47e220dbafcd99b0" - integrity sha512-OBE/tboRYNKh0FsKNIzTTBPXgIpMSi1s4HlJKz4XmhoqPkMWUo/Ne/edfBdFbcx3Htkel07ftavS9vbENw4EQA== - dependencies: - "@dhis2-ui/alert" "6.12.0" - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/center" "6.12.0" - "@dhis2-ui/checkbox" "6.12.0" - "@dhis2-ui/chip" "6.12.0" - "@dhis2-ui/cover" "6.12.0" - "@dhis2-ui/css" "6.12.0" - "@dhis2-ui/divider" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/file-input" "6.12.0" - "@dhis2-ui/help" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/intersection-detector" "6.12.0" - "@dhis2-ui/label" "6.12.0" - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/legend" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2-ui/logo" "6.12.0" - "@dhis2-ui/menu" "6.12.0" - "@dhis2-ui/modal" "6.12.0" - "@dhis2-ui/node" "6.12.0" - "@dhis2-ui/notice-box" "6.12.0" - "@dhis2-ui/popover" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2-ui/radio" "6.12.0" - "@dhis2-ui/required" "6.12.0" - "@dhis2-ui/select" "6.12.0" - "@dhis2-ui/switch" "6.12.0" - "@dhis2-ui/tab" "6.12.0" - "@dhis2-ui/table" "6.12.0" - "@dhis2-ui/tag" "6.12.0" - "@dhis2-ui/text-area" "6.12.0" - "@dhis2-ui/tooltip" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.12.0" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2/ui-core@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui-core/-/ui-core-6.15.2.tgz#bafd358eae994de0c532d08951663ecd2331f736" - integrity sha512-3Ucpv9a2qcN4LYQywayW0Qtn2JVsNWXOivN5DjUHSlp62DGSwj9T1ZrThV3HznXNG4DqFSjD7pGetV1wDyOTvw== - dependencies: - "@dhis2-ui/alert" "6.15.2" - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/center" "6.15.2" - "@dhis2-ui/checkbox" "6.15.2" - "@dhis2-ui/chip" "6.15.2" - "@dhis2-ui/cover" "6.15.2" - "@dhis2-ui/css" "6.15.2" - "@dhis2-ui/divider" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/file-input" "6.15.2" - "@dhis2-ui/help" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/intersection-detector" "6.15.2" - "@dhis2-ui/label" "6.15.2" - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/legend" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2-ui/logo" "6.15.2" - "@dhis2-ui/menu" "6.15.2" - "@dhis2-ui/modal" "6.15.2" - "@dhis2-ui/node" "6.15.2" - "@dhis2-ui/notice-box" "6.15.2" - "@dhis2-ui/popover" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2-ui/radio" "6.15.2" - "@dhis2-ui/required" "6.15.2" - "@dhis2-ui/select" "6.15.2" - "@dhis2-ui/switch" "6.15.2" - "@dhis2-ui/tab" "6.15.2" - "@dhis2-ui/table" "6.15.2" - "@dhis2-ui/tag" "6.15.2" - "@dhis2-ui/text-area" "6.15.2" - "@dhis2-ui/tooltip" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-constants" "6.15.2" - classnames "^2.3.1" - prop-types "^15.7.2" - -"@dhis2/ui-forms@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-6.12.0.tgz#357338456b5342486c9963ddaeb43aed78b3b56c" - integrity sha512-kqt+4NF8HRlsLsCatilhoTfyR690Zlwu43Ryt0m3/Q66WP0401uIaItcMsok70SAA322N6ShTcMJPQ3BtpOZYA== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-core" "6.12.0" - "@dhis2/ui-widgets" "6.12.0" - classnames "^2.3.1" - final-form "^4.20.2" - prop-types "^15.7.2" - react-final-form "^6.5.3" - -"@dhis2/ui-forms@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-6.15.2.tgz#cf3a0cfaa5b9f25c0ec471dddbc6ad068a6c5ce4" - integrity sha512-ob9cTmvcGUb0oO9TCuBdrH/oHgcGJ2LMAC04KYNbIok7LIbheQxnjpMhES5IXEFvMjr46IMw2X3xcspoyzLv3Q== - dependencies: - "@dhis2/prop-types" "^1.6.4" - "@dhis2/ui-core" "6.15.2" - "@dhis2/ui-widgets" "6.15.2" - classnames "^2.3.1" - final-form "^4.20.2" - prop-types "^15.7.2" - react-final-form "^6.5.3" - -"@dhis2/ui-forms@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-8.2.0.tgz#e738abc3b721c3af6caece1a70e3618392cad2f1" - integrity sha512-zy/OYoFwKppInpRI1nkY1fxtbSg1q4VkHwNQlTFlvQ+SCyZT9q7QA+uf0c9qGHb8sSq50AQ1K9rk2m8m63OG7g== - dependencies: - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/checkbox" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/file-input" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/radio" "8.2.0" - "@dhis2-ui/select" "8.2.0" - "@dhis2-ui/switch" "8.2.0" - "@dhis2-ui/text-area" "8.2.0" - "@dhis2/prop-types" "^3.0.0-beta.1" - classnames "^2.3.1" - final-form "^4.20.2" - prop-types "^15.7.2" - react-final-form "^6.5.3" - -"@dhis2/ui-icons@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-6.12.0.tgz#3e3412725220fae1555ba78eabd146ea517de213" - integrity sha512-8H9ImWiKK8hwy9D9Ts6gJcH7+fCOotsPzp5T81O5AtN0tEUiaB5KaaD0Tt3YwkYICl85lmGsv8haV/k5oSxEAQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - -"@dhis2/ui-icons@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-6.15.2.tgz#acc01f5e22afda910b6a0f4027702a87207a8725" - integrity sha512-jVGhFyC693UqU2M7hxfQc5d7laaDOnttLDJejy2iFcl3w9CoSM1LBBernX0r9r8OGeOrxZvThAJ+YoGJO1vlHQ== - dependencies: - "@dhis2/prop-types" "^1.6.4" - -"@dhis2/ui-icons@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-8.2.0.tgz#8017b151d09d4dcd69f9074d69616d86ed8d402d" - integrity sha512-JrsfmM+Bjj4PVrX0i3szlRGMaUrIv5pOdBFxGPJiZVv+OVsXW53KPE5bFeMJlJf4HjbYRaTEes3HA++x4+8ttQ== - -"@dhis2/ui-widgets@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui-widgets/-/ui-widgets-6.12.0.tgz#e7674642fa9e5c0c06f948eceec1385c7c17db57" - integrity sha512-dofT54yj7AlehYcOQi4ovdrmAT2QqJTI4tAvIulNrTAN3h5uhMjbCdxkRQXDwyDC/zIBp1fJXyEOvqNwQlzB5A== - dependencies: - "@dhis2-ui/checkbox" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/file-input" "6.12.0" - "@dhis2-ui/header-bar" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/organisation-unit-tree" "6.12.0" - "@dhis2-ui/pagination" "6.12.0" - "@dhis2-ui/select" "6.12.0" - "@dhis2-ui/switch" "6.12.0" - "@dhis2-ui/table" "6.12.0" - "@dhis2-ui/text-area" "6.12.0" - "@dhis2-ui/transfer" "6.12.0" - "@dhis2/prop-types" "^1.6.4" - classnames "^2.3.1" - -"@dhis2/ui-widgets@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui-widgets/-/ui-widgets-6.15.2.tgz#64de32ed38cd601e100c2fb96c04feee9e673204" - integrity sha512-OKT1nuh7DdArhm9T+EXm5w8VdCCgeGiJ6GfMYsMV6YsSInbQTim4qZVsQ4zJWreQokjwTTwh/Y+1NXaL+GA8sA== - dependencies: - "@dhis2-ui/checkbox" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/file-input" "6.15.2" - "@dhis2-ui/header-bar" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/organisation-unit-tree" "6.15.2" - "@dhis2-ui/pagination" "6.15.2" - "@dhis2-ui/select" "6.15.2" - "@dhis2-ui/switch" "6.15.2" - "@dhis2-ui/table" "6.15.2" - "@dhis2-ui/text-area" "6.15.2" - "@dhis2-ui/transfer" "6.15.2" - "@dhis2/prop-types" "^1.6.4" - classnames "^2.3.1" - -"@dhis2/ui@6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-6.12.0.tgz#892a298a4127d670103ccb547f01f67d4eba908f" - integrity sha512-IqQM9QAkABTPjcms9QawKSvhM4FUb8UM3rxxsMXM62ZnBa9+Tatf/2/+LsWTB/CKCK0QKFS6JCPQZXyHsGGuqw== - dependencies: - "@dhis2-ui/alert" "6.12.0" - "@dhis2-ui/box" "6.12.0" - "@dhis2-ui/button" "6.12.0" - "@dhis2-ui/card" "6.12.0" - "@dhis2-ui/center" "6.12.0" - "@dhis2-ui/checkbox" "6.12.0" - "@dhis2-ui/chip" "6.12.0" - "@dhis2-ui/cover" "6.12.0" - "@dhis2-ui/css" "6.12.0" - "@dhis2-ui/divider" "6.12.0" - "@dhis2-ui/field" "6.12.0" - "@dhis2-ui/file-input" "6.12.0" - "@dhis2-ui/header-bar" "6.12.0" - "@dhis2-ui/help" "6.12.0" - "@dhis2-ui/input" "6.12.0" - "@dhis2-ui/intersection-detector" "6.12.0" - "@dhis2-ui/label" "6.12.0" - "@dhis2-ui/layer" "6.12.0" - "@dhis2-ui/legend" "6.12.0" - "@dhis2-ui/loader" "6.12.0" - "@dhis2-ui/logo" "6.12.0" - "@dhis2-ui/menu" "6.12.0" - "@dhis2-ui/modal" "6.12.0" - "@dhis2-ui/node" "6.12.0" - "@dhis2-ui/notice-box" "6.12.0" - "@dhis2-ui/organisation-unit-tree" "6.12.0" - "@dhis2-ui/pagination" "6.12.0" - "@dhis2-ui/popover" "6.12.0" - "@dhis2-ui/popper" "6.12.0" - "@dhis2-ui/radio" "6.12.0" - "@dhis2-ui/required" "6.12.0" - "@dhis2-ui/select" "6.12.0" - "@dhis2-ui/switch" "6.12.0" - "@dhis2-ui/tab" "6.12.0" - "@dhis2-ui/table" "6.12.0" - "@dhis2-ui/tag" "6.12.0" - "@dhis2-ui/text-area" "6.12.0" - "@dhis2-ui/tooltip" "6.12.0" - "@dhis2-ui/transfer" "6.12.0" - "@dhis2/ui-constants" "6.12.0" - "@dhis2/ui-forms" "6.12.0" - "@dhis2/ui-icons" "6.12.0" - prop-types "^15.7.2" - -"@dhis2/ui@6.15.2": - version "6.15.2" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-6.15.2.tgz#cdc86a7bf55bc0fc6725a94fcd2c7cd4642408b0" - integrity sha512-huVjhujg3FXeJ+0B2qrTtfColePA2ipi43Q+TpV0VUAD/yw1NtvLapeEl2LMGVg4jnYdhQyk9mNCdl/K9EOshQ== - dependencies: - "@dhis2-ui/alert" "6.15.2" - "@dhis2-ui/box" "6.15.2" - "@dhis2-ui/button" "6.15.2" - "@dhis2-ui/card" "6.15.2" - "@dhis2-ui/center" "6.15.2" - "@dhis2-ui/checkbox" "6.15.2" - "@dhis2-ui/chip" "6.15.2" - "@dhis2-ui/cover" "6.15.2" - "@dhis2-ui/css" "6.15.2" - "@dhis2-ui/divider" "6.15.2" - "@dhis2-ui/field" "6.15.2" - "@dhis2-ui/file-input" "6.15.2" - "@dhis2-ui/header-bar" "6.15.2" - "@dhis2-ui/help" "6.15.2" - "@dhis2-ui/input" "6.15.2" - "@dhis2-ui/intersection-detector" "6.15.2" - "@dhis2-ui/label" "6.15.2" - "@dhis2-ui/layer" "6.15.2" - "@dhis2-ui/legend" "6.15.2" - "@dhis2-ui/loader" "6.15.2" - "@dhis2-ui/logo" "6.15.2" - "@dhis2-ui/menu" "6.15.2" - "@dhis2-ui/modal" "6.15.2" - "@dhis2-ui/node" "6.15.2" - "@dhis2-ui/notice-box" "6.15.2" - "@dhis2-ui/organisation-unit-tree" "6.15.2" - "@dhis2-ui/pagination" "6.15.2" - "@dhis2-ui/popover" "6.15.2" - "@dhis2-ui/popper" "6.15.2" - "@dhis2-ui/radio" "6.15.2" - "@dhis2-ui/required" "6.15.2" - "@dhis2-ui/select" "6.15.2" - "@dhis2-ui/switch" "6.15.2" - "@dhis2-ui/tab" "6.15.2" - "@dhis2-ui/table" "6.15.2" - "@dhis2-ui/tag" "6.15.2" - "@dhis2-ui/text-area" "6.15.2" - "@dhis2-ui/tooltip" "6.15.2" - "@dhis2-ui/transfer" "6.15.2" - "@dhis2/ui-constants" "6.15.2" - "@dhis2/ui-forms" "6.15.2" - "@dhis2/ui-icons" "6.15.2" - prop-types "^15.7.2" - -"@dhis2/ui@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-8.2.0.tgz#03d5e83ea4d4b584bd9643c1d931131bf5dc4f3b" - integrity sha512-pdWIHrDKDeaeWI/XH0H741EWNg4KTUmUz3X9sY1POpVkpRaE2F1BnyBSG0Ol1jYrjnhmgydOwmjSeF66g+Ljuw== - dependencies: - "@dhis2-ui/alert" "8.2.0" - "@dhis2-ui/box" "8.2.0" - "@dhis2-ui/button" "8.2.0" - "@dhis2-ui/card" "8.2.0" - "@dhis2-ui/center" "8.2.0" - "@dhis2-ui/checkbox" "8.2.0" - "@dhis2-ui/chip" "8.2.0" - "@dhis2-ui/cover" "8.2.0" - "@dhis2-ui/css" "8.2.0" - "@dhis2-ui/divider" "8.2.0" - "@dhis2-ui/field" "8.2.0" - "@dhis2-ui/file-input" "8.2.0" - "@dhis2-ui/header-bar" "8.2.0" - "@dhis2-ui/help" "8.2.0" - "@dhis2-ui/input" "8.2.0" - "@dhis2-ui/intersection-detector" "8.2.0" - "@dhis2-ui/label" "8.2.0" - "@dhis2-ui/layer" "8.2.0" - "@dhis2-ui/legend" "8.2.0" - "@dhis2-ui/loader" "8.2.0" - "@dhis2-ui/logo" "8.2.0" - "@dhis2-ui/menu" "8.2.0" - "@dhis2-ui/modal" "8.2.0" - "@dhis2-ui/node" "8.2.0" - "@dhis2-ui/notice-box" "8.2.0" - "@dhis2-ui/organisation-unit-tree" "8.2.0" - "@dhis2-ui/pagination" "8.2.0" - "@dhis2-ui/popover" "8.2.0" - "@dhis2-ui/popper" "8.2.0" - "@dhis2-ui/portal" "8.2.0" - "@dhis2-ui/radio" "8.2.0" - "@dhis2-ui/required" "8.2.0" - "@dhis2-ui/segmented-control" "8.2.0" - "@dhis2-ui/select" "8.2.0" - "@dhis2-ui/selector-bar" "8.2.0" - "@dhis2-ui/sharing-dialog" "8.2.0" - "@dhis2-ui/switch" "8.2.0" - "@dhis2-ui/tab" "8.2.0" - "@dhis2-ui/table" "8.2.0" - "@dhis2-ui/tag" "8.2.0" - "@dhis2-ui/text-area" "8.2.0" - "@dhis2-ui/tooltip" "8.2.0" - "@dhis2-ui/transfer" "8.2.0" - "@dhis2-ui/user-avatar" "8.2.0" - "@dhis2/ui-constants" "8.2.0" - "@dhis2/ui-forms" "8.2.0" - "@dhis2/ui-icons" "8.2.0" - prop-types "^15.7.2" - -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@emotion/is-prop-valid@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" - integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== - dependencies: - "@emotion/memoize" "^0.8.1" - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/unitless@0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== - -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.49.0": - version "8.49.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" - integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== - -"@eyeseetea/d2-api@1.16.0-beta.9": - version "1.16.0-beta.9" - resolved "https://registry.yarnpkg.com/@eyeseetea/d2-api/-/d2-api-1.16.0-beta.9.tgz#bd318b62d8c94ea4e490c8e9b90461869f748c25" - integrity sha512-ASOcekMZoOOAZ9+Aq4I34qkiHW4sZFWoB5V8V51WAgYTv0ONoS8uLdFpmc1kFXJ5jsWC7IgSnE79rkLLZ9h9mg== - dependencies: - "@babel/runtime" "^7.5.4" - "@dhis2/d2-i18n" "^1.0.5" - "@types/prettier" "^1.18.3" - "@types/qs" "^6.5.3" - abort-controller "3.0.0" - argparse "^2.0.1" - axios "0.19.2" - axios-debug-log "^0.6.2" - axios-mock-adapter "1.18.2" - btoa "^1.2.1" - cronstrue "^1.81.0" - cryptr "^4.0.2" - d2 "^31.8.1" - dotenv "^8.0.0" - express "^4.17.1" - form-data "^4.0.0" - iconv-lite "0.6.2" - isomorphic-fetch "3.0.0" - lodash "^4.17.15" - log4js "^4.5.1" - node-schedule "^1.3.2" - qs "^6.9.0" - react "^16.12.0" - side-channel "^1.0.4" - yargs "^14.0.0" - -"@eyeseetea/d2-ui-components@2.9.0-beta.3": - version "2.9.0-beta.3" - resolved "https://registry.yarnpkg.com/@eyeseetea/d2-ui-components/-/d2-ui-components-2.9.0-beta.3.tgz#86e79bdb4b469580b79eb54e13a839eafab62654" - integrity sha512-y6LQXvYHUG2eX/ttJcHBRIBfjOsMway6RV8b/bThwmVlc3UuAPUUT8ANExc24gnwcM57u1iPg2Q5/RyOCK2ryA== - dependencies: - "@date-io/core" "1.3.6" - "@date-io/moment" "1.0.2" - "@dhis2/d2-i18n" "1.0.6" - "@dhis2/d2-ui-core" "7.4.3" - "@dhis2/ui" "6.15.2" - "@material-ui/pickers" "3.2.10" - classnames "2.2.6" - downshift "5.4.2" - lodash "4.17.21" - moment "2.29.4" - nano-memoize "1.2.1" - react-linkify "1.0.0-alpha" - rxjs-compat "6.6.3" - throttle-debounce "2.1.0" - -"@eyeseetea/feedback-component@0.1.3-beta.1": - version "0.1.3-beta.1" - resolved "https://registry.yarnpkg.com/@eyeseetea/feedback-component/-/feedback-component-0.1.3-beta.1.tgz#f4788b6bb81141e42003868f77325f6a3df3fbaf" - integrity sha512-6P87zyAtRJl3MUWbWk6hlDL97CWw8wDJfWhIVreubMSocGDNSBBnOPrSosZN7O02+Le+uHEBE0XkNCle3jA99g== - dependencies: - "@date-io/core" "2.13.1" - "@date-io/moment" "2.13.1" - "@dhis2/d2-i18n" "1.1.3" - "@dhis2/ui" "8.2.0" - "@material-ui/pickers" "3.3.10" - axios "1.6.4" - classnames "2.3.1" - downshift "6.1.7" - fluture "^14.0.0" - lodash "4.17.21" - moment "2.29.4" - nano-memoize "1.3.0" - react-linkify "1.0.0-alpha" - rxjs-compat "6.6.7" - throttle-debounce "4.0.1" - -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@juggle/resize-observer@^3.3.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@material-ui/core@4.12.4": - version "4.12.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" - integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.5" - "@material-ui/system" "^4.12.2" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/icons@4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" - integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/lab@4.0.0-alpha.60": - version "4.0.0-alpha.60" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.60.tgz#5ad203aed5a8569b0f1753945a21a05efa2234d2" - integrity sha512-fadlYsPJF+0fx2lRuyqAuJj7hAS1tLDdIEEdov5jlrpb5pp4b+mRDUqQTUxi4inRZHS1bEXpU8QWUhO6xX88aA== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.2" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@material-ui/pickers@3.2.10": - version "3.2.10" - resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae" - integrity sha512-B8G6Obn5S3RCl7hwahkQj9sKUapwXWFjiaz/Bsw1fhYFdNMnDUolRiWQSoKPb1/oKe37Dtfszoywi1Ynbo3y8w== - dependencies: - "@babel/runtime" "^7.6.0" - "@date-io/core" "1.x" - "@types/styled-jsx" "^2.2.8" - clsx "^1.0.2" - react-transition-group "^4.0.0" - rifm "^0.7.0" - -"@material-ui/pickers@3.3.10": - version "3.3.10" - resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.3.10.tgz#f1b0f963348cc191645ef0bdeff7a67c6aa25485" - integrity sha512-hS4pxwn1ZGXVkmgD4tpFpaumUaAg2ZzbTrxltfC5yPw4BJV+mGkfnQOB4VpWEYZw2jv65Z0wLwDE/piQiPPZ3w== - dependencies: - "@babel/runtime" "^7.6.0" - "@date-io/core" "1.x" - "@types/styled-jsx" "^2.2.8" - clsx "^1.0.2" - react-transition-group "^4.0.0" - rifm "^0.7.0" - -"@material-ui/styles@4.11.5", "@material-ui/styles@^4.11.5": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" - integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - csstype "^2.5.2" - hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" - -"@material-ui/system@^4.12.2": - version "4.12.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" - integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - csstype "^2.5.2" - prop-types "^15.7.2" - -"@material-ui/types@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== - -"@material-ui/utils@^4.11.2", "@material-ui/utils@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" - integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - -"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": - version "5.1.1-v1" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" - integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== - dependencies: - eslint-scope "5.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@popperjs/core@^2.10.1", "@popperjs/core@^2.6.0": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@react-hook/latest@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@react-hook/latest/-/latest-1.0.3.tgz#c2d1d0b0af8b69ec6e2b3a2412ba0768ac82db80" - integrity sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg== - -"@react-hook/passive-layout-effect@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz#c06dac2d011f36d61259aa1c6df4f0d5e28bc55e" - integrity sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg== - -"@react-hook/resize-observer@^1.2.1": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@react-hook/resize-observer/-/resize-observer-1.2.6.tgz#9a8cf4c5abb09becd60d1d65f6bf10eec211e291" - integrity sha512-DlBXtLSW0DqYYTW3Ft1/GQFZlTdKY5VAFIC4+km6IK5NiPPDFchGbEJm1j6pSgMqPRHbUQgHJX7RaR76ic1LWA== - dependencies: - "@juggle/resize-observer" "^3.3.1" - "@react-hook/latest" "^1.0.2" - "@react-hook/passive-layout-effect" "^1.2.0" - -"@react-hook/size@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@react-hook/size/-/size-2.1.2.tgz#87ed634ffb200f65d3e823501e5559aa3d584451" - integrity sha512-BmE5asyRDxSuQ9p14FUKJ0iBRgV9cROjqNG9jT/EjCM+xHha1HVqbPoT+14FQg1K7xIydabClCibUY4+1tw/iw== - dependencies: - "@react-hook/passive-layout-effect" "^1.2.0" - "@react-hook/resize-observer" "^1.2.1" - -"@rollup/plugin-inject@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" - integrity sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA== - dependencies: - "@rollup/pluginutils" "^5.0.1" - estree-walker "^2.0.2" - magic-string "^0.27.0" - -"@rollup/pluginutils@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" - integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rushstack/eslint-patch@^1.1.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz#77e948b9760bd22736a5d26e335a690f76fda37b" - integrity sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@testing-library/dom@^8.0.0": - version "8.20.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" - integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@^5.16.5": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" - integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== - dependencies: - "@adobe/css-tools" "^4.0.1" - "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" - redent "^3.0.0" - -"@testing-library/react@^12.1.2": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" - -"@testing-library/react@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" - integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== - dependencies: - "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^9.0.0" - "@types/react-dom" "^18.0.0" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@ts-morph/common@~0.12.3": - version "0.12.3" - resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.12.3.tgz#a96e250217cd30e480ab22ec6a0ebbe65fd784ff" - integrity sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w== - dependencies: - fast-glob "^3.2.7" - minimatch "^3.0.4" - mkdirp "^1.0.4" - path-browserify "^1.0.1" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== - -"@types/chai-subset@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" - integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.3.5": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== - -"@types/classnames@2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" - integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A== - dependencies: - classnames "*" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/eslint@^8.4.5": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - -"@types/hoist-non-react-statics@*": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a" - integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/i18next@^11.9.0": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@types/i18next/-/i18next-11.9.3.tgz#04d84c6539908ad69665d26d8967f942d1638550" - integrity sha512-snM7bMKy6gt7UYdpjsxycqSCAy0fr2JVPY0B8tJ2vp9bN58cE7C880k20PWFM4KXxQ3KsstKM8DLCawGCIH0tg== - -"@types/isomorphic-fetch@^0.0.36": - version "0.0.36" - resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz#3a6d8f63974baf26b10fd1314db910633108a769" - integrity sha512-ulw4d+vW1HKn4oErSmNN2HYEcHGq0N1C5exlrMM0CRqX1UUpFhGb5lwiom5j9KN3LBJJDLRmYIZz1ghm7FIzZw== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@*": - version "29.5.5" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.5.tgz#727204e06228fe24373df9bae76b90f3e8236a2a" - integrity sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== - -"@types/json-schema@7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/material-ui@^0.21.12": - version "0.21.12" - resolved "https://registry.yarnpkg.com/@types/material-ui/-/material-ui-0.21.12.tgz#208e8b7e49a545bb704fa7e865986afde1b33384" - integrity sha512-rBY3iOr5LISKDLAYo3229R79xIPPKSOL2c7FzAFn5dUj38Oe7rQldYedHWsYmkJUeboE9Ipad7ppyJwBzXxrMw== - dependencies: - "@types/react" "*" - "@types/react-addons-linked-state-mixin" "*" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node-localstorage@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@types/node-localstorage/-/node-localstorage-1.3.0.tgz#8341b89abd8ad00afcd3fa9242ed956b8f5ad32c" - integrity sha512-9+s5CWGhkYitklhLgnbf4s5ncCEx0An2jhBuhvw/sh9WNQ+/WvNFkPLyLjXGy+Oeo8CjPl69oz6M2FzZH+KwWA== - dependencies: - "@types/events" "*" - -"@types/node@*": - version "20.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" - integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== - -"@types/node@18": - version "18.17.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.17.tgz#53cc07ce582c9d7c5850702a3c2cb0af0d7b0ca1" - integrity sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^1.18.3": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/prettier@^2.7.3": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.6" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.6.tgz#bbf819813d6be21011b8f5801058498bec555572" - integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg== - -"@types/qs@^6.5.3": - version "6.9.16" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== - -"@types/react-addons-linked-state-mixin@*": - version "0.14.22" - resolved "https://registry.yarnpkg.com/@types/react-addons-linked-state-mixin/-/react-addons-linked-state-mixin-0.14.22.tgz#a8fe5929bbfa10947f3bf62d4a878706ec6b7718" - integrity sha512-DF9utM6VjuIaY388R6XWWDs7CIDTH7on1k1yR+hqaL/T4/OqSCW5uij28APq9KI82CZf0/qtBJI+pjvXcOh0kQ== - dependencies: - "@types/react" "*" - -"@types/react-dom@<18.0.0": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.20.tgz#e0c8901469d732b36d8473b40b679ad899da1b53" - integrity sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA== - dependencies: - "@types/react" "^17" - -"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.7": - version "18.2.7" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" - integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== - dependencies: - "@types/react" "*" - -"@types/react-router-dom@5.3.3": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.20" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react-transition-group@^4.2.0": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" - integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.2.21": - version "18.2.22" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.22.tgz#abe778a1c95a07fa70df40a52d7300a40b949ccb" - integrity sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^17": - version "17.0.65" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.65.tgz#95f6a2ab61145ffb69129d07982d047f9e0870cd" - integrity sha512-oxur785xZYHvnI7TRS61dXbkIhDPnGfsXKv0cNXR/0ml4SipRIFpSMzA7HMEfOywFwJ5AOnPrXYTEiTRUQeGlQ== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/semver@^7.3.12": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" - integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/styled-components@5.1.24": - version "5.1.24" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.24.tgz#b52ae677f03ea8a6018aa34c6c96b7018b7a3571" - integrity sha512-mz0fzq2nez+Lq5IuYammYwWgyLUE6OMAJTQL9D8hFLP4Pkh7gVYJii/VQWxq8/TK34g/OrkehXaFNdcEKcItug== - dependencies: - "@types/hoist-non-react-statics" "*" - "@types/react" "*" - csstype "^3.0.2" - -"@types/styled-jsx@^2.2.8": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f" - integrity sha512-W/iTlIkGEyTBGTEvZCey8EgQlQ5l0DwMqi3iOXlLs2kyBwYTXHKEiU6IZ5EwoRwngL8/dGYuzezSup89ttVHLw== - dependencies: - "@types/react" "*" - -"@types/stylis@4.2.5": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" - integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== - -"@types/testing-library__jest-dom@^5.9.1": - version "5.14.9" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" - integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== - dependencies: - "@types/jest" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.5.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" - integrity sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw== - dependencies: - "@typescript-eslint/utils" "5.62.0" - -"@typescript-eslint/parser@^5.5.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@vitejs/plugin-react@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz#d1091f535eab8b83d6e74034d01e27d73c773240" - integrity sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g== - dependencies: - "@babel/core" "^7.20.12" - "@babel/plugin-transform-react-jsx-self" "^7.18.6" - "@babel/plugin-transform-react-jsx-source" "^7.19.6" - magic-string "^0.27.0" - react-refresh "^0.14.0" - -"@vitest/coverage-v8@^0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-0.32.4.tgz#b11c182f52898f34f7cc5cf3aaa05e71528f7b7e" - integrity sha512-itiCYY3TmWEK+5wnFBoNr0ZA+adACp7Op1r2TeX5dPOgU2See7+Gx2NlK2lVMHVxfPsu5z9jszKa3i//eR+hqg== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@bcoe/v8-coverage" "^0.2.3" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.1" - istanbul-reports "^3.1.5" - magic-string "^0.30.0" - picocolors "^1.0.0" - std-env "^3.3.3" - test-exclude "^6.0.0" - v8-to-istanbul "^9.1.0" - -"@vitest/expect@0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.32.4.tgz#4aa4eec78112cdbe299834b965420d4fb3afa91d" - integrity sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A== - dependencies: - "@vitest/spy" "0.32.4" - "@vitest/utils" "0.32.4" - chai "^4.3.7" - -"@vitest/runner@0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.32.4.tgz#2872c697994745f1b70e2bd6568236ad2d9eade6" - integrity sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw== - dependencies: - "@vitest/utils" "0.32.4" - p-limit "^4.0.0" - pathe "^1.1.1" - -"@vitest/snapshot@0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.32.4.tgz#75166b1c772d018278a7f0e79f43f3eae813f5ae" - integrity sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA== - dependencies: - magic-string "^0.30.0" - pathe "^1.1.1" - pretty-format "^29.5.0" - -"@vitest/spy@0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.32.4.tgz#c3212bc60c1430c3b5c39d6a384a75458b8f1e80" - integrity sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ== - dependencies: - tinyspy "^2.1.1" - -"@vitest/utils@0.32.4": - version "0.32.4" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.32.4.tgz#36283e3aa3f3b1a378e19493c7b3b9107dc4ea71" - integrity sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg== - dependencies: - diff-sequences "^29.4.3" - loupe "^2.3.6" - pretty-format "^29.5.0" - -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abort-controller@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-bigint@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/acorn-bigint/-/acorn-bigint-0.4.0.tgz#af3245ed8a7c3747387fca4680ae1960f617c4cd" - integrity sha512-W9iaqWzqFo7ZBLmI9dMjHYGrN0Nm/ZgToqhvd3RELJux7RsX6k1/80h+bD9TtTpeKky/kYNbr3+vHWqI3hdyfA== - -acorn-class-fields@^0.3.1: - version "0.3.7" - resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720" - integrity sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ== - dependencies: - acorn-private-class-elements "^0.2.7" - -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - -acorn-export-ns-from@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/acorn-export-ns-from/-/acorn-export-ns-from-0.1.0.tgz#192687869bba3bcb2ef1a1ba196486ea7e100e5c" - integrity sha512-QDQJBe2DfxNBIMxs+19XY2i/XXilJn+kPgX30HWNYK4IXoNj3ACNSWPU7szL0SzqjFyOG4zoZxG9P7JfNw5g7A== - -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - -acorn-import-meta@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/acorn-import-meta/-/acorn-import-meta-1.1.0.tgz#c384423462ee7d4721d4de83231021a36cb09def" - integrity sha512-pshgiVR5mhpjFVdizKTN+kAGRqjJFUOEB3TvpQ6kiAutb1lvHrIVVcGoe5xzMpJkVNifCeymMG7/tsDkWn8CdQ== - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-logical-assignment@^0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/acorn-logical-assignment/-/acorn-logical-assignment-0.1.4.tgz#1a143a21f022e1707b2bc82f587ae2943f0a570e" - integrity sha512-SeqO1iRtc/NeXo4bTkyK0hN0CIoKi/FQMN1NqhTr5UxqEn4p2wKNTZl+xzvU7i2u/k0f66YR7pNPi2ckPwYubg== - -acorn-numeric-separator@^0.3.0: - version "0.3.6" - resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz#af7f0abaf8e74bd9ca1117602954d0a3b75804f3" - integrity sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw== - -acorn-private-class-elements@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz#b14902c705bcff267adede1c9f61c1a317ef95d2" - integrity sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA== - -acorn-private-methods@^0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz#724414ce5b2fec733089d73a5cbba8f7beff75b1" - integrity sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w== - dependencies: - acorn-private-class-elements "^0.2.7" - -acorn-stage3@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/acorn-stage3/-/acorn-stage3-2.1.0.tgz#63ffe0f00b8ac7ccdce34ce82b3b9a6777af390a" - integrity sha512-6R3IWwmMl1MBYf6JtaquuE8OqtCArA1zaDlY7QUeUNDcUzNJoZJm1nFQrv0SzdjkRv1khADbMfucFsF661LGow== - dependencies: - acorn-bigint "^0.4.0" - acorn-class-fields "^0.3.1" - acorn-dynamic-import "^4.0.0" - acorn-export-ns-from "^0.1.0" - acorn-import-meta "^1.0.0" - acorn-logical-assignment "^0.1.0" - acorn-numeric-separator "^0.3.0" - acorn-private-methods "^0.3.0" - acorn-static-class-features "^0.2.0" - -acorn-static-class-features@^0.2.0: - version "0.2.4" - resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz#a0f5261dd483f25196716854f2d7652a1deb39ee" - integrity sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA== - dependencies: - acorn-private-class-elements "^0.2.7" - -acorn-walk@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^6.0.0: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^8.1.0, acorn@^8.10.0, acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-sequence-parser@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" - integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-preset-es2015@^6.6.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.22.0" + babel-plugin-transform-es2015-classes "^6.22.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" + babel-plugin-transform-es2015-modules-systemjs "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.24.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.22.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.5.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.23.0" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-0@^6.5.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" + dependencies: + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.22.0" + +babel-preset-stage-1@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" + dependencies: + babel-plugin-transform-class-constructor-call "^6.22.0" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.22.0" + +babel-preset-stage-2@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.22.0" + babel-plugin-transform-decorators "^6.22.0" + babel-preset-stage-3 "^6.22.0" + +babel-preset-stage-3@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" + dependencies: + babel-core "^6.24.0" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: - buffer-equal "^1.0.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + core-js "^2.4.0" + regenerator-runtime "^0.10.0" -argparse@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: - sprintf-js "~1.0.2" + core-js "^2.4.0" + regenerator-runtime "^0.11.0" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +babel-template@^6.22.0, babel-template@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - dependencies: - deep-equal "^2.0.5" +babylon@^6.11.0, babylon@^6.15.0: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" -aria-query@^5.0.0, aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" +balanced-match@^0.4.1, balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -array-buffer-byte-length@^1.0.0: +balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -async@^2.5.0, async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynciterator.prototype@^1.0.0: +base16@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -author-regex@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-0.2.1.tgz#8bdefaac6065a931799bec07eeef51b940e08f3c" - integrity sha512-LicvLyjpPZ8s58Xy628qUmwgQnN3P7o0pWygc3EZILfkYzLauo/hoPPc7iPNi2pceMmXaeHlk4VHPLp9v2DjeQ== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -axe-core@^4.6.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.1.tgz#6948854183ee7e7eae336b9877c5bafa027998ea" - integrity sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ== - -axios-debug-log@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/axios-debug-log/-/axios-debug-log-0.6.2.tgz#c7761ced8f1990e6d48c556b517af8e00edcef31" - integrity sha512-aavexsFWw+T09e9JkbsNe/zLjdG4r2vwhnKUtCNC/0wpogI/i+bQWJ0jJIuXof734dQ43uiOiFPgbRu8EVa64Q== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= -axios-mock-adapter@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.18.2.tgz#01fa9e88e692e8f1bbc1ad1200dde672486e03c7" - integrity sha512-e5aTsPy2Viov22zNpFTlid76W1Scz82pXeEwwCXdtO85LROhHAF8pHF2qDhiyMONLxKyY3lQ+S4UCsKgrlx8Hw== - dependencies: - fast-deep-equal "^3.1.1" - is-buffer "^2.0.3" +base62@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base62/-/base62-1.1.2.tgz#22ced6a49913565bc0b8d9a11563a465c084124c" -axios@0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -axios@1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.4.tgz#184ee1f63d412caffcf30d2c50982253c3ee86e0" - integrity sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A== - dependencies: - follow-redirects "^1.15.4" - form-data "^4.0.0" - proxy-from-env "^1.1.0" +batch@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: - dequal "^2.0.3" + tweetnacl "^0.14.3" -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" - semver "^6.3.1" +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" + inherits "~2.0.0" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" +bluebird@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" -babel-plugin-transform-react-remove-prop-types@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - -babel-preset-react-app@10.1.0-next.14+9802941f: - version "10.1.0-next.14" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.1.0-next.14.tgz#a4c6a92e6e0e8d51075894beafa1d3eeaa8e14ed" - integrity sha512-/xYDXmFaTFqny9vVvsaNigvt0zzFRjjgi/3oTCeg3UzPKcWW1O6WG9JyeAV3d47Sewyr7i5B57nL5or32Vnn6A== - dependencies: - "@babel/core" "^7.16.0" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-decorators" "^7.16.4" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-transform-flow-strip-types" "^7.16.0" - "@babel/plugin-transform-react-display-name" "^7.16.0" - "@babel/plugin-transform-runtime" "^7.16.4" - "@babel/preset-env" "^7.16.4" - "@babel/preset-react" "^7.16.0" - "@babel/preset-typescript" "^7.16.0" - "@babel/runtime" "^7.16.3" - babel-plugin-macros "^3.1.0" - babel-plugin-transform-react-remove-prop-types "^0.4.24" - -babel-runtime@^6.23.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bluebird@^3.5.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" + hoek "2.x.x" bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" brace-expansion@^1.1.7: version "1.1.11" @@ -4817,234 +1278,133 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" -browser-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" - integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - dependencies: - resolve "^1.17.0" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== +browserify-aes@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" inherits "^2.0.1" - safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" + pako "~0.2.0" -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== +browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== +buffer@^4.9.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: - pako "~1.0.5" + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -buffer-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" - integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== +bytes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -buffer@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" + camelcase "^2.0.0" + map-obj "^1.0.0" -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== - -bundle-phobia-cli@^0.14.14: - version "0.14.14" - resolved "https://registry.yarnpkg.com/bundle-phobia-cli/-/bundle-phobia-cli-0.14.14.tgz#29345de5b571f011cf501d9823527c47e649a147" - integrity sha512-odOT7QfLqLoFBz5fioUxhM386w9JQ1XJ4gMf5TtJ4zPt3yivC+bjh2vsqvx6W9nyfUltlemuoXXhaGrSV+KEdQ== - dependencies: - bytes "^3.1.0" - chalk "^4.1.1" - inquirer "^7.3.3" - lodash "^4.17.21" - node-fetch "^2.6.7" - ora "^4.1.1" - p-map "^4.0.0" - read-pkg-up "^7.0.1" - resolve-package-json "^1.4.0" - update-notifier "^4.1.3" - yargs "^15.4.1" - -bytes@3.1.2, bytes@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +caniuse-api@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + browserslist "^1.0.1" + caniuse-db "^1.0.30000346" + lodash.memoize "^4.1.0" + lodash.uniq "^4.3.0" -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000640" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000640.tgz#7b7fd3cf13c0d9d41f8754b577b202113e2be7ca" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" -camelize@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" - integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== - -caniuse-lite@^1.0.30001517: - version "1.0.30001535" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz#908a5b7ef11172f51f0b88f3d850aef1c6a3cf7b" - integrity sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg== - -chai@^4.3.7: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" +chai@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" chain-function@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== -chalk@^2.4.1, chalk@^2.4.2: +chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5053,222 +1413,103 @@ chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" change-emitter@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" - integrity sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.3.tgz#731c9360913855f613dd256568d50f854a8806ac" chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== +chokidar@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" inherits "^2.0.1" - safe-buffer "^5.0.1" - -classnames@*, classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -classnames@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== - -classnames@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.2.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -client-only@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -client-request@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/client-request/-/client-request-2.3.0.tgz#c4604f71f81c94b280659579a17bbc0446fec212" - integrity sha512-cHFF3C3XZ6ED7f22wAgvjnnVj5A+sXEYf7D5GCRmDUaH6D0QNnu3ZclUhSd1AoMyzgSN3IlyhI75q85onuIq3g== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +clap@^1.0.9: + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + chalk "^1.1.3" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" +classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" + restore-cursor "^2.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" -clone-deep@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: - mimic-response "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +clsx@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.0.4.tgz#0c0171f6d5cb2fe83848463c15fcc26b4df8c2ec" + integrity sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg== -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" + q "^1.1.2" -clsx@^1.0.2, clsx@^1.0.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -cmd-ts@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/cmd-ts/-/cmd-ts-0.12.1.tgz#5ddf69f27887e7380ce6d50a07a3850cb82ea3f7" - integrity sha512-k93f6LgFEzx7/vBy5qV+tu1VI8YuH0DZmwNXPvRaDR4Qp7Fl9+pUSylX/CKHrWoKqHMJjNOLb1NeYTvHOjQ2Kw== +color-convert@^1.3.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: - chalk "^4.0.0" - debug "^4.3.4" - didyoumean "^1.2.2" - strip-ansi "^6.0.0" - -code-block-writer@^11.0.0: - version "11.0.3" - resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" - integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== + color-name "^1.1.1" color-convert@^1.9.0: version "1.9.3" @@ -5277,241 +1518,254 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" -colors@^1.0.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@^1.0.3, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@^2.15.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@2.9.0, commander@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^2.11.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +commoner@^0.10.1: + version "0.10.8" + resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + +component-clone@0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/component-clone/-/component-clone-0.2.2.tgz#c7f5979822880fad8cfb0962ba29186d061ee04f" + dependencies: + component-type "*" + +component-emitter@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" + +component-raf@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/component-raf/-/component-raf-1.2.0.tgz#b2bc72d43f1b014fde7a4b3c447c764bc73ccbaa" + +component-tween@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/component-tween/-/component-tween-1.2.0.tgz#cc39ce5dbab05b52825f41d1947638a0b01b2b8a" + dependencies: + component-clone "0.2.2" + component-emitter "1.2.0" + component-type "1.1.0" + ease-component "1.0.0" -commander@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +component-type@*, component-type@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.1.0.tgz#95b666aad53e5c8d1f2be135c45b5d499197c0c5" -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +compressible@~2.0.8: + version "2.0.9" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" + dependencies: + mime-db ">= 1.24.0 < 2" -commander@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +compression@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" + dependencies: + accepts "~1.3.3" + bytes "2.3.0" + compressible "~2.0.8" + debug "~2.2.0" + on-headers "~1.0.1" + vary "~1.1.0" -compute-scroll-into-view@^1.0.13, compute-scroll-into-view@^1.0.17: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== +compute-scroll-into-view@^1.0.9: + version "1.0.11" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz#7ff0a57f9aeda6314132d8994cce7aeca794fecf" + integrity sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" +confusing-browser-globals@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz#5918188e8244492cdd46d6be1cab60edef3063ce" + integrity sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg== -confusing-browser-globals@1.1.0-next.14+9802941f: - version "1.1.0-next.14" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.1.0-next.14.tgz#475adc3dc94ac67c5caa30e37c7892b983963f77" - integrity sha512-shpUugMlZFU47qCZ4BuoAoAlUKOjiO7Nhn1aVFx1RADeAbKdgJ1iFc18b9KPY5GRr4EnU22boZrMSlo/NfQzwQ== +connect-history-api-fallback@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-css-length@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/convert-css-length/-/convert-css-length-2.0.1.tgz#90a76bde5bfd24d72881a5b45d02249b2c1d257c" + integrity sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg== + +convert-source-map@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -core-js-compat@^3.31.0: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== - dependencies: - browserslist "^4.21.10" +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== core-js@^2.4.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-js@^2.5.3: + version "2.6.10" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" + integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +create-react-class@^15.5.1: + version "15.6.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" + lru-cache "^4.0.1" + which "^1.2.9" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0, create-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + boom "2.x.x" -cron-parser@^2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" - integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== +crypto-browserify@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" dependencies: - is-nan "^1.3.0" - moment-timezone "^0.5.31" - -cronstrue@^1.81.0: - version "1.125.0" - resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.125.0.tgz#8030816d033d00caade9b2a9f9b71e69175bcf42" - integrity sha512-qkC5mVbVGuuyBVXmam5anaRtbLcgfBUKajoyZqCdf/XBdgF43PsLSEm8eEi2dsI3YbqDPbLSH2mWNzM1dVqHgQ== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" + browserify-aes "0.4.0" + pbkdf2-compat "2.0.1" + ripemd160 "0.2.0" + sha.js "2.2.6" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -cryptr@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cryptr/-/cryptr-4.0.2.tgz#8a93b5ca7667d1a6131e396bab23a134ff1f5dc6" - integrity sha512-gLTcYjmLGe0Kk1yyacvjNKvSdkWBNNgG2tDnbRQP7yE559x/RJLo/I3WAmwCXNXf/fzMHCNp9vDv3PCopZDpXw== - -css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" css-in-js-utils@^2.0.0: version "2.0.1" @@ -5521,54 +1775,117 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-to-react-native@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" - integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== +css-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.23.1.tgz#9fa23f2b5c0965235910ad5ecef3b8a36390fe50" + dependencies: + css-selector-tokenizer "^0.5.1" + cssnano ">=2.6.1 <4" + loader-utils "~0.2.2" + lodash.camelcase "^3.0.1" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.4" + +css-selector-tokenizer@^0.5.1: + version "0.5.4" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz#139bafd34a35fd0c1428487049e0699e6f6a2c21" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" -css-vendor@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" - integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== +css-vendor@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda" + integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg== dependencies: - "@babel/runtime" "^7.8.3" + "@babel/runtime" "^7.6.2" is-in-browser "^1.0.2" -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -cssstyle@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" - integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" dependencies: - rrweb-cssom "^0.6.0" + clap "^1.0.9" + source-map "^0.5.3" -csstype@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" -csstype@^2.5.2: - version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" - integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" + integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== -d2-manifest@1.0.0: +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d2-manifest@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/d2-manifest/-/d2-manifest-1.0.0.tgz#19d4a4c4e8151442ab730e932c9c2170be9ebcc9" - integrity sha512-iITqq403wLHHe/B3jodoDH+Hv509NxYyMHY1AGDjQ/rXj1TAWuS0CNTr8SAyQFRrITkk6ZXwYp4eLu8MfgW3qA== dependencies: author-regex "^0.2.1" colors "^1.0.3" @@ -5577,246 +1894,152 @@ d2-manifest@1.0.0: minimist "^1.1.0" readline-sync "^1.4.1" -d2@31.10.2, d2@^31.8.1: - version "31.10.2" - resolved "https://registry.yarnpkg.com/d2/-/d2-31.10.2.tgz#93023171a703ad37dedf273b07e9643155e42466" - integrity sha512-kW/2DKv567foH9JNEBtebfOW6gdmHzNd5dsvA7m8aVK0IZAXYd++lKKqmTUPzpjSRHuM7oUAnTw29/a5JIdfWQ== +"d2-ui@github:EyeSeeTea/d2-ui#dataset-configuration": + version "26.1.7" + resolved "https://codeload.github.com/EyeSeeTea/d2-ui/tar.gz/37495e0043e97f82207e4b66b2491ce5c0170afc" + +d2-utilizr@^0.2.9: + version "0.2.13" + resolved "https://registry.yarnpkg.com/d2-utilizr/-/d2-utilizr-0.2.13.tgz#aff6dfb054f92e2c974cf69f38f4fdc13699a6d3" dependencies: - isomorphic-fetch "^2.2.1" + lodash.isboolean "^3.0.3" + lodash.isfunction "^3.0.8" + lodash.ismap "^4.3.0" + lodash.isnumber "^3.0.3" + lodash.isobject "^3.0.2" + lodash.isset "^4.3.0" + lodash.isstring "^4.0.1" -d2@~31.7: - version "31.7.0" - resolved "https://registry.yarnpkg.com/d2/-/d2-31.7.0.tgz#3a843240fecaafdf213da78b55aed9b8611ee22e" - integrity sha512-+ubKyPWKxUz90g5RHCYIt4KxKPzcCOBvDS7X0076XSycecfx4qvtkGBcKyFmXdz27iwTLUpNtruL9pUK9aTi/A== +d2@26.2.2: + version "26.2.2" + resolved "https://registry.yarnpkg.com/d2/-/d2-26.2.2.tgz#c1ba68b25c89e7f00b2483de354c7458a7ed5a28" dependencies: - isomorphic-fetch "^2.2.1" + whatwg-fetch "^2.0.1" -damerau-levenshtein@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +d3-color@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.2.tgz#83cb4b3a9474e40795f009d97e97a15649830bbc" -data-urls@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" - integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== - dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^12.0.0" +d3@^3.5.6: + version "3.5.17" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" -date-fns@^2.14.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: - "@babel/runtime" "^7.21.0" + assert-plus "^1.0.0" -date-format@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: - ms "2.0.0" + ms "0.7.1" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: - ms "2.1.2" + ms "0.7.2" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@2.6.3, debug@^2.1.1, debug@^2.2.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: - ms "2.0.0" + ms "0.7.2" -debug@^3.0.1, debug@^3.2.6, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - ms "^2.1.1" + ms "2.0.0" -debug@^4.0.0: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== +debug@^4.0.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - ms "^2.1.3" + ms "^2.1.1" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-equal@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" dependencies: - clone "^1.0.2" + type-detect "0.1.1" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + foreach "^2.0.5" + object-keys "^1.0.8" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -des.js@^1.0.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff-sequences@^29.4.3, diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== +detective@^4.3.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" + acorn "^4.0.3" + defined "^1.0.0" -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== +diff@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: - path-type "^4.0.0" + esutils "^2.0.2" + isarray "^1.0.0" doctrine@^2.1.0: version "2.1.0" @@ -5832,11 +2055,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - dom-helpers@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" @@ -5845,759 +2063,498 @@ dom-helpers@^3.2.0: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -domain-browser@^4.22.0: - version "4.22.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" - integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== - -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + version "5.1.3" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" + integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== dependencies: - is-obj "^2.0.0" + "@babel/runtime" "^7.6.3" + csstype "^2.6.7" -dotenv@^8.0.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" -downshift@5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-5.4.2.tgz#3f6b7bf4ad7e0ff5503414efe3a398421763ebae" - integrity sha512-IVwIc4iw5OF5Bi/MbITarW2E8/5akm++5b6UL7aXyPoZmuVe4ilFGaQaktdFW/IwuzHieIwaWj4AQgI0lQNslQ== - dependencies: - "@babel/runtime" "^7.9.1" - compute-scroll-into-view "^1.0.13" - prop-types "^15.7.2" - react-is "^16.13.1" +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -downshift@6.1.7: - version "6.1.7" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.7.tgz#fdb4c4e4f1d11587985cd76e21e8b4b3fa72e44c" - integrity sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg== +downshift@^3.3.4: + version "3.4.3" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-3.4.3.tgz#fbbf88711eaf7029faa7de8a54c16c1b835bf45c" + integrity sha512-lk0Q1VF4eTDe4EMzYtdVCPdu58ZRFyK3wxEAGUeKqPRDoHDgoS9/TaxW2w+hEbeh9yBMU2IKX8lQkNn6YTfZ4w== dependencies: - "@babel/runtime" "^7.14.8" - compute-scroll-into-view "^1.0.17" + "@babel/runtime" "^7.4.5" + compute-scroll-into-view "^1.0.9" prop-types "^15.7.2" - react-is "^17.0.2" - tslib "^2.3.0" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + react-is "^16.9.0" -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" +ease-component@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ease-component/-/ease-component-1.0.0.tgz#b375726db0b5b04595b77440396fec7daa5d77c9" -editions@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/editions/-/editions-2.3.1.tgz#3bc9962f1978e801312fbd0aebfed63b49bfe698" - integrity sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA== +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: - errlop "^2.0.0" - semver "^6.3.0" + jsbn "~0.1.0" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -ejs@^3.1.5: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.477: - version "1.4.523" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz#f82f99243c827df05c26776d49712cb284972df6" - integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: + +electron-to-chromium@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" + +emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" -encoding@^0.1.11, encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" dependencies: - iconv-lite "^0.6.2" + iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== +enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" dependencies: - once "^1.4.0" - -ensure-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ensure-array/-/ensure-array-1.0.0.tgz#317e9fc632c656bb849eb649133528e205b23abc" - integrity sha512-A+3Ntl5WS+GjDnHtC67dKIjw+IoGoeFdNvjn3ZfKEmZgWUz0nxBPE4W52QMCbGZsat0VwWskD5T6AEpe3T2d1g== - -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" -eol@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" - integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== +envify@^3.0.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" + dependencies: + jstransform "^11.0.3" + through "~2.3.4" -errlop@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/errlop/-/errlop-2.2.0.tgz#1ff383f8f917ae328bebb802d6ca69666a42d21b" - integrity sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw== +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - 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.6" - 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.12" - 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.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - 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.11" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== +es-abstract@^1.11.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.12: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== - dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.0" function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" has "^1.0.3" - has-tostringtag "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== +es-abstract@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: - has "^1.0.3" + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.18.10: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@^1.0.3, escape-html@~1.0.3: +escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== +escodegen@1.8.x, escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" + esprima "^2.7.1" + estraverse "^1.9.1" esutils "^2.0.2" + optionator "^0.8.1" optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@7.1.0-next.14: - version "7.1.0-next.14" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.1.0-next.14.tgz#a3e5c98c59651100f1067063ac02a35269947573" - integrity sha512-E7nP1tWYDe2y3bS6MVIt/Iw3R3fYqhRqcQXGeMf066ohUaYoIZMbPpi69MjCxwjaqQOJUoYTKNO5oPwwc5Wpkg== - dependencies: - "@babel/core" "^7.16.0" - "@babel/eslint-parser" "^7.16.3" - "@rushstack/eslint-patch" "^1.1.0" - "@typescript-eslint/eslint-plugin" "^5.5.0" - "@typescript-eslint/parser" "^5.5.0" - babel-preset-react-app "10.1.0-next.14+9802941f" - confusing-browser-globals "1.1.0-next.14+9802941f" - eslint-plugin-flowtype "^8.0.3" - eslint-plugin-import "^2.25.3" - eslint-plugin-jest "^25.3.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.27.1" - eslint-plugin-react-hooks "^4.3.0" - eslint-plugin-testing-library "^5.0.1" - -eslint-import-resolver-node@^0.3.7: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-flowtype@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" - integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== - dependencies: - lodash "^4.17.21" - string-natural-compare "^3.0.1" - -eslint-plugin-import@^2.25.3: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" + source-map "~0.2.0" + +eslint-config-prettier@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217" + integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ== + dependencies: + get-stdin "^6.0.0" + +eslint-config-react-app@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz#6f606828ba30bafee7d744c41cd07a3fea8f3035" + integrity sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA== + dependencies: + confusing-browser-globals "^1.0.6" + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" + integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@2.x: + version "2.50.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" + integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== + dependencies: + lodash "^4.17.10" + +eslint-plugin-import@^2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" + integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== + dependencies: + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" has "^1.0.3" - is-core-module "^2.13.0" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-jest@^25.3.0: - version "25.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" - integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== - dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" - -eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" + lodash "^4.17.11" + minimatch "^3.0.4" + read-pkg-up "^2.0.0" + resolve "^1.9.0" + +eslint-plugin-jsx-a11y@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" + integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== + dependencies: + aria-query "^3.0.0" + array-includes "^3.0.3" ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" - damerau-levenshtein "^1.0.8" - emoji-regex "^9.2.2" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" - -eslint-plugin-no-relative-import-paths@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.5.4.tgz#dd83666b13d43dd22156e4cc660f73700843791a" - integrity sha512-2smViH7R3682NR6dwgYr8Vm7emqNP1gEjBku6DbvUy3Ef/2Fz+mhwsFjZGSixzWzazMCj4MAgIWTsHELCCDJKA== - -eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + jsx-ast-utils "^2.0.1" -eslint-plugin-react@^7.27.1: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-react@^7.12.4: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" + integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.0.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.4" - semver "^6.3.1" - string.prototype.matchall "^4.0.8" - -eslint-plugin-testing-library@^5.0.1, eslint-plugin-testing-library@^5.11.1: - version "5.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz#5b46cdae96d4a78918711c0b4792f90088e62d20" - integrity sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw== - dependencies: - "@typescript-eslint/utils" "^5.58.0" - -eslint-plugin-unused-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" - integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== - dependencies: - eslint-rule-composer "^0.3.0" - -eslint-rule-composer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" - integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== + has "^1.0.3" + jsx-ast-utils "^2.0.1" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" -eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= dependencies: - esrecurse "^4.3.0" + esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" -eslint-visitor-keys@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.37.0: - version "8.49.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" - integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.49.0" - "@humanwhocodes/config-array" "^0.11.11" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.12.1: + version "5.15.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.3.tgz#c79c3909dc8a7fa3714fb340c11e30fd2526b8b5" + integrity sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" + inquirer "^6.2.2" + js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima-fb@^15001.1.0-dev-harmony-fb: + version "15001.1.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + +esprima@2.7.x, esprima@^2.1.0, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^3.1.1, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: - estraverse "^5.1.0" + estraverse "^4.0.0" -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" dependencies: - estraverse "^5.2.0" + estraverse "~4.1.0" + object-assign "^4.0.1" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estraverse@^4.0.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" -estree-walker@^2.0.1, estree-walker@^2.0.2: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -expect-type@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-0.15.0.tgz#89f75e22c88554844ea2b2faf4ef5fc2e579d3b5" - integrity sha512-yWnriYB4e8G54M5/fAFj7rCIBiKs1HAACaY13kCz6Ku0dezjS9aMcfcdVK2X8Tv2tEV1BPz/wKfQ7WA4S/d8aA== - -expect@^29.0.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -express@^4.17.1: - version "4.21.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" - integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== - dependencies: - accepts "~1.3.8" +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express@^4.13.3: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" + dependencies: + accepts "~1.3.3" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" + content-disposition "0.5.2" + content-type "~1.0.2" + cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" + debug "2.6.1" + depd "~1.1.0" + encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" + merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.10" - proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend@^3.0.0: + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.3" + qs "6.4.0" + range-parser "~1.2.0" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" + type-is "~1.6.14" + utils-merge "1.0.0" + vary "~1.1.0" + +extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: - "@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" + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@^2.0.6: +fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" dependencies: - reusify "^1.0.4" + core-js "^1.0.0" + loose-envify "^1.0.0" + promise "^7.0.3" + ua-parser-js "^0.7.9" + whatwg-fetch "^0.9.0" -fbjs@^0.8.1: - version "0.8.18" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a" - integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA== +fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.9: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -6605,482 +2562,412 @@ fbjs@^0.8.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.30" + ua-parser-js "^0.7.18" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== +fbjs@^0.8.1, fbjs@^0.8.4: + version "0.8.11" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" dependencies: - escape-string-regexp "^1.0.5" + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: - flat-cache "^3.0.4" + escape-string-regexp "^1.0.5" -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - minimatch "^5.0.1" + flat-cache "^2.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" -final-form@^4.20.2: - version "4.20.10" - resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.10.tgz#1a484be6e9a91989121c054dcbd6f48bad051ecc" - integrity sha512-TL48Pi1oNHeMOHrKv1bCJUrWZDcD3DIG6AGYVNOnyZPr7Bd/pStN0pL+lfzF5BNoj/FclaoiaLenk4XUIFVYng== +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: - "@babel/runtime" "^7.10.0" + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" dependencies: - debug "2.6.9" - encodeurl "~2.0.0" + debug "2.6.3" + encodeurl "~1.0.1" escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" unpipe "~1.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" dependencies: - locate-path "^3.0.0" + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + path-exists "^2.0.0" + pinkie-promise "^2.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" + locate-path "^2.0.0" -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: - flatted "^3.2.7" - keyv "^4.5.3" - rimraf "^3.0.2" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== -flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== +flux@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" + integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io= dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" + fbemitter "^2.0.0" + fbjs "^0.8.0" -fluture@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/fluture/-/fluture-14.0.0.tgz#81e1cae996a262e214aa2a8d7845fe1359018e3b" - integrity sha512-pENtLF948a8DfduVKugT8edTAbFi4rBS94xjHwzLanQqIu5PYtLGl+xqs6H8TaIRL7z/B0cDpswdINzH/HRUGA== - dependencies: - sanctuary-show "^2.0.0" - sanctuary-type-identifiers "^3.0.0" +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - debug "=3.1.0" + for-in "^1.0.1" -follow-redirects@^1.15.4: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" -font-awesome@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - integrity sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg== +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" dependencies: - is-callable "^1.1.3" + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.8" + combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== +formatio@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + samsam "~1.1" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: +fsevents@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +gauge@~2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" -get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +gaze@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + globule "^1.0.0" -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" dependencies: - pump "^3.0.0" + assert-plus "^1.0.0" -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + glob-parent "^2.0.0" + is-glob "^2.0.0" -gettext-parser@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.4.0.tgz#f8baf34a292f03d5e42f02df099d301f167a7ace" - integrity sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA== +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: - encoding "^0.1.12" - safe-buffer "^5.1.1" + is-glob "^2.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== +glob@7.0.5, glob@^7.0.0, glob@^7.0.3: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: - is-glob "^4.0.1" + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== +glob@^7.0.5, glob@~7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: - is-glob "^4.0.3" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" dependencies: - ini "1.3.7" + min-document "^2.19.0" + process "~0.5.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^11.1.0, globals@^11.7.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" +globals@^9.0.0: + version "9.16.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globule@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" dependencies: - define-properties "^1.1.3" + glob "~7.1.1" + lodash "~4.16.4" + minimatch "~3.0.2" -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - 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" +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -gopd@^1.0.1: +"graceful-readlink@>= 1.0.0": version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +handlebars@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" -gulp-sort@^2.0.0: +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" - integrity sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g== + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" dependencies: - through2 "^2.0.1" + ajv "^4.9.1" + har-schema "^1.0.5" -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: - duplexer "^0.1.2" + ajv "^6.5.5" + har-schema "^2.0.0" -handlebars@^4.0.11: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" + ansi-regex "^2.0.0" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: +has-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has-proto@^1.0.1: +has@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: - has-symbols "^1.0.2" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + function-bind "^1.0.2" has@^1.0.3: version "1.0.3" @@ -7089,29 +2976,24 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== +history@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" + integrity sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw= dependencies: - function-bind "^1.1.2" + invariant "^2.2.1" + loose-envify "^1.2.0" + query-string "^4.2.2" + warning "^3.0.0" history@^4.9.0: version "4.10.1" @@ -7125,788 +3007,531 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hoist-non-react-statics@^2.3.1: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" + integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== dependencies: react-is "^16.7.0" -hosted-git-info@^2.1.4, hosted-git-info@^2.4.2: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" dependencies: - whatwg-encoding "^2.0.0" + whatwg-encoding "^1.0.1" -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +htmlencode@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/htmlencode/-/htmlencode-0.0.4.tgz#f7e2d6afbe18a87a78e63ba3308e753766740e3f" -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" + dependencies: + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-proxy-middleware@~0.17.1: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" + eventemitter3 "1.x.x" + requires-port "1.x.x" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== +"http-proxy@git+https://github.com/nicolayr/node-http-proxy.git": + version "1.13.3" + resolved "git+https://github.com/nicolayr/node-http-proxy.git#98b0fbd683dbddb41b8bf876a39d234671c83846" dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" + eventemitter3 "1.x.x" + requires-port "1.x.x" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: - agent-base "6" - debug "4" + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -husky@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" - integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== - -i18next-conv@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/i18next-conv/-/i18next-conv-6.1.1.tgz#b3f9b0a76a20a67e2902c9e3273642a882a2442d" - integrity sha512-vtFjlOS1/3mDq/sXfDcwHuBj0jMi6xTZehTNhls6ndelaEUn9brHUaE0wuChmoLHOcsqchZZQWWH8gSv41qoZA== - dependencies: - bluebird "^3.5.1" - chalk "^2.4.1" - commander "^2.15.1" - gettext-parser "^1.3.1" - mkdirp "^0.5.1" - node-gettext "^2.0.0" - -i18next-scanner@^2.4.4: - version "2.11.0" - resolved "https://registry.yarnpkg.com/i18next-scanner/-/i18next-scanner-2.11.0.tgz#58c7ffadd5192cdb2b1b2a6c743b1314050ccb4c" - integrity sha512-/QqbSnUj9v6EwndaWeHp8NkHqLKAIHSlI1HXSyLdIPKWYM+Fnpk2tjnyjP8qn7L0rLT7HLH4bvyiw61wOIxf0A== - dependencies: - acorn "^6.0.0" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.2.0" - acorn-stage3 "^2.0.0" - acorn-walk "^6.0.0" - chalk "^2.4.1" - clone-deep "^4.0.0" - commander "^3.0.1" - deepmerge "^4.0.0" - ensure-array "^1.0.0" - eol "^0.9.1" - esprima "^4.0.0" - gulp-sort "^2.0.0" - i18next "*" - lodash "^4.0.0" - parse5 "^5.0.0" - sortobject "^1.1.1" - through2 "^3.0.1" - vinyl "^2.2.0" - vinyl-fs "^3.0.1" - -i18next@*: - version "23.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.5.1.tgz#7f7c35ffaa907618d9489f106d5006b09fbca3d3" - integrity sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg== - dependencies: - "@babel/runtime" "^7.22.5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -i18next@^10.3: - version "10.6.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-10.6.0.tgz#90ffd9f9bc617f34b9a12e037260f524445f7684" - integrity sha512-ycRlN145kQf8EsyDAzMfjqv1ZT1Jwp7P2H/07bP8JLWm+7cSLD4XqlJOvq4mKVS2y2mMIy10lX9ZeYUdQ0qSRw== +iconv-lite@0.4.13, iconv-lite@^0.4.5, iconv-lite@~0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immutability-helper@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.1.2.tgz#734506440d7209b74664dcadaa8ba14e73f2185b" + dependencies: + invariant "^2.2.0" -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inline-style-prefixer@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" - integrity sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ== + integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ= dependencies: bowser "^1.7.3" css-in-js-utils "^2.0.0" -inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== +inquirer@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" + integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + figures "^2.0.0" + lodash "^4.17.11" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.0.0" through "^2.3.6" -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" +interpret@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +invariant@^2.2.0, invariant@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" -is-absolute@^1.0.0: +invert-kv@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -is-arguments@^1.0.4, is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" +ipaddr.js@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" dependencies: - has-bigints "^1.0.1" + binary-extensions "^1.0.0" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" +is-buffer@^1.0.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + builtin-modules "^1.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-buffer@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" -is-core-module@^2.13.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: - has "^1.0.3" + is-primitive "^2.0.0" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: +is-finite@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" dependencies: - call-bind "^1.0.2" + number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: - has-tostringtag "^1.0.0" + is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-nan@^1.3.0, is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + kind-of "^3.0.2" -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" -is-obj@^2.0.0: +is-primitive@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-path-inside@^3.0.1, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-regex@^1.0.3, is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: - call-bind "^1.0.2" + has "^1.0.1" is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" dependencies: - has-tostringtag "^1.0.0" + html-comment-regex "^1.1.0" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: - which-typed-array "^1.1.11" + has-symbols "^1.0.0" -is-typedarray@^1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.1: +is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-windows@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-fetch@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: +isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA== dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isomorphic-timers-promises@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" - integrity sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== +isparta@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isparta/-/isparta-4.0.0.tgz#1de91996f480b22dcb1aca8510255bae1574446e" + dependencies: + babel-core "^6.1.4" + escodegen "^1.6.1" + esprima "^2.1.0" + istanbul "^0.4.0" + mkdirp "^0.5.0" + nomnomnomnom "^2.0.0" + object-assign "^4.0.1" + source-map "^0.5.0" + which "^1.0.9" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" + jsbn "~0.1.0" -istanbul-lib-source-maps@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" +jquery@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" -istanbul-reports@^3.1.5: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" +js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^21.1.1: - version "21.1.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.2.tgz#6433f751b8718248d646af1cdf6662dc8a1ca7f9" - integrity sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ== - dependencies: - abab "^2.0.6" - acorn "^8.8.2" - acorn-globals "^7.0.0" - cssstyle "^3.0.0" - data-urls "^4.0.0" - decimal.js "^10.4.3" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.4" - parse5 "^7.1.2" - rrweb-cssom "^0.6.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^12.0.1" - ws "^8.13.0" - xml-name-validator "^4.0.0" +js-yaml@3.x: + version "3.8.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +js-yaml@^3.12.0: + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" + integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.0.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" jsesc@^2.5.1: version "2.5.2" @@ -7916,400 +3541,435 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: - minimist "^1.2.0" + jsonify "~0.0.0" -json5@^2.1.3, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +json3@3.3.2, json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" -jss-plugin-camel-case@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" - integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== +jss-plugin-camel-case@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz#d601bae2e8e2041cc526add289dcd7062db0a248" + integrity sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.10.0" + jss "10.0.0" -jss-plugin-default-unit@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" - integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== +jss-plugin-default-unit@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz#601caf5f576fc0c66986fbe8a9aa37307a3a3ea3" + integrity sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.0.0" -jss-plugin-global@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" - integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== +jss-plugin-global@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz#0fed1b6461e0d57d6e394f877529009bc1cb3cb6" + integrity sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.0.0" -jss-plugin-nested@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" - integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== +jss-plugin-nested@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz#d37ecc013c3b0d0e4acc2b48f6b62da6ae53948b" + integrity sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.0.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" - integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== +jss-plugin-props-sort@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz#38a13407384c2a4a7c026659488350669b953b18" + integrity sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" + jss "10.0.0" -jss-plugin-rule-value-function@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" - integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== +jss-plugin-rule-value-function@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz#3ec1b781b7c86080136dbef6c36e91f20244b72e" + integrity sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.10.0" - tiny-warning "^1.0.2" + jss "10.0.0" -jss-plugin-vendor-prefixer@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" - integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== +jss-plugin-vendor-prefixer@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz#400280535b0f483a9c78105afe4eee61b70018eb" + integrity sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw== dependencies: "@babel/runtime" "^7.3.1" - css-vendor "^2.0.8" - jss "10.10.0" + css-vendor "^2.0.6" + jss "10.0.0" -jss@10.10.0, jss@^10.5.1: - version "10.10.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" - integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== +jss@10.0.0, jss@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0.tgz#998d5026c02accae15708de83bd6ba57bac977d2" + integrity sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ== dependencies: "@babel/runtime" "^7.3.1" - csstype "^3.0.2" + csstype "^2.6.5" is-in-browser "^1.1.3" tiny-warning "^1.0.2" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== +jstransform@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" + dependencies: + base62 "^1.1.0" + commoner "^0.10.1" + esprima-fb "^15001.1.0-dev-harmony-fb" + object-assign "^2.0.0" + source-map "^0.4.2" + +jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" + array-includes "^3.0.3" keycode@^2.1.8: - version "2.2.1" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" - integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" + integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= -keyv@^3.0.0: +kind-of@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" dependencies: - json-buffer "3.0.0" + is-buffer "^1.0.2" -keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.5, loader-utils@~0.2.2: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._createcompounder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" dependencies: - json-buffer "3.0.1" + lodash.deburr "^3.0.0" + lodash.words "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== +lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +lodash.camelcase@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" dependencies: - language-subtag-registry "~0.3.2" + lodash._createcompounder "^3.0.0" -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" dependencies: - readable-stream "^2.0.5" + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== - dependencies: - flush-write-stream "^1.0.2" +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== +lodash.deburr@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" + lodash._root "^3.0.0" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= -linkify-it@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== - dependencies: - uc.micro "^1.0.1" +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" -local-pkg@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" - integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" +lodash.isfunction@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz#4db709fc81bc4a8fd7127a458a5346c5cdce2c6b" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" +lodash.ismap@^4.3.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.ismap/-/lodash.ismap-4.4.2.tgz#836bf06dee57fd3d2aa357bf6946e61d1e77e279" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" lodash.isplainobject@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash.merge@^4.6.0, lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.isset@^4.3.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.isset/-/lodash.isset-4.4.2.tgz#d5eecc56b7a97ab588509e4795b3541b1cdb67bb" + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.memoize@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.merge@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== +lodash.mergewith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash@4.17.21, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash.uniq@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +lodash.words@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" dependencies: - chalk "^2.4.2" + lodash._root "^3.0.0" -log4js@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" - integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== - dependencies: - date-format "^2.0.0" - debug "^4.1.1" - flatted "^2.0.0" - rfdc "^1.1.4" - streamroller "^1.0.6" +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.2, lodash@^4.2.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -loglevel@^1.4.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== +lodash@^4.17.10, lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -long-timeout@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" - integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== +lodash@~4.16.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" +loglevel@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.4.1.tgz#95b383f91a3c2756fd4ab093667e4309161f2bcd" -loupe@^2.3.1, loupe@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" +lolex@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: +longest@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: - yallist "^4.0.0" - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + js-tokens "^3.0.0" -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== +loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" + js-tokens "^3.0.0 || ^4.0.0" -magic-string@^0.30.0: - version "0.30.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" - integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +lru-cache@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: - semver "^6.0.0" + pseudomap "^1.0.1" + yallist "^2.0.0" -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== +material-ui-scrollable-tabs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/material-ui-scrollable-tabs/-/material-ui-scrollable-tabs-2.0.0.tgz#4b812f30c1a24fef01c34c75cf0f36fd2a9478a3" + integrity sha512-H/zjvoXsnyaGIGc8L1SVHW7FW+jPJkmqrVFIhigJHIWiiWUYPNnlBM8AZO/zFg36J83UEJPbzDMmxuyb0aHZVw== + dependencies: + babel-runtime "^6.26.0" + prop-types "^15.6.0" + react-event-listener "^0.5.1" + react-scrollbar-size "^2.0.2" + scroll "^2.0.1" + simple-assign "^0.1.0" + warning "^3.0.0" -material-ui@^0.20.0: +material-ui@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.20.2.tgz#5fc9b4b62b691d3b16c89d8e54597a0412b52c7d" integrity sha512-VeqgQkdvtK193w+FFvXDEwlVxI4rWk83eWbpYLeOIHDPWr3rbB9B075JRnJt/8IsI2X8q5Aia5W3+7m4KkleDg== @@ -8326,996 +3986,1082 @@ material-ui@^0.20.0: simple-assign "^0.1.0" warning "^3.0.0" -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" +math-expression-evaluator@^1.2.14: + version "1.2.16" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +memory-fs@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@1.42.0: + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== + +"mime-db@>= 1.24.0 < 2", mime-db@~1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" + +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: + version "2.1.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" + dependencies: + mime-db "~1.26.0" + +mime-types@~2.1.19: + version "2.1.25" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== + dependencies: + mime-db "1.42.0" + +mime@1.3.4, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" dependencies: - braces "^3.0.2" - picomatch "^2.3.1" + dom-walk "^0.1.0" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== +mini-create-react-context@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" + integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" + "@babel/runtime" "^7.4.0" + gud "^1.0.0" + tiny-warning "^1.0.2" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: - mime-db "1.52.0" + brace-expansion "^1.1.7" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +mocha@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.5" + glob "7.0.5" + growl "1.9.2" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +moment@^2.18.1: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +nan@^2.3.0, nan@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + +nano-memoize@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/nano-memoize/-/nano-memoize-1.1.3.tgz#3ce885f76898384ac78d39fe185b6419f71f8e12" + integrity sha512-+0yGTtwV70h7GourgGsy/AlxrQxqIvJdJjMCuBln+v9lc+u+STuEAscPc4YLgT7uVc+Su/osREG1Do9C/L5OVA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" dependencies: - brace-expansion "^1.1.7" + encoding "^0.1.11" + is-stream "^1.0.1" + +node-gyp@^3.3.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.9.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "3.3.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== +node-pre-gyp@^0.6.29: + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-sass@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568" + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "^2.79.0" + sass-graph "^2.1.1" + stdout-stream "^1.4.0" + +nomnomnomnom@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nomnomnomnom/-/nomnomnomnom-2.0.1.tgz#b2239f031c8d04da67e32836e1e3199e12f7a8e2" dependencies: - brace-expansion "^2.0.1" + chalk "~0.4.0" + underscore "~1.6.0" -minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +"nopt@2 || 3", nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: - brace-expansion "^2.0.1" + abbrev "1" -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" dependencies: - minimist "^1.2.6" + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-scroll-left@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz#9445d74275f303cc661e113329aefa492f58114c" + integrity sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA== -mlly@^1.2.0, mlly@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" - integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" dependencies: - acorn "^8.10.0" - pathe "^1.1.1" - pkg-types "^1.0.3" - ufo "^1.3.0" + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" -moment-timezone@^0.5.31: - version "0.5.45" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" - integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: - moment "^2.29.4" + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" -moment@2.29.4, moment@^2.22.1, moment@^2.24.0, moment@^2.29.1: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" -moment@^2.29.4: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" -nano-memoize@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/nano-memoize/-/nano-memoize-1.2.1.tgz#21091318021c81374a525349a8cd0ad712122077" - integrity sha512-ANfJ0QFhLzv9BZV8tHxwaDClqr+U8yY65hZA+slbgJrx+ePnHtlY92F2ZJInkkQWUUR71NzCEHBshKCHJnNyaQ== +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -nano-memoize@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/nano-memoize/-/nano-memoize-1.3.0.tgz#2d2d04ec000f9a7588f79f50d4e24685a8c586ad" - integrity sha512-yM/gMQHvA5EOtNGfEbJ8tmAveNjbckhzZ1hkNtMjY8zps3ocjPfp1kuJ1++OgtVHAhsGSTJttG3S6UV+FZZzxQ== +object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" -natural-compare@^1.4.0: +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@1.x, once@^1.3.0, once@^1.3.3: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +open@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== +optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" + minimist "~0.0.1" + wordwrap "~0.0.2" -node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: - whatwg-url "^5.0.0" + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" -node-gettext@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-gettext/-/node-gettext-2.1.0.tgz#94d63e9cc0bcabd1e67de0680a44c812721a9023" - integrity sha512-vsHImHl+Py0vB7M2UXcFEJ5NJ3950gcja45YclBFtYxYeZiqdfQdcu+G9s4L7jpRFSh/J/7VoS3upR4JM1nS+g== +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" dependencies: - lodash.get "^4.4.2" + url-parse "1.0.x" -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" -node-schedule@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-1.3.3.tgz#f8e01c5fb9597f09ecf9c4c25d6938e5e7a06f48" - integrity sha512-uF9Ubn6luOPrcAYKfsXWimcJ1tPFtQ8I85wb4T3NgJQrXazEzojcFZVk46ZlLHby3eEJChgkV/0T689IsXh2Gw== +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" dependencies: - cron-parser "^2.18.0" - long-timeout "0.1.1" - sorted-array-functions "^1.3.0" + lcid "^1.0.0" -node-stdlib-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz#5ddcfdf4063b88fb282979a1aa6ddab9728d5e4c" - integrity sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg== +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@0, osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: - assert "^2.0.0" - browser-resolve "^2.0.0" - browserify-zlib "^0.2.0" - buffer "^5.7.1" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - create-require "^1.1.1" - crypto-browserify "^3.11.0" - domain-browser "^4.22.0" - events "^3.0.0" - https-browserify "^1.0.0" - isomorphic-timers-promises "^1.0.1" - os-browserify "^0.3.0" - path-browserify "^1.0.1" - pkg-dir "^5.0.0" - process "^0.11.10" - punycode "^1.4.1" - querystring-es3 "^0.2.1" - readable-stream "^3.6.0" - stream-browserify "^3.0.0" - stream-http "^3.2.0" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.1" - url "^0.11.0" - util "^0.12.4" - vm-browserify "^1.0.1" + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parent-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" + integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== + dependencies: + callsites "^3.0.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: - remove-trailing-separator "^1.0.1" + pinkie-promise "^2.0.0" -normalize-path@^3.0.0, normalize-path@~3.0.0: +path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -now-and-later@^2.0.0: +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: - once "^1.3.2" + isarray "0.0.1" -npm-package-arg@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" - integrity sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA== +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" dependencies: - hosted-git-info "^2.4.2" - osenv "^0.1.4" - semver "^5.1.0" - validate-npm-package-name "^3.0.0" + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: - path-key "^3.0.0" + pify "^2.0.0" -nwsapi@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +pbkdf2-compat@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" -object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + pinkie "^2.0.0" -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -object.assign@^4.0.4, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" + find-up "^1.0.0" -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + find-up "^2.1.0" -object.fromentries@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" +popper.js@^1.14.1: + version "1.16.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" + integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" -object.values@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + postcss "^5.0.11" + postcss-value-parser "^3.1.2" -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" dependencies: - ee-first "1.1.1" + postcss "^5.0.14" -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" dependencies: - wrappy "1" + postcss "^5.0.4" -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" dependencies: - mimic-fn "^2.1.0" + postcss "^5.0.14" -open@^7.3.1: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + postcss "^5.0.16" -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + postcss "^5.0.14" + uniqs "^2.0.0" -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" + postcss "^5.0.4" + uniqid "^4.0.0" -ora@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" dependencies: - readable-stream "^2.0.1" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" dependencies: - p-try "^2.0.0" + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" dependencies: - yocto-queue "^0.1.0" + postcss "^5.0.12" + postcss-value-parser "^3.3.0" -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" dependencies: - yocto-queue "^1.0.0" + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" dependencies: - p-limit "^2.0.0" + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" dependencies: - p-limit "^2.2.0" + postcss "^5.0.4" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" dependencies: - p-limit "^3.0.2" + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" dependencies: - callsites "^3.0.0" + postcss "^5.0.5" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" + postcss "^5.0.4" + postcss-value-parser "^3.0.1" -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" dependencies: - entities "^4.4.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + postcss "^5.0.4" + postcss-value-parser "^3.0.2" -path-is-absolute@^1.0.0: +postcss-reduce-initial@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" dependencies: - isarray "0.0.1" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.0, pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + postcss "^5.0.4" -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: - find-up "^5.0.0" + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" -postcss-value-parser@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@8.4.38: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" -postcss@^8.4.27: - version "8.4.29" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" -prettier@^2.8.7: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" +prettier@^1.16.4: + version "1.16.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" + integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== -pretty-format@^29.0.0, pretty-format@^29.5.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" +private@^0.1.6, private@~0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== +promise@^7.0.3, promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" dependencies: asap "~2.0.3" -prop-types@^15, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== +prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.1, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.13.1" + react-is "^16.8.1" -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== +proxy-addr@~1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + forwarded "~0.1.0" + ipaddr.js "1.2.0" -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" +psl@^1.1.24: + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" -punycode@^1.4.1: +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -pupa@^2.0.1: +punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -purify-ts-extra-codec@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/purify-ts-extra-codec/-/purify-ts-extra-codec-0.6.0.tgz#4d06756cbf4d9def5a44bb192f18178726400547" - integrity sha512-wEIIhBJ9+OfTsGEXPq2SA96NbdRPWNTtjbZB4HSy8VNlfF7cxeDrQ3UBpNGSXTI8AskY4IcUtCgX/V5SwJzKkw== - dependencies: - date-fns "^2.14.0" - warning "^4.0.3" +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= -purify-ts@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/purify-ts/-/purify-ts-1.2.0.tgz#103f088798c55b78b0ba49d82714f912c5d35b4c" - integrity sha512-CTiMFDCaJ9vKXOnl13sRktbb6KMYB0NuQD0LPUYfEZO5YIKcN7uxIb7maSe0Ywzcm9O8LDcz7dQK1p6ZWDCvaQ== - dependencies: - "@types/json-schema" "7.0.9" +q@^1.1.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" -qs@6.13.0, qs@^6.9.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +qs@6.4.0, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" dependencies: - side-channel "^1.0.6" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== +query-string@^4.2.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= dependencies: - side-channel "^1.0.4" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" -querystring-es3@^0.2.1: +querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== +rafl@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" dependencies: - safe-buffer "^5.1.0" + global "~4.3.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" + is-number "^2.0.2" + kind-of "^3.0.2" -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" +raw-loader@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@1.2.8, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== +rc@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" dependencies: - deep-extend "^0.6.0" + deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dom@^0.14.0: + version "0.14.9" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" + +react-dom@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" + integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.18.0" + +react-event-listener@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.10.tgz#378403c555fe616f312891507a742ecbbe2c90de" + integrity sha512-YZklRszh9hq3WP3bdNLjFwJcTCVe7qyTf5+LWNaHfZQaZrptsefDK2B5HHpOsEEaMHvjllUPr0+qIFVTSsurow== + dependencies: + "@babel/runtime" "7.0.0-beta.42" + fbjs "^0.8.16" + prop-types "^15.6.0" + warning "^3.0.0" react-event-listener@^0.6.2: version "0.6.6" @@ -9326,83 +5072,101 @@ react-event-listener@^0.6.2: prop-types "^15.6.0" warning "^4.0.1" -react-fast-compare@^3.0.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-final-form@^6.5.3: - version "6.5.9" - resolved "https://registry.yarnpkg.com/react-final-form/-/react-final-form-6.5.9.tgz#644797d4c122801b37b58a76c87761547411190b" - integrity sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA== - dependencies: - "@babel/runtime" "^7.15.4" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6, react-is@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^16.8.1: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" + integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react-linkify@1.0.0-alpha: - version "1.0.0-alpha" - resolved "https://registry.yarnpkg.com/react-linkify/-/react-linkify-1.0.0-alpha.tgz#b391c7b88e3443752fafe76a95ca4434e82e70d5" - integrity sha512-7gcIUvJkAXXttt1fmBK9cwn+1jTa4hbKLGCZ9J1U6EOkyb2/+LKL1Z28d9rtDLMnpvImlNlLPdTPooorl5cpmg== - dependencies: - linkify-it "^2.0.3" - tlds "^1.199.0" - -react-popper@^2.2.5: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" - integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== +react-json-view@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c" + integrity sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg== dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" + flux "^3.1.3" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^6.1.0" -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-router-dom@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" - integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== +react-router-dom@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" + integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.2.0" + react-router "5.1.2" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" - integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== +react-router@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" + integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" + mini-create-react-context "^0.3.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" +react-router@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.2.5.tgz#6f5ce8f4f0b4ff6a6b2fc6106d7619e342fb57be" + integrity sha512-0/edMhPfOLRZ5IT3y6UkCpW7a13WrnGMR75ayAh2ZLynujEJOSptJt856GKnoCMW+7rk0/WYGUp/QaZNS9dTKg== + dependencies: + create-react-class "^15.5.1" + history "^3.0.0" + hoist-non-react-statics "^2.3.1" + invariant "^2.2.1" + loose-envify "^1.2.0" + prop-types "^15.7.2" + react-is "^16.8.6" + warning "^3.0.0" + +react-scroll-to-component@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-scroll-to-component/-/react-scroll-to-component-1.0.2.tgz#f260dc936c62a53e772786d7832fe0884e195354" + dependencies: + scroll-to "0.0.2" + +react-scrollbar-size@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754" + integrity sha512-9dDUJvk7S48r0TRKjlKJ9e/LkLLYgc9LdQR6W21I8ZqtSrEsedPOoMji4nU3DHy7fx2l8YMScJS/N7qiloYzXQ== + dependencies: + babel-runtime "^6.26.0" + prop-types "^15.6.0" + react-event-listener "^0.5.1" + stifle "^1.0.2" + +react-steps@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/react-steps/-/react-steps-0.0.5.tgz#b927e53fed58ae91bcb6501024078439f26ea291" + +react-textarea-autosize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" + integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A== + dependencies: + prop-types "^15.6.0" + react-transition-group@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" @@ -9414,89 +5178,97 @@ react-transition-group@^1.2.1: prop-types "^15.5.6" warning "^3.0.0" -react-transition-group@^4.0.0, react-transition-group@^4.4.0: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== +react-transition-group@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" + integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@^16.12.0: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== +react@16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" + integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react@^0.14.0: + version "0.14.9" + resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" dependencies: - loose-envify "^1.1.0" + envify "^3.0.0" + fbjs "^0.6.1" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" + find-up "^1.0.0" + read-pkg "^1.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" + find-up "^2.0.0" + read-pkg "^2.0.0" -"readable-stream@2 || 3", readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" - inherits "~2.0.3" + inherits "~2.0.1" isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" dependencies: - picomatch "^2.2.1" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" readline-sync@^1.4.1: - version "1.4.10" - resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" - integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== + version "1.4.7" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.7.tgz#001bfdd4c06110c3c084c63bf7c6a56022213f30" -real-cancellable-promise@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/real-cancellable-promise/-/real-cancellable-promise-1.2.0.tgz#f365e78b29c6a2303584f2c308959b415401056a" - integrity sha512-FYhmx1FVSgoPRjneoTjh+EKZcNb8ijl/dyatTzase5eujYhVrLNDOiIY6AgQq7GU1kOoLgEd9jLVbhFg8k8dOQ== +recast@^0.11.17: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" recompose@^0.26.0: version "0.26.0" @@ -9508,702 +5280,589 @@ recompose@^0.26.0: hoist-non-react-statics "^2.3.1" symbol-observable "^1.0.4" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" + indent-string "^2.1.0" + strip-indent "^1.0.1" -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" dependencies: - regenerate "^1.4.2" + balanced-match "^0.4.2" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" -regenerator-runtime@^0.11.0: +regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== +regenerator-transform@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" dependencies: - "@babel/runtime" "^7.8.4" + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" dependencies: - rc "1.2.8" + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" dependencies: - rc "^1.2.8" + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" dependencies: - jsesc "~0.5.0" + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" + jsesc "~0.5.0" -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" + is-finite "^1.0.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== +request-promise@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.2.tgz#d1ea46d654a6ee4f8ee6a4fea1018c22911904b4" + dependencies: + bluebird "^3.5.0" + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@2, request@^2.79.0, request@^2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.34: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -requires-port@^1.0.0: +requires-port@1.0.x, requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== - dependencies: - value-or-function "^3.0.0" - -resolve-package-json@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve-package-json/-/resolve-package-json-1.4.0.tgz#3f3373c5b7fb61fa078ba3cc936cf3e70bd23c7d" - integrity sha512-9UJjpAS+zjRP3C0NJuW5YqHxvd5bIZ+EKnxrhlVvVdEh2p6hQQ23Hg+O5Qqir2uEWAfealWE+ODIYoJF25CuRg== - dependencies: - async "^2.5.0" - client-request "^2.2.0" - debug "^3.0.1" - npm-package-arg "^5.1.2" - semver "^5.4.1" - which "^1.3.0" - resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== +resolve@^1.5.0, resolve@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== dependencies: - lowercase-keys "^1.0.0" + path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: - onetime "^5.1.0" + onetime "^2.0.0" signal-exit "^3.0.2" -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.1.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -rifm@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" - integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ== - dependencies: - "@babel/runtime" "^7.3.1" - -rimraf@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: - glob "^7.1.3" + align-text "^0.1.1" -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: - glob "^7.1.3" + glob "^7.0.5" -rimraf@~2.6.2: +rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-visualizer@^5.9.0: - version "5.9.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz#f1aa2d9b1be8ebd6869223c742324897464d8891" - integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - -rollup@^2.77.2: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^3.27.1: - version "3.29.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" - integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== - optionalDependencies: - fsevents "~2.3.2" - -rrweb-cssom@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" - integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +ripemd160@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: - queue-microtask "^1.2.2" + is-promise "^2.1.0" -rxjs-compat@6.6.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.6.3.tgz#141405fcee11f48718d428b99c8f01826f594e5c" - integrity sha512-y+wUqq7bS2dG+7rH2fNMoxsDiJ32RQzFxZQE/JdtpnmEZmwLQrb1tCiItyHxdXJHXjmHnnzFscn3b6PEmORGKw== - -rxjs-compat@6.6.7: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.6.7.tgz#6eb4ef75c0a58ea672854a701ccc8d49f41e69cb" - integrity sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw== +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" -rxjs@^5.5.7: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" +rxjs-compat@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.5.3.tgz#18440949b2678bf87a78a754009676b2c49183dc" + integrity sha512-BIJX2yovz3TBpjJoAZyls2QYuU6ZiCaZ+U96SmxQpuSP/qDUfiXPKOVLbThBB2WZijNHkdTTJXKRwvv5Y48H7g== -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== dependencies: tslib "^1.9.0" -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" +safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanctuary-show@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sanctuary-show/-/sanctuary-show-2.0.0.tgz#2326b4744f4b0f993f18ca56a29f68a50f514637" - integrity sha512-REj4ZiioUXnDLj6EpJ9HcYDIEGaEexmB9Fg5o6InZR9f0x5PfnnC21QeU9SZ9E7G8zXSZPNjy8VRUK4safbesw== - -sanctuary-type-identifiers@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/sanctuary-type-identifiers/-/sanctuary-type-identifiers-3.0.0.tgz#51cb488d2ed9f194946a64ffe2b41dd49a348c0b" - integrity sha512-YFXYcG0Ura1dSPd/1xLYtE2XAWUEsBHhMTZvYBOvwT8MeFQwdUOCMm2DC+r94z6H93FVq0qxDac8/D7QpJj6Mg== +samsam@1.1.2, samsam@~1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== +sass-graph@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" dependencies: - truncate-utf8-bytes "^1.0.0" + glob "^7.0.0" + lodash "^4.0.0" + yargs "^4.7.1" -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== +sass-loader@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-3.2.3.tgz#742e81fd8170a8771a979e18622501674a88e355" dependencies: - xmlchars "^2.2.0" + async "^1.4.0" + loader-utils "^0.2.5" + object-assign "^4.0.1" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +sax@^1.2.1, sax@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +scheduler@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" + integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== dependencies: loose-envify "^1.1.0" + object-assign "^4.1.1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== +scroll-to@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/scroll-to/-/scroll-to-0.0.2.tgz#936d398a9133660a2492145c2c0081dfcb0728f3" dependencies: - semver "^6.3.0" + component-raf "1.2.0" + component-tween "1.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +scroll@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" + integrity sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ== + dependencies: + rafl "~1.2.1" -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^7.3.4, semver@^7.3.7, semver@^7.5.0, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^5.5.0, semver@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" + debug "2.6.1" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" + mime "1.3.4" + ms "0.7.2" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-index@^1.7.2: + version "1.8.0" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + dependencies: + accepts "~1.3.3" + batch "0.5.3" + debug "~2.2.0" + escape-html "~1.0.3" + http-errors "~1.5.0" + mime-types "~2.1.11" + parseurl "~1.3.1" + +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" dependencies: - encodeurl "~2.0.0" + encodeurl "~1.0.1" escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" + parseurl "~1.3.1" + send "0.15.1" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +setprototypeof@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== +sha.js@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: - kind-of "^6.0.2" + shebang-regex "^1.0.0" -shallowequal@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +simple-assign@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" -shiki@^0.14.1: - version "0.14.4" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.4.tgz#2454969b466a5f75067d0f2fa0d7426d32881b20" - integrity sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ== - dependencies: - ansi-sequence-parser "^1.1.0" - jsonc-parser "^3.2.0" - vscode-oniguruma "^1.7.0" - vscode-textmate "^8.0.0" +sinon-chai@^2.8.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.9.0.tgz#34d820042bc9661a14527130d401eb462c49bb84" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +sinon@^1.17.3: + version "1.17.7" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + formatio "1.1.1" + lolex "1.3.2" + samsam "1.1.2" + util ">=0.10.3 <1" -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" -simple-assign@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" - integrity sha512-otdSSQzuVsmDoe5MnSm4ZgHd5sl0ak6A1CTjW1R/DUHQ8xoZuU1NUzf9x6n9Dvp3nxpvW51WNMQ/7rQ9432xDg== +sockjs-client@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" + dependencies: + debug "^2.2.0" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.1" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +sockjs@^0.3.15: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" -sorted-array-functions@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" - integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" -sortobject@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sortobject/-/sortobject-1.3.0.tgz#bc8ce57014c567bdbf78e89ae6c484e64d51e9dc" - integrity sha512-rr0RrgE3ZoWaREnHiidnywzXLaeqmxDKfB4Htdbzu4WBzsVeZEJrhz7AR4ZF+gzHgbog/lQoNXxCWHaXeLc1Dg== - dependencies: - editions "^2.2.0" - -source-map-explorer@^2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.5.3.tgz#33551b51e33b70f56d15e79083cdd4c43e583b69" - integrity sha512-qfUGs7UHsOBE5p/lGfQdaAj/5U/GWYBw2imEpD6UQNkqElYonkow8t+HBL1qqIl3CuGZx7n8/CQo4x1HwSHhsg== - dependencies: - btoa "^1.2.1" - chalk "^4.1.0" - convert-source-map "^1.7.0" - ejs "^3.1.5" - escape-html "^1.0.3" - glob "^7.1.6" - gzip-size "^6.0.0" - lodash "^4.17.20" - open "^7.3.1" - source-map "^0.7.4" - temp "^0.9.4" - yargs "^16.2.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-list-map@^0.1.4, source-list-map@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-support@^0.4.2: + version "0.4.14" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" + dependencies: + source-map "^0.5.6" -source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + amdefine ">=0.0.4" -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== +sshpk@^1.7.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" dependencies: - escape-string-regexp "^2.0.0" + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" -std-env@^3.3.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" - integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" +stifle@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.1.1.tgz#4e4c565f19dcf9a6efa3a7379a70c42179edb8d6" + integrity sha512-INvON4DXLAWxpor+f0ZHnYQYXBqDXQRW1znLpf5/C/AWzJ0eQQAThfdqHQ5BDkiyywD67rQGvbE4LC+Aig6K/Q== -stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" + inherits "~2.0.1" + readable-stream "^2.0.2" -stream-http@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== +stream-cache@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" + +stream-http@^2.3.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" dependencies: builtin-status-codes "^3.0.0" - inherits "^2.0.4" - readable-stream "^3.6.0" - xtend "^4.0.2" + inherits "^2.0.1" + readable-stream "^2.1.0" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -streamroller@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" - integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.14" + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== +string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -10212,140 +5871,80 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: - safe-buffer "~5.2.0" + ansi-regex "^2.0.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - safe-buffer "~5.1.0" + ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: - ansi-regex "^5.0.1" + is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" dependencies: - min-indent "^1.0.0" + get-stdin "^4.0.1" -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-literal@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - dependencies: - acorn "^8.10.0" - -styled-components@6.1.11: - version "6.1.11" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.11.tgz#01948e5195bf1d39e57e0a85b41958c80e40cfb8" - integrity sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA== - dependencies: - "@emotion/is-prop-valid" "1.2.2" - "@emotion/unitless" "0.8.1" - "@types/stylis" "4.2.5" - css-to-react-native "3.2.0" - csstype "3.1.3" - postcss "8.4.38" - shallowequal "1.1.0" - stylis "4.3.2" - tslib "2.6.2" - -styled-jsx@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" - integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== - dependencies: - client-only "0.0.1" - -stylis@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" - integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== +style-loader@^0.13.0: + version "0.13.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + dependencies: + loader-utils "^1.0.2" + +supports-color@3.1.2, supports-color@^3.1.0, supports-color@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" supports-color@^5.3.0: version "5.5.0" @@ -10354,136 +5953,99 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +susy@^2.2.12: + version "2.2.12" + resolved "https://registry.yarnpkg.com/susy/-/susy-2.2.12.tgz#644c2441ed00d293287e8d49a016dbf919215953" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" dependencies: - has-flag "^4.0.0" + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +symbol-observable@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw== +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -symbol-observable@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" + integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + dependencies: + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +tapable@^0.1.8, tapable@~0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" -temp@^0.9.4: - version "0.9.4" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" - integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.0.0, tar@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: - mkdirp "^0.5.1" - rimraf "~2.6.2" + block-stream "*" + fstream "^1.0.12" + inherits "2" -term-size@^2.1.0: +tar@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + block-stream "*" + fstream "^1.0.2" + inherits "2" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -throttle-debounce@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" - integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== - -throttle-debounce@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-4.0.1.tgz#f86656fe9c8a6b8218952ef36c3bf225089b1baf" - integrity sha512-s3PedbXdZtr8v3J5Sxd5T/GmWG80BcK5GVpwDdvgEaUXsaMqQe4zxgmC4TA7B8luSDCPxo3CeSBS3F9rF1CZwg== - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through@^2.3.6: +through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" dependencies: setimmediate "^1.0.4" -tiny-invariant@^1.0.2, tiny-invariant@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tiny-invariant@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: +tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tinybench@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== - -tinypool@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e" - integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== - -tinyspy@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" - integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== - -tlds@^1.199.0: - version "1.242.0" - resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.242.0.tgz#da136a9c95b0efa1a4cd57dca8ef240c08ada4b7" - integrity sha512-aP3dXawgmbfU94mA32CJGHmJUE1E58HCB1KmlKRhBNtqBL27mSQcAEmcaMaQ1Za9kIVvOdbxJD3U5ycDy7nJ3w== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10491,1047 +6053,458 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== +tough-cookie@>=2.3.3, tough-cookie@~2.3.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: - through2 "^2.0.3" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + punycode "^1.4.1" -tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +tough-cookie@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" + punycode "^1.4.1" -tr46@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" - integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: - punycode "^2.3.0" + psl "^1.1.24" + punycode "^1.4.1" tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -"true-myth@^4.1.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/true-myth/-/true-myth-4.1.1.tgz#ff4ac9d5130276e34aa338757e2416ec19248ba2" - integrity sha512-rqy30BSpxPznbbTcAcci90oZ1YR4DqvKcNXNerG5gQBU2v4jk0cygheiul5J6ExIMrgDVuanv/MkGfqZbKrNNg== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -ts-morph@^13.0.1: - version "13.0.3" - resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-13.0.3.tgz#c0c51d1273ae2edb46d76f65161eb9d763444c1d" - integrity sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw== - dependencies: - "@ts-morph/common" "~0.12.3" - code-block-writer "^11.0.0" - -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -ts-prune@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/ts-prune/-/ts-prune-0.10.3.tgz#b6c71a525543b38dcf947a7d3adfb7f9e8b91f38" - integrity sha512-iS47YTbdIcvN8Nh/1BFyziyUqmjXz7GVzWu02RaZXqb+e/3Qe1B7IQ4860krOeCGUeJmterAlaM2FRH0Ue0hjw== - dependencies: - commander "^6.2.1" - cosmiconfig "^7.0.1" - json5 "^2.1.3" - lodash "^4.17.21" - "true-myth" "^4.1.0" - ts-morph "^13.0.1" - -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@2.6.2, tslib@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" -type-fest@^0.6.0: +tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + safe-buffer "^5.0.1" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - 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" +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" + prelude-ls "~1.1.2" -typed-immutable-map@^0.1.1: +type-detect@0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/typed-immutable-map/-/typed-immutable-map-0.1.1.tgz#4f7d67c6afa3daa2eaa09c0afa1b9d8ef35a6045" - integrity sha512-kqdpR/oGRyHHjnwRnRfLXu6YUDO9/spIljcbzmMyzgOfNJ5XH436TEWQXkmjhM/CdoclOuVMYgWM1ymrwnY9ng== + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" -typedoc@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.1.tgz#50de2d8fb93623fbfb59e2fa6407ff40e3d3f438" - integrity sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA== +type-is@~1.6.14: + version "1.6.14" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" dependencies: - lunr "^2.3.9" - marked "^4.3.0" - minimatch "^9.0.3" - shiki "^0.14.1" - -typescript@5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - -ua-parser-js@^0.7.30: - version "0.7.36" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.36.tgz#382c5d6fc09141b6541be2cae446ecfcec284db2" - integrity sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q== - -uc.micro@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + media-typer "0.3.0" + mime-types "~2.1.13" -ufo@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" - integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== +ua-parser-js@^0.7.18: + version "0.7.20" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" + integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +uglify-js@^2.6, uglify-js@~2.7.3: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + macaddress "^0.2.8" -universalify@^2.0.0: +uniqs@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-notifier@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" dependencies: - prepend-http "^2.0.0" + querystringify "0.0.x" + requires-port "1.0.x" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== +url-parse@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" + querystringify "0.0.x" + requires-port "1.0.x" url@^0.11.0: - version "0.11.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" - integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" dependencies: - punycode "^1.4.1" - qs "^6.11.2" - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + punycode "1.3.2" + querystring "0.2.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4, util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== +util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" + inherits "2.0.1" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -v8-compile-cache-lib@^3.0.1: +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -v8-to-istanbul@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" +uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: - builtins "^1.0.3" + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vinyl-fs@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0, vinyl@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -vite-bundle-visualizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/vite-bundle-visualizer/-/vite-bundle-visualizer-0.6.0.tgz#c8d1d0e846d57dcec3909abfd07524cd7492d5c9" - integrity sha512-FubYa69t5SHD0sT2naUGpRaOlKMlDqlJkWcqxR+1NJVwt8zYBdBg/mKI1dG4xelnd6c7TLC9BXOAB1nM6rD0XA== - dependencies: - cac "^6.7.14" - rollup-plugin-visualizer "^5.9.0" - -vite-node@0.32.4: - version "0.32.4" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.32.4.tgz#7b3f94af5a87c631fbc380ba662914bafbd04d80" - integrity sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - mlly "^1.4.0" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^3.0.0 || ^4.0.0" - -vite-plugin-checker@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz#3790381734440033e6cb3cee9d92fcfdd69a4d71" - integrity sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ== - dependencies: - "@babel/code-frame" "^7.12.13" - ansi-escapes "^4.3.0" - chalk "^4.1.1" - chokidar "^3.5.1" - commander "^8.0.0" - fast-glob "^3.2.7" - fs-extra "^11.1.0" - lodash.debounce "^4.0.8" - lodash.pick "^4.4.0" - npm-run-path "^4.0.1" - semver "^7.5.0" - strip-ansi "^6.0.0" - tiny-invariant "^1.1.0" - vscode-languageclient "^7.0.0" - vscode-languageserver "^7.0.0" - vscode-languageserver-textdocument "^1.0.1" - vscode-uri "^3.0.2" - -vite-plugin-eslint@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz#0381b8272e7f0fd8b663311b64f7608d55d8b04c" - integrity sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang== - dependencies: - "@rollup/pluginutils" "^4.2.1" - "@types/eslint" "^8.4.5" - rollup "^2.77.2" - -vite-plugin-node-stdlib-browser@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/vite-plugin-node-stdlib-browser/-/vite-plugin-node-stdlib-browser-0.2.1.tgz#6a598b3e1fecde6cdabe9c80a29adaeebc53463b" - integrity sha512-6u2i613Dkqj5KaTNIrnZvE6y3/awWAp0S5TjucTvGxdhetftB1Mgvblc+nwYzlw6sntPlac8UOC7ttXNh+LZKA== - dependencies: - "@rollup/plugin-inject" "^5.0.3" - -"vite@^3.0.0 || ^4.0.0", vite@^4.2.0: - version "4.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== - dependencies: - esbuild "^0.18.10" - postcss "^8.4.27" - rollup "^3.27.1" - optionalDependencies: - fsevents "~2.3.2" - -vitest@^0.32.2: - version "0.32.4" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.32.4.tgz#a0558ae44c2ccdc254eece0365f16c4ffc5231bb" - integrity sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg== - dependencies: - "@types/chai" "^4.3.5" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - "@vitest/expect" "0.32.4" - "@vitest/runner" "0.32.4" - "@vitest/snapshot" "0.32.4" - "@vitest/spy" "0.32.4" - "@vitest/utils" "0.32.4" - acorn "^8.9.0" - acorn-walk "^8.2.0" - cac "^6.7.14" - chai "^4.3.7" - debug "^4.3.4" - local-pkg "^0.4.3" - magic-string "^0.30.0" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.3.3" - strip-literal "^1.0.1" - tinybench "^2.5.0" - tinypool "^0.5.0" - vite "^3.0.0 || ^4.0.0" - vite-node "0.32.4" - why-is-node-running "^2.2.2" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vscode-jsonrpc@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" - integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== - -vscode-languageclient@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" - integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== - dependencies: - minimatch "^3.0.4" - semver "^7.3.4" - vscode-languageserver-protocol "3.16.0" - -vscode-languageserver-protocol@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" - integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== - dependencies: - vscode-jsonrpc "6.0.0" - vscode-languageserver-types "3.16.0" +vary@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" -vscode-languageserver-textdocument@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" - integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== +velocityjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/velocityjs/-/velocityjs-1.0.0.tgz#0c0ceb8725e870e2c50f4b9ab33beff70d3566d7" -vscode-languageserver-types@3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" -vscode-languageserver@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" - integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" dependencies: - vscode-languageserver-protocol "3.16.0" - -vscode-oniguruma@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" - integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== + extsprintf "1.0.2" -vscode-uri@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" - integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== - -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" dependencies: - xml-name-validator "^4.0.0" + indexof "0.0.1" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ== dependencies: loose-envify "^1.0.0" -warning@^4.0.1, warning@^4.0.2, warning@^4.0.3: +warning@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== +watchpack@^0.2.1: + version "0.2.9" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" dependencies: - defaults "^1.0.3" + async "^0.9.0" + chokidar "^1.0.0" + graceful-fs "^4.1.2" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== +webpack-core@~0.6.9: + version "0.6.9" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" dependencies: - iconv-lite "0.6.3" - -whatwg-fetch@>=0.10.0: - version "3.6.19" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== + source-list-map "~0.1.7" + source-map "~0.4.1" -whatwg-fetch@^3.4.1: - version "3.6.20" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" - integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== +webpack-dev-middleware@^1.4.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" + dependencies: + memory-fs "~0.4.1" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-dev-server@^1.14.1: + version "1.16.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.3.tgz#cbb6a0d3e7c8eb5453b3e9befcbe843219f62661" + dependencies: + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + express "^4.13.3" + http-proxy-middleware "~0.17.1" + open "0.0.5" + optimist "~0.6.1" + serve-index "^1.7.2" + sockjs "^0.3.15" + sockjs-client "^1.0.3" + stream-cache "~0.0.1" + strip-ansi "^3.0.0" + supports-color "^3.1.1" + webpack-dev-middleware "^1.4.0" + +webpack-visualizer-plugin@^0.1.5: + version "0.1.11" + resolved "https://registry.yarnpkg.com/webpack-visualizer-plugin/-/webpack-visualizer-plugin-0.1.11.tgz#b8770ad86b4f652612c68b1b782253faf9f8a34e" + dependencies: + d3 "^3.5.6" + mkdirp "^0.5.1" + react "^0.14.0" + react-dom "^0.14.0" -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== +webpack@^1.12.14: + version "1.14.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823" + dependencies: + acorn "^3.0.0" + async "^1.3.0" + clone "^1.0.2" + enhanced-resolve "~0.9.0" + interpret "^0.6.4" + loader-utils "^0.2.11" + memory-fs "~0.3.0" + mkdirp "~0.5.0" + node-libs-browser "^0.7.0" + optimist "~0.6.0" + supports-color "^3.1.0" + tapable "~0.1.8" + uglify-js "~2.7.3" + watchpack "^0.2.1" + webpack-core "~0.6.9" + +websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" -whatwg-url@^12.0.0, whatwg-url@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" - integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" dependencies: - tr46 "^4.1.1" - webidl-conversions "^7.0.0" + iconv-lite "0.4.13" -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== +whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + +whatwg-url@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.6.0.tgz#ef98da442273be04cf9632e176f257d2395a1ae4" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which@1, which@^1.0.9, which@^1.1.1, which@^1.2.9: + version "1.2.12" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + isexe "^1.1.1" -which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" dependencies: - isexe "^2.0.0" + string-width "^1.0.1" -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" -wordwrap@^1.0.0: +wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^8.13.0: - version "8.14.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" - integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + mkdirp "^0.5.1" -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^15.0.1: - version "15.0.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" - integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^14.0.0: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" require-directory "^2.1.1" - require-main-filename "^2.0.0" + require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - -zustand@^4.3.7: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 8d2a06fa02268b85b121b20236f2ebfb9c165ea4 Mon Sep 17 00:00:00 2001 From: Eduardo Peredo Rivero Date: Wed, 9 Oct 2024 06:31:38 -0500 Subject: [PATCH 2/4] add new skeleton structure --- .babelrc | 33 - .browserslistrc | 5 + .env | 5 + .env.production | 1 + .eslintignore | 2 + .eslintrc.js | 16 - .eslintrc.json | 77 + .githooks/dep-check | 10 + .github/pull_request_template.md | 9 + .github/workflows/main.yml | 47 + .gitignore | 67 +- .husky/.gitignore | 1 + .husky/post-merge | 4 + .husky/pre-push | 4 + .nvmrc | 2 +- .prettierignore | 4 + .prettierrc.js | 8 +- .travis.yml | 41 + .vite/deps_temp_2fce2642/package.json | 3 + .vscode/settings.json | 3 + license.txt => LICENSE | 8 +- README.md | 78 +- babel.config.js | 3 + config/config.template.json | 4 - config/fileMock.js | 3 + config/setup.js | 25 - config/styleMock.js | 3 + config/testHelpers.js | 8 + config/testSetup.ts | 13 + delete-identifier.js | 48 + i18n/en.pot | 30 + i18n/es.po | 30 + .../material-design-icons/material-icons.css | 38 - includes/roboto-font.css | 36 - index.html | 25 +- metadata/attributes.json | 203 - package.json | 219 +- public/favicon.ico | Bin 0 -> 4286 bytes .../MaterialIcons-Regular.eot | Bin .../MaterialIcons-Regular.ttf | Bin .../MaterialIcons-Regular.woff | Bin .../MaterialIcons-Regular.woff2 | Bin .../material-design-icons/material-icons.css | 37 + public/includes/roboto-font.css | 47 + public/manifest.json | 15 + .../customjscss/data-entry-contentscript.js | 37 - resources/customjscss/nrc.css | 390 - .../check-duplicate-group-sets-items.js | 42 - resources/scripts/fix-duplicated-uids.sh | 65 - src/App/App.component.js | 68 - src/App/App.scss | 53 - src/CompositionRoot.ts | 35 + src/DataSets/DataSetPeriods.js | 142 - src/DataSets/DataSets.component.js | 661 - src/DataSets/DetailsBox.component.js | 257 - src/DataSets/DetailsBox.scss | 30 - .../DetailsBoxWithScroll.component.js | 43 - src/DataSets/FormSteps.component.js | 225 - src/DataSets/Forms/CoreSections.component.js | 8 - .../Forms/Disaggregation.component.js | 145 - .../Forms/GeneralInformation.component.js | 178 - src/DataSets/Forms/GreyFields.component.js | 39 - src/DataSets/Forms/InitialConfig.component.js | 165 - .../Forms/NonCoreSections.component.js | 6 - .../Forms/OrganisationUnit.component.js | 73 - src/DataSets/Forms/Save.component.js | 154 - src/DataSets/Forms/Sections.component.js | 640 - src/DataSets/Forms/Sharing.component.js | 88 - src/DataSets/List.scss | 27 - src/DataSets/PeriodsDialog.js | 200 - src/DataSets/context.actions.js | 136 - src/DataSets/delete.store.js | 31 - src/DataSets/details.store.js | 3 - src/DataSets/list.actions.js | 30 - src/DataSets/log.js | 125 - src/DataSets/logs.store.js | 3 - src/DataSets/orgUnits.store.js | 3 - src/DataSets/periods.store.js | 3 - src/DataSets/sharing.store.js | 3 - src/ListActionBar/ListActionBar.component.js | 44 - src/LoadingMask/LoadingMask.component.js | 15 - src/LoadingStatus/LoadingStatus.component.js | 24 - .../MultipleDataTable.component.js | 243 - .../MultipleDataTableContextMenu.component.js | 107 - .../MultipleDataTableRow.component.js | 174 - .../MultipleDataTableRow.scss | 4 - src/MultipleDataTable/PopoverNoFlicker.js | 109 - src/Pagination/Pagination.scss | 37 - src/SearchBox/SearchBox.component.js | 65 - src/SessionDialog/SessionDialog.component.js | 61 - src/Settings/Settings.component.js | 240 - src/Snackbar/SnackbarContainer.component.js | 71 - src/Snackbar/snack.actions.js | 40 - src/Snackbar/snack.store.js | 3 - src/Wizard/Wizard.component.js | 182 - src/app-config.ts | 9 + src/app.js | 106 - .../collapsible-box/CollapsibleBox.js | 73 - .../collapsible-box/CollapsibleBox.scss | 32 - src/components/sharing-dialog/Access.jsx | 165 - .../sharing-dialog/AutoComplete.jsx | 157 - .../sharing-dialog/ConfirmationDialog.jsx | 64 - .../sharing-dialog/PermissionOption.jsx | 41 - .../sharing-dialog/PermissionPicker.jsx | 167 - src/components/sharing-dialog/Sharing.jsx | 222 - .../sharing-dialog/SharingDialog.jsx | 41 - .../sharing-dialog/SharingDialogMultiple.jsx | 63 - src/components/sharing-dialog/UserSearch.jsx | 165 - src/components/sharing-dialog/i18n.js | 12 - src/components/sharing-dialog/utils.js | 149 - src/config/periodTypes.json | 13 - src/data/api-futures.ts | 20 + src/data/repositories/UserD2Repository.ts | 40 + src/data/repositories/UserTestRepository.ts | 11 + src/domain/entities/Ref.ts | 9 + src/domain/entities/User.ts | 24 + src/domain/entities/__tests__/User.spec.ts | 37 + src/domain/entities/__tests__/userFixtures.ts | 31 + src/domain/entities/generic/Collection.ts | 328 + src/domain/entities/generic/Either.ts | 86 + src/domain/entities/generic/Future.ts | 193 + src/domain/entities/generic/HashMap.ts | 128 + src/domain/entities/generic/Rec.ts | 67 + src/domain/entities/generic/Struct.ts | 45 + .../generic/__tests/Collection.spec.ts | 336 + .../entities/generic/__tests/Future.spec.ts | 280 + .../entities/generic/__tests/HashMap.spec.ts | 189 + .../entities/generic/__tests/Rec.spec.ts | 43 + .../entities/generic/__tests/Struct.spec.ts | 19 + src/domain/repositories/UserRepository.ts | 6 + src/domain/usecases/GetCurrentUserUseCase.ts | 11 + .../__tests__/GetCurrentUserUseCase.spec.ts | 11 + src/forms/DataInputPeriods.component.js | 234 - ...tCategoryComboSelectionDialog.component.js | 199 - src/forms/Dropdown.component.js | 226 - src/forms/FormHelpers.js | 186 - src/forms/GreyFieldsTable.component.js | 410 - src/forms/MultiSelect.component.js | 88 - src/forms/RichDropdown.component.js | 244 - src/forms/TimePeriodSelector.component.js | 90 - src/forms/YearlyDateSelector.component.js | 102 - src/forms/form-fields/check-box.js | 57 - src/forms/form-fields/date-select.js | 108 - src/forms/form-fields/drop-down-async.js | 190 - src/forms/form-fields/drop-down.js | 226 - .../helpers/QuickAddLink.component.js | 46 - .../helpers/RefreshMask.component.js | 31 - src/forms/form-fields/icon-picker.js | 20 - src/forms/form-fields/multi-select.js | 373 - src/forms/form-fields/multi-toggle.js | 79 - src/forms/form-fields/text-field.js | 96 - src/i18n/i18n_module_ar.properties | 249 - src/i18n/i18n_module_en.properties | 249 - src/i18n/i18n_module_es.properties | 249 - src/i18n/i18n_module_fr.properties | 249 - src/models/CustomForm.js | 240 - src/models/DataSetStore.js | 969 -- src/models/ProjectService.js | 66 - src/models/Section.js | 649 - src/models/Settings.js | 295 - src/models/Sharing.js | 38 - src/models/custom-form-resources/script.js | 393 - .../custom-form-resources/sectionForm.vm | 275 - src/models/custom-form-resources/style.css | 217 - src/models/data-periods.js | 338 - src/models/dataset.js | 46 - src/router.js | 30 - src/scripts/README.md | 5 - src/scripts/example.ts | 27 + src/scripts/migrate-datasets-input-periods.ts | 306 - src/scripts/tsconfig.json | 22 + src/tests/setup.js | 9 + src/types/d2-api.ts | 7 + src/types/d2-ui.d.ts | 3 + src/types/d2.d.ts | 6 + src/types/declarations.d.ts | 4 + src/types/i18n.d.ts | 5 + src/utils/Dhis2Helpers.js | 633 - src/utils/ObservedEvents.mixin.js | 45 - src/utils/ObserverRegistry.mixin.js | 15 - src/utils/i18n-typed.ts | 38 + src/utils/i18n.ts | 3 + src/utils/lodash-mixins.js | 64 - src/utils/tests.tsx | 25 + src/utils/ts-utils.ts | 76 + src/utils/uid.ts | 52 + src/vite-env.d.ts | 1 + src/webapp/components/card-grid/CardGrid.tsx | 50 + src/webapp/components/card-grid/MenuCard.tsx | 76 + .../components/page-header/PageHeader.tsx | 72 + src/webapp/components/share/Share.tsx | 140 + .../components/share/logo-eyeseetea.png | Bin 0 -> 16196 bytes src/webapp/contexts/app-context.ts | 19 + src/webapp/main.tsx | 7 + src/webapp/pages/Router.tsx | 20 + src/webapp/pages/app/App.css | 13 + src/webapp/pages/app/App.tsx | 60 + src/webapp/pages/app/Dhis2App.tsx | 97 + src/webapp/pages/app/__tests__/App.spec.tsx | 25 + .../__tests__/__snapshots__/App.spec.tsx.snap | 48 + .../pages/app/themes/dhis2-legacy.theme.ts} | 33 +- .../pages/app/themes/dhis2.theme.ts} | 12 +- src/webapp/pages/example/ExamplePage.tsx | 30 + .../example/__tests__/ExamplePage.spec.tsx | 15 + .../__snapshots__/ExamplePage.spec.tsx.snap | 40 + src/webapp/pages/landing/LandingPage.tsx | 40 + test/app/App.test.js | 58 - test/tests.js | 11 - tsconfig.json | 26 + tsconfig.node.json | 9 + vite.config.ts | 73 + webpack.config.js | 133 - yarn.lock | 14031 ++++++++++------ 213 files changed, 12900 insertions(+), 21276 deletions(-) delete mode 100644 .babelrc create mode 100644 .browserslistrc create mode 100644 .env create mode 100644 .env.production create mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 .eslintrc.json create mode 100644 .githooks/dep-check create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/main.yml create mode 100644 .husky/.gitignore create mode 100644 .husky/post-merge create mode 100644 .husky/pre-push create mode 100644 .prettierignore create mode 100644 .travis.yml create mode 100644 .vite/deps_temp_2fce2642/package.json create mode 100644 .vscode/settings.json rename license.txt => LICENSE (99%) create mode 100644 babel.config.js delete mode 100644 config/config.template.json create mode 100644 config/fileMock.js delete mode 100644 config/setup.js create mode 100644 config/styleMock.js create mode 100644 config/testHelpers.js create mode 100644 config/testSetup.ts create mode 100644 delete-identifier.js create mode 100644 i18n/en.pot create mode 100644 i18n/es.po delete mode 100644 includes/material-design-icons/material-icons.css delete mode 100644 includes/roboto-font.css delete mode 100644 metadata/attributes.json create mode 100644 public/favicon.ico rename {includes => public/includes}/material-design-icons/MaterialIcons-Regular.eot (100%) rename {includes => public/includes}/material-design-icons/MaterialIcons-Regular.ttf (100%) rename {includes => public/includes}/material-design-icons/MaterialIcons-Regular.woff (100%) rename {includes => public/includes}/material-design-icons/MaterialIcons-Regular.woff2 (100%) create mode 100644 public/includes/material-design-icons/material-icons.css create mode 100644 public/includes/roboto-font.css create mode 100644 public/manifest.json delete mode 100644 resources/customjscss/data-entry-contentscript.js delete mode 100644 resources/customjscss/nrc.css delete mode 100644 resources/scripts/check-duplicate-group-sets-items.js delete mode 100644 resources/scripts/fix-duplicated-uids.sh delete mode 100644 src/App/App.component.js delete mode 100644 src/App/App.scss create mode 100644 src/CompositionRoot.ts delete mode 100644 src/DataSets/DataSetPeriods.js delete mode 100644 src/DataSets/DataSets.component.js delete mode 100644 src/DataSets/DetailsBox.component.js delete mode 100644 src/DataSets/DetailsBox.scss delete mode 100644 src/DataSets/DetailsBoxWithScroll.component.js delete mode 100644 src/DataSets/FormSteps.component.js delete mode 100644 src/DataSets/Forms/CoreSections.component.js delete mode 100644 src/DataSets/Forms/Disaggregation.component.js delete mode 100644 src/DataSets/Forms/GeneralInformation.component.js delete mode 100644 src/DataSets/Forms/GreyFields.component.js delete mode 100644 src/DataSets/Forms/InitialConfig.component.js delete mode 100644 src/DataSets/Forms/NonCoreSections.component.js delete mode 100644 src/DataSets/Forms/OrganisationUnit.component.js delete mode 100644 src/DataSets/Forms/Save.component.js delete mode 100644 src/DataSets/Forms/Sections.component.js delete mode 100644 src/DataSets/Forms/Sharing.component.js delete mode 100644 src/DataSets/List.scss delete mode 100644 src/DataSets/PeriodsDialog.js delete mode 100644 src/DataSets/context.actions.js delete mode 100644 src/DataSets/delete.store.js delete mode 100644 src/DataSets/details.store.js delete mode 100644 src/DataSets/list.actions.js delete mode 100644 src/DataSets/log.js delete mode 100644 src/DataSets/logs.store.js delete mode 100644 src/DataSets/orgUnits.store.js delete mode 100644 src/DataSets/periods.store.js delete mode 100644 src/DataSets/sharing.store.js delete mode 100644 src/ListActionBar/ListActionBar.component.js delete mode 100644 src/LoadingMask/LoadingMask.component.js delete mode 100644 src/LoadingStatus/LoadingStatus.component.js delete mode 100644 src/MultipleDataTable/MultipleDataTable.component.js delete mode 100644 src/MultipleDataTable/MultipleDataTableContextMenu.component.js delete mode 100644 src/MultipleDataTable/MultipleDataTableRow.component.js delete mode 100644 src/MultipleDataTable/MultipleDataTableRow.scss delete mode 100644 src/MultipleDataTable/PopoverNoFlicker.js delete mode 100644 src/Pagination/Pagination.scss delete mode 100644 src/SearchBox/SearchBox.component.js delete mode 100644 src/SessionDialog/SessionDialog.component.js delete mode 100644 src/Settings/Settings.component.js delete mode 100644 src/Snackbar/SnackbarContainer.component.js delete mode 100644 src/Snackbar/snack.actions.js delete mode 100644 src/Snackbar/snack.store.js delete mode 100644 src/Wizard/Wizard.component.js create mode 100644 src/app-config.ts delete mode 100644 src/app.js delete mode 100644 src/components/collapsible-box/CollapsibleBox.js delete mode 100644 src/components/collapsible-box/CollapsibleBox.scss delete mode 100644 src/components/sharing-dialog/Access.jsx delete mode 100644 src/components/sharing-dialog/AutoComplete.jsx delete mode 100644 src/components/sharing-dialog/ConfirmationDialog.jsx delete mode 100644 src/components/sharing-dialog/PermissionOption.jsx delete mode 100644 src/components/sharing-dialog/PermissionPicker.jsx delete mode 100644 src/components/sharing-dialog/Sharing.jsx delete mode 100644 src/components/sharing-dialog/SharingDialog.jsx delete mode 100644 src/components/sharing-dialog/SharingDialogMultiple.jsx delete mode 100644 src/components/sharing-dialog/UserSearch.jsx delete mode 100644 src/components/sharing-dialog/i18n.js delete mode 100644 src/components/sharing-dialog/utils.js delete mode 100644 src/config/periodTypes.json create mode 100644 src/data/api-futures.ts create mode 100644 src/data/repositories/UserD2Repository.ts create mode 100644 src/data/repositories/UserTestRepository.ts create mode 100644 src/domain/entities/Ref.ts create mode 100644 src/domain/entities/User.ts create mode 100644 src/domain/entities/__tests__/User.spec.ts create mode 100644 src/domain/entities/__tests__/userFixtures.ts create mode 100644 src/domain/entities/generic/Collection.ts create mode 100644 src/domain/entities/generic/Either.ts create mode 100644 src/domain/entities/generic/Future.ts create mode 100644 src/domain/entities/generic/HashMap.ts create mode 100644 src/domain/entities/generic/Rec.ts create mode 100644 src/domain/entities/generic/Struct.ts create mode 100644 src/domain/entities/generic/__tests/Collection.spec.ts create mode 100644 src/domain/entities/generic/__tests/Future.spec.ts create mode 100644 src/domain/entities/generic/__tests/HashMap.spec.ts create mode 100644 src/domain/entities/generic/__tests/Rec.spec.ts create mode 100644 src/domain/entities/generic/__tests/Struct.spec.ts create mode 100644 src/domain/repositories/UserRepository.ts create mode 100644 src/domain/usecases/GetCurrentUserUseCase.ts create mode 100644 src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts delete mode 100644 src/forms/DataInputPeriods.component.js delete mode 100644 src/forms/DataSetElementCategoryComboSelectionDialog.component.js delete mode 100644 src/forms/Dropdown.component.js delete mode 100644 src/forms/FormHelpers.js delete mode 100644 src/forms/GreyFieldsTable.component.js delete mode 100644 src/forms/MultiSelect.component.js delete mode 100644 src/forms/RichDropdown.component.js delete mode 100644 src/forms/TimePeriodSelector.component.js delete mode 100644 src/forms/YearlyDateSelector.component.js delete mode 100644 src/forms/form-fields/check-box.js delete mode 100644 src/forms/form-fields/date-select.js delete mode 100644 src/forms/form-fields/drop-down-async.js delete mode 100644 src/forms/form-fields/drop-down.js delete mode 100644 src/forms/form-fields/helpers/QuickAddLink.component.js delete mode 100644 src/forms/form-fields/helpers/RefreshMask.component.js delete mode 100644 src/forms/form-fields/icon-picker.js delete mode 100644 src/forms/form-fields/multi-select.js delete mode 100644 src/forms/form-fields/multi-toggle.js delete mode 100644 src/forms/form-fields/text-field.js delete mode 100644 src/i18n/i18n_module_ar.properties delete mode 100644 src/i18n/i18n_module_en.properties delete mode 100644 src/i18n/i18n_module_es.properties delete mode 100644 src/i18n/i18n_module_fr.properties delete mode 100644 src/models/CustomForm.js delete mode 100644 src/models/DataSetStore.js delete mode 100644 src/models/ProjectService.js delete mode 100644 src/models/Section.js delete mode 100644 src/models/Settings.js delete mode 100644 src/models/Sharing.js delete mode 100644 src/models/custom-form-resources/script.js delete mode 100644 src/models/custom-form-resources/sectionForm.vm delete mode 100644 src/models/custom-form-resources/style.css delete mode 100644 src/models/data-periods.js delete mode 100644 src/models/dataset.js delete mode 100644 src/router.js delete mode 100644 src/scripts/README.md create mode 100644 src/scripts/example.ts delete mode 100644 src/scripts/migrate-datasets-input-periods.ts create mode 100644 src/scripts/tsconfig.json create mode 100644 src/tests/setup.js create mode 100644 src/types/d2-api.ts create mode 100644 src/types/d2-ui.d.ts create mode 100644 src/types/d2.d.ts create mode 100644 src/types/declarations.d.ts create mode 100644 src/types/i18n.d.ts delete mode 100644 src/utils/Dhis2Helpers.js delete mode 100644 src/utils/ObservedEvents.mixin.js delete mode 100644 src/utils/ObserverRegistry.mixin.js create mode 100644 src/utils/i18n-typed.ts create mode 100644 src/utils/i18n.ts delete mode 100644 src/utils/lodash-mixins.js create mode 100644 src/utils/tests.tsx create mode 100644 src/utils/ts-utils.ts create mode 100644 src/utils/uid.ts create mode 100644 src/vite-env.d.ts create mode 100644 src/webapp/components/card-grid/CardGrid.tsx create mode 100644 src/webapp/components/card-grid/MenuCard.tsx create mode 100644 src/webapp/components/page-header/PageHeader.tsx create mode 100644 src/webapp/components/share/Share.tsx create mode 100644 src/webapp/components/share/logo-eyeseetea.png create mode 100644 src/webapp/contexts/app-context.ts create mode 100644 src/webapp/main.tsx create mode 100644 src/webapp/pages/Router.tsx create mode 100644 src/webapp/pages/app/App.css create mode 100644 src/webapp/pages/app/App.tsx create mode 100644 src/webapp/pages/app/Dhis2App.tsx create mode 100644 src/webapp/pages/app/__tests__/App.spec.tsx create mode 100644 src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap rename src/{App/app.theme.js => webapp/pages/app/themes/dhis2-legacy.theme.ts} (68%) rename src/{App/dhis2.theme.js => webapp/pages/app/themes/dhis2.theme.ts} (92%) create mode 100644 src/webapp/pages/example/ExamplePage.tsx create mode 100644 src/webapp/pages/example/__tests__/ExamplePage.spec.tsx create mode 100644 src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap create mode 100644 src/webapp/pages/landing/LandingPage.tsx delete mode 100644 test/app/App.test.js delete mode 100644 test/tests.js create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts delete mode 100644 webpack.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 2a6c007de..000000000 --- a/.babelrc +++ /dev/null @@ -1,33 +0,0 @@ -{ - "presets": ["stage-0", "react"], - "plugins": [ - "transform-class-properties", - "transform-es2015-template-literals", - "transform-es2015-literals", - "transform-es2015-function-name", - "transform-es2015-arrow-functions", - "transform-es2015-block-scoped-functions", - "transform-es2015-classes", - "transform-es2015-object-super", - "transform-es2015-shorthand-properties", - "transform-es2015-computed-properties", - "transform-es2015-for-of", - "transform-es2015-sticky-regex", - "transform-es2015-unicode-regex", - "check-es2015-constants", - "transform-es2015-spread", - "transform-es2015-parameters", - "transform-es2015-destructuring", - "transform-es2015-block-scoping", - "transform-es2015-typeof-symbol", - ["transform-regenerator", { "async": false, "asyncGenerators": false }] - ], - "env": { - "test": { - "presets": ["stage-0", "react", "es2015"], - "plugins": [ - "transform-class-properties" - ] - } - } -} diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..cedbd17b4 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,5 @@ +> 0.5% +last 2 versions +Firefox ESR +ie 11 +not dead diff --git a/.env b/.env new file mode 100644 index 000000000..f03229f7d --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +BROWSER=false +VITE_PORT=8081 + +VITE_DHIS2_BASE_URL=https://dev.eyeseetea.com/play +VITE_DHIS2_AUTH='admin:district' diff --git a/.env.production b/.env.production new file mode 100644 index 000000000..ba7cc18de --- /dev/null +++ b/.env.production @@ -0,0 +1 @@ +GENERATE_SOURCEMAP=false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..f00f19ece --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +/**/*.d.ts +/src/locales diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index aa9a5d7f4..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,16 +0,0 @@ -/** @format */ - -module.exports = { - extends: ["react-app", "prettier"], - rules: { - "no-console": "off", - "no-unused-vars": ["error", { argsIgnorePattern: "^_", ignoreRestSiblings: true }], - "jsx-a11y/anchor-is-valid": "off", - }, - settings: { - react: { - pragma: "React", - version: "16.6.0", - }, - }, -}; diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..f6eeb38aa --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,77 @@ +{ + "extends": [ + "react-app", + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:testing-library/react" + ], + "parser": "@typescript-eslint/parser", + "ignorePatterns": ["src/**/snapshots/*.ts"], + "rules": { + "no-console": ["warn", { "allow": ["debug", "warn", "error"] }], + "prefer-const": "warn", + "@typescript-eslint/camelcase": "off", + "@typescript-eslint/explicit-function-return-type": ["off"], + "@typescript-eslint/no-this-alias": ["off"], + "@typescript-eslint/no-unnecessary-type-constraint": ["off"], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ], + "@typescript-eslint/no-unused-expressions": ["warn"], + "react/prop-types": "off", + "react/display-name": "off", + "react/react-in-jsx-scope": "off", + "no-unused-expressions": "off", + "no-useless-concat": "off", + "no-useless-constructor": "off", + "no-unexpected-multiline": "off", + "default-case": "off", + "array-callback-return": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/indent": "off", + "@typescript-eslint/member-delimiter-style": "off", + "@typescript-eslint/type-annotation-spacing": "off", + "@typescript-eslint/no-misused-promises": "warn", + "no-use-before-define": "off", + "no-debugger": "warn", + "no-extra-semi": "off", + "no-mixed-spaces-and-tabs": "off", + "no-useless-rename": "off", + "react-hooks/rules-of-hooks": "warn", + "react-hooks/exhaustive-deps": "warn", + "testing-library/await-async-query": "error", + "testing-library/no-await-sync-query": "error", + "testing-library/prefer-screen-queries": "off", + "testing-library/no-debugging-utils": "off", + "testing-library/no-dom-import": "off", + "no-relative-import-paths/no-relative-import-paths": [ + "error", + { "allowSameFolder": true, "rootDir": "src", "prefix": "$" } + ] + }, + "plugins": ["@typescript-eslint", "react-hooks", "no-relative-import-paths", "unused-imports"], + "env": {}, + "parserOptions": { + "project": "./tsconfig.json" + }, + "settings": { + "react": { + "pragma": "React", + "version": "16.6.0" + } + } +} diff --git a/.githooks/dep-check b/.githooks/dep-check new file mode 100644 index 000000000..fcfd4bac6 --- /dev/null +++ b/.githooks/dep-check @@ -0,0 +1,10 @@ +#!/bin/sh + +function changed { + git diff --name-only HEAD@{1} HEAD | grep "^$1" > /dev/null 2>&1 +} + +if changed 'yarn.lock'; then + echo "Lockfile changes detected. Installing updates..." + yarn install +fi diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..a23025388 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,9 @@ +### :pushpin: References + +- **Issue:** Closes #? + +### :memo: Implementation + +### :video_camera: Screenshots/Screen capture + +### :fire: Notes to the tester diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..87034eea3 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,47 @@ +name: Application testing +on: + push: + workflow_dispatch: +jobs: + unit-tests: + name: Unit tests + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install apt libraries + run: sudo apt install gettext -y + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: "18" + + - name: Install yarn + run: npm install -g yarn + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - name: Cache yarn dependencies + uses: actions/cache@v2 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn install --frozen-lockfile --silent + + - name: Install translations + run: yarn localize + + - name: Run jest tests + run: yarn test + + - name: Build typescript + run: npx tsc diff --git a/.gitignore b/.gitignore index d41d25089..59a6f1762 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,42 @@ -.DS_STORE -node_modules -*~ -*.pyc -static -.grunt -_SpecRunner.html -__benchmarks__ -build/ -coverage/ -.module-cache -*.gem -docs/.bundle -docs/code -docs/_site -docs/.sass-cache -docs/js/* -docs/downloads -docs/vendor/bundle -examples/shared/*.js -examples/**/bundle.js -test/the-files-to-test.generated.js -*.log* -chrome-user-data +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules + +# testing +/coverage + +# production +manifest.webapp +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local *.sublime-project *.sublime-workspace -.idea -*.iml -.vscode *.code-workspace -manifest.webapp +*.zip + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +src/locales/ +src/react-app.d.ts +src/react-app-env.d.ts +bak +.eslintcache + +# cypress +cypress/screenshots/ +cypress/videos/ +cypress/fixtures/ + +# IntelliJ +.idea/* + +docs/ diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 000000000..31354ec13 --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/post-merge b/.husky/post-merge new file mode 100644 index 000000000..d3b6c1092 --- /dev/null +++ b/.husky/post-merge @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +./.githooks/dep-check diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 000000000..085ecbb8c --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn prettify && yarn lint && yarn update-po && yarn test diff --git a/.nvmrc b/.nvmrc index 9e64b9019..07c7cf304 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v8.17.0 +v18.14.2 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..b6fcbefa8 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +build +node_modules +*.min.js +*.min.css diff --git a/.prettierrc.js b/.prettierrc.js index adab4fdae..ad031f4ac 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -6,13 +6,13 @@ module.exports = { useTabs: false, semi: true, singleQuote: false, - trailingComma: 'es5', + trailingComma: "es5", bracketSpacing: true, jsxBracketSameLine: false, - arrowParens: 'avoid', + arrowParens: "avoid", rangeStart: 0, rangeEnd: Infinity, - proseWrap: 'preserve', + proseWrap: "preserve", requirePragma: false, insertPragma: false, -} +}; diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..3a97d81d2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,41 @@ +language: node_js +node_js: + - 12.13.0 +dist: bionic +cache: + directories: + - "$HOME/.cache" +before_install: + - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p + # Install python dependencies + - sudo apt-get update + - sudo apt-get install python3 python python3-setuptools docker.io docker-compose + # Install d2-docker + - git clone https://github.com/EyeSeeTea/d2-docker.git + - cd d2-docker/ + - sudo python3 setup.py install + - d2-docker --help + # Hack to not be prompted in the terminal + - sudo apt-get remove golang-docker-credential-helpers + # Start docker service + - sudo systemctl unmask docker.service + - sudo systemctl unmask docker.socket + - sudo systemctl start docker.service + # Login to docker + - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + # Start docker service + - d2-docker start eyeseetea/dhis2-data:2.30-sierra-leone -d --port 8080 +install: + - yarn install --frozen-lockfile + - yarn cy:verify + - yarn build +script: + - PORT=8081 REACT_APP_DHIS2_BASE_URL=http://localhost:8080 REACT_APP_CYPRESS=true yarn start & + - yarn wait-on http-get://localhost:8081 + - yarn wait-on http-get://localhost:8080 + - CYPRESS_EXTERNAL_API=http://localhost:8080 CYPRESS_ROOT_URL=http://localhost:8081 yarn cy:e2e:run --record --key $CYPRESS_KEY + - kill $(jobs -p) || true +addons: + apt: + packages: + - libgconf-2-4 diff --git a/.vite/deps_temp_2fce2642/package.json b/.vite/deps_temp_2fce2642/package.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/.vite/deps_temp_2fce2642/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..be9f93bd7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.preferences.importModuleSpecifier": "non-relative" +} diff --git a/license.txt b/LICENSE similarity index 99% rename from license.txt rename to LICENSE index 20d40b6bc..f288702d2 100644 --- a/license.txt +++ b/LICENSE @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. \ No newline at end of file +. diff --git a/README.md b/README.md index 4d282f5df..44ef380e0 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,77 @@ -# dataset-configuration - -A DHIS2 webapp for managing dataset objects. - ## Setup ``` -$ nvm use +$ nvm use # uses node version in .nvmrc $ yarn install ``` ## Build -Create DHIS2 app zip: +Build a production distributable DHIS2 zip file: ``` $ yarn build ``` -## Start a development server +## Development -Clone the repository and execute: +Copy `.env` to `.env.local` and configure DHIS2 instance to use. Then start the development server: ``` $ yarn start ``` -## Use the development version of d2-ui +Now in your browser, go to `http://localhost:8081`. -Clone the d2-ui repository, checkout the branch you want to test and create a link using `yarn`: +## Tests ``` -$ git clone https://github.com/eyeseetea/d2-ui -$ cd d2-ui -$ git checkout BRANCH_TO_TEST -$ yarn install && yarn build -$ yarn link +$ yarn test ``` -And now, on `dataset-configuration`, run: +## Some development tips -``` -$ yarn link d2-ui -``` +### Clean architecture folder structure -## Enable CORS +- `src/domain`: Domain layer of the app (entities, use cases, repository definitions) +- `src/data`: Data of the app (repository implementations) +- `src/webapp/pages`: Main React components. +- `src/webapp/components`: React components. +- `src/utils`: Misc utilities. +- `i18n/`: Contains literal translations (gettext format) +- `public/`: General non-React webapp resources. -To set up your DHIS2 instance to work with the development service you will need to add the development servers address to the CORS whitelist. You can do this within the DHIS2 Settings app under the _access_ tab. On the access tab add `http://localhost:8081` to the CORS Whitelist. +## Data structures -The starter app will look for a DHIS 2 development instance configuration in -`$DHIS2_HOME/config`. So for example if your `DHIS2_HOME` environment variable is -set to `~/.dhis2`, the starter app will look for `~/.dhis2/config.js` and then -`~/.dhis2/config.json` and load the first one it can find. You can use `config/config.template.json` as reference. +- `Future.ts`: Async values, similar to promises, but cancellables and with type-safe errors. +- `Collection.ts`: Similar to Lodash, provides a wrapper over JS arrays. +- `Obj.ts`: Similar to Lodash, provides a wrapper over JS objects. +- `HashMap.ts`: Similar to ES6 map, but immutable. +- `Struct.ts`: Base class for typical classes with attributes. Features: create, update. +- `Either.ts`: Either a success value or an error. -The config should export an object with the properties `baseUrl` and -`authorization`, where authorization is the base64 encoding of your username and -password. You can obtain this value by opening the console in your browser and -typing `btoa('user:pass')`. +## Docs -If no config is found, the default `baseUrl` is `http://localhost:8080/` and -the default username and password is `admin` and `district`, respectively. +We use [TypeDoc](https://typedoc.org/example/): -See `webpack.config.js` for details. +``` +$ yarn generate-docs +``` + +### i18n -## Frameworks/libraries +Update i18n .po files from `i18n.t(...)` calls in the source code: -### React +``` +$ yarn localize +``` -[React](https://facebook.github.io/react/) is the _view_ part of the front-end applications, it has a component based architecture. At DHIS2 we also use JSX syntax that is generally used with React. +### Scripts -### d2 / d2-ui +Check the example script, entry `"script-example"`in `package.json`->scripts and `src/scripts/example.ts`. -[d2](https://github.com/dhis2/d2) is the DHIS2 abstraction library that allows you to communicate with the DHIS2 api in a programatic way. [d2-ui](https://github.com/dhis2/d2-ui) is the ui component library that is build on top of d2 to allow reuse of common components that are used within DHIS2 applications. d2-ui also contains our own application wiring code through its _stores_ and _actions_. +### Misc Notes -### material-ui +- Requests to DHIS2 will be transparently proxied (see `vite.config.ts` -> `server.proxy`) from `http://localhost:8081/dhis2/xyz` to `${VITE_DHIS2_BASE_URL}/xyz`. This prevents CORS and cross-domain problems. -d2-ui makes use of [material-ui](http://www.material-ui.com) for rendering more basic components like TextFields and Lists. It is therefore quite useful to look into this library too when building DHIS2 apps and making use of d2-ui. +- You can use `.env` variables within the React app: `const value = import.meta.env.NAME;` diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..5824cd5e7 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["@babel/typescript", ["babel-preset-react-app", { runtime: "automatic" }]], +}; diff --git a/config/config.template.json b/config/config.template.json deleted file mode 100644 index 52f6faacf..000000000 --- a/config/config.template.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "baseUrl": "http://localhost:8080", - "authorization": "Basic YWRtaW46ZGlzdHJpY3Q=" -} diff --git a/config/fileMock.js b/config/fileMock.js new file mode 100644 index 000000000..e92956518 --- /dev/null +++ b/config/fileMock.js @@ -0,0 +1,3 @@ +// Turns file imports into dummy objects + +module.exports = "test-file-stub"; diff --git a/config/setup.js b/config/setup.js deleted file mode 100644 index b4ac84ed5..000000000 --- a/config/setup.js +++ /dev/null @@ -1,25 +0,0 @@ -/* istanbul ignore next */ -global.chai = require("chai"); -global.sinon = require("sinon"); - -// Chai plugins -global.chai.use(require("sinon-chai")); - -global.expect = global.chai.expect; - -var jsdom = require("jsdom").jsdom; - -var exposedProperties = ["window", "navigator", "document"]; - -global.document = jsdom(""); -global.window = document.defaultView; -Object.keys(document.defaultView).forEach(property => { - if (typeof global[property] === "undefined") { - exposedProperties.push(property); - global[property] = document.defaultView[property]; - } -}); - -global.navigator = { - userAgent: "node.js", -}; diff --git a/config/styleMock.js b/config/styleMock.js new file mode 100644 index 000000000..efa0d3ce9 --- /dev/null +++ b/config/styleMock.js @@ -0,0 +1,3 @@ +// Turns style imports into empty objects + +module.exports = {}; diff --git a/config/testHelpers.js b/config/testHelpers.js new file mode 100644 index 000000000..6735d324a --- /dev/null +++ b/config/testHelpers.js @@ -0,0 +1,8 @@ +export function getD2Stub() { + return { + system: { + systemInfo: {}, + }, + currentUser: {}, + }; +} diff --git a/config/testSetup.ts b/config/testSetup.ts new file mode 100644 index 000000000..16018ff64 --- /dev/null +++ b/config/testSetup.ts @@ -0,0 +1,13 @@ +import { TextDecoder, TextEncoder } from "util"; + +global.console = { + error: console.error, + info: console.info, + log: jest.fn(), + warn: jest.fn(), + debug: jest.fn(), +}; + +// Polyfill for encoding which isn't present globally in jsdom +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder; diff --git a/delete-identifier.js b/delete-identifier.js new file mode 100644 index 000000000..841915db9 --- /dev/null +++ b/delete-identifier.js @@ -0,0 +1,48 @@ +const fs = require('fs'); +const path = require('path'); + +// Función que elimina archivos con extensión .Identifier +function deleteIdentifierFiles(dir) { + // Leer el contenido del directorio actual + fs.readdir(dir, (err, files) => { + if (err) { + console.error(`Error al leer el directorio: ${dir}`, err); + return; + } + + // Iterar sobre cada archivo o subcarpeta + files.forEach((file) => { + const filePath = path.join(dir, file); + + // Obtener información del archivo + fs.stat(filePath, (err, stats) => { + if (err) { + console.error(`Error al obtener información del archivo: ${filePath}`, err); + return; + } + + // Si es un directorio, llamar a la función recursivamente + if (stats.isDirectory()) { + deleteIdentifierFiles(filePath); + } else { + // Si es un archivo con extensión .Identifier, eliminarlo + if (path.extname(file) === '.Identifier') { + fs.unlink(filePath, (err) => { + if (err) { + console.error(`Error al eliminar archivo: ${filePath}`, err); + } else { + console.log(`Archivo eliminado: ${filePath}`); + } + }); + } + } + }); + }); + }); +} + +// Ruta del directorio base +const directoryPath = '/home/eduardo/eyeseetea/projects/dataset-configuration'; + +// Llamada a la función para eliminar los archivos .Identifier +deleteIdentifierFiles(directoryPath); diff --git a/i18n/en.pot b/i18n/en.pot new file mode 100644 index 000000000..759b1931f --- /dev/null +++ b/i18n/en.pot @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"POT-Creation-Date: 2024-06-26T10:58:19.149Z\n" +"PO-Revision-Date: 2024-06-26T10:58:19.149Z\n" + +msgid "Add" +msgstr "" + +msgid "List" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Hello {{name}}" +msgstr "" + +msgid "Detail page" +msgstr "" + +msgid "Section" +msgstr "" diff --git a/i18n/es.po b/i18n/es.po new file mode 100644 index 000000000..416c26cb0 --- /dev/null +++ b/i18n/es.po @@ -0,0 +1,30 @@ +msgid "" +msgstr "" +"Project-Id-Version: i18next-conv\n" +"POT-Creation-Date: 2024-06-26T10:58:19.149Z\n" +"PO-Revision-Date: 2018-10-25T09:02:35.143Z\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +msgid "Add" +msgstr "Añadir" + +msgid "List" +msgstr "Listar" + +msgid "Back" +msgstr "Volver" + +msgid "Help" +msgstr "Ayuda" + +msgid "Hello {{name}}" +msgstr "Hola {{name}}" + +msgid "Detail page" +msgstr "" + +msgid "Section" +msgstr "Sección" diff --git a/includes/material-design-icons/material-icons.css b/includes/material-design-icons/material-icons.css deleted file mode 100644 index 43c889d6f..000000000 --- a/includes/material-design-icons/material-icons.css +++ /dev/null @@ -1,38 +0,0 @@ -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url(MaterialIcons-Regular.eot); /* For IE6-8 */ - src: local('Material Icons'), - local('MaterialIcons-Regular'), - url(MaterialIcons-Regular.woff2) format('woff2'), - url(MaterialIcons-Regular.woff) format('woff'), - url(MaterialIcons-Regular.ttf) format('truetype'); -} - -.material-icons { - font-family: 'Material Icons'; - font-weight: normal; - font-style: normal; - font-size: 24px; /* Preferred icon size */ - display: inline-block; - width: 1em; - height: 1em; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; - - /* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; - /* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; - - /* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; - - /* Support for IE. */ - font-feature-settings: 'liga'; -} diff --git a/includes/roboto-font.css b/includes/roboto-font.css deleted file mode 100644 index 0f1191af7..000000000 --- a/includes/roboto-font.css +++ /dev/null @@ -1,36 +0,0 @@ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v15/Jzo62I39jc0gQRrbndN6nfesZW2xOQ-xsNqO47m55DA.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v15/RxZJdnzeo3R5zSexge8UUaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIqCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); -} diff --git a/index.html b/index.html index 3014df45f..cce181620 100644 --- a/index.html +++ b/index.html @@ -2,19 +2,28 @@ - DataSet Configuration + + + + - - + + + + + + Project Configuration app - -
    - - + +
    + diff --git a/metadata/attributes.json b/metadata/attributes.json deleted file mode 100644 index 6e20c16ef..000000000 --- a/metadata/attributes.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "attributes": [ - { - "categoryAttribute": false, - "categoryOptionAttribute": false, - "categoryOptionComboAttribute": false, - "categoryOptionGroupAttribute": false, - "categoryOptionGroupSetAttribute": false, - "code": "GL_CREATED_BY_DATASET_CONFIGURATION", - "constantAttribute": false, - "created": "2018-05-24T10:15:13.784", - "dataElementAttribute": false, - "dataElementGroupAttribute": false, - "dataElementGroupSetAttribute": false, - "dataSetAttribute": true, - "documentAttribute": false, - "id": "wA748YSs3Qk", - "indicatorAttribute": false, - "indicatorGroupAttribute": false, - "lastUpdated": "2018-05-24T10:15:13.784", - "legendSetAttribute": false, - "mandatory": false, - "name": "Created by Dataset Configuration", - "optionAttribute": false, - "optionSetAttribute": false, - "organisationUnitAttribute": false, - "organisationUnitGroupAttribute": false, - "organisationUnitGroupSetAttribute": false, - "programAttribute": false, - "programIndicatorAttribute": false, - "programStageAttribute": false, - "sectionAttribute": false, - "sharing": { - "external": false, - "userGroups": {}, - "users": {} - }, - "sqlViewAttribute": false, - "trackedEntityAttributeAttribute": false, - "trackedEntityTypeAttribute": false, - "translations": [], - "unique": false, - "userAttribute": false, - "userGroupAttribute": false, - "validationRuleAttribute": false, - "validationRuleGroupAttribute": false, - "valueType": "BOOLEAN" - }, - { - "categoryAttribute": false, - "categoryOptionAttribute": false, - "categoryOptionComboAttribute": false, - "categoryOptionGroupAttribute": false, - "categoryOptionGroupSetAttribute": false, - "code": "GL_INTERVAL_DATES", - "constantAttribute": false, - "created": "2021-11-29T13:27:34.662", - "createdBy": { - "displayName": "Adrian Quintana", - "id": "GiwOigBRBoc", - "name": "Adrian Quintana", - "username": "EyeSeeTea" - }, - "dataElementAttribute": false, - "dataElementGroupAttribute": false, - "dataElementGroupSetAttribute": false, - "dataSetAttribute": true, - "description": "Format: YYYYYMMDD-YYYYMMDD", - "documentAttribute": false, - "id": "YyqT5dfIwL7", - "indicatorAttribute": false, - "indicatorGroupAttribute": false, - "lastUpdated": "2021-11-29T13:27:34.662", - "lastUpdatedBy": { - "displayName": "Adrian Quintana", - "id": "GiwOigBRBoc", - "name": "Adrian Quintana", - "username": "EyeSeeTea" - }, - "legendSetAttribute": false, - "mandatory": false, - "name": "Data Input Dates", - "optionAttribute": false, - "optionSetAttribute": false, - "organisationUnitAttribute": false, - "organisationUnitGroupAttribute": false, - "organisationUnitGroupSetAttribute": false, - "programAttribute": false, - "programIndicatorAttribute": false, - "programStageAttribute": false, - "sectionAttribute": false, - "sharing": { - "external": false, - "owner": "GiwOigBRBoc", - "public": "rw------", - "userGroups": {}, - "users": {} - }, - "sqlViewAttribute": false, - "trackedEntityAttributeAttribute": false, - "trackedEntityTypeAttribute": false, - "translations": [], - "unique": false, - "userAttribute": false, - "userGroupAttribute": false, - "validationRuleAttribute": false, - "validationRuleGroupAttribute": false, - "valueType": "TEXT" - }, - { - "categoryAttribute": false, - "categoryOptionAttribute": false, - "categoryOptionComboAttribute": false, - "categoryOptionGroupAttribute": false, - "categoryOptionGroupSetAttribute": false, - "code": "GL_OUTCOME_DATES", - "constantAttribute": false, - "created": "2019-05-07T09:10:04.923", - "dataElementAttribute": false, - "dataElementGroupAttribute": false, - "dataElementGroupSetAttribute": false, - "dataSetAttribute": true, - "documentAttribute": false, - "id": "mrpeo3N3qcy", - "indicatorAttribute": false, - "indicatorGroupAttribute": false, - "lastUpdated": "2019-08-05T01:20:50.492", - "legendSetAttribute": false, - "mandatory": false, - "name": "Outcome Dates", - "optionAttribute": false, - "optionSetAttribute": false, - "organisationUnitAttribute": false, - "organisationUnitGroupAttribute": false, - "organisationUnitGroupSetAttribute": false, - "programAttribute": false, - "programIndicatorAttribute": false, - "programStageAttribute": false, - "sectionAttribute": false, - "sharing": { - "external": false, - "userGroups": {}, - "users": {} - }, - "sqlViewAttribute": false, - "trackedEntityAttributeAttribute": false, - "trackedEntityTypeAttribute": false, - "translations": [], - "unique": false, - "userAttribute": false, - "userGroupAttribute": false, - "validationRuleAttribute": false, - "validationRuleGroupAttribute": false, - "valueType": "TEXT" - }, - { - "categoryAttribute": false, - "categoryOptionAttribute": false, - "categoryOptionComboAttribute": false, - "categoryOptionGroupAttribute": false, - "categoryOptionGroupSetAttribute": false, - "code": "GL_OUTPUT_DATES", - "constantAttribute": false, - "created": "2019-05-07T09:09:26.574", - "dataElementAttribute": false, - "dataElementGroupAttribute": false, - "dataElementGroupSetAttribute": false, - "dataSetAttribute": true, - "documentAttribute": false, - "id": "fhTYUbHAWiX", - "indicatorAttribute": false, - "indicatorGroupAttribute": false, - "lastUpdated": "2019-08-05T01:20:50.492", - "legendSetAttribute": false, - "mandatory": false, - "name": "Output Dates", - "optionAttribute": false, - "optionSetAttribute": false, - "organisationUnitAttribute": false, - "organisationUnitGroupAttribute": false, - "organisationUnitGroupSetAttribute": false, - "programAttribute": false, - "programIndicatorAttribute": false, - "programStageAttribute": false, - "sectionAttribute": false, - "sharing": { - "external": false, - "userGroups": {}, - "users": {} - }, - "sqlViewAttribute": false, - "trackedEntityAttributeAttribute": false, - "trackedEntityTypeAttribute": false, - "translations": [], - "unique": false, - "userAttribute": false, - "userGroupAttribute": false, - "validationRuleAttribute": false, - "validationRuleGroupAttribute": false, - "valueType": "TEXT" - } - ] -} diff --git a/package.json b/package.json index e016602d7..f9d778a65 100644 --- a/package.json +++ b/package.json @@ -1,122 +1,127 @@ { "name": "d2-dataset-configuration", + "description": "Project Configuration app", "version": "2.6.4", - "description": "Dataset Configuration User Interface", - "main": "src/index.html", - "scripts": { - "coverage": "babel-node node_modules/.bin/isparta cover --root ./src --report text --report html --report lcov node_modules/mocha/bin/_mocha -- --reporter dot --require config/setup.js --recursive test", - "prebuild": "rm -rf build && mkdir build && d2-manifest package.json manifest.webapp", - "build": "webpack && cp -a includes build/ && cp -a src/i18n build/ && cp index.html build/ && cp icon.png build/ && cp node_modules/jquery/dist/jquery.min.js build/ && cp node_modules/babel-polyfill/dist/polyfill.min.js build/ && cp manifest.webapp build/ && rm -f dataset-configuration.zip && cd build && zip --quiet -r ../dataset-configuration.zip *", - "test": "mocha --reporter spec --compilers js:babel-core/register --require config/setup.js --recursive test", - "test-watch": "mocha --reporter spec --compilers js:babel-core/register --require config/setup.js --recursive test --watch", - "lint": "eslint --fix src", - "validate": "npm ls", - "prettify": "prettier \"{src,config}/**/*.{js,jsx,ts,tsx,json,css}\" --write", - "prestart": "d2-manifest package.json manifest.webapp", - "start": "webpack-dev-server" - }, - "keywords": [ - "DHIS2", - "App" - ], - "author": { - "name": "EyeSeeTea Team", - "email": "hello@eyeseetea.com", - "url": "https://github.com/EyeSeeTea/dataset-configuration" - }, "license": "GPL-3.0", - "dependencies": { - "@material-ui/core": "^4.6.0", - "@material-ui/icons": "^4.5.1", - "@material-ui/styles": "^4.6.0", - "bluebird": "^3.5.0", - "downshift": "^3.3.4", - "htmlencode": "^0.0.4", - "jquery": "^3.3.1", - "json-loader": "^0.5.4", - "nano-memoize": "^1.1.3", - "prop-types": "^15.7.1", - "raw-loader": "^0.5.1", - "react-router": "^3.2.5", - "react-scroll-to-component": "^1.0.2", - "rxjs-compat": "^6.5.3", - "susy": "^2.2.12", - "velocityjs": "^1.0.0" - }, - "devDependencies": { - "babel-core": "^6.7.2", - "babel-eslint": "9.x", - "babel-loader": "^6.2.4", - "babel-polyfill": "^6.7.2", - "babel-preset-es2015": "^6.6.0", - "babel-preset-react": "^6.5.0", - "babel-preset-stage-0": "^6.5.0", - "chai": "^3.5.0", - "classnames": "^2.2.5", - "css-loader": "^0.23.1", - "d2": "26.2.2", - "d2-manifest": "^1.0.0", - "d2-ui": "github:EyeSeeTea/d2-ui#dataset-configuration", - "d2-utilizr": "^0.2.9", - "d3-color": "1.0.2", - "eslint": "^5.12.1", - "eslint-config-prettier": "^3.6.0", - "eslint-config-react-app": "^3.0.8", - "eslint-plugin-flowtype": "2.x", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-jsx-a11y": "^6.2.0", - "eslint-plugin-react": "^7.12.4", - "http-proxy": "git+https://github.com/nicolayr/node-http-proxy.git", - "immutability-helper": "^2.1.2", - "isparta": "^4.0.0", - "jsdom": "^9.0.0", - "loglevel": "^1.4.0", - "material-ui": "^0.20.2", - "material-ui-scrollable-tabs": "^2.0.0", - "mocha": "^3.2.0", - "moment": "^2.18.1", - "node-sass": "^4.5.3", - "prettier": "^1.16.4", - "react": "16.12.0", - "react-dom": "^16.9.0", - "react-json-view": "^1.19.1", - "react-router-dom": "^5.0.1", - "react-steps": "^0.0.5", - "request": "^2.34", - "request-promise": "^4.2.2", - "rx": "^4.1.0", - "sass-loader": "^3.2.0", - "sinon": "^1.17.3", - "sinon-chai": "^2.8.0", - "style-loader": "^0.13.0", - "webpack": "^1.12.14", - "webpack-dev-server": "^1.14.1", - "webpack-visualizer-plugin": "^0.1.5" - }, - "resolutions": { - "node-sass/**/fstream": "^1.0.12", - "node-sass/**/tar": "^2.2.2" - }, - "pre-commit": [ - "test", - "lint", - "validate" - ], - "directories": { - "test": "test" - }, + "author": "EyeSeeTea team", + "homepage": ".", "repository": { "type": "git", "url": "git+https://github.com/EyeSeeTea/dataset-configuration.git" }, - "bugs": { - "url": "https://github.com/EyeSeeTea/dataset-configuration/issues" + "dependencies": { + "$": "link:./src", + "@dhis2/app-runtime": "2.8.0", + "@dhis2/d2-i18n": "1.1.0", + "@dhis2/d2-i18n-extract": "1.0.8", + "@dhis2/d2-i18n-generate": "1.2.0", + "@dhis2/ui": "6.12.0", + "@eyeseetea/d2-api": "1.16.0-beta.9", + "@eyeseetea/d2-ui-components": "2.9.0-beta.3", + "@material-ui/core": "4.12.4", + "@material-ui/icons": "4.11.3", + "@material-ui/lab": "4.0.0-alpha.60", + "@material-ui/styles": "4.11.5", + "classnames": "2.3.1", + "d2": "31.10.2", + "d2-manifest": "1.0.0", + "eslint-plugin-no-relative-import-paths": "^1.5.3", + "font-awesome": "4.7.0", + "purify-ts": "1.2.0", + "purify-ts-extra-codec": "0.6.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "5.2.0", + "real-cancellable-promise": "^1.1.2", + "styled-components": "6.1.11", + "styled-jsx": "^5.1.6", + "typed-immutable-map": "^0.1.1", + "zustand": "^4.3.7" + }, + "devDependencies": { + "@babel/core": "^7.0.0-0", + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@types/classnames": "2.3.1", + "@types/isomorphic-fetch": "^0.0.36", + "@types/material-ui": "^0.21.12", + "@types/node": "18", + "@types/node-localstorage": "^1.3.0", + "@types/prettier": "^2.7.3", + "@types/react": "^18.2.21", + "@types/react-dom": "^18.2.7", + "@types/react-router-dom": "5.3.3", + "@types/styled-components": "5.1.24", + "@vitejs/plugin-react": "^3.1.0", + "@vitest/coverage-v8": "^0.32.4", + "bundle-phobia-cli": "^0.14.14", + "cmd-ts": "^0.12.1", + "eslint": "^8.37.0", + "eslint-config-react-app": "7.1.0-next.14", + "eslint-plugin-testing-library": "^5.11.1", + "eslint-plugin-unused-imports": "^2.0.0", + "expect-type": "^0.15.0", + "graceful-fs": "^4.2.11", + "husky": "7.0.4", + "jsdom": "^21.1.1", + "node-stdlib-browser": "^1.2.0", + "prettier": "^2.8.7", + "sanitize-filename": "^1.6.3", + "source-map-explorer": "^2.5.3", + "ts-node": "^10.9.1", + "ts-prune": "^0.10.3", + "typedoc": "^0.25.1", + "typescript": "5.2.2", + "vite": "^4.2.0", + "vite-bundle-visualizer": "^0.6.0", + "vite-plugin-checker": "^0.6.2", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-node-stdlib-browser": "^0.2.1", + "vitest": "^0.32.2" + }, + "scripts": { + "build-dependencies-visualizer": "vite-bundle-visualizer", + "check-code": "yarn lint && yarn test", + "generate-docs": "typedoc --entryPointStrategy expand ./src", + "lint": "eslint src", + "lint-unused": "ts-prune --ignore 'ts-utils.ts'", + "lint-all": "yarn lint && yarn lint-unused", + "run-script": "ts-node -P src/scripts", + "source-map-explorer": "yarn build --sourcemap=true && source-map-explorer --no-border-checks --only-mapped build/assets/*js", + "start": "vite --strictPort", + "test": "yarn test-unit", + "test-fixtures-generate": "yarn run-script src/tests/manage.ts generate-fixtures", + "test-snapshots-delete": "yarn run-script src/tests/manage.ts delete", + "test-unit": "vitest run --reporter=basic", + "test-unit-watch": "vitest watch", + "postinstall": "yarn localize", + "prebuild": "yarn localize && yarn test", + "manifest": "d2-manifest package.json build/manifest.webapp", + "build-folder": "rm -rf build/ && d2-manifest package.json manifest.webapp && tsc && vite build --outDir=build && yarn run manifest && cp -r i18n icon.png build", + "build": "VITE_DHIS2_BASE_URL='' VITE_DHIS2_AUTH='' yarn build-folder && rm -f $npm_package_name.zip && cd build && zip --quiet -r ../$npm_package_name.zip *", + "prettify": "prettier \"./**/*.{js,jsx,json,css,ts,tsx}\" --write", + "extract-pot": "yarn d2-i18n-extract -p src/ -o i18n/", + "localize": "yarn update-po && d2-i18n-generate -n d2-dataset-configuration -p ./i18n/ -o ./src/locales/", + "update-po": "yarn extract-pot && find i18n/ -name '*.po' -exec msgmerge --backup=off -U {} i18n/en.pot \\;", + "prepare": "husky install", + "script-example": "npx ts-node src/scripts/example.ts" }, - "homepage": "https://github.com/EyeSeeTea/dataset-configuration", "manifest.webapp": { - "name": "Dataset Configuration", + "name": "Project Configuration app", + "description": "Project Configuration app", "icons": { "48": "icon.png" + }, + "developer": { + "url": "https://www.eyeseetea.com/", + "name": "EyeSeeTea team" + }, + "activities": { + "dhis": { + "href": "*" + } } } } diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1712927cdd231c01c91bfc06f8052078a7c2f320 GIT binary patch literal 4286 zcmeI0ZAep57{~7_Ln1*!!VeW@QGUp@iCCmzCJ__Nz8HqloHLXxXGxLOoY|7lN_)|n zROF_)sTF0GqkL&AwUuO{Emm4lZEBWIO-`;lKTJ2P_r~hDLvbYG=ce)pGb> zJ&sU?6ymxv7&w{tu#MGehR7jyCoXMDF4AFNkqqs!_uXG{JrudXsG;1cDg}$u;;*=0X@|+>diJvgXWY9U#horK6 zE8A1dM^IWk7DWZ4tM><8x~ftEQ9>YggmOqHpi*QoLE7Xtb?C7&Er!+*BuM}#+>iFc z>f31l(1rl+eE9p!MWWCTqPVpf`qgh!gK40>+lcs*T)0FATKQ=uGUS|1fuA=)dj_e| z-1nU+>aY3KeScr4K|qy7yZsmqanNsO1eI#%w<@#0jqO6c^u@gdgwrH^mI zDTD);Z3|HUs*W`-1^V3i39h__n75gr-95q$Mi!rqnW|&hkmw6v!5VOd-Ut$LAypn> zWe@rWe`3X6XDo>!uvEaITdKcY=tMpbOb*v@w@GPbQrz)gRFm&;{)_j|aNtTb)`{F{ z_AY(htm0na~9{7zsmpJ_~?lVOjXhuGq9>@SPLKGja}j7T&$O3fIO4gu-W=uHXCbo1atEL0c?-|0A`lQ`~Uy| literal 0 HcmV?d00001 diff --git a/includes/material-design-icons/MaterialIcons-Regular.eot b/public/includes/material-design-icons/MaterialIcons-Regular.eot similarity index 100% rename from includes/material-design-icons/MaterialIcons-Regular.eot rename to public/includes/material-design-icons/MaterialIcons-Regular.eot diff --git a/includes/material-design-icons/MaterialIcons-Regular.ttf b/public/includes/material-design-icons/MaterialIcons-Regular.ttf similarity index 100% rename from includes/material-design-icons/MaterialIcons-Regular.ttf rename to public/includes/material-design-icons/MaterialIcons-Regular.ttf diff --git a/includes/material-design-icons/MaterialIcons-Regular.woff b/public/includes/material-design-icons/MaterialIcons-Regular.woff similarity index 100% rename from includes/material-design-icons/MaterialIcons-Regular.woff rename to public/includes/material-design-icons/MaterialIcons-Regular.woff diff --git a/includes/material-design-icons/MaterialIcons-Regular.woff2 b/public/includes/material-design-icons/MaterialIcons-Regular.woff2 similarity index 100% rename from includes/material-design-icons/MaterialIcons-Regular.woff2 rename to public/includes/material-design-icons/MaterialIcons-Regular.woff2 diff --git a/public/includes/material-design-icons/material-icons.css b/public/includes/material-design-icons/material-icons.css new file mode 100644 index 000000000..46caa138a --- /dev/null +++ b/public/includes/material-design-icons/material-icons.css @@ -0,0 +1,37 @@ +@font-face { + font-family: "Material Icons"; + font-style: normal; + font-weight: 400; + src: url(MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local("Material Icons"), local("MaterialIcons-Regular"), + url(MaterialIcons-Regular.woff2) format("woff2"), + url(MaterialIcons-Regular.woff) format("woff"), + url(MaterialIcons-Regular.ttf) format("truetype"); +} + +.material-icons { + font-family: "Material Icons"; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + width: 1em; + height: 1em; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: "liga"; +} diff --git a/public/includes/roboto-font.css b/public/includes/roboto-font.css new file mode 100644 index 000000000..e0d1d5161 --- /dev/null +++ b/public/includes/roboto-font.css @@ -0,0 +1,47 @@ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 100; + src: local("Roboto Thin"), local("Roboto-Thin"), + url(https://fonts.gstatic.com/s/roboto/v15/Jzo62I39jc0gQRrbndN6nfesZW2xOQ-xsNqO47m55DA.ttf) + format("truetype"); +} +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 300; + src: local("Roboto Light"), local("Roboto-Light"), + url(https://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfaCWcynf_cDxXwCLxiixG1c.ttf) + format("truetype"); +} +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 400; + src: local("Roboto"), local("Roboto-Regular"), + url(https://fonts.gstatic.com/s/roboto/v15/zN7GBFwfMP4uA6AR0HCoLQ.ttf) format("truetype"); +} +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 500; + src: local("Roboto Medium"), local("Roboto-Medium"), + url(https://fonts.gstatic.com/s/roboto/v15/RxZJdnzeo3R5zSexge8UUaCWcynf_cDxXwCLxiixG1c.ttf) + format("truetype"); +} +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 700; + src: local("Roboto Bold"), local("Roboto-Bold"), + url(https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOKCWcynf_cDxXwCLxiixG1c.ttf) + format("truetype"); +} +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 900; + src: local("Roboto Black"), local("Roboto-Black"), + url(https://fonts.gstatic.com/s/roboto/v15/mnpfi9pxYH-Go5UiibESIqCWcynf_cDxXwCLxiixG1c.ttf) + format("truetype"); +} diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 000000000..dfeed37d6 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "Project Configuration app", + "name": "Project Configuration app", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/resources/customjscss/data-entry-contentscript.js b/resources/customjscss/data-entry-contentscript.js deleted file mode 100644 index 3f959a718..000000000 --- a/resources/customjscss/data-entry-contentscript.js +++ /dev/null @@ -1,37 +0,0 @@ -(function() { - var fixActionsBox = function() { - // Button does not fit in the box, add some more width. - $("#completenessDiv").css("width", "+=25px"); - }; - - var applyChangesToForm = function() { - fixActionsBox(); - }; - - var selectProjectFromDataset = function(ev) { - var dataSetName = $("#selectedDataSetId option:selected").text(); - - var projectSelect = $(".selectionLabel") - .filter(function() { return $(this).text() === "Project" }) - .siblings("select"); - var optionToSelect = projectSelect - .find("option") - .filter(function() { return dataSetName.indexOf($(this).text()) >= 0; }); - if (optionToSelect.get(0)) { - optionToSelect.prop("selected", true); - } else { - projectSelect.find("option:first").prop("selected", true); - } - }; - - var autoselectProject = function() { - $("#selectedDataSetId, #selectedPeriodId").change(selectProjectFromDataset); - }; - - var init = function() { - $(document).on("dhis2.de.event.formLoaded", applyChangesToForm); - autoselectProject(); - }; - - $(init); -})(); \ No newline at end of file diff --git a/resources/customjscss/nrc.css b/resources/customjscss/nrc.css deleted file mode 100644 index faaf5dfaa..000000000 --- a/resources/customjscss/nrc.css +++ /dev/null @@ -1,390 +0,0 @@ -#header -{ - background-color: #3c3c3c; - height: 44px; - position: fixed; - z-index: 1200; - top: 0px; - left: 0px; - right: 0px; - box-shadow: 0 0 3px #000000; -} - -.header-bar -{ - background-color: #3c3c3c; -} - -#headerBanner -{ - position: absolute; - top: 5px; - left: 25px; -} - -#headerText { - position: absolute; - top: 12px; - left: 75px; - font-weight: bold; - color: #fff; - font-size: 16px; -} - - -.loginPage { - -background-color: #3c3c3c; - -} - -.loginPage #footerArea { -border-top: 1px solid #ff7602; - -} - -.loginPage #leftFooterArea.innerFooterArea -{ -color: #ff7602; - -} - -/* Styling of the data entry page */ - -.formSection { - border: 1px solid #cacaca; - border-radius: 3px; - margin: 0; - padding: 1px 4px 1px 4px ; -} - -.formSection h3 { - - color: #000; - font-size: 16px; - text-align: left; - font-weight: bold; - padding: 0; -} - -.formSection td { - -text-align: center; -min-width: 75px; -padding: 1; - -} - -.formSection th { - -font-weight: normal; -font-size: 14px; -text-align: center; -white-space: normal !important; /* normal might be better. break word will break the work up to fit*/ -max-width: 75px; -background-color: #eaf7fb; -max-width: 200px; - -/* These colour the header - didn't look very good -padding: 1px 2px 1px 2px; -color: #fff; - -border-color: #fff; -*/ - -} - -.indicatorArea { - margin-top: 0px; - margin-bottom: 5px; - border-top: none; -} - -.indicatorArea td { - width: 100% !important; - text-align: left !important; -} - -.entryfield, -.indicator -{ - -max-width: 75px; - -} - -.entryarea { - max-width: 300px; -} - -/* input criteria at top of the data entry page */ - -.inputCriteria { - - background-color: #f3f3f3; - border-color: #c3c3c3; - -} - -div.inputCriteria { - - background-color: #f3f3f3; - border-color: #c3c3c3; - -} -/*pivot table layout - align left */ - -table.pivot { - font-family: sans-serif; - font-size: 14px; - border: 0 !important; - color: #000; -} - -td.pivot-dim.td-sortable { - background-color: #DEE2E4 !important; - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - text-align: center !important; - font-weight: bold; -} - -td.pivot-dim-total.td-sortable { - background-color: #DEE2E4 !important; - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - text-align: center !important; - font-weight: bold; -} - -td.pivot-dim-subtotal { - - background-color: #DEE2E4 !important; - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - text-align: center !important; - font-weight: bold; -} - - -td.pivot-dim-label { - background-color: #DEE2E4 !important; - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - text-align: center !important; -} - - -td.pivot-dim.td-nobreak { - background-color: #eaf7fb !important; - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - color: #000 !important; -} - -td.pivot-dim { - background-color: #DEE2E4 !important; - border-style: solid; - border-width: 1px !important; - border-color: #fff !important; - text-align: left !important; - font-weight: bold !important; -} - -td.pivot-empty { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - background-color: #DEE2E4 !important; -} - - -td.pivot-value { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px !important; - background-color: #eaf7fb; - text-align: right; -} - -td.pivot-value-subtotal { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px; - background-color: #eaf7fb; - text-align: right; - font-weight: bold !important; - text-decoration: underline; -} - -td.pivot-dim-total { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px; - background-color: #eaf7fb; - font-weight: bold !important; - text-align: left; -} - -td.pivot-value-total { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px; - background-color: #eaf7fb; - font-weight: bold !important; - text-align: right; - text-decoration: underline; -} - -td.pivot-value-total-subgrandtotal { - - - border-style: solid !important; - border-color: #fff !important; - border-width: 1px; - background-color: #eaf7fb; - font-weight: bold !important; - text-align: right; - text-decoration: underline; -} - -td.pivot-value-grandtotal { - border-style: solid !important; - border-color: #fff !important; - border-width: 1px; - background-color: #eaf7fb; - font-weight: bold !important; - text-align: right; - text-decoration: underline; -} - -/* NRC clours dark grey #3c3c3c; light blue #eaf7fb; NRC orange #ff7602 */ - -/* This changes background of the widgets... -.item.ui-draggable.ui-droppable { -background-color: grey; -} */ - -/* NRC web-dataentry */ - -#contentDiv .nrcsubsection { - background-color: #fff; - height: 5px; -} - -#contentDiv input.entryfield { - width: 70px; - height: 18px; - padding: 2px; -} - -#contentDiv input.dataelementtotal { - width: 70px; - height: 16px; - padding: 2px; -} - -#contentDiv input.indicator { - width: 70px; - height: 18px; - padding: 2px; -} - -#contentDiv tr.derow { - background-color: #FFF; - transition: background-color 500ms; -} - -#contentDiv tr.focus { - background-color: #e5f5e5; - transition: background-color 500ms; -} - -#contentDiv tr.hover { - background-color: #e5e5e5; - transition: background-color 500ms; -} - -#contentDiv th { - border-style: hidden !important; -} - -#contentDiv td { - padding: 2px !important; - height: 16px; - text-align: center; - border-style: none !important; -} - -#contentDiv .panel { - margin-bottom: 7px; -} - -#contentDiv .panel-body { - padding-top: 0; - padding-left: 8px; - padding-right: 8px; - padding-bottom: 4px; -} - -#contentDiv .panel-default > .panel-heading { - background-color: #3c3c3c; - border-color: #3c3c3c; - padding: 7px; - margin-bottom: 5px; - cursor: pointer; -} - -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #053e21; -} - -.ui-widget-header { - background: none; - background-color: #2f3867; -} - -#contentDiv a.nrc-panel-title { - color: white; - cursor: pointer; -} - -#contentDiv .accordion-toggle:after { - font-family: FontAwesome; - content: "\f077"; - float: right; - color: white !important; -} - -#contentDiv .panel-heading.collapsed .accordion-toggle:after { - content: "\f078"; -} - -#contentDiv .sectionTable { - margin-bottom: 0px !important; - margin-top: 5px; -} - -/* From light_blue.css */ - -.page p,.page td,.page th,.page input,.page select,.page textarea -{ - font-size: 9pt; -} - -.page th -{ - text-align: left; - color: #39547d; - padding: 3px 0 3px 1px; - font-size: 13px; - font-weight: bold; - border-collapse: collapse; - border-bottom: 1px solid #cad5e5; - min-height: 28px; -} \ No newline at end of file diff --git a/resources/scripts/check-duplicate-group-sets-items.js b/resources/scripts/check-duplicate-group-sets-items.js deleted file mode 100644 index c12783251..000000000 --- a/resources/scripts/check-duplicate-group-sets-items.js +++ /dev/null @@ -1,42 +0,0 @@ -const _ = require('lodash'); -const path = require('path'); -const request_promise = require('request-promise'); - -const getDuplicates = (model) => { - const plural = model + "s"; - const response$ = request_promise({ - method: "GET", - uri: `http://localhost:9026/api/${plural}.json` - + `?paging=false&fields=id,name,${model}Groups[id,name,${model}GroupSet[id,name]]`, - headers: {'Authorization': 'Basic YWRtaW46ZGlzdHJpY3Q='}, - json: true, - }); - - return response$.then(response => { - return _(response[plural]).map(item => { - const groupSetWithDuplicates = _(item[model + "Groups"]) - .groupBy(group => group[model + "GroupSet"] && group[model + "GroupSet"].name) - .toPairs() - .filter(([itemGroupName, itemGroupSets]) => itemGroupName !== "undefined" && itemGroupSets.length > 1) - .map(([itemGroupName, itemGroupSets]) => itemGroupName) - .value(); - - if (!_.isEmpty(groupSetWithDuplicates)) { - return `${model}[${item.id} - ${item.name.slice(0, 20)}] has duplicate references to sets: ${groupSetWithDuplicates}`; - } - }).compact().join("\n"); - }) -}; - -const main = (args) => { - if (_(args).isEmpty()) { - const scriptname = path.basename(__filename); - console.error(`Usage: ${scriptname} SERVER_URL`) - process.exit(1); - } else { - Promise.all([getDuplicates("dataElement"), getDuplicates("indicator")]) - .then(duplicates => console.log(duplicates.join("\n"))); - } -} - -main(process.argv); diff --git a/resources/scripts/fix-duplicated-uids.sh b/resources/scripts/fix-duplicated-uids.sh deleted file mode 100644 index 604bfa5b9..000000000 --- a/resources/scripts/fix-duplicated-uids.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# -# Depedencies: curl, jq -set -e -u -o pipefail - -debug() { - echo "$@" >&2 -} - -main() { local indicator_uids=$1 dhisurl=$2 - local indicator_id filter data_entry_form_ids records_found - - for indicator_uid in $indicator_uids; do - debug "Process indicator: $indicator_uid" - - records_found=$( - curl -f -sS -X GET "$dhisurl/api/indicators?filter=id:eq:$indicator_uid" | - jq '.pager | .total' - ) - - if test $records_found -ne 1; then - debug " Indicator not found: $indicator_uid" - continue - fi - - new_indicator_uid=$(curl -f -sS "$dhisurl/api/system/id.json" | jq -r '.codes[0]') - debug " Replace indicator UID: $indicator_uid -> $new_indicator_uid" - - filter="htmlCode:like:indicator${indicator_uid}" - data_entry_form_ids=$( - curl -f -sS -X GET "$dhisurl/api/dataEntryForms.json?paging=false&filter=$filter" | - jq -r '.dataEntryForms[] | .id' - ) - - for data_entry_form_id in $data_entry_form_ids; do - debug " Update custom form: $data_entry_form_id" - curl -f -sS -X GET "$dhisurl/api/dataEntryForms/$data_entry_form_id.json?fields=htmlCode" | - sed " - # Update custom form, example: - s/indicator$indicator_uid/indicator$new_indicator_uid/g; - s/indicatorid=\\\\\"$indicator_uid\\\\\"/indicatorid=\\\\\"$new_indicator_uid\\\\\"/g; - " > htmlcode.json - curl -f -sS -X PATCH "$dhisurl/api/dataEntryForms/${data_entry_form_id}.json" \ - -H "Content-Type: application/json" -d @htmlcode.json - done - - debug " Update indicator UID: $new_indicator_uid" - curl -f -sS -X PATCH "$dhisurl/api/indicators/$indicator_uid.json" \ - -H "Content-Type: application/json" \ - -d "{\"id\": \"$new_indicator_uid\"}" - done -} - -# curl -sS -u admin:district 'http://localhost:9026/api/dataElements?paging=false' | jq -r '.dataElements[] | .id' | sort > dataElements.json -# curl -sS -u admin:district 'http://localhost:9026/api/indicators?paging=false' | jq -r '.indicators[] | .id' | sort > indicators.json -# comm -12 dataElements.json indicators.json | xargs - -indicator_uids="XMRmqF9reP5 UzT7DSkkbxH ZDONOAJJNBV wFrRdK9XyIM" - -if test $# -ne 1; then - debug "Usage: fix-duplicated-uids.sh http://admin:district@localhost:8080" - exit 2 -else - main "$indicator_uids" "$@" -fi diff --git a/src/App/App.component.js b/src/App/App.component.js deleted file mode 100644 index 353998e8e..000000000 --- a/src/App/App.component.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -import headerBarStore$ from "d2-ui/lib/app-header/headerBar.store"; -import withStateFrom from "d2-ui/lib/component-helpers/withStateFrom"; -import HeaderBarComponent from "d2-ui/lib/app-header/HeaderBar"; -import AppWithD2 from "d2-ui/lib/app/AppWithD2.component"; -import LoadingMask from "../LoadingMask/LoadingMask.component"; -import MainContent from "d2-ui/lib/layout/main-content/MainContent.component"; -import SinglePanelLayout from "d2-ui/lib/layout/SinglePanel.component"; -import { getInstance } from "d2/lib/d2"; -import OldMuiThemeProvider from "material-ui/styles/MuiThemeProvider"; -import appTheme from "./app.theme"; -import SnackbarContainer from "../Snackbar/SnackbarContainer.component"; -import SessionDialog from "../SessionDialog/SessionDialog.component"; -import { MuiThemeProvider } from "@material-ui/core/styles"; -import { createGenerateClassName, StylesProvider } from "@material-ui/styles"; -import { muiTheme } from "./dhis2.theme"; - -const HeaderBar = withStateFrom(headerBarStore$, HeaderBarComponent); - -const generateClassName = createGenerateClassName({ - productionPrefix: "c", -}); - -class App extends AppWithD2 { - getChildContext() { - return super.getChildContext(); - } - - childContextTypes = { - d2: PropTypes.object, - }; - - render() { - if (!this.state.d2) { - return ; - } - return ( - - - -
    - - - - {this.props.children} - - - - - -
    -
    -
    -
    - ); - } -} - -App.defaultProps = { - d2: getInstance(), -}; - -export default App; diff --git a/src/App/App.scss b/src/App/App.scss deleted file mode 100644 index d01a15942..000000000 --- a/src/App/App.scss +++ /dev/null @@ -1,53 +0,0 @@ -@import "../../node_modules/d2-ui/lib/css/HeaderBar.css"; - -$left-bar-width: 295px; - -html { - background-color: #f3f3f3; - font-family: Roboto, Arial, sans-serif; -} - -.app-wrapper { - margin-top: 4rem; -} - -.main-content { - margin-left: $left-bar-width + 30; -} - -.simple-checkbox { - display: none; -} - -.simple-checkbox + span { - width: 16px; - display: inline-block; -} - -.simple-checkbox + span:before { - border: 1px solid #333; - content: "\00a0"; - display: inline-block; - font: 16px/1em sans-serif; - height: 16px; - margin: 0 0.25em 0 0; - padding: 0; - vertical-align: top; - width: 16px; -} - -.simple-checkbox:checked + span:before { - border-color: transparent; - background: #29f; - color: #fff; - content: "\2713"; - font-size: 1.3em; - text-align: center; -} - -.simple-checkbox:checked + span:after { - font-weight: bold; -} - -@import "../DataSets/DetailsBox"; -@import "../DataSets/List"; diff --git a/src/CompositionRoot.ts b/src/CompositionRoot.ts new file mode 100644 index 000000000..c6eda97d6 --- /dev/null +++ b/src/CompositionRoot.ts @@ -0,0 +1,35 @@ +import { UserD2Repository } from "./data/repositories/UserD2Repository"; +import { UserTestRepository } from "./data/repositories/UserTestRepository"; +import { UserRepository } from "./domain/repositories/UserRepository"; +import { GetCurrentUserUseCase } from "./domain/usecases/GetCurrentUserUseCase"; +import { D2Api } from "./types/d2-api"; + +export type CompositionRoot = ReturnType; + +type Repositories = { + usersRepository: UserRepository; +}; + +function getCompositionRoot(repositories: Repositories) { + return { + users: { + getCurrent: new GetCurrentUserUseCase(repositories.usersRepository), + }, + }; +} + +export function getWebappCompositionRoot(api: D2Api) { + const repositories: Repositories = { + usersRepository: new UserD2Repository(api), + }; + + return getCompositionRoot(repositories); +} + +export function getTestCompositionRoot() { + const repositories: Repositories = { + usersRepository: new UserTestRepository(), + }; + + return getCompositionRoot(repositories); +} diff --git a/src/DataSets/DataSetPeriods.js b/src/DataSets/DataSetPeriods.js deleted file mode 100644 index 317dff205..000000000 --- a/src/DataSets/DataSetPeriods.js +++ /dev/null @@ -1,142 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import moment from "moment"; -import _ from "lodash"; -import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; - -import FormHelpers from "../forms/FormHelpers"; -import { currentUserHasAdminRole } from "../utils/Dhis2Helpers"; - -export default class DataSetPeriods extends React.Component { - static propTypes = { - store: PropTypes.object.isRequired, - onFieldChange: PropTypes.func.isRequired, - endYear: PropTypes.number, - }; - - static contextTypes = { - d2: PropTypes.any, - }; - - styles = { - dateFieldWrapStyle: { float: "left", marginRight: 20 }, - applyToAll: { marginLeft: 20, marginTop: 25, marginBottom: -15 }, - periodYearLabel: { float: "left", marginLeft: 20, marginTop: 41, marginRight: 20 }, - }; - - constructor(props, context) { - super(props); - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - this.currentUserHasAdminRole = currentUserHasAdminRole(context.d2); - } - - getPeriodFields(years) { - const { store, onFieldChange, endYear } = this.props; - const { currentUserHasAdminRole } = this; - const { associations } = this.props.store; - const { getFormLabel, getDateField, getBooleanField, separator } = FormHelpers; - const t = this.getTranslation; - const startDate = associations.dataInputStartDate; - const periodDates = store.getPeriodDates(); - const periodYears = store.getPeriodYears(); - - if (!currentUserHasAdminRole || _.isEmpty(periodYears)) return []; - - const generateDateFieldPairs = type => { - return _.flatMap(years, (year, index) => { - const disabled = !endYear && index > 0 && associations.periodDatesApplyToAll[type]; - const showApplyToAllYearsCheckbox = !endYear && index === 0 && years.length > 1; - const validators = [ - { - validator: value => { - const startDate = associations.dataInputStartDate; - const startDateM = startDate ? moment(startDate).startOf("day") : null; - return !value || !startDateM || moment(value).isSameOrAfter(startDateM); - }, - message: t("start_date_before_project_start"), - }, - ]; - - return _.compact([ - showApplyToAllYearsCheckbox - ? getBooleanField({ - name: `associations.periodDatesApplyToAll.${type}`, - label: t("apply_periods_to_all"), - value: associations.periodDatesApplyToAll[type], - onChange: onFieldChange, - style: this.styles.applyToAll, - }) - : null, - !endYear && - getFormLabel({ - value: year, - forSection: type, - style: this.styles.periodYearLabel, - }), - !endYear && - getDateField({ - name: `associations.periodDates.${type}.${year}.start`, - value: _(periodDates).get([type, year, "start"]), - label: t(`${type}_start_date`) + " " + year, - minDate: startDate, - disabled, - validators, - wrapStyle: this.styles.dateFieldWrapStyle, - }), - (!endYear || year === endYear) && - getDateField({ - name: `associations.periodDates.${type}.${year}.end`, - value: _(periodDates).get([type, year, "end"]), - label: t(`${type}_end_date`) + " " + year, - minDate: startDate, - disabled, - wrapStyle: this.styles.dateFieldWrapStyle, - }), - separator(`${type}-${year}-end`), - ]); - }); - }; - - return [ - getFormLabel({ value: t("output_dates") }), - separator("output-dates"), - ...generateDateFieldPairs("output"), - getFormLabel({ value: t("outcome_dates") }), - separator("outcome-dates"), - ...generateDateFieldPairs("outcome"), - ]; - } - - render() { - const { store, onFieldChange, endYear } = this.props; - const { associations } = store; - const years = store.getPeriodYears(); - const formKey = JSON.stringify([years, store.associations.periodDatesApplyToAll]); - - const fields = [ - !endYear && - FormHelpers.getDateField({ - name: "associations.dataInputStartDate", - value: associations.dataInputStartDate, - label: FormHelpers.getLabel(this.getTranslation("data_input_start_date")), - wrapStyle: this.styles.dateFieldWrapStyle, - }), - - !endYear && - FormHelpers.getDateField({ - name: "associations.dataInputEndDate", - value: associations.dataInputEndDate, - label: FormHelpers.getLabel(this.getTranslation("data_input_end_date")), - wrapStyle: this.styles.dateFieldWrapStyle, - }), - - FormHelpers.separator("period-fields"), - - ...this.getPeriodFields(years), - ]; - - return ( - - ); - } -} diff --git a/src/DataSets/DataSets.component.js b/src/DataSets/DataSets.component.js deleted file mode 100644 index c0b0b7fab..000000000 --- a/src/DataSets/DataSets.component.js +++ /dev/null @@ -1,661 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import fp from "lodash/fp"; -import _ from "lodash"; - -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import ObserverRegistry from "../utils/ObserverRegistry.mixin"; -import LoadingStatus from "../LoadingStatus/LoadingStatus.component"; -import ListActionBar from "../ListActionBar/ListActionBar.component"; -import SearchBox from "../SearchBox/SearchBox.component"; -import Pagination from "d2-ui/lib/pagination/Pagination.component"; -import OrgUnitsDialog from "d2-ui/lib/org-unit-dialog/OrgUnitsDialog.component"; -import SharingDialogMultiple from "../components/sharing-dialog/SharingDialogMultiple"; -import "../Pagination/Pagination.scss"; -import snackActions from "../Snackbar/snack.actions"; - -// import DataTable from 'd2-ui/lib/data-table/DataTable.component'; -import MultipleDataTable from "../MultipleDataTable/MultipleDataTable.component"; - -import DetailsBoxWithScroll from "./DetailsBoxWithScroll.component"; -import listActions from "./list.actions"; -import { - contextActions, - contextMenuIcons, - endDateForYearStore, - isContextActionAllowed, - actions, -} from "./context.actions"; -import detailsStore from "./details.store"; -import logsStore from "./logs.store"; -import deleteStore from "./delete.store"; -import orgUnitsStore from "./orgUnits.store"; -import sharingStore from "./sharing.store"; -import "d2-ui/scss/DataTable.scss"; -import { log, getLogs, LogEntry } from "./log"; - -import SettingsDialog from "../Settings/Settings.component"; -import IconButton from "material-ui/IconButton"; -import SettingsIcon from "material-ui/svg-icons/action/settings"; -import Checkbox from "material-ui/Checkbox/Checkbox"; -import Dialog from "material-ui/Dialog/Dialog"; -import FlatButton from "material-ui/FlatButton/FlatButton"; -import HelpOutlineIcon from "material-ui/svg-icons/action/help-outline"; -import ListIcon from "material-ui/svg-icons/action/list"; -import FormHelpers from "../forms/FormHelpers"; -import { - currentUserHasAdminRole, - canCreate, - getFilteredDatasets, - currentUserIsSuperuser, -} from "../utils/Dhis2Helpers"; -import * as sharing from "../models/Sharing"; -import Settings from "../models/Settings"; -import periodsStore from "./periods.store"; -import PeriodsDialog from "./PeriodsDialog"; -import { save } from "../components/sharing-dialog/utils"; -import { ProjectsService } from "../models/ProjectService"; - -const { SimpleCheckBox } = FormHelpers; - -export function calculatePageValue(pager) { - const pageSize = 50; // TODO: Make the page size dynamic - const { total, pageCount, page } = pager; - const pageCalculationValue = total - (total - (pageCount - (pageCount - page)) * pageSize); - const startItem = 1 + pageCalculationValue - pageSize; - const endItem = pageCalculationValue; - - return `${startItem} - ${endItem > total ? total : endItem}`; -} - -const sharingMeta = { allowPublicAccess: true, allowExternalAccess: false }; - -const DataSets = createReactClass({ - propTypes: { - name: PropTypes.string, - }, - - contextTypes: { - d2: PropTypes.object.isRequired, - }, - - mixins: [ObserverRegistry, Translate], - - childContextTypes: { - d2: PropTypes.object, - }, - - getChildContext() { - return { - d2: this.context.d2, - }; - }, - - tr(text, namespace = {}) { - return this.getTranslation(text, namespace); - }, - - getInitialState() { - return { - config: null, - isLoading: true, - page: 1, - pager: { total: 0 }, - dataRows: [], - d2: this.context.d2, - currentUserHasAdminRole: currentUserHasAdminRole(this.context.d2), - currentUserIsSuperuser: currentUserIsSuperuser(this.context.d2), - settingsOpen: false, - sorting: null, - searchValue: null, - orgUnits: null, - periods: null, - endDateForYear: null, - helpOpen: false, - logs: null, - logsHasMore: null, - logsFilter: _log => true, - logsPageLast: 0, - logsOldestDate: null, - sharing: null, - showOnlyCreatedByApp: false, - }; - }, - - componentDidMount() { - const d2 = this.context.d2; - - new Settings(d2).get().then(config => { - this.setState({ config }, this.getDataSets); - }); - - this.registerDisposable( - detailsStore.subscribe(detailsObject => this.setState({ detailsObject })) - ); - - this.registerDisposable(deleteStore.subscribe(_deleteObjects => this.getDataSets())); - this.registerDisposable(logsStore.subscribe(datasets => this.openLogs(datasets))); - - this.registerDisposable(this.subscribeToModelStore(sharingStore, "sharing")); - this.registerDisposable(this.subscribeToModelStore(orgUnitsStore, "orgUnits")); - this.registerDisposable(this.subscribeToModelStore(periodsStore, "periods")); - this.registerDisposable(this.subscribeToModelStore(endDateForYearStore, "endDateForYear")); - }, - - subscribeToModelStore(store, modelName) { - const d2 = this.context.d2; - - return store.subscribe(async data => { - const { datasets, options } = data || {}; - - if (datasets) { - const d2Datasets = await getDataSetsWithOwnerFields(d2, datasets); - this.setState({ [modelName]: { models: d2Datasets, options } }); - } else { - this.setState({ [modelName]: null }); - } - }); - }, - - getDataSetsOnCurrentPage() { - this.getDataSets({ clearPage: false }); - }, - - async getDataSets({ clearPage = true } = {}) { - const { page, sorting, searchValue, showOnlyCreatedByApp, config } = this.state; - const newPage = clearPage ? 1 : page; - const filters = { searchValue, showOnlyCreatedByApp }; - const dataSetsCollection = await getFilteredDatasets( - this.context.d2, - config, - newPage, - sorting, - filters - ); - const formatDate = isoDate => new Date(isoDate).toLocaleString(); - const dataRows = dataSetsCollection - .toArray() - .map(dr => - _.merge(dr, { selected: false, lastUpdatedHuman: formatDate(dr.lastUpdated) }) - ); - - this.setState({ - isLoading: false, - pager: dataSetsCollection.pager, - dataRows: dataRows, - page: newPage, - }); - }, - - searchListByName(searchObserver) { - //bind key search listener - const searchListByNameDisposable = searchObserver.subscribe(value => { - this.setState( - { - isLoading: true, - searchValue: value, - }, - this.getDataSets - ); - }); - - this.registerDisposable(searchListByNameDisposable); - }, - - openSettings() { - this.setState({ settingsOpen: true }); - }, - - closeSettings() { - this.setState({ settingsOpen: false }); - }, - - openAllLogs() { - const title = `${this.tr("logs")} (${this.tr("all")})`; - this.setState({ - logsFilter: _log => true, - logsObject: title, - logs: null, - }); - this.addLogs([0, 1]); - }, - - openLogs(datasets) { - // Set this.state.logs to the logs that include any of the given - // datasets, this.state.logsObject to a description of their contents - // and this.state.logsFilter so it selects only the relevant logs. - if (datasets === null) { - this.setState({ logsObject: null }); - } else { - const ids = datasets.map(ds => ds.id); - const idsSet = new Set(ids); - const title = `${this.tr("logs")} (${ids.join(", ")})`; - const logsFilter = log => log.datasets.some(ds => idsSet.has(ds.id)); - - this.setState({ - logsObject: title, - logs: null, - logsFilter, - }); - this.addLogs([0, 1]); // load the last two log pages - } - }, - - addNextLog() { - return this.addLogs([this.state.logsPageLast + 1]); - }, - - addLogs(pages) { - return getLogs(pages).then(res => { - if (res === null) { - this.setState({ - logsPageLast: -1, - logs: this.state.logs || [], - }); - } else { - const { logs, hasMore: logsHasMore } = res; - const logsOldestDate = logs.length > 0 ? logs[logs.length - 1].date : null; - const filteredLogs = _(logs) - .filter(this.state.logsFilter) - .value(); - - this.setState({ - logsHasMore: logsHasMore, - logs: _([this.state.logs, filteredLogs]) - .compact() - .flatten() - .value(), - logsPageLast: _.max(pages), - logsOldestDate: logsOldestDate, - }); - } - }); - }, - - onSelectToggle(ev, dataset) { - ev.preventDefault(); - ev.stopPropagation(); - this.setState({ - dataRows: this.state.dataRows.map(dr => - dr.id === dataset.id ? _.merge(dr, { selected: !dr.selected }) : dr - ), - }); - }, - - onSelectAllToggle(value) { - this.setState({ - dataRows: this.state.dataRows.map(dr => _.merge(dr, { selected: !value })), - }); - }, - - onActiveRowsChange(datasets) { - const selectedIds = new Set(datasets.map(ds => ds.id)); - - this.setState({ - dataRows: this.state.dataRows.map(dr => - _.merge(dr, { selected: selectedIds.has(dr.id) }) - ), - }); - }, - - _onColumnSort(sorting) { - this.setState({ sorting }, this.getDataSets); - }, - - _openHelp() { - this.setState({ helpOpen: true }); - }, - - _closeHelp() { - this.setState({ helpOpen: false }); - }, - - _onSharingClose() { - const { updated } = sharing.getChanges(this.state.dataRows, this.state.sharing.models); - - if (!_(updated).isEmpty()) { - log("change sharing settings", "success", updated); - this.getDataSets({ clearPage: false }); - } - listActions.hideSharingBox(); - }, - - _onSharingSearch(key) { - return this.context.d2.Api.getApi().get("sharing/search", { key }); - }, - - async _onSharingSave(attributes, strategy) { - const { d2 } = this.context; - const currentDataSets = this.state.sharing.models; - const { status, dataSets } = await save(d2, currentDataSets, attributes, strategy); - - if (status) { - this.setState({ sharing: { models: dataSets } }); - } else { - snackActions.show({ message: "Error" }); - } - }, - - _onShowOnlyCreatedByAppCheck(ev) { - this.setState({ showOnlyCreatedByApp: ev.target.checked }, this.getDataSets); - }, - - async postOrgUnitsSave(dataSets) { - const api = this.context.d2.Api.getApi(); - const service = new ProjectsService(api, this.state.config); - - try { - await service.updateOrgUnitsFromDataSets(dataSets); - log("change organisation units", "success", dataSets); - } catch (err) { - snackActions.show({ message: err.message || err.toString() }); - } - }, - - render() { - if (!this.state.config) return null; - - const currentlyShown = calculatePageValue(this.state.pager); - - const paginationProps = { - hasNextPage: () => - Boolean(this.state.pager.hasNextPage) && this.state.pager.hasNextPage(), - hasPreviousPage: () => - Boolean(this.state.pager.hasPreviousPage) && this.state.pager.hasPreviousPage(), - onNextPageClick: () => { - this.setState( - { isLoading: true, page: this.state.pager.page + 1 }, - this.getDataSetsOnCurrentPage - ); - }, - onPreviousPageClick: () => { - this.setState( - { isLoading: true, page: this.state.pager.page - 1 }, - this.getDataSetsOnCurrentPage - ); - }, - total: this.state.pager.total, - currentlyShown, - }; - - const styles = { - dataTableWrap: { - display: "flex", - flexDirection: "column", - flex: 2, - }, - - detailsBoxWrap: { - flex: 1, - marginLeft: "1rem", - marginRight: "1rem", - opacity: 1, - flexGrow: 0, - }, - - listDetailsWrap: { - flex: 1, - display: "flex", - flexOrientation: "row", - }, - dialogContentStyle: { - width: "1150px", - maxWidth: "none", - }, - dialogBodyStyle: { - minHeight: "440px", - maxHeight: "600px", - }, - }; - - const rows = this.state.dataRows.map(dr => - fp.merge(dr, { - selected: ( - this.onSelectToggle(ev, dr)} - checked={dr.selected} - /> - ), - }) - ); - const selectedHeaderChecked = - !_.isEmpty(this.state.dataRows) && this.state.dataRows.every(row => row.selected); - const selectedColumnContents = ( - this.onSelectAllToggle(selectedHeaderChecked)} - iconStyle={{ width: "auto" }} - /> - ); - - const columns = [ - { - name: "selected", - style: { width: 20 }, - text: "", - sortable: false, - contents: selectedColumnContents, - }, - { name: "name", sortable: true }, - { name: "publicAccess", sortable: true }, - { name: "lastUpdated", sortable: true, value: "lastUpdatedHuman" }, - ]; - - const activeRows = _(rows) - .keyBy("id") - .at(this.state.dataRows.filter(dr => dr.selected).map(dr => dr.id)) - .value(); - - const renderSettingsButton = () => ( -
    - - - -
    - ); - - const renderLogsButton = () => ( -
    - - - -
    - ); - - const { d2 } = this.context; - const { - config, - logsPageLast, - logsOldestDate, - logsHasMore, - showOnlyCreatedByApp, - periods, - endDateForYear, - } = this.state; - - const showCreatedByAppCheck = !!config.createdByDataSetConfigurationAttributeId; - const olderLogLiteral = logsPageLast < 0 ? this.tr("logs_no_older") : this.tr("logs_older"); - const dateString = new Date(logsOldestDate || new Date()).toLocaleString(); - const label = olderLogLiteral + " " + dateString; - - const logLoadMoreButton = logsHasMore ? ( - - ) : null; - - const logActions = []; - - const renderLogs = () => { - const { logs } = this.state; - - if (!logs) return this.tr("logs_loading"); - else if (_(logs).isEmpty()) return this.tr("logs_none"); - else return logs.map(LogEntry); - }; - - const helpActions = []; - - const renderHelp = () => ( -
    - - - -
    - ); - - const { detailsObject, dataRows } = this.state; - const detailsObjectToShow = detailsObject - ? dataRows.find(dataRow => dataRow.id === detailsObject.id) || detailsObject - : null; - - return ( -
    - - {this.tr("help_landing_page")} - - - {this.state.orgUnits ? ( - - ) : null} - - {this.state.periods ? ( - log("set period dates", "success", datasets)} - onRequestClose={() => periodsStore.setState(null)} - contentStyle={styles.dialogContentStyle} - bodyStyle={styles.dialogBodyStyle} - /> - ) : null} - - {this.state.endDateForYear ? ( - log("set end date for year", "success", datasets)} - onRequestClose={() => endDateForYearStore.setState(null)} - contentStyle={styles.dialogContentStyle} - bodyStyle={styles.dialogBodyStyle} - /> - ) : null} - - {this.state.sharing ? ( - - ) : null} - -
    -
    - -
    - - {showCreatedByAppCheck && ( - - )} - - {this.tr("help_landing_page") !== "" && renderHelp()} - - {this.state.currentUserHasAdminRole && renderLogsButton()} - - {this.state.currentUserIsSuperuser && renderSettingsButton()} - -
    - -
    - -
    -
    - -
    -
    - - isContextActionAllowed(d2, ...args) - } - activeRows={activeRows} - onActiveRowsChange={this.onActiveRowsChange} - isMultipleSelectionAllowed={true} - /> - {this.state.dataRows.length || this.state.isLoading ? null : ( -
    No results found
    - )} -
    - {this.state.detailsObject ? ( - - ) : null} - {this.state.logsObject ? ( - - {renderLogs()} -
    {logLoadMoreButton}
    -
    - ) : null} -
    - - {canCreate(d2) && } -
    - ); - }, -}); - -function getDataSetsWithOwnerFields(d2, dataSets) { - const dataSetIds = dataSets.map(o => o.id).join(","); - return ( - d2.models.dataSets - // access fields are not in :owner anymore (2.36), ask for them explictly - .list({ - fields: ":owner,publicAccess,userAccesses,userGroupAccesses", - filter: `id:in:[${dataSetIds}]`, - }) - .then(c => c.toArray()) - ); -} - -export default DataSets; diff --git a/src/DataSets/DetailsBox.component.js b/src/DataSets/DetailsBox.component.js deleted file mode 100644 index d5377308f..000000000 --- a/src/DataSets/DetailsBox.component.js +++ /dev/null @@ -1,257 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import classes from "classnames"; -import FontIcon from "material-ui/FontIcon"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; -import _ from "lodash"; -import moment from "moment"; - -import { mapPromise, accesses } from "../utils/Dhis2Helpers"; -import { getCoreCompetencies, getProject } from "../models/dataset"; - -export default createReactClass({ - propTypes: { - fields: PropTypes.array, - showDetailBox: PropTypes.bool, - source: PropTypes.object, - onClose: PropTypes.func, - config: PropTypes.object, - }, - - mixins: [Translate], - - styles: { - ul: { marginTop: 3, paddingLeft: 20 }, - ulSharing: { marginTop: 3, paddingLeft: 0, listStyleType: "none" }, - liSharing: { fontStyle: "italic", fontWeight: 500 }, - }, - - virtualFields: new Set(["sharing", "dataInputPeriod"]), - - getInitialState() { - this.asyncFields = this.getAsyncFields(); - - return _(this.asyncFields) - .keys() - .map(asyncField => [asyncField, { loaded: false, value: null }]) - .fromPairs() - .value(); - }, - - getDefaultProps() { - return { - fields: [ - "name", - "shortName", - "code", - "displayDescription", - "created", - "lastUpdated", - "id", - "href", - "linkedProject", - "dataInputPeriod", - "coreCompetencies", - "sharing", - ], - showDetailBox: false, - onClose: () => {}, - }; - }, - - UNSAFE_componentWillReceiveProps(newProps) { - const datasetChanged = this.props.source.id !== newProps.source.id; - - if (datasetChanged) { - this.setState(this.getInitialState()); - this.componentDidMount(); - } - }, - - componentDidMount() { - mapPromise(_.toPairs(this.asyncFields), async ([asyncField, getValue]) => { - const value = await getValue.bind(this)(asyncField); - this.setState({ [asyncField]: { loaded: true, value } }); - }); - }, - - getDataInputPeriod(dataSet) { - const { openingDate, closingDate } = (dataSet.dataInputPeriods || [])[0] || {}; - const format = isoDate => (isoDate ? moment(isoDate).format("L") : "-"); - return openingDate || closingDate - ? [format(openingDate), format(closingDate)].join(" -> ") - : null; - }, - - getAsyncFields() { - const { d2 } = this.context; - - return { - coreCompetencies: () => - getCoreCompetencies(d2, this.props.config, this.props.source).then( - coreCompetencies => - _(coreCompetencies) - .toArray() - .map("name") - .join(", ") || "-" - ), - linkedProject: () => - getProject(d2, this.props.config, this.props.source).then(project => - project ? project.displayName : this.getTranslation("no_project_linked") - ), - }; - }, - - getValues() { - const getRawValue = fieldName => { - if (_(this.asyncFields).has(fieldName)) { - return this.state[fieldName].loaded - ? this.state[fieldName].value - : this.getTranslation("loading"); - } else if (this.virtualFields.has(fieldName)) { - return this.props.source; - } else { - return this.props.source[fieldName]; - } - }; - - return _(this.props.fields) - .map(fieldName => { - const rawValue = getRawValue(fieldName); - return rawValue - ? { fieldName, valueToRender: this.getValueToRender(fieldName, rawValue) } - : null; - }) - .compact() - .value(); - }, - - getDetailBoxContent() { - if (!this.props.source) { - return
    Loading details...
    ; - } - - return this.getValues().map(({ fieldName, valueToRender }) => { - const classNameLabel = `detail-field__label detail-field__${fieldName}-label`; - const classNameValue = `detail-field__value detail-field__${fieldName}`; - - return ( -
    -
    - {this.getTranslation(camelCaseToUnderscores(fieldName))} -
    - -
    {valueToRender}
    -
    - ); - }); - }, - - renderSharing(object) { - const i18nSubKeys = { - [accesses.none]: "none", - [accesses.read]: "can_view", - [accesses.write]: "can_edit", - }; - const i18nSubKey = i18nSubKeys[object.publicAccess]; - const publicAccess = i18nSubKey ? this.getTranslation(`public_${i18nSubKey}`) : null; - const getNames = objs => - _(objs) - .map("displayName") - .join(", ") || this.getTranslation("none"); - - return [ -
    - {this.getTranslation("public_access")}:{" "} - {publicAccess} -
    , -
    - {this.getTranslation("user_access")}:{" "} - {getNames(object.userAccesses)} -
    , -
    - - {this.getTranslation("user_group_access")} - - : {getNames(object.userGroupAccesses)} -
    , - ]; - }, - - getValueToRender(fieldName, value) { - const getDateString = dateValue => { - return moment(dateValue).format("LLLL"); - }; - - if (fieldName === "sharing") { - const sharingItems = this.renderSharing(value).map((sharingItem, index) => { - return
  • {sharingItem}
  • ; - }); - return
      {sharingItems}
    ; - } - - if (fieldName === "dataInputPeriod") { - return this.getDataInputPeriod(this.props.source) || "-"; - } - - if (fieldName === "created" || fieldName === "lastUpdated") { - return getDateString(value); - } - - if (fieldName === "href") { - // Suffix the url with the .json extension to always get the json representation of the api resource - return ( - - {value} - - ); - } - - if (_.isPlainObject(value) || value.modelDefinition) { - return value.displayName || value.name || "-"; - } - - if (Array.isArray(value) && value.length) { - const namesToDisplay = value - .map(v => (v.displayName ? v.displayName : v.name)) - .filter(name => name); - - return ( -
      - {namesToDisplay.map(name => ( -
    • {name}
    • - ))} -
    - ); - } - - return value; - }, - - render() { - const classList = classes("details-box"); - - if (this.props.showDetailBox === false) { - return null; - } - - return ( -
    - - close - -
    {this.getDetailBoxContent()}
    -
    - ); - }, -}); diff --git a/src/DataSets/DetailsBox.scss b/src/DataSets/DetailsBox.scss deleted file mode 100644 index 2f6c8eaee..000000000 --- a/src/DataSets/DetailsBox.scss +++ /dev/null @@ -1,30 +0,0 @@ -$detail-box--field-value--color: #333; - -.details-box { - padding: 1.5rem; -} - -.details-box__close-button { - cursor: pointer; - float: right; -} - -.detail-field__label { - font-weight: bold; -} - -.detail-field__value { - color: $detail-box--field-value--color; - padding-top: 4px; - min-width: 100%; - overflow: hidden; - text-overflow: ellipsis; -} - -.detail-field { - padding-bottom: 1rem; -} - -.detail-field:last-child { - padding-bottom: 0; -} diff --git a/src/DataSets/DetailsBoxWithScroll.component.js b/src/DataSets/DetailsBoxWithScroll.component.js deleted file mode 100644 index 72707242b..000000000 --- a/src/DataSets/DetailsBoxWithScroll.component.js +++ /dev/null @@ -1,43 +0,0 @@ -import React, { Component } from "react"; -import { Observable } from "rx"; -import DetailsBox from "./DetailsBox.component"; -import Paper from "material-ui/Paper"; - -export default class DetailsBoxWithScroll extends Component { - componentDidMount() { - this.disposable = Observable.fromEvent(global, "scroll") - .debounce(200) - .subscribe(() => this.props.scroll && this.forceUpdate()); - } - - componentWillUnmount() { - this.disposable && this.disposable.dispose(); - } - - render() { - let marginTop; - if (this.props.scroll) { - const appOffsetTop = document.querySelector("main").offsetTop; - marginTop = Math.max(document.scrollingElement.scrollTop - appOffsetTop, 0); - } else { - marginTop = 0; - } - - return ( -
    - - - -
    - ); - } -} diff --git a/src/DataSets/FormSteps.component.js b/src/DataSets/FormSteps.component.js deleted file mode 100644 index e81fd6162..000000000 --- a/src/DataSets/FormSteps.component.js +++ /dev/null @@ -1,225 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import Wizard from "../Wizard/Wizard.component"; -import { goToRoute } from "../router"; -import InitialConfig from "./Forms/InitialConfig.component"; -import GeneralInformation from "./Forms/GeneralInformation.component"; -import OrganisationUnit from "./Forms/OrganisationUnit.component"; -import CoreSections from "./Forms/CoreSections.component"; -import NonCoreSections from "./Forms/NonCoreSections.component"; -import Disaggregation from "./Forms/Disaggregation.component"; -import Sharing from "./Forms/Sharing.component"; -import GreyFields from "./Forms/GreyFields.component"; -import Save from "./Forms/Save.component"; -import snackActions from "../Snackbar/snack.actions"; -import LoadingMask from "../LoadingMask/LoadingMask.component"; -import Heading from "d2-ui/lib/headings/Heading.component"; -import DataSetStore from "../models/DataSetStore"; -import Settings from "../models/Settings"; - -const DataSetFormSteps = createReactClass({ - mixins: [Translate], - propTypes: {}, - - getInitialState() { - return { - store: null, - active: 0, - doneUntil: 0, - validating: false, - saving: false, - }; - }, - - componentDidMount() { - const { d2 } = this.context; - const settings = new Settings(d2); - const { action, id: datasetId } = this.props; - - const getStore = config => { - if (action === "add") { - return DataSetStore.add(d2, config); - } else if (action === "edit") { - return DataSetStore.edit(d2, config, datasetId); - } else if (action === "clone") { - return DataSetStore.clone(d2, config, datasetId); - } else { - throw new Error(`Unknown action: ${action}`); - } - }; - - settings - .get() - .then(config => { - return getStore(config) - .then(store => this.setState({ store })) - .catch(err => { - console.error(err); - snackActions.show({ - route: "/", - message: `Cannot edit dataset: ${err.message || JSON.stringify(err)}`, - }); - }); - }) - .catch(err => { - snackActions.show({ route: "/", message: `Error: settings not found: ${err}` }); - }); - }, - - _onFieldsChange(stepId, fieldPath, newValue, update = true) { - this.state.store.updateField(fieldPath, newValue); - if (update) { - this.forceUpdate(); - } - }, - - _afterSave() { - goToRoute("/"); - }, - - _onCancel() { - if (window.confirm(this.getTranslation("confirm_wizard_cancel"))) { - goToRoute("/"); - } - }, - - _onStepChange(newIndex) { - if (newIndex > this.state.active) { - this.setState({ stepAfterValidation: newIndex }); - } else { - this.setState({ active: newIndex, doneUntil: newIndex }); - } - }, - - _showButtonFunc(step) { - return step.id === "save"; - }, - - _formStatus(isValid) { - const newIndex = this.state.stepAfterValidation; - - if (isValid && newIndex) { - this.setState({ stepAfterValidation: null, active: newIndex, doneUntil: newIndex }); - } else { - this.setState({ stepAfterValidation: null }); - } - }, - - render() { - const { store } = this.state; - if (!store) return ; - - const props = { - config: store.config, - store: store, - validateOnRender: !!this.state.stepAfterValidation, - formStatus: this._formStatus, - }; - - const buttons = [ - { - id: "cancel", - label: this.getTranslation("cancel"), - onClick: this._onCancel, - }, - { - id: "save", - label: this.getTranslation("save"), - onClick: () => this.setState({ saving: true }), - showFunc: this._showButtonFunc, - }, - ]; - - const steps = [ - { - id: "initialConfig", - title: this.getTranslation("step_initial_configuration"), - component: InitialConfig, - props: props, - help: this.getTranslation("help_initial_configuration"), - }, - { - id: "generalInformation", - title: this.getTranslation("step_general_information"), - component: GeneralInformation, - props: props, - help: this.getTranslation("help_general_information"), - }, - { - id: "organisationUnit", - title: this.getTranslation("organisation_unit"), - component: OrganisationUnit, - props: props, - help: this.getTranslation("help_organisation_unit"), - }, - { - id: "sections", - title: this.getTranslation("step_core_indicators"), - component: CoreSections, - props: props, - help: this.getTranslation("help_core_indicators"), - }, - { - id: "sections", - title: this.getTranslation("step_non_core_indicators"), - component: NonCoreSections, - props: props, - help: this.getTranslation("help_non_core_indicators"), - }, - { - id: "disaggregation", - title: this.getTranslation("step_disaggregation"), - component: Disaggregation, - props: props, - help: this.getTranslation("help_disaggregation"), - }, - { - id: "grey_fields", - title: this.getTranslation("step_grey_fields"), - component: GreyFields, - props: props, - help: this.getTranslation("help_grey_fields"), - }, - { - id: "sharing", - title: this.getTranslation("step_sharing"), - component: Sharing, - visible: store.isSharingStepVisible(), - props: props, - help: this.getTranslation("help_sharing"), - }, - { - id: "save", - title: this.getTranslation("save"), - component: Save, - props: _.merge(props, { saving: this.state.saving, afterSave: this._afterSave }), - help: this.getTranslation("help_save"), - }, - ].filter(step => !step.disabled); - - const { dataset } = this.state.store; - const actionTitle = this.getTranslation("action_" + this.props.action, { - title: dataset.name || "-", - sourceTitle: dataset._sourceName || "-", - }); - - return ( -
    - {actionTitle} - - -
    - ); - }, -}); - -export default DataSetFormSteps; diff --git a/src/DataSets/Forms/CoreSections.component.js b/src/DataSets/Forms/CoreSections.component.js deleted file mode 100644 index f00315726..000000000 --- a/src/DataSets/Forms/CoreSections.component.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from "react"; -import Sections from "./Sections.component"; - -const excludeErrors = ["core_competency_no_items"]; - -const CoreSections = props => ; - -export default CoreSections; diff --git a/src/DataSets/Forms/Disaggregation.component.js b/src/DataSets/Forms/Disaggregation.component.js deleted file mode 100644 index 2618f6144..000000000 --- a/src/DataSets/Forms/Disaggregation.component.js +++ /dev/null @@ -1,145 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import ObserverRegistry from "../../utils/ObserverRegistry.mixin"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import DataSetElementCategoryComboSelectionDialog from "../../forms/DataSetElementCategoryComboSelectionDialog.component"; -import { getCategoryCombos, getDisaggregationForCategories, getDseId } from "../../utils/Dhis2Helpers"; -import SearchBox from "../../SearchBox/SearchBox.component"; -import { getSections } from "../../models/Section"; - -const SearchBoxWrapper = props => { - const { debounce, onChange } = props; - - const wrapperStyle = { - display: "inline-block", - width: "40%", - position: "relative", - margin: "5px 0px", - }; - - return ( -
    - -
    - ); -}; - -const Disaggregation = createReactClass({ - mixins: [Translate, ObserverRegistry], - - propTypes: { - validateOnRender: PropTypes.bool, - }, - - getInitialState() { - return { - categoryCombos: null, - dataSetElementsGroups: null, - filter: "", - }; - }, - - async componentDidMount() { - Promise.all([getCategoryCombos(this.context.d2), this._getDataSetElementsGroups()]).then( - ([categoryCombos, dataSetElementsGroups]) => { - this.setState({ - categoryCombos: categoryCombos.toArray(), - dataSetElementsGroups, - }); - } - ); - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) props.formStatus(true); - }, - - async _getDataSetElementsGroups() { - const { d2 } = this.context; - const { config } = this.props; - const { dataset, associations } = this.props.store; - const { coreCompetencies: ccs, initialCoreCompetencies: initialCcs } = associations; - const sections = await getSections(d2, config, dataset, initialCcs, ccs); - - const indicatorIdsByDeId = _(sections) - .flatMap(section => _.values(section.items)) - .filter(item => item.type === "indicator") - .flatMap(indItem => indItem.dataElementsNumeric.map(de => [de.id, indItem.id])) - .fromPairs() - .value(); - - return _(dataset.dataSetElements) - .groupBy(dse => indicatorIdsByDeId[dse.dataElement.id] || `de-${dse.dataElement.id}`) - .values() - .sortBy(dseGroup => dseGroup[0].dataElement.displayName) - .value(); - }, - - _onCategoriesSelected(dataSetElementIds, categories) { - const { d2 } = this.context; - const { dataSetElements } = this.props.store.dataset; - const { categoryCombos } = this.state; - - _(dataSetElementIds).each(dseId => { - const dataSetElementToUpdate = _(dataSetElements).find(dse => getDseId(dse) === dseId); - const customCategoryCombo = getDisaggregationForCategories( - d2, - dataSetElementToUpdate.dataElement, - categoryCombos, - categories - ); - dataSetElementToUpdate.categoryCombo = customCategoryCombo; - }); - - this.forceUpdate(); - }, - - _onSearchChange(searchObserver) { - this.registerDisposable(searchObserver.subscribe(s => this.setState({ filter: s }))); - }, - - _renderForm() { - const d2 = this.context.d2; - const { categoryCombos, filter, dataSetElementsGroups } = this.state; - const isSubstring = (s1, s2) => _.includes(s1.toLowerCase(), s2.toLowerCase()); - const canEdit = d2.currentUser.canCreate(d2.models.categoryCombos); - const dataSetElementsGroupsFiltered = filter - ? dataSetElementsGroups.filter(dseGroup => - dseGroup.some(dse => isSubstring(dse.dataElement.displayName, filter)) - ) - : dataSetElementsGroups; - - return ( -
    - {canEdit ? null : ( -

    - {this.getTranslation("cannot_disaggregate")} -

    - )} - - - - -
    - ); - }, - - render() { - return !this.state.categoryCombos || !this.state.dataSetElementsGroups ? ( - - ) : ( -
    {this._renderForm()}
    - ); - }, -}); - -export default Disaggregation; diff --git a/src/DataSets/Forms/GeneralInformation.component.js b/src/DataSets/Forms/GeneralInformation.component.js deleted file mode 100644 index dffdc63b1..000000000 --- a/src/DataSets/Forms/GeneralInformation.component.js +++ /dev/null @@ -1,178 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; -import Validators from "d2-ui/lib/forms/Validators"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import FormHelpers from "../../forms/FormHelpers"; -import { currentUserHasAdminRole } from "../../utils/Dhis2Helpers"; -import DataSetPeriods from "../DataSetPeriods"; -import snackActions from "../../Snackbar/snack.actions"; -import { getPeriodsValidationsErrors } from "../../models/data-periods"; - -const GeneralInformation = createReactClass({ - mixins: [Translate], - - styles: { - error: { color: "red" }, - }, - - propTypes: { - config: PropTypes.object, - store: PropTypes.object, - onFieldsChange: PropTypes.func, - validateOnRender: PropTypes.bool, - }, - - getInitialState() { - return { - error: null, - isLoading: true, - currentUserHasAdminRole: currentUserHasAdminRole(this.context.d2), - isValid: undefined, - }; - }, - - componentDidMount() { - this.context.d2.models.categoryCombos - .list({ - filter: ["dataDimensionType:eq:ATTRIBUTE", "name:eq:default"], - fields: "id,name", - paging: false, - rootJunction: "OR", - }) - .then(collection => collection.toArray()) - .then(categoryCombinations => - this.setState({ - isLoading: false, - categoryCombinations, - }) - ); - }, - - async _validateNameUniqueness(name) { - const { dataset } = this.props.store; - const dataSets = await this.context.d2.models.dataSets.list({ - fields: "id,name", - filter: "name:$ilike:" + name, - }); - const existsDataSetWithName = dataSets - .toArray() - .some(ds => ds.id !== dataset.id && ds.name.toLowerCase() === name.toLowerCase()); - - if (existsDataSetWithName) { - throw this.getTranslation("dataset_name_exists"); - } else { - this.setState({ error: null }); - } - }, - - _renderForm() { - const { store } = this.props; - const { dataset } = store; - const { error } = this.state; - - const fields = _.compact([ - FormHelpers.getTextField({ - name: "dataset.name", - label: this.getTranslation("name"), - value: dataset.name, - isRequired: true, - validators: [ - { - validator: Validators.isRequired, - message: this.getTranslation(Validators.isRequired.message), - }, - ], - asyncValidators: [name => this._validateNameUniqueness(name)], - }), - - FormHelpers.getTextField({ - name: "dataset.description", - label: this.getTranslation("description"), - value: dataset.description, - multiLine: true, - }), - - this.state.currentUserHasAdminRole && - FormHelpers.getTextField({ - name: "dataset.expiryDays", - label: this.getTranslation("expiry_days"), - help: this.getTranslation("expiry_days_help"), - value: dataset.expiryDays, - type: "number", - }), - - this.state.currentUserHasAdminRole && - FormHelpers.getTextField({ - name: "dataset.openFuturePeriods", - label: this.getTranslation("open_future_periods"), - value: dataset.openFuturePeriods, - type: "number", - }), - - FormHelpers.getBooleanField({ - name: "dataset.notifyCompletingUser", - label: this.getTranslation("notify_completing_user"), - value: dataset.notifyCompletingUser, - onChange: this._onUpdateField, - }), - ]); - - return ( -
    - {error &&

    {error}

    } - - - - -
    - ); - }, - - _onUpdateField(fieldPath, newValue) { - this.props.onFieldsChange(fieldPath, newValue); - }, - - getErrorMessage() { - const messages = getPeriodsValidationsErrors(this.props.store, { - validateOutputOutcome: this.state.currentUserHasAdminRole, - }); - return messages.join("\n"); - }, - - _onUpdateFormStatus(status) { - const statusIsValid = Boolean(!status.validating && status.valid); - const isValid = statusIsValid && !this.getErrorMessage(); - - this.setState({ isValid: statusIsValid }); - this.props.formStatus(isValid); - }, - - async UNSAFE_componentWillReceiveProps(props) { - if (!props.validateOnRender) return; - - const message = this.getErrorMessage(); - const isValid = this.state.isValid && !message; - - if (message) snackActions.show({ message }); - this.props.formStatus(isValid); - }, - - render() { - if (this.state.isLoading) { - return ; - } else { - return this._renderForm(); - } - }, -}); - -export default GeneralInformation; diff --git a/src/DataSets/Forms/GreyFields.component.js b/src/DataSets/Forms/GreyFields.component.js deleted file mode 100644 index 0f9a70d15..000000000 --- a/src/DataSets/Forms/GreyFields.component.js +++ /dev/null @@ -1,39 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import GreyFieldsTable from "../../forms/GreyFieldsTable.component"; -import { collectionToArray } from "../../utils/Dhis2Helpers"; - -const GreyFields = createReactClass({ - mixins: [Translate], - - propTypes: { - validateOnRender: PropTypes.bool, - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) props.formStatus(true); - }, - - _save(greyedFields) { - this.props.store.setGreyedFields(greyedFields); - }, - - render() { - const { dataset } = this.props.store; - const sections = collectionToArray(dataset.sections); - - return ( -
    - -
    - ); - }, -}); - -export default GreyFields; diff --git a/src/DataSets/Forms/InitialConfig.component.js b/src/DataSets/Forms/InitialConfig.component.js deleted file mode 100644 index c5726e398..000000000 --- a/src/DataSets/Forms/InitialConfig.component.js +++ /dev/null @@ -1,165 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import FormHelpers from "../../forms/FormHelpers"; -import snackActions from "../../Snackbar/snack.actions"; -import moment from "moment"; - -const InitialConfig = createReactClass({ - mixins: [Translate], - - propTypes: { - config: PropTypes.object, - store: PropTypes.object, - onFieldsChange: PropTypes.func, - }, - - getDefaultProps: function() { - return { onFieldsChange: _.identity }; - }, - - getInitialState() { - return { isLoading: true, errors: {} }; - }, - - _getCategoryOptions(categoryId, fields = [":all"]) { - return this.context.d2.models.categoryOptions - .filter() - .on("categories.id") - .equals(categoryId) - .list({ fields: `id,${fields.join(",")}`, paging: false }) - .then(collection => _.keyBy(collection.toArray(), "id")); - }, - - _getDataElementGroups(dataElementGroupSetId, fields = [":all"]) { - return this.context.d2.models.dataElementGroups - .filter() - .on("groupSets.id") - .equals(dataElementGroupSetId) - .list({ fields: `id,${fields.join(",")}`, paging: false }) - .then(collection => _.keyBy(collection.toArray(), "id")); - }, - - _getProjects() { - const fields = [ - "code", - "displayName", - "startDate", - "endDate", - "organisationUnits[id,path,displayName]", - ]; - return this._getCategoryOptions(this.props.config.categoryProjectsId, fields); - }, - - _getCoreCompetencies() { - const fields = ["name", "displayName", "code"]; - const degsId = this.props.config.dataElementGroupSetCoreCompetencyId; - return this._getDataElementGroups(degsId, fields); - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) { - const { coreCompetencies, project } = this.props.store.associations; - - if (_.isEmpty(coreCompetencies)) { - props.formStatus(false); - const error = this.getTranslation("select_one_core_competency"); - this.setState({ errors: { coreCompetencies: [error] } }); - } else { - if (!project) { - snackActions.show({ message: this.getTranslation("no_project_selected") }); - } - props.formStatus(true); - this.setState({ errors: {} }); - } - } - }, - - componentDidMount() { - Promise.all([this._getProjects(), this._getCoreCompetencies()]).then( - ([projects, coreCompetencies]) => { - this.setState({ - isLoading: false, - projects: projects, - coreCompetencies: coreCompetencies, - }); - } - ); - }, - - _filterProjects(projectOptions, controls) { - const today = moment().startOf("day"); - const isProjectOpen = project => - project && (!project.endDate || moment(project.endDate) >= today); - return projectOptions.filter( - projectOption => - controls.seeAllProjects || isProjectOpen(this.state.projects[projectOption.value]) - ); - }, - - _getOptionsFromIndexedObjects(objects) { - return _(objects) - .values() - .map(obj => ({ value: obj.id, text: obj.displayName })) - .value(); - }, - - render() { - if (this.state.isLoading) { - return ; - } else { - return this._renderForm(); - } - }, - - _renderForm() { - const { associations } = this.props.store; - const fields = [ - FormHelpers.getRichSelectField({ - name: "associations.project", - label: this.getTranslation("linked_project"), - value: associations.project ? associations.project.id : null, - options: this._getOptionsFromIndexedObjects(this.state.projects), - filterOptions: this._filterProjects, - controls: [ - { - name: "seeAllProjects", - label: this.getTranslation("show_closed_projects"), - value: false, - }, - ], - }), - - FormHelpers.getMultiSelect({ - name: "associations.coreCompetencies", - options: this._getOptionsFromIndexedObjects(this.state.coreCompetencies), - onChange: this._onCoreCompetenciesUpdate, - label: this.getTranslation("core_competencies"), - selected: _.map(associations.coreCompetencies, "id"), - errors: this.state.errors.coreCompetencies, - }), - ]; - - return ; - }, - - _onCoreCompetenciesUpdate(newIds) { - const newCoreCompetencies = _.at(this.state.coreCompetencies, newIds); - this.props.onFieldsChange("associations.coreCompetencies", newCoreCompetencies); - }, - - _onUpdateField(fieldPath, newValue) { - if (fieldPath === "associations.project") { - const project = this.state.projects[newValue]; - this.props.onFieldsChange(fieldPath, project); - } else { - this.props.onFieldsChange(fieldPath, newValue); - } - }, -}); - -export default InitialConfig; diff --git a/src/DataSets/Forms/NonCoreSections.component.js b/src/DataSets/Forms/NonCoreSections.component.js deleted file mode 100644 index 6abe277f8..000000000 --- a/src/DataSets/Forms/NonCoreSections.component.js +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react"; -import Sections from "./Sections.component"; - -const NonCoreSections = props => ; - -export default NonCoreSections; diff --git a/src/DataSets/Forms/OrganisationUnit.component.js b/src/DataSets/Forms/OrganisationUnit.component.js deleted file mode 100644 index d497c64a3..000000000 --- a/src/DataSets/Forms/OrganisationUnit.component.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import OrganisationUnitTreeMultiSelect from "d2-ui/lib/org-unit-select/orgunit-tree-multi-select"; -import scrollToComponent from "react-scroll-to-component"; -import { collectionToArray } from "../../utils/Dhis2Helpers"; - -const OrganisationUnit = createReactClass({ - mixins: [Translate], - - propTypes: { - config: PropTypes.object, - store: PropTypes.object, - }, - - getInitialState() { - return { errors: null }; - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) { - const organisationUnits = collectionToArray(this.props.store.dataset.organisationUnits); - if (_(organisationUnits).isEmpty()) { - this.setState({ errors: this.getTranslation("select_one_organisation_unit") }); - scrollToComponent(this.refs.errors); - } else { - props.formStatus(true); - } - } - }, - - _renderSharingWarning() { - const { project, countries } = this.props.store.associations; - if (!project && !_.isEmpty(countries)) { - return

    {this.getTranslation("sharing_warning")}

    ; - } - }, - - _renderErrors() { - return ( -

    - {this.state.errors} -

    - ); - }, - - _onChange(orgUnits) { - this.props.onFieldsChange("associations.organisationUnits", orgUnits, false); - }, - - render() { - const modelDefinition = { plural: "dataSets" }; - const model = this.props.store.dataset; - - return ( -
    - {this._renderSharingWarning()} - {this._renderErrors()} - -
    - ); - }, -}); - -export default OrganisationUnit; diff --git a/src/DataSets/Forms/Save.component.js b/src/DataSets/Forms/Save.component.js deleted file mode 100644 index 1f78af4c9..000000000 --- a/src/DataSets/Forms/Save.component.js +++ /dev/null @@ -1,154 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import snackActions from "../../Snackbar/snack.actions"; -import { collectionString } from "../../utils/Dhis2Helpers"; -import { log } from "../log"; - -const Save = createReactClass({ - mixins: [Translate], - - propTypes: { - config: PropTypes.object, - store: PropTypes.object, - state: PropTypes.string, - errors: PropTypes.arrayOf(PropTypes.string), - afterSave: PropTypes.func.isRequired, - }, - - saveStates: { - SHOW: "SHOW", - SAVING: "SAVING", - SAVE_ERROR: "SAVE_ERROR", - }, - - UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.saving) { - this._save(); - } - }, - - getInitialState() { - return { saveState: this.saveStates.SHOW, errors: [] }; - }, - - _getLoggingMessage() { - if (this.props.store.action === "add") { - return "create new dataset"; - } else if (this.props.store.action === "edit") { - return "edit dataset"; - } else if (this.props.store.action === "clone") { - return "clone dataset"; - } else { - return "unknown action"; - } - }, - - _redirectAfterSave() { - const { dataset } = this.props.store; - log(this._getLoggingMessage(), "success", dataset); - snackActions.show({ message: "dataset_saved", action: "ok", translate: true }); - this.props.afterSave(); - }, - - _saveErrors(error) { - const { dataset } = this.props.store; - log(this._getLoggingMessage(), "failed", dataset); - console.trace(error); - const message = _.isEmpty(error) ? error.toString() : JSON.stringify(error, null, 2); - this.setState({ saveState: this.saveStates.SAVE_ERROR, errors: [message] }); - }, - - _save() { - this.setState({ saveState: this.saveStates.SAVING }); - this.props.store - .save() - .then(this._redirectAfterSave) - .catch(this._saveErrors); - }, - - render() { - const { d2 } = this.context; - const { dataset, associations } = this.props.store; - const { saveState, errors } = this.state; - const ListItem = ({ field, value }) => { - return ( -
  • - - {value || "-"} -
  • - ); - }; - - const projectName = associations.project ? ( - associations.project.displayName - ) : ( - - - - [{this.getTranslation("select_a_project")}] - - ); - - if (saveState === this.saveStates.SHOW || saveState === this.saveStates.SAVING) { - return ( -
    -
    - {saveState === "SAVING" ? ( -
    - -

    - {this.getTranslation("wizard_save_message")} -

    -
    - ) : ( - this.getTranslation("wizard_presave_message") - )} -
    - -
      - - - cc.name).join(", ")} - /> - - - c.displayName) - .join(", ")} - /> -
    -
    - ); - } else if (saveState === this.saveStates.SAVE_ERROR) { - return ( -
    -

    - {this.getTranslation("wizard_save_error_message")} -

    - {errors.map((error, idx) => ( -
    {error}
    - ))} -
    - ); - } - }, -}); - -export default Save; diff --git a/src/DataSets/Forms/Sections.component.js b/src/DataSets/Forms/Sections.component.js deleted file mode 100644 index f342f15a0..000000000 --- a/src/DataSets/Forms/Sections.component.js +++ /dev/null @@ -1,640 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import SearchBox from "../../SearchBox/SearchBox.component"; -import MultipleDataTable from "../../MultipleDataTable/MultipleDataTable.component"; -import ObserverRegistry from "../../utils/ObserverRegistry.mixin"; -import Action from "d2-ui/lib/action/Action"; -import Sidebar from "d2-ui/lib/sidebar/Sidebar.component"; -import Paper from "material-ui/Paper/Paper"; -import { Tabs, Tab } from "material-ui-scrollable-tabs/Tabs"; -import SelectField from "material-ui/SelectField/SelectField"; -import MenuItem from "material-ui/MenuItem/MenuItem"; -import Checkbox from "material-ui/Checkbox/Checkbox"; -import CollapsibleBox from "../../components/collapsible-box/CollapsibleBox"; -import Chip from "material-ui/Chip/Chip"; -import fp from "lodash/fp"; -import Popover from "material-ui/Popover/Popover"; -import MoreVert from "material-ui/svg-icons/navigation/more-vert"; -import IconButton from "material-ui/IconButton/IconButton"; -import { getSections, getItemStatus, sectionSelectedItemsCount } from "../../models/Section"; -import Divider from "material-ui/Divider/Divider"; -import snackActions from "../../Snackbar/snack.actions"; -import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; - -const FilterSelectField = ({ label, value, onChange, items, styles = {}, emptyLabel = "" }) => { - const defaultItem = { value: null, text: emptyLabel }; - const allItems = [defaultItem].concat(items); - const selectStyle = { marginRight: 5, ...styles }; - - return ( - onChange(value)} - > - {allItems.map((item, idx) => ( - {item.text}} /> - ))} - - ); -}; - -const SectionsSearchBox = props => { - const { name, debounce, onChange } = props; - - const wrapperStyle = { - display: "inline-block", - width: "20%", - position: "relative", - margin: "5px 0px", - }; - - return ( -
    - -
    - ); -}; - -const SectionsSidebar = props => { - if (props.visible === false) return null; - const { open, sections, currentSection, width, onSectionChange, onCollapsibleToggle } = props; - const sidebarSections = sections.map(section => ({ - key: section, - label: section, - })); - - return ( - - - - ); -}; - -const SectionConfig = createReactClass({ - mixins: [Translate, ObserverRegistry], - - _onOpen(ev) { - ev.preventDefault(); - this.setState({ open: true, anchorEl: ev.currentTarget }); - }, - - getInitialState() { - return { open: false, anchorEl: null }; - }, - - render() { - const { sections, onChange, onGroupSectionsChange, dataset } = this.props; - const { open, anchorEl } = this.state; - const sectionForCurrentValues = _.first(sections); - const sectionNames = sections.map(section => section.name); - if (!sectionForCurrentValues) return; - - return ( -
    - - - - - this.setState({ open: false })} - style={{ width: 350, padding: 15, overflowY: "hidden" }} - > - onGroupSectionsChange(value)} - /> - - - - onChange(sectionNames, "showRowTotals", value)} - /> - - onChange(sectionNames, "showColumnTotals", value)} - /> - -
    - ); - }, -}); - -const ThemeTabs = ({ title, items, allLabel, onSelected, visible = true }) => { - if (!visible) return null; - - const renderTabs = items => { - const themesFromItems = _(items) - .map("theme") - .uniq() - .compact() - .map(s => ({ key: s, label: s })) - .sortBy("label") - .value(); - const themes = [{ key: "", label: allLabel }, ...themesFromItems]; - - if (_(themesFromItems).isEmpty()) { - return null; - } else { - return ( - - {themes.map(theme => ( - onSelected(theme.key)} - isMultiLine={true} - /> - ))} - - ); - } - }; - - return ( -
    - {title && {title}} - {renderTabs(items)} -
    - ); -}; - -const Sections = createReactClass({ - mixins: [Translate, ObserverRegistry], - - propTypes: { - validateOnRender: PropTypes.bool, - type: PropTypes.oneOf(["all", "core", "nonCore"]), - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) { - const isValid = this._processDatasetSections({ showErrors: true }); - props.formStatus(isValid); - } - }, - - componentWillUnmount() { - // Save state on back button (forward button saves state in UNSAFE_componentWillReceiveProps) - if (!this.props.validateOnRender) { - this._processDatasetSections({ showErrors: false }); - } - }, - - getInitialState() { - return { - isLoading: true, - sections: null, // loaded on componentDidMount - sidebarOpen: true, - filters: {}, - filterName: null, - sorting: null, - }; - }, - - componentDidMount() { - const { d2 } = this.context; - const { config } = this.props; - const { dataset, associations } = this.props.store; - const { coreCompetencies, initialCoreCompetencies } = associations; - - getSections(d2, config, dataset, initialCoreCompetencies, coreCompetencies).then( - sectionsArray => { - const sections = _.keyBy(sectionsArray, "name"); - const sectionNames = sectionsArray.map(section => section.name); - this.setState({ - isLoading: false, - sections: sections, - sectionNames: sectionNames, - currentSectionName: _.isEmpty(sectionsArray) ? null : sectionsArray[0].name, - }); - } - ); - }, - - _processDatasetSections({ showErrors }) { - const { store } = this.props; - const getErrorMessage = (errors, maxMessages = 10) => { - const errorsLimited = _.take(errors, maxMessages); - const diff = errors.length - errorsLimited.length; - const items = [ - errorsLimited, - diff > 0 ? [this.getTranslation("more_errors", { n: diff })] : [], - ]; - return _(items) - .flatten() - .map("message") - .join("\n"); - }; - - if (!this.state.sections) { - // Component did not mount, but if the dataset has sections, the user may go to the next step - return store.hasSections(); - } else { - const { errors, dataset } = store.processDatasetSections( - store.dataset, - this.state.sections - ); - store.dataset = dataset; - - const errorsToShow = errors.filter( - error => !_(this.props.excludeErrors || []).includes(error.key) - ); - - const isValid = _(errorsToShow).isEmpty(); - if (showErrors && !isValid) { - snackActions.show({ message: getErrorMessage(errorsToShow) }); - } - return isValid; - } - }, - - _setFilterName(searchObserver) { - this.registerDisposable(searchObserver.subscribe(s => this.setState({ filterName: s }))); - }, - - _getFilteredItems(items) { - const { filters, filterName, sorting } = this.state; - - const getFiltered = items => - _.reduce( - filters, - (items_, val, key) => - items_.filter( - de => !key || val === null || val === undefined || de[key] === val - ), - items - ); - const getFilteredByName = items => - !filterName - ? items - : items.filter(de => - _.includes(de.displayName.toLowerCase(), filterName.toLowerCase()) - ); - const getDefaultOrder = items => - _(items) - .sortBy(item => [ - !item.selectedOnLoad, - getItemStatus(item) === "phased-out", - item.name, - ]) - .value(); - const getSorted = items => - !sorting - ? getDefaultOrder(items) - : _(items) - .orderBy([sorting[0]], [sorting[1]]) - .value(); - return getSorted(getFilteredByName(getFiltered(items))); - }, - - _onColumnSort(sorting) { - this.setState({ sorting }); - }, - - _onFilter(key, value) { - const newFilters = _({}) - .assign(this.state.filters) - .set(key, value) - .pickBy((value, _key) => value || value === false) - .value(); - this.setState({ filters: newFilters }); - }, - - _renderSelectFilter(itemsAll, column, _styles) { - const label = this.getTranslation(camelCaseToUnderscores(column)); - const items = _(itemsAll) - .values() - .map(column) - .uniq() - .compact() - .map(value => ({ value: value, text: value })) - .value(); - - return ( - this._onFilter(column, value)} - items={items} - /> - ); - }, - - _selectRows(visibleItems, selectedHeaderChecked) { - const newState = visibleItems.reduce((state, item) => { - const path = ["sections", item.sectionName, "items", item.id, "selected"]; - return fp.set(path, selectedHeaderChecked, state); - }, this.state); - this.setState(newState); - }, - - _onSelectedToggled(item) { - const path = ["sections", item.sectionName, "items", item.id, "selected"]; - const oldValue = fp.get(path, this.state); - this.setState(fp.set(path, !oldValue, this.state)); - }, - - _onChangeSection(sectionName) { - this.setState({ - currentSectionName: sectionName, - filters: {}, - filterName: null, - }); - }, - - _onChangeSectionsConfig(sectionNames, key, value) { - const newState = _.reduce( - sectionNames, - (state, sectionName) => fp.set(["sections", sectionName, key], value, state), - this.state - ); - this.setState(newState); - }, - - _onGroupSectionsChange(value) { - this.props.onFieldsChange("dataset.renderAsTabs", !value); - }, - - _sectionsVisible() { - return this.props.store.dataset.renderAsTabs; - }, - - _getVisibleSections() { - const { currentSectionName, sections, sectionNames } = this.state; - const currentSection = sections[currentSectionName]; - return this._sectionsVisible() ? [currentSection] : _.at(sections, sectionNames); - }, - - _getItems() { - const { type } = this.props; - - const itemPredicate = { - core: item => item.isCore, - nonCore: item => !item.isCore, - all: _item => true, - }[type || "all"]; - - return _.flatMap(this._getVisibleSections(), section => - _.values(section.items).filter(itemPredicate) - ); - }, - - _getCellValue(value, column, item) { - switch (column) { - case "selected": - // When there are many rows, material-ui's rich slows down the rendering, - // use a more simple checkbox and try to mimic the look as much as possible. - return ( -
    this._onSelectedToggled(item)}> - - -
    - ); - case "status": - if (getItemStatus(item) === "phased-out") { - return ( - - {value} - - ); - } else { - return value; - } - default: - return value; - } - }, - - _renderForm() { - const { sections } = this.state; - const itemsCount = sectionSelectedItemsCount(sections); - const warningItemsCount = 300; - const style = { - lineHeight: "40px", - margin: 20, - textAlign: "center", - fontWeight: "bold", - backgroundColor: "#eac5c5", - }; - - if (itemsCount > warningItemsCount) { - return ( -
    - - {this.getTranslation("sections_many_items_selected", { - itemsCount, - warningItemsCount, - })} - - {this._renderTable()} -
    - ); - } else { - return this._renderTable(); - } - }, - - _renderTable() { - const { type } = this.props; - const { sidebarOpen, currentSectionName, sections, filters } = this.state; - const { dataset } = this.props.store; - const currentSection = this.state.sections[currentSectionName]; - if (!currentSection) { - return
    {this.getTranslation("no_elements_found")}
    ; - } - - const itemsAll = this._getItems(); - const items = this._getFilteredItems(itemsAll); - const selectedHeaderChecked = !_.isEmpty(items) && items.every(dr => dr.selected); - const rows = _.map(items, item => - _(item) - .mapValues((k, v) => this._getCellValue(k, v, item)) - .set( - "_style", - getItemStatus(item) === "phased-out" ? { backgroundColor: "#FEE" } : {} - ) - .value() - ); - const selectedColumnContents = ( - this._selectRows(items, !selectedHeaderChecked)} - iconStyle={{ width: "auto" }} - /> - ); - const columns = _.compact([ - { - name: "selected", - style: { width: 20 }, - text: "", - sortable: false, - contents: selectedColumnContents, - }, - { - name: "displayName", - sortable: true, - style: { width: "33%" }, - }, - this._sectionsVisible() - ? null - : { - name: "coreCompetency", - sortable: true, - }, - filters.theme && this._sectionsVisible() - ? null - : { - name: "theme", - sortable: true, - }, - { - name: "group", - sortable: true, - }, - type === "core" - ? null - : { - name: "origin", - sortable: true, - }, - { - name: "status", - sortable: true, - }, - currentSection.type === "output" - ? { - name: "disaggregation", - sortable: true, - } - : null, - ]); - - const visibleSections = this._getVisibleSections(); - - return ( -
    - this.setState({ sidebarOpen: isOpen })} - /> - -
    - this._onFilter("theme", themeKey)} - items={itemsAll} - allLabel={this.getTranslation("all")} - /> - - - -
    -
    - -
    -
    - {!this._sectionsVisible() && - this._renderSelectFilter(itemsAll, "coreCompetency", { - width: "20%", - })} - - {!this._sectionsVisible() && - this._renderSelectFilter(itemsAll, "theme", { width: "20%" })} - - {this._renderSelectFilter(itemsAll, "group", { width: "20%" })} - - {type !== "core" && - this._renderSelectFilter(itemsAll, "origin", { width: "20%" })} - - this._onFilter("selected", value)} - items={[ - { value: true, text: this.getTranslation("yes") }, - { value: false, text: this.getTranslation("no") }, - ]} - /> -
    -
    - - {rows.length === 0 ? ( -
    {this.getTranslation("no_elements_found")}
    - ) : ( - {}} - isContextActionAllowed={(_model, _action) => true} - isMultipleSelectionAllowed={true} - /> - )} -
    -
    - ); - }, - - render() { - return this.state.isLoading ? : this._renderForm(); - }, -}); - -export default Sections; diff --git a/src/DataSets/Forms/Sharing.component.js b/src/DataSets/Forms/Sharing.component.js deleted file mode 100644 index da6be47f3..000000000 --- a/src/DataSets/Forms/Sharing.component.js +++ /dev/null @@ -1,88 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; -import FormHelpers from "../../forms/FormHelpers"; -import { getCountryCode } from "../../utils/Dhis2Helpers"; - -const Sharing = createReactClass({ - mixins: [Translate], - - getInitialState() { - this.countriesByCode = this.props.store.countriesByCode; - - return { - errors: {}, - }; - }, - - propTypes: { - validateOnRender: PropTypes.bool, - }, - - UNSAFE_componentWillReceiveProps(props) { - if (props.validateOnRender) { - const { countries } = this.props.store.associations; - - if (_.isEmpty(countries)) { - props.formStatus(false); - const error = this.getTranslation("select_at_least_one_country"); - this.setState({ errors: { countries: [error] } }); - } else { - props.formStatus(true); - this.setState({ errors: {} }); - } - } - }, - - _getCurrentUserCountryCode() { - // d2.currentUser contains no userGroups, get the info - return this.context.d2.models.users - .list({ - fields: "id,userGroups[id,displayName]", - filter: "id:eq:" + this.context.d2.currentUser.id, - order: "displayName:asc", - paging: false, - }) - .then(usersCollection => - _(usersCollection.toArray()) - .flatMap(user => user.userGroups.toArray()) - .find(userGroup => userGroup.displayName.match(/_users$/i)) - ) - .then(userGroup => (userGroup ? userGroup.displayName.split("_")[0] : null)); - }, - - countrySelected(value) { - const selectedCountry = this.countriesByCode[value]; - this.props.onFieldsChange("associations.country", selectedCountry); - }, - - _onCountriesUpdate(codes) { - const countries = _.at(this.countriesByCode, codes); - this.props.onFieldsChange("associations.countries", countries); - }, - - render() { - const selectedCountries = this.props.store.associations.countries.map(getCountryCode); - const countryOptions = _(this.countriesByCode) - .map((country, code) => ({ value: code, text: country.displayName })) - .value(); - - const fields = [ - FormHelpers.getMultiSelect({ - name: "associations.countries", - options: countryOptions, - onChange: this._onCountriesUpdate, - label: this.getTranslation("sharing_countries_description"), - selected: selectedCountries, - errors: this.state.errors.countries, - }), - ]; - - return {}} />; - }, -}); - -export default Sharing; diff --git a/src/DataSets/List.scss b/src/DataSets/List.scss deleted file mode 100644 index 0c0deaaa0..000000000 --- a/src/DataSets/List.scss +++ /dev/null @@ -1,27 +0,0 @@ -.list { - color: inherit; -} - -.data-table-wrap { - display: flex; - flex: 2; - transition: width .2s linear; - transition-delay: .1s; -} - -.details-box-wrap.show-as-column { - flex: 1; - margin-left: 1rem; - margin-right: 1rem; - opacity: 1; -} - -.list-details-wrap { - flex: 1; - display: flex; - flex-orientation: row; -} - -.list-search-field input[type="search"]::-webkit-search-decoration { - display: none; -} diff --git a/src/DataSets/PeriodsDialog.js b/src/DataSets/PeriodsDialog.js deleted file mode 100644 index d39be26cf..000000000 --- a/src/DataSets/PeriodsDialog.js +++ /dev/null @@ -1,200 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Dialog from "material-ui/Dialog"; -import FlatButton from "material-ui/FlatButton/FlatButton"; -import RaisedButton from "material-ui/RaisedButton/RaisedButton"; -import DataSetPeriods from "./DataSetPeriods"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import snackActions from "../Snackbar/snack.actions"; -import { - getDataSetsForPeriods, - getDataSetsForPeriodsEndDate, - saveDataSets, - saveDataSetsEndDate, - getPeriodsValidationsErrors, -} from "../models/data-periods"; - -export default class PeriodsDialog extends React.Component { - static propTypes = { - onRequestClose: PropTypes.func.isRequired, - endYear: PropTypes.number, - }; - - static contextTypes = { - d2: PropTypes.any, - }; - - state = { - saving: false, - dataSets: null, - store: null, - warning: null, - error: null, - }; - - styles = { - warning: { color: "rgb(255, 152, 0)", marginBottom: -10 }, - error: { fontSize: "1m", color: "red", marginTop: 15 }, - noMaxWidth: { maxWidth: "none" }, - }; - - constructor(props, context) { - super(props); - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - - const { endYear } = props; - this.getDataSetsForPeriods = endYear ? getDataSetsForPeriodsEndDate : getDataSetsForPeriods; - this.saveDataSets = endYear ? saveDataSetsEndDate : saveDataSets; - } - - async componentDidMount() { - const { dataSets, store, warning, error } = await this.getDataSetsForPeriods( - this.context.d2, - this.props.dataSets.map(ds => ds.id), - this.props.endYear - ).catch(err => ({ error: err.message })); - - if (error) { - snackActions.show({ message: error }); - this.props.onRequestClose(); - } else { - this.setState({ dataSets, store, warning }); - } - } - - getActions(validationErrors) { - const { onRequestClose } = this.props; - const { saving } = this.state; - - return [ - , - 0} - onClick={this.save} - />, - ]; - } - - save = async () => { - const { d2 } = this.context; - const { onRequestClose, endYear } = this.props; - const { store, dataSets } = this.state; - - this.setState({ saving: true, error: null }); - - try { - const response = _.first(await this.saveDataSets(d2, store, dataSets, endYear)); - if (response && response.status === "OK") { - onRequestClose(); - snackActions.show({ message: this.getTranslation("dataset_saved") }); - } else { - this.setState({ error: JSON.stringify(response, null, 2) }); - } - } catch (err) { - console.error(err); - this.setState({ error: (err && err.message) || "Error" }); - } finally { - this.setState({ saving: false }); - } - }; - - onUpdateField = (fieldPath, newValue) => { - const { store } = this.state; - - store.updateField(fieldPath, newValue); - this.forceUpdate(); - }; - - render() { - const { onRequestClose, endYear } = this.props; - const { saving, dataSets, store, warning } = this.state; - - if (!store) return ; - - const validationErrors = this.getValidationErrors(); - const errors = _.compact([this.state.error, ...validationErrors]); - const actions = this.getActions(validationErrors); - - const baseTitle = endYear - ? this.getTranslation("period_dates_for_year", { year: endYear }) - : this.getTranslation("period_dates"); - - const title = baseTitle + ": " + this.getNames(dataSets); - - return ( - - {saving && } - {warning &&

    {warning}

    } - - - -
    - {errors.map(error => ( -
    {error}
    - ))} -
    - - {this.renderEndYearWarnings()} -
    - ); - } - - getValidationErrors() { - return getPeriodsValidationsErrors(this.state.store, { - validateOutputOutcome: !this.props.endYear, - }); - } - - renderEndYearWarnings() { - const { store } = this.state; - const { endYear } = this.props; - const { associations } = store; - if (!endYear) return null; - - const outputEndYear = associations.periodDates.output[endYear]; - const outcomeEndYear = associations.periodDates.outcome[endYear]; - const someEmptyValues = !outputEndYear.end || !outcomeEndYear.end; - if (!someEmptyValues) return null; - - return ( -
    - {this.getTranslation("end_dates_empty")} -
    - ); - } - - getNames(dataSets) { - const maxShown = 5; - const remanining = dataSets.length - maxShown; - - const baseNames = _(dataSets) - .take(maxShown) - .map(ds => ds.displayName) - .join(", "); - - return remanining > 0 - ? this.getTranslation("this_and_n_others", { this: baseNames, n: remanining }) - : baseNames; - } -} diff --git a/src/DataSets/context.actions.js b/src/DataSets/context.actions.js deleted file mode 100644 index 607a212d2..000000000 --- a/src/DataSets/context.actions.js +++ /dev/null @@ -1,136 +0,0 @@ -import Action from "d2-ui/lib/action/Action"; -import detailsStore from "./details.store"; -import deleteStore from "./delete.store"; -import orgUnitsStore from "./orgUnits.store"; -import logsStore from "./logs.store"; -import sharingStore from "./sharing.store"; -import { goToRoute } from "../router"; -import { - currentUserHasAdminRole, - canManage, - canCreate, - canDelete, - canUpdate, -} from "../utils/Dhis2Helpers"; -import _ from "lodash"; -import periodsStore from "./periods.store"; -import Store from "d2-ui/lib/store/Store"; - -export const endDateForYearStore = Store.create(); - -const setupActions = actions => { - const actionsByName = _.keyBy(actions, "name"); - const contextActions = Action.createActionsFromNames(actions.map(a => a.name)); - const contextMenuIcons = _(actions) - .map(a => [a.name, a.icon || a.name]) - .fromPairs() - .value(); - - const isContextActionAllowed = function(d2, selection, actionName) { - const action = actionsByName[actionName]; - const arg = action && !action.multiple && _.isArray(selection) ? selection[0] : selection; - - if (!action || !selection || selection.length === 0) { - return false; - } else if (!action.multiple && selection.length !== 1) { - return false; - } else if (action.isActive && !action.isActive(d2, arg)) { - return false; - } else { - return true; - } - }; - - actions - .filter(a => a.onClick) - .forEach(action => { - contextActions[action.name].subscribe(({ data }) => { - const { selected, options } = data; - - let arg; - if (action.multiple) { - arg = _.isArray(selected) ? selected : [selected]; - } else { - arg = _.isArray(selected) ? selected[0] : selected; - } - - if (arg) action.onClick(arg, options); - }); - }); - - return { contextActions, contextMenuIcons, isContextActionAllowed, actions: actionsByName }; -}; - -const currentYear = new Date().getFullYear(); - -const { contextActions, contextMenuIcons, isContextActionAllowed, actions } = setupActions([ - { - name: "edit", - multiple: false, - icon: "edit", - isActive: (d2, dataset) => canUpdate(d2, [dataset]), - onClick: dataset => goToRoute(`/datasets/edit/${dataset.id}`), - }, - { - name: "share", - multiple: true, - icon: "share", - isActive: canManage, - onClick: datasets => sharingStore.setState({ datasets }), - }, - { - name: "define_associations", - multiple: true, - icon: "business", - isActive: canUpdate, - onClick: datasets => orgUnitsStore.setState({ datasets }), - }, - { - name: "period_dates", - multiple: true, - icon: "timeline", - isActive: (d2, datasets) => - canUpdate(d2, datasets) && (currentUserHasAdminRole(d2) || datasets.length === 1), - onClick: datasets => periodsStore.setState({ datasets }), - }, - { - name: "end_date_for_year", - multiple: true, - icon: "timeline", - isActive: (d2, datasets) => canUpdate(d2, datasets) && currentUserHasAdminRole(d2), - onClick: (datasets, options) => endDateForYearStore.setState({ datasets, options }), - options: _.range(currentYear - 1, currentYear + 2 + 1), - }, - { - name: "details", - multiple: false, - icon: "details", - onClick: dataset => detailsStore.setState(dataset), - }, - { - name: "clone", - multiple: false, - icon: "content_copy", - isActive: canCreate, - onClick: dataset => goToRoute(`/datasets/clone/${dataset.id}`), - }, - { - name: "delete", - multiple: true, - icon: "delete", - isActive: canDelete, - onClick: datasets => deleteStore.delete(datasets), - }, - { - name: "logs", - multiple: true, - icon: "list", - isActive: currentUserHasAdminRole, - onClick: datasets => logsStore.setState(datasets), - }, -]); - -exports.contextActions = contextActions; -exports.contextMenuIcons = contextMenuIcons; -exports.isContextActionAllowed = isContextActionAllowed; -exports.actions = actions; diff --git a/src/DataSets/delete.store.js b/src/DataSets/delete.store.js deleted file mode 100644 index 0f220afb3..000000000 --- a/src/DataSets/delete.store.js +++ /dev/null @@ -1,31 +0,0 @@ -import { getInstance as getD2 } from "d2/lib/d2"; -import snackActions from "../Snackbar/snack.actions"; -import Store from "d2-ui/lib/store/Store"; -import { log } from "./log"; - -export default Store.create({ - delete(datasets) { - getD2().then(d2 => { - snackActions.show({ - message: d2.i18n.getTranslation("confirm_delete_dataset"), - action: "confirm", - onActionClick: () => { - const payload = { dataSets: datasets.map(ds => ({ id: ds.id })) }; - d2.Api.getApi() - .post(`metadata?importStrategy=DELETE`, payload) - .then(response => { - log("delete", "success", datasets); - snackActions.show({ - message: d2.i18n.getTranslation("dataset_deleted"), - }); - this.setState(response); - }) - .catch(response => { - log("delete", "failed", datasets); - snackActions.show({ message: response.message || "Error" }); - }); - }, - }); - }); - }, -}); diff --git a/src/DataSets/details.store.js b/src/DataSets/details.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/DataSets/details.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/DataSets/list.actions.js b/src/DataSets/list.actions.js deleted file mode 100644 index 00e4f0565..000000000 --- a/src/DataSets/list.actions.js +++ /dev/null @@ -1,30 +0,0 @@ -import Action from "d2-ui/lib/action/Action"; -import detailsStore from "./details.store"; -import sharingStore from "./sharing.store"; -import orgUnitsStore from "./orgUnits.store"; -import logsStore from "./logs.store"; - -const listActions = Action.createActionsFromNames([ - "hideDetailsBox", - "hideSharingBox", - "hideOrgUnitsBox", - "hideLogs", -]); - -listActions.hideDetailsBox.subscribe(() => { - detailsStore.setState(null); -}); - -listActions.hideSharingBox.subscribe(() => { - sharingStore.setState(null); -}); - -listActions.hideOrgUnitsBox.subscribe(() => { - orgUnitsStore.setState(null); -}); - -listActions.hideLogs.subscribe(() => { - logsStore.setState(null); -}); - -export default listActions; diff --git a/src/DataSets/log.js b/src/DataSets/log.js deleted file mode 100644 index d657e3d25..000000000 --- a/src/DataSets/log.js +++ /dev/null @@ -1,125 +0,0 @@ -import React from "react"; -import _ from "lodash"; -import { getInstance as getD2 } from "d2/lib/d2"; - -const maxLogsPerPage = 200; // TODO: maybe make it readable from the dataStore -const maxLogPages = 100; - -async function log(actionName, status, datasets) { - // Log the name of the action that has been executed, its status - // ("success", "failed"), by whom and on which datasets. - const logs = ((await getLogs([0])) || { logs: [] }).logs; - logs.push(await makeEntry(actionName, status, datasets)); - return setLogs(logs); -} - -async function makeEntry(actionName, status, datasets) { - // Return an object (a "dictionary") with the information we want to log. - datasets = Array.isArray(datasets) ? datasets : [datasets]; - const user = await getD2().then(d2 => d2.currentUser); - return { - date: new Date().toISOString(), - action: actionName, - status: status, - user: { - displayName: user.name, - username: user.username, - id: user.id, - }, - datasets: datasets.map(ds => ({ - displayName: ds.name, - id: ds.id, - })), - }; -} - -async function getLogs(pages = [0, 1]) { - // Return the concatenated logs for the given pages (relative to - // currentPage) if they exist, or an empty list otherwise. - // It returns null when there are no more log pages. - if (pages.every(n => n >= maxLogPages)) return null; - - const store = await getStore(); - const currentPage = await getCurrentPage(store); - const pagesNames = pages.map(n => "logs-page-" + mod(currentPage - n, maxLogPages)); - const storeKeys = new Set(await store.getKeys()); - const existingPageNames = pagesNames.filter(name => storeKeys.has(name)); - - if (_(existingPageNames).isEmpty()) { - return null; - } else { - const existingPages = _(Array.from(storeKeys)) - .map(key => key.match(/^logs-page-(\d+)$/)) - .map(match => (match ? parseInt(match[1]) : null)) - .reject(_.isNull) - .value(); - const nextPage = _.max(pages) + 1; - const nextPageIndex = mod(currentPage - nextPage, maxLogPages); - const hasMore = nextPage < maxLogPages && existingPages.includes(nextPageIndex); - const logs = await Promise.all(existingPageNames.map(name => store.get(name))); - const orderedLogs = _(logs) - .filter() - .flatten() - .orderBy("date", "desc") - .value(); - - return { logs: orderedLogs, hasMore }; - } -} - -function getCurrentPage(store) { - return store.get("logs-page-current").catch(err => { - if (err.httpStatusCode === 404) { - return store.set("logs-page-current", 0).then(() => 0); - } else { - throw err; - } - }); -} - -async function setLogs(logs) { - // Save the given list of logs in the current page index and update the page index. - const store = await getStore(); - const currentPage = await getCurrentPage(store); - const nextCurrentPage = - logs.length < maxLogsPerPage ? currentPage : mod(currentPage + 1, maxLogPages); - - return Promise.all([ - store.set("logs-page-" + currentPage, logs), - ...(nextCurrentPage === currentPage - ? [] - : [ - store.set("logs-page-current", nextCurrentPage), - store.set(`logs-page-${nextCurrentPage}`, []), - ]), - ]); -} - -async function getStore() { - const d2 = await getD2(); - return d2.dataStore.get("dataset-configuration"); -} - -function mod(n, m) { - return ((n % m) + m) % m; // the modulo operation can be negative otherwise... -} - -function formatDate(isoDate) { - return new Date(isoDate).toLocaleString(); -} - -// Simple component to show a log entry. -function LogEntry(props) { - return ( -
    - Date: {formatDate(props.date)}
    - Action: {props.action}
    - Status: {props.status}
    - User: {props.user.displayName} ({props.user.username})
    - Datasets: {props.datasets.map(ds => `${ds.displayName} (${ds.id})`).join(", ")}{" "} -
    -
    - ); -} - -export { log, getLogs, LogEntry }; diff --git a/src/DataSets/logs.store.js b/src/DataSets/logs.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/DataSets/logs.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/DataSets/orgUnits.store.js b/src/DataSets/orgUnits.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/DataSets/orgUnits.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/DataSets/periods.store.js b/src/DataSets/periods.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/DataSets/periods.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/DataSets/sharing.store.js b/src/DataSets/sharing.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/DataSets/sharing.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/ListActionBar/ListActionBar.component.js b/src/ListActionBar/ListActionBar.component.js deleted file mode 100644 index 05bd12256..000000000 --- a/src/ListActionBar/ListActionBar.component.js +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import FloatingActionButton from "material-ui/FloatingActionButton"; -import FontIcon from "material-ui/FontIcon"; -import Auth from "d2-ui/lib/auth/Auth.mixin"; -import { goToRoute } from "../router"; - -const ListActionBar = createReactClass({ - propTypes: { - route: PropTypes.string, - }, - - contextTypes: { - d2: PropTypes.object.isRequired, - }, - - mixins: [Auth], - - _addClick() { - goToRoute(this.props.route); - }, - - render() { - const cssStyles = { - textAlign: "right", - marginTop: "1rem", - bottom: "1.5rem", - right: "1.5rem", - position: "fixed", - zIndex: 10, - }; - - return ( -
    - - add - -
    - ); - }, -}); - -export default ListActionBar; diff --git a/src/LoadingMask/LoadingMask.component.js b/src/LoadingMask/LoadingMask.component.js deleted file mode 100644 index 68c037967..000000000 --- a/src/LoadingMask/LoadingMask.component.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import { CircularProgress } from "@material-ui/core"; - -export default createReactClass({ - render() { - const style = { - left: "45%", - position: "fixed", - top: "45%", - }; - - return ; - }, -}); diff --git a/src/LoadingStatus/LoadingStatus.component.js b/src/LoadingStatus/LoadingStatus.component.js deleted file mode 100644 index 8ef0f33d4..000000000 --- a/src/LoadingStatus/LoadingStatus.component.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import LinearProgress from "material-ui/LinearProgress"; - -export default createReactClass({ - propTypes: { - isLoading: PropTypes.bool.isRequired, - }, - - getDefaultProps() { - return { - isLoading: false, - }; - }, - - render() { - if (!this.props.isLoading) { - return null; - } - - return ; - }, -}); diff --git a/src/MultipleDataTable/MultipleDataTable.component.js b/src/MultipleDataTable/MultipleDataTable.component.js deleted file mode 100644 index c3bb1b9b7..000000000 --- a/src/MultipleDataTable/MultipleDataTable.component.js +++ /dev/null @@ -1,243 +0,0 @@ -import isIterable from "d2-utilizr/lib/isIterable"; -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import update from "immutability-helper"; -import MultipleDataTableRow from "./MultipleDataTableRow.component"; -import DataTableHeader from "d2-ui/lib/data-table/DataTableHeader.component"; -import MultipleDataTableContextMenu, { - propTypesActionsDefinition, -} from "./MultipleDataTableContextMenu.component"; -import _ from "../utils/lodash-mixins"; - -const MultipleDataTable = createReactClass({ - propTypes: { - actionsDefinition: propTypesActionsDefinition.isRequired, - contextMenuActions: PropTypes.object, - contextMenuIcons: PropTypes.object, - primaryAction: PropTypes.func, - isContextActionAllowed: PropTypes.func, - isMultipleSelectionAllowed: PropTypes.bool, - columns: PropTypes.arrayOf(PropTypes.object), - hideRowsActionsIcon: PropTypes.bool, - onColumnSort: PropTypes.func, - styles: PropTypes.shape({ - table: PropTypes.object, - header: PropTypes.object, - }), - activeRows: PropTypes.arrayOf(PropTypes.object), - onActiveRowsChange: PropTypes.func, - }, - - getDefaultProps() { - return { - styles: {}, - activeRows: [], - onActiveRowsChange: () => {}, - }; - }, - - getInitialState() { - return this.getStateFromProps(this.props); - }, - - UNSAFE_componentWillReceiveProps(newProps) { - this.setState(this.getStateFromProps(newProps)); - }, - - getStateFromProps(props) { - let dataRows = []; - - if (isIterable(props.rows)) { - dataRows = props.rows instanceof Map ? Array.from(props.rows.values()) : props.rows; - } - - return { - columns: props.columns || [{ name: "name" }, { name: "lastUpdated" }], - activeRows: props.activeRows, - dataRows, - }; - }, - - renderContextMenu() { - const actionAccessChecker = this.props.isContextActionAllowed - ? this.props.isContextActionAllowed.bind(null, this.state.activeRows) - : () => true; - - const actionsToShow = Object.keys(this.props.contextMenuActions || {}) - .filter(actionAccessChecker) - .reduce((availableActions, actionKey) => { - availableActions[actionKey] = this.props.contextMenuActions[actionKey]; - return availableActions; - }, {}); - - const hasActions = Object.keys(actionsToShow).length > 0; - - return ( - - ); - }, - - _onColumnSortingToggle(headerName) { - const newSortingDirection = - this.state.sorting && this.state.sorting[0] === headerName - ? this.state.sorting[1] === "asc" - ? "desc" - : "asc" - : "asc"; - const newSorting = [headerName, newSortingDirection]; - this.setState({ sorting: newSorting }); - this.props.onColumnSort && this.props.onColumnSort(newSorting); - }, - - renderHeaders() { - const [currentSortedColumn, currentSortedDirection] = this.state.sorting || []; - - return this.state.columns.map((column, index) => ( - - )); - }, - - renderRows() { - return this.state.dataRows.map((dataRowsSource, dataRowsId) => { - return ( - c.value || c.name)} - hideActionsIcon={this.props.hideRowsActionsIcon} - isActive={this.isRowActive(dataRowsSource)} - itemClicked={this.handleRowClick} - primaryClick={this.handlePrimaryClick} - style={dataRowsSource._style} - /> - ); - }); - }, - - render() { - const defaultStyles = { - table: {}, - header: {}, - }; - const styles = _.deepMerge(defaultStyles, this.props.styles); - - return ( -
    -
    - {this.renderHeaders()} - -
    -
    {this.renderRows()}
    - {this.renderContextMenu()} -
    - ); - }, - - isRowActive(rowSource) { - if (!this.state.activeRows) { - return false; - } - return _.includes(this.state.activeRows, rowSource); - }, - - isEventCtrlClick(event) { - return this.props.isMultipleSelectionAllowed && event && event.ctrlKey; - }, - - notifyActiveRows() { - this.props.onActiveRowsChange(this.state.activeRows); - }, - - handleRowClick(event, rowSource, isIconMenuClick) { - //Update activeRows according to click|ctlr+click - var newActiveRows; - if (isIconMenuClick) { - newActiveRows = [rowSource]; - } else if (this.isEventCtrlClick(event) || this.isRowActive(rowSource)) { - //Remain selection + rowSource if not already selected - newActiveRows = this.updateContextSelection(rowSource); - } else { - //Context click just selects current row - newActiveRows = [rowSource]; - } - - //Update state - this.setState( - { - contextMenuTarget: event.currentTarget, - showContextMenu: true, - activeRows: newActiveRows, - }, - this.notifyActiveRows - ); - }, - - handlePrimaryClick(event, rowSource) { - //Click -> Clears selection, Invoke external action (passing event) - if (!this.isEventCtrlClick(event)) { - this.setState({ activeRows: [] }, this.notifyActiveRows); - this.props.primaryAction({ selected: rowSource }); - return; - } - - //Ctrl + Click -> Update selection - const newActiveRows = this.updatePrimarySelection(rowSource); - this.setState( - { - activeRows: newActiveRows, - showContextMenu: false, - }, - this.notifyActiveRows - ); - }, - - _hideContextMenu() { - this.setState({ showContextMenu: false }, this.notifyActiveRows); - }, - - updateContextSelection(rowSource) { - return this.updateSelection(rowSource, true); - }, - - updatePrimarySelection(rowSource) { - return this.updateSelection(rowSource, false); - }, - - updateSelection(rowSource, isContextClick) { - const alreadySelected = this.isRowActive(rowSource); - - //ctx click + Already selected -> Same selection - if (isContextClick && alreadySelected) { - return this.state.activeRows; - } - - //click + Already selected -> Remove from selection - if (alreadySelected) { - return this.state.activeRows.filter(nRow => nRow !== rowSource); - } - - //!already selected -> Add to selection - return update(this.state.activeRows ? this.state.activeRows : [], { $push: [rowSource] }); - }, -}); - -export default MultipleDataTable; diff --git a/src/MultipleDataTable/MultipleDataTableContextMenu.component.js b/src/MultipleDataTable/MultipleDataTableContextMenu.component.js deleted file mode 100644 index 8ab26dd62..000000000 --- a/src/MultipleDataTable/MultipleDataTableContextMenu.component.js +++ /dev/null @@ -1,107 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import Menu from "material-ui/Menu"; -import MenuItem from "material-ui/MenuItem"; -import FontIcon from "material-ui/FontIcon"; -import ArrowDropRight from "material-ui/svg-icons/navigation-arrow-drop-right"; -import Popover from "./PopoverNoFlicker"; -import Paper from "material-ui/Paper"; - -const actionDefinition = PropTypes.shape({ - name: PropTypes.string.isRequired, - multiple: PropTypes.bool.isRequired, - icon: PropTypes.string.isRequired, - isActive: PropTypes.func, - onClick: PropTypes.func, - options: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), -}); - -export const propTypesActionsDefinition = PropTypes.objectOf(actionDefinition); - -const MultipleDataTableContextMenu = createReactClass({ - propTypes: { - actionsDefinition: propTypesActionsDefinition.isRequired, - actions: PropTypes.objectOf(PropTypes.func), - showContextMenu: PropTypes.bool, - activeItems: PropTypes.array, - icons: PropTypes.object, - target: PropTypes.object, - }, - - mixins: [Translate], - - getDefaultProps() { - return { - icons: {}, - actions: {}, - }; - }, - - render() { - const actionList = Object.keys(this.props.actions).filter( - menuActionKey => typeof this.props.actions[menuActionKey] === "function" - ); - - const cmStyle = { - position: "fixed", - }; - const { - actions, - target, - activeItems, - icons, - showContextMenu, - actionsDefinition, - ...popoverProps - } = this.props; - - return ( - - - {actionList.map(action => { - const iconName = icons[action] ? icons[action] : action; - const { options } = actionsDefinition[action]; - - return ( - this.handleClick(action)} - primaryText={this.getTranslation(action)} - leftIcon={ - {iconName} - } - rightIcon={options ? : undefined} - menuItems={(options || []).map(option => ( - this.handleClick(action, { year: option })} - /> - ))} - /> - ); - })} - - - ); - }, - - handleClick(action, options) { - this.props.actions[action]({ selected: this.props.activeItems, options }); - this.props.onRequestClose && this.props.onRequestClose(); - }, -}); - -export default MultipleDataTableContextMenu; diff --git a/src/MultipleDataTable/MultipleDataTableRow.component.js b/src/MultipleDataTable/MultipleDataTableRow.component.js deleted file mode 100644 index 4879a73f8..000000000 --- a/src/MultipleDataTable/MultipleDataTableRow.component.js +++ /dev/null @@ -1,174 +0,0 @@ -import React, { isValidElement } from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import classes from "classnames"; -import isObject from "d2-utilizr/lib/isObject"; -import isString from "d2-utilizr/lib/isString"; -import moment from "moment"; -import IconButton from "material-ui/IconButton"; -import MoreVert from "material-ui/svg-icons/navigation/more-vert"; -import Color from "d2-ui/lib/data-table/data-value/Color.component"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; - -import "./MultipleDataTableRow.scss"; - -function valueTypeGuess(valueType, value) { - switch (valueType) { - case "DATE": - return moment(new Date(value)).fromNow(); - case "TEXT": - if (/#([a-z0-9]{6})$/i.test(value)) { - return ; - } - return value; - default: - break; - } - - return value; -} - -function getValueAfterValueTypeGuess(dataSource, columnName) { - if ( - dataSource && - dataSource.modelDefinition && - dataSource.modelDefinition.modelValidations && - dataSource.modelDefinition.modelValidations[columnName] - ) { - return valueTypeGuess( - dataSource.modelDefinition.modelValidations[columnName].type, - dataSource[columnName] - ); - } - - return dataSource[columnName]; -} - -const MultipleDataTableRow = createReactClass({ - propTypes: { - columns: PropTypes.array.isRequired, - dataSource: PropTypes.object, - isActive: PropTypes.bool, - isEven: PropTypes.bool, - isOdd: PropTypes.bool, - hideActionsIcon: PropTypes.bool, - itemClicked: PropTypes.func.isRequired, - primaryClick: PropTypes.func.isRequired, - style: PropTypes.object, - }, - - mixins: [Translate], - - render() { - const classList = classes("data-table__rows__row", { - "data-table__rows__row--even": !this.props.isOdd, - "data-table__rows__row--odd": this.props.isOdd, - selected: this.props.isActive, - }); - - const dataSource = this.props.dataSource; - - const textWrapStyle = { - width: "100%", - textOverflow: "ellipsis", - overflow: "hidden", - whiteSpace: "nowrap", - position: "absolute", - wordBreak: "break-all", - wordWrap: "break-word", - top: 0, - bottom: 0, - lineHeight: "50px", - paddingRight: "1rem", - }; - - const columns = this.props.columns.map((columnName, index) => { - const rowValue = getValueAfterValueTypeGuess(dataSource, columnName); - let displayValue; - - // Render objects by name or otherwise by their toString method. - // ReactElements are also objects but we want to render them out normally, so they are excluded. - if (isObject(rowValue) && !isValidElement(rowValue)) { - displayValue = rowValue.displayName || rowValue.name || rowValue.toString(); - } else { - displayValue = rowValue; - } - - // TODO: PublicAccess Hack - need to make it so that value transformers can be registered - if (columnName === "publicAccess") { - displayValue = this.getDataMetadaAccessText(dataSource[columnName]); - } - - return ( -
    - {isString(displayValue) ? ( - - {displayValue} - - ) : ( - displayValue - )} -
    - ); - }); - return ( -
    - {columns} -
    - {this.props.hideActionsIcon ? null : ( - - - - )} -
    -
    - ); - }, - - iconMenuClick(event) { - event && event.preventDefault() && event.stopPropagation(); - this.props.itemClicked(event, this.props.dataSource, true); - }, - - handleContextClick(event) { - event && event.preventDefault(); - this.props.itemClicked(event, this.props.dataSource, false); - }, - - handleClick(event) { - this.props.primaryClick(event, this.props.dataSource); - }, - - getDataMetadaAccessText(value) { - if (value) { - const accessMetadata = value.slice(0, 2); - const accessData = value.slice(2, 4); - const get = this.getAccessText; - return `Data: ${get(accessMetadata)}, Metadata: ${get(accessData)}`; - } else { - return "?"; - } - }, - - getAccessText(value) { - if (!value) { - return "?"; - } else if (value === "rw") { - return this.getTranslation("public_can_edit"); - } else if (value === "r-") { - return this.getTranslation("public_can_view"); - } else if (value === "--") { - return this.getTranslation("public_none"); - } - }, -}); - -export default MultipleDataTableRow; diff --git a/src/MultipleDataTable/MultipleDataTableRow.scss b/src/MultipleDataTable/MultipleDataTableRow.scss deleted file mode 100644 index 899b2b8dd..000000000 --- a/src/MultipleDataTable/MultipleDataTableRow.scss +++ /dev/null @@ -1,4 +0,0 @@ -$detail-box--field-value--color: #F1F1F1; -.data-table__rows__row.selected{ - background-color: $detail-box--field-value--color; -} \ No newline at end of file diff --git a/src/MultipleDataTable/PopoverNoFlicker.js b/src/MultipleDataTable/PopoverNoFlicker.js deleted file mode 100644 index 8c2e00979..000000000 --- a/src/MultipleDataTable/PopoverNoFlicker.js +++ /dev/null @@ -1,109 +0,0 @@ -/* eslint no-unused-vars: off */ -/* eslint @typescript-eslint/no-unused-vars: off */ -import React from "react"; -import Paper from "material-ui/Paper"; -import Popover from "material-ui/Popover"; -import PopoverAnimationDefault from "material-ui/Popover/PopoverAnimationDefault"; - -// See https://github.com/mui-org/material-ui/issues/8040 - -class PopoverNoFlicker extends Popover { - renderLayer = () => { - const { - animated, - animation, - anchorEl, - anchorOrigin, - autoCloseWhenOffScreen, - canAutoPosition, - children, - onRequestClose, - style, - targetOrigin, - useLayerForClickAway, - scrollableContainer, - ...other - } = this.props; - - let styleRoot = style; - - if (!animated) { - styleRoot = { - position: "fixed", - zIndex: this.context.muiTheme.zIndex.popover, - opacity: this.state.setPlacement ? 1 : 0, // EDIT - }; - - if (!this.state.open) { - return null; - } - - return ( - - {children} - - ); - } - - const Animation = animation || PopoverAnimationDefault; - - return ( - - {children} - - ); - }; - - UNSAFE_componentWillReceiveProps(nextProps) { - if (nextProps.open === this.props.open) { - return; - } - - if (nextProps.open) { - clearTimeout(this.timeout); - this.timeout = null; - this.anchorEl = nextProps.anchorEl || this.props.anchorEl; - this.setState( - { - open: true, - closing: false, - setPlacement: false, - }, - () => { - // EDIT - setTimeout(() => { - this.setState({ - setPlacement: true, - }); - }); - } - ); - } else { - if (nextProps.animated) { - if (this.timeout !== null) return; - this.setState({ closing: true }); - this.timeout = setTimeout(() => { - this.setState( - { - open: false, - }, - () => { - this.timeout = null; - } - ); - }, 500); - } else { - this.setState({ - open: false, - }); - } - } - } -} - -export default PopoverNoFlicker; diff --git a/src/Pagination/Pagination.scss b/src/Pagination/Pagination.scss deleted file mode 100644 index 580e85c66..000000000 --- a/src/Pagination/Pagination.scss +++ /dev/null @@ -1,37 +0,0 @@ - -.data-table-pager--buttons { - - list-style: none; - padding: 0; - margin: 0; - margin-right: 10px; - text-align: right; - - li { - display: inline-block; - } - - .data-table-pager--previous-page, - .data-table-pager--next-page { - padding: 0; - - i { - border-radius: 100%; - cursor: pointer; - margin: .5rem; - padding: .5rem 0; - } - - .data-table-pager--previous-page__disabled, - .data-table-pager--next-page__disabled { - color: #CCC; - } - } - - .data-table-pager--page-info { - line-height: 24px; - padding: 1rem; - text-align: center; - vertical-align: top; - } -} \ No newline at end of file diff --git a/src/SearchBox/SearchBox.component.js b/src/SearchBox/SearchBox.component.js deleted file mode 100644 index 8f8e3c298..000000000 --- a/src/SearchBox/SearchBox.component.js +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import ObservedEvents from "../utils/ObservedEvents.mixin"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import TextField from "material-ui/TextField"; - -const SearchBox = createReactClass({ - propTypes: { - searchObserverHandler: PropTypes.func.isRequired, - debounce: PropTypes.number, - }, - - mixins: [ObservedEvents, Translate], - - getInitialState() { - return { - value: "", - }; - }, - - UNSAFE_componentWillMount() { - this.searchBoxCb = this.createEventObserver("searchBox"); - }, - - componentDidMount() { - const searchObserver = this.events.searchBox - .debounce(this.props.debounce || 400) - .map(event => (event && event.target && event.target.value ? event.target.value : "")) - .distinctUntilChanged(); - - this.props.searchObserverHandler(searchObserver); - - // this.disposable = currentSubSection$ - // .subscribe((appState) => this.setState({ value: '' })); - }, - - componentWillUnmount() { - // this.disposable && this.disposable.dispose && this.disposable.dispose(); - }, - - render() { - return ( -
    - -
    - ); - }, - - _onKeyUp(event) { - this.setState({ - value: event.target.value, - }); - this.searchBoxCb(event); - }, -}); - -export default SearchBox; diff --git a/src/SessionDialog/SessionDialog.component.js b/src/SessionDialog/SessionDialog.component.js deleted file mode 100644 index cf6a62df6..000000000 --- a/src/SessionDialog/SessionDialog.component.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import Dialog from "material-ui/Dialog"; -import FlatButton from "material-ui/FlatButton"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import { redirectToLogin } from "../utils/Dhis2Helpers"; - -const SessionDialog = createReactClass({ - mixins: [Translate], - - getInitialState() { - return { open: false, checkServerIntervalId: null }; - }, - - componentDidMount() { - const checkServerIntervalId = setInterval(this.checkServer, 1000 * 60 * 15); - this.setState({ checkServerIntervalId }); - }, - - componentWillUnmount() { - clearInterval(this.state.checkServerIntervalId); - }, - - checkServer() { - this.context.d2.system.configuration.get("systemId", true).catch(_err => { - this.setState({ open: true }); - }); - }, - - close() { - this.setState({ open: false }); - }, - - render() { - const actions = [ - , - redirectToLogin(this.context.d2.system.settings.api.baseUrl)} - />, - ]; - - return ( - - {this.getTranslation("not_logged_or_expired")} - - ); - }, -}); - -export default SessionDialog; diff --git a/src/Settings/Settings.component.js b/src/Settings/Settings.component.js deleted file mode 100644 index 8e51eebff..000000000 --- a/src/Settings/Settings.component.js +++ /dev/null @@ -1,240 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import fp from "lodash/fp"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import Validators from "d2-ui/lib/forms/Validators"; -import FormBuilder from "d2-ui/lib/forms/FormBuilder.component"; - -import Dialog from "material-ui/Dialog/Dialog"; -import FlatButton from "material-ui/FlatButton/FlatButton"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import RaisedButton from "material-ui/RaisedButton/RaisedButton"; -import Card from "material-ui/Card/Card"; -import CardText from "material-ui/Card/CardText"; -import { Tabs, Tab } from "material-ui/Tabs"; - -import Settings from "../models/Settings"; -import FormHelpers from "../forms/FormHelpers"; -import ObservedEvents from "../utils/ObservedEvents.mixin"; -import YearlyDateSelector from "../forms/YearlyDateSelector.component"; -import TimePeriodSelector from "../forms/TimePeriodSelector.component"; - -const TabCard = ({ fields, onUpdateFormStatus, onUpdateField }) => ( - - - - - -); - -const SettingsDialog = createReactClass({ - propTypes: { - open: PropTypes.bool.isRequired, - onRequestClose: PropTypes.func.isRequired, - }, - - mixins: [ObservedEvents, Translate], - - tabs: { - general: [ - "categoryProjectsId", - "categoryComboId", - "dataElementGroupSetCoreCompetencyId", - "outputEndDate", - "outcomeEndDate", - "outputLastYearEndDate", - "outcomeLastYearEndDate", - "organisationUnitLevelForCountriesId", - "createdByDataSetConfigurationAttributeId", - "dataPeriodOutputDatesAttributeId", - "dataPeriodOutcomeDatesAttributeId", - "dataPeriodIntervalDatesAttributeId", - ], - sections: { - partition: [ - "dataElementGroupSetThemeId", - "indicatorGroupSetThemeId", - "attributeGroupId", - ], - other: [ - "dataElementGroupOutputId", - "dataElementGroupGlobalIndicatorMandatoryId", - "indicatorGroupGlobalIndicatorMandatoryId", - "dataElementGroupSetOriginId", - "indicatorGroupSetOriginId", - "dataElementGroupSetStatusId", - "indicatorGroupSetStatusId", - "hideInDataSetAppAttributeId", - "exclusionRuleCoreUserGroupId", - ], - }, - }, - - getInitialState() { - this.settings = new Settings(this.context.d2); - return { loaded: false }; - }, - - UNSAFE_componentWillReceiveProps(newProps) { - if (newProps.open) { - this.loadConfig(); - } - }, - - loadConfig() { - Promise.all([this.settings.get(), this.settings.getFields()]).then(([config, fields]) => { - this.setState({ - loaded: true, - fields: fields, - config: config, - currentTab: "general", - formStatuses: {}, - }); - }); - }, - - save() { - this.settings.save(this.state.config).then(() => this.props.onRequestClose()); - }, - - onUpdateField(key, value) { - const newState = fp.set(["config", key], value, this.state); - this.setState(newState); - }, - - getFields(key) { - const { fields, config } = this.state; - const keys = _.get(this.tabs, key); - const tabFields = _(fields) - .keyBy("name") - .at(keys) - .value(); - - return tabFields.map(field => { - if (field.type === "yearlyDate") { - return { - name: field.name, - component: YearlyDateSelector, - value: config[field.name], - props: { - labelText: this.getTranslation(field.i18n_key), - }, - }; - } else if (field.type === "timePeriod") { - return { - name: field.name, - component: TimePeriodSelector, - value: config[field.name], - props: { - labelText: this.getTranslation(field.i18n_key), - }, - }; - } else if (field.options) { - return FormHelpers.getSelectField({ - name: field.name, - label: this.getTranslation(field.i18n_key), - isRequired: false, - options: field.options, - value: config[field.name], - }); - } else { - return FormHelpers.getTextField({ - name: field.name, - label: this.getTranslation(field.i18n_key), - isRequired: true, - value: config[field.name], - validators: [ - { - validator: Validators.isRequired, - message: this.getTranslation(Validators.isRequired.message), - }, - ], - }); - } - }); - }, - - onChangeTab(value) { - this.setState({ currentTab: value }); - }, - - onUpdateFormStatus(section, status) { - const newFormStatuses = _(_.clone(this.state.formStatuses)) - .set(section, status.valid) - .value(); - this.setState({ formStatuses: newFormStatuses }); - }, - - render() { - const { loaded, formStatuses } = this.state; - const saveIsEnabled = - loaded && - _(formStatuses) - .values() - .every(); - - const actions = [ - , - loaded ? ( - - ) : null, - ]; - - const getTabCardProps = section => ({ - fields: this.getFields(section), - onUpdateFormStatus: status => _.defer(this.onUpdateFormStatus, section, status), - onUpdateField: this.onUpdateField, - }); - - return ( - - {!loaded ? ( - - ) : ( - - - - - - - - - - - )} - - ); - }, -}); - -export default SettingsDialog; diff --git a/src/Snackbar/SnackbarContainer.component.js b/src/Snackbar/SnackbarContainer.component.js deleted file mode 100644 index 26c0f6d22..000000000 --- a/src/Snackbar/SnackbarContainer.component.js +++ /dev/null @@ -1,71 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import Snackbar from "material-ui/Snackbar/Snackbar"; -import snackStore from "./snack.store"; -import ObserverRegistry from "../utils/ObserverRegistry.mixin"; -import log from "loglevel"; - -const SnackBarContainer = createReactClass({ - mixins: [ObserverRegistry], - - getInitialState() { - return { - show: false, - snack: { - message: "", - }, - }; - }, - - UNSAFE_componentWillMount() { - const snackStoreDisposable = snackStore.subscribe(snack => { - if (snack) { - this.setState({ - snack, - show: true, - }); - } else { - this.setState({ - show: false, - }); - } - }, log.debug.bind(log)); - - this.registerDisposable(snackStoreDisposable); - }, - - _closeSnackbar() { - this.setState({ - show: false, - }); - }, - - render() { - if (!this.state.snack) { - return null; - } - - return ( - - ); - }, -}); - -export default SnackBarContainer; diff --git a/src/Snackbar/snack.actions.js b/src/Snackbar/snack.actions.js deleted file mode 100644 index c8dbc4429..000000000 --- a/src/Snackbar/snack.actions.js +++ /dev/null @@ -1,40 +0,0 @@ -import Action from "d2-ui/lib/action/Action"; -import snackStore from "./snack.store"; -import { getInstance as getD2 } from "d2/lib/d2"; -import { goToRoute } from "../router"; - -const snackActions = Action.createActionsFromNames(["show", "showAndRedirect", "hide"]); - -snackActions.show.subscribe(actionConfig => { - const { - message, - action, - autoHideDuration, - onActionClick, - translate, - route, - } = actionConfig.data; - - if (route) { - goToRoute(route); - } - - getD2().then(d2 => { - snackStore.setState({ - message: translate ? d2.i18n.getTranslation(message) : message, - action: action || "ok", - autoHideDuration, - onActionClick: - onActionClick || - (() => { - snackActions.hide(); - }), - }); - }); -}); - -snackActions.hide.subscribe(() => { - snackStore.setState(null); -}); - -export default snackActions; diff --git a/src/Snackbar/snack.store.js b/src/Snackbar/snack.store.js deleted file mode 100644 index 2203dcece..000000000 --- a/src/Snackbar/snack.store.js +++ /dev/null @@ -1,3 +0,0 @@ -import Store from "d2-ui/lib/store/Store"; - -export default Store.create(); diff --git a/src/Wizard/Wizard.component.js b/src/Wizard/Wizard.component.js deleted file mode 100644 index d4e1a0b71..000000000 --- a/src/Wizard/Wizard.component.js +++ /dev/null @@ -1,182 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import Toolbar from "material-ui/Toolbar/Toolbar"; -import ToolbarGroup from "material-ui/Toolbar/ToolbarGroup"; -import RaisedButton from "material-ui/RaisedButton/RaisedButton"; -import Card from "material-ui/Card/Card"; -import CardText from "material-ui/Card/CardText"; -import IconButton from "material-ui/IconButton"; -import HelpOutlineIcon from "material-ui/svg-icons/action/help-outline"; -import Dialog from "material-ui/Dialog/Dialog"; -import FlatButton from "material-ui/FlatButton/FlatButton"; -import Steps from "react-steps"; - -const Wizard = createReactClass({ - mixins: [Translate], - - propTypes: { - fields: PropTypes.arrayOf(PropTypes.object), - buttons: PropTypes.arrayOf(PropTypes.object), - onFieldsChange: PropTypes.func, - }, - - getDefaultProps: function() { - return { - onFieldsChange: _.identity, - nextEnabled: true, - active: 0, - doneUntil: 0, - }; - }, - - getInitialState() { - return { - helpOpen: false, - }; - }, - - _onPreviousClicked(ev) { - ev.preventDefault(); - const newActive = _(this._getIndexedVisibleSteps()) - .map("index") - .sortBy() - .reverse() - .find(idx => idx < this.props.active); - this.props.onStepChange(newActive); - }, - - _onNextClicked(ev) { - ev.preventDefault(); - const newActive = _(this._getIndexedVisibleSteps()) - .map("index") - .sortBy() - .find(idx => idx > this.props.active); - this.props.onStepChange(newActive); - }, - - _openHelp() { - this.setState({ helpOpen: true }); - }, - - _closeHelp() { - this.setState({ helpOpen: false }); - }, - - render() { - const indexedVisibleSteps = this._getIndexedVisibleSteps(); - if (!indexedVisibleSteps) return; - - const currentStep = this.props.steps[this.props.active]; - const items = indexedVisibleSteps.map(({ step, index }) => ({ - text: step.title, - isActive: index === this.props.active, - isDone: index < this.props.doneUntil, - })); - const actionsBar = currentStep.actionsBar || ["top", "bottom"]; - const firstStepIndex = indexedVisibleSteps[0].index; - const lastStepIndex = indexedVisibleSteps[indexedVisibleSteps.length - 1].index; - const showPrevious = this.props.active > firstStepIndex; - const showNext = this.props.active < lastStepIndex; - const actions = [ - , - ]; - - return ( -
    - - {currentStep.help} - - - - {_(actionsBar).includes("top") && - this._renderButtons( - currentStep, - showPrevious, - showNext, - currentStep.help !== "" - )} - - - - - this.props.onFieldsChange(currentStep.id, ...args) - } - {...currentStep.props} - /> - - - - {_(actionsBar).includes("top") && - this._renderButtons(currentStep, showPrevious, showNext, false)} -
    - ); - }, - - _getIndexedVisibleSteps() { - return this.props.steps - .map((step, index) => ({ step, index })) - .filter(({ step }) => step.visible !== false); - }, - - _renderButtons(step, showPrevious, showNext, showHelp) { - const renderHelp = () => ( - - - - - - ); - - return ( - - - - - - - - - {this.props.buttons.map(button => - !button.showFunc || button.showFunc(step) ? ( - - ) : null - )} - - - {showHelp && renderHelp()} - - ); - }, -}); - -export default Wizard; diff --git a/src/app-config.ts b/src/app-config.ts new file mode 100644 index 000000000..775589707 --- /dev/null +++ b/src/app-config.ts @@ -0,0 +1,9 @@ +export const appConfig: AppConfig = { + id: "d2-dataset-configuration", + appearance: { showShareButton: true }, +}; + +export interface AppConfig { + id: string; + appearance: { showShareButton: boolean }; +} diff --git a/src/app.js b/src/app.js deleted file mode 100644 index 782ddb75c..000000000 --- a/src/app.js +++ /dev/null @@ -1,106 +0,0 @@ -// When the app is built for development, DHIS_CONFIG is replaced with the config read from $DHIS2_HOME/config.js[on] -// When the app is built for production, process.env.NODE_ENV is replaced with the string 'production', and -// DHIS_CONFIG is replaced with an empty object -import React from "react"; -import { render } from "react-dom"; -import { init, config, getUserSettings, getManifest } from "d2/lib/d2"; -import log from "loglevel"; -import LoadingMask from "d2-ui/lib/loading-mask/LoadingMask.component"; -import MuiThemeProvider from "material-ui/styles/MuiThemeProvider"; -import moment from "moment"; - -// The react-tap-event-plugin is required by material-ui to make touch screens work properly with onClick events -//import "react-tap-event-plugin"; -//import injectTapEventPlugin from "react-tap-event-plugin"; - -import routes from "./router"; -import appTheme from "./App/app.theme"; -import "./App/App.scss"; -import Settings from "./models/Settings"; -import i18n from "./components/sharing-dialog/i18n"; - -const dhisDevConfig = DHIS_CONFIG; // eslint-disable-line - -// This code will only be included in non-production builds of the app -// It sets up the Authorization header to be used during CORS requests -// This way we can develop using webpack without having to install the application into DHIS2. -if (process.env.NODE_ENV !== "production") { - // jQuery.ajaxSetup({ headers: { Authorization: dhisDevConfig.authorization } }); // eslint-disable-line -} -//injectTapEventPlugin(); - -// Render the a LoadingMask to show the user the app is in loading -// The consecutive render after we did our setup will replace this loading mask -// with the rendered version of the application. -render( - - - , - document.getElementById("app") -); - -function safeGetUserSettings() { - return getUserSettings().then(settings => - typeof settings === "object" ? settings : Promise.reject() - ); -} - -function configI18n(userSettings) { - const uiLocale = userSettings.keyUiLocale; - const browserLocale = window.navigator.userLanguage || window.navigator.language; - moment.locale(browserLocale); - - if (uiLocale && uiLocale !== "en") { - // Add the language sources for the preferred locale - config.i18n.sources.add(`./i18n/i18n_module_${uiLocale}.properties`); - } - - // Add english as locale for all cases (either as primary or fallback) - config.i18n.sources.add("./i18n/i18n_module_en.properties"); - - ["cancel", "name"].forEach(key => config.i18n.strings.add(key)); -} - -/** - * Renders the application into the page. - * - * @param d2 Instance of the d2 library that is returned by the `init` function. - */ -async function startApp(d2) { - window.d2 = d2; - i18n.config.d2 = d2; // Init wrapper for component using gettext i18n - await addExtraInfoToCurrentUser(d2); - render(routes, document.getElementById("app")); -} - -async function addExtraInfoToCurrentUser(d2) { - const api = d2.Api.getApi(); - const { userGroups } = await api.get("/me?fields=userGroups[id,name]"); - d2.currentUser.userGroups = userGroups; -} - -function initSettings(d2) { - const settings = new Settings(d2); - return settings.init().then(() => d2); -} - -// Load the application manifest to be able to determine the location of the Api -// After we have the location of the api, we can set it onto the d2.config object -// and initialise the library. We use the initialised library to pass it into the app -// to make it known on the context of the app, so the sub-components (primarily the d2-ui components) -// can use it to access the api, translations etc. -getManifest("./manifest.webapp") - .then(manifest => { - const baseUrl = - process.env.NODE_ENV === "production" ? manifest.getBaseUrl() : dhisDevConfig.baseUrl; - config.siteUrl = baseUrl; - config.baseUrl = `${baseUrl}/api`; - log.info(`Loading: ${manifest.name} v${manifest.version}`); - log.info(`Built ${manifest.manifest_generated_at}`); - }) - .then(safeGetUserSettings) - .then(configI18n) - .then(init) - .then(initSettings) - .then(startApp) - .catch(log.error.bind(log)); diff --git a/src/components/collapsible-box/CollapsibleBox.js b/src/components/collapsible-box/CollapsibleBox.js deleted file mode 100644 index d24226c98..000000000 --- a/src/components/collapsible-box/CollapsibleBox.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import classNames from "classnames"; -import IconButton from "material-ui/IconButton/IconButton"; -import ArrowRight from "material-ui/svg-icons/hardware/keyboard-arrow-right.js"; -import ArrowLeft from "material-ui/svg-icons/hardware/keyboard-arrow-left.js"; -import _ from "../../utils/lodash-mixins"; -import "./CollapsibleBox.scss"; - -const CollapsibleBox = createReactClass({ - propTypes: { - open: PropTypes.bool, - onToggle: PropTypes.func, - styles: PropTypes.shape({ - wrapper: PropTypes.shape({ - open: PropTypes.object, - close: PropTypes.object, - }), - iconButton: PropTypes.object, - content: PropTypes.object, - }), - }, - - getDefaultProps: function() { - return { - open: true, - styles: {}, - }; - }, - - getInitialState: function() { - return { open: this.props.open }; - }, - - UNSAFE_componentWillReceiveProps: function(newProps) { - if (this.props.open !== newProps.open) { - this.setState({ open: newProps.open }); - } - }, - - toggleOpen: function() { - const newOpen = !this.state.open; - this.props.onToggle && this.props.onToggle(newOpen); - this.setState({ open: newOpen }); - }, - - render: function() { - const defaultStyles = { - wrapper: { open: {}, close: {} }, - iconButton: { width: "100%" }, - content: {}, - }; - const styles = _.deepMerge(defaultStyles, this.props.styles); - const { open } = this.state; - const wrapperClass = classNames(["collapsible-box", open ? "open" : "close"]); - const wrapperStyle = open ? styles.wrapper.open : styles.wrapper.close; - - return ( -
    - - {open ? : } - - -
    - {this.props.children} -
    -
    - ); - }, -}); - -export default CollapsibleBox; diff --git a/src/components/collapsible-box/CollapsibleBox.scss b/src/components/collapsible-box/CollapsibleBox.scss deleted file mode 100644 index 3a960ddb7..000000000 --- a/src/components/collapsible-box/CollapsibleBox.scss +++ /dev/null @@ -1,32 +0,0 @@ -.collapsible-box { - position: relative; - background-color: #EEE; - overflow: hidden; - display: inline-block; - transition: width 0.5s ease-in-out; - margin-right: 10px; -} - -.collapsible-box.close { - flex: 0 0 50px; -} - -.collapsible-box.open { - flex: 0 0 250px; -} - -.collapsible-box.close .content { - opacity: 0; - visibility: hidden; - transition: opacity 0.5s, visibility 0s ease-in-out; -} - -.collapsible-box.open .content { - opacity: 1; - visibility: visible; - transition: opacity 0.5s, visibility 0s ease-in-out; -} - -.collapsible-box .toggle { - width: 100%; -} \ No newline at end of file diff --git a/src/components/sharing-dialog/Access.jsx b/src/components/sharing-dialog/Access.jsx deleted file mode 100644 index 6eab0e9d1..000000000 --- a/src/components/sharing-dialog/Access.jsx +++ /dev/null @@ -1,165 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import IconButton from "@material-ui/core/IconButton"; -import ClearIcon from "@material-ui/icons/Clear"; -import PersonIcon from "@material-ui/icons/Person"; -import GroupIcon from "@material-ui/icons/Group"; -import PublicIcon from "@material-ui/icons/Public"; -import BusinessIcon from "@material-ui/icons/Business"; -import { withStyles } from "@material-ui/core/styles"; - -import PermissionPicker from "./PermissionPicker"; -import { accessStringToObject, accessObjectToString } from "./utils"; -import i18n from "./i18n"; - -const icons = { - user: PersonIcon, - userGroup: GroupIcon, - external: PublicIcon, - public: BusinessIcon, -}; - -const SvgIcon = ({ userType }) => { - const Icon = icons[userType] || PersonIcon; - - return ; -}; - -SvgIcon.propTypes = { - userType: PropTypes.string.isRequired, -}; - -const styles = { - accessView: { - fontWeight: "400", - display: "flex", - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - padding: "4px 8px", - }, - accessDescription: { - display: "flex", - flexDirection: "column", - flex: 1, - paddingLeft: 16, - }, -}; - -const useAccessObjectFormat = props => ({ - ...props, - access: accessStringToObject(props.access), - onChange: newAccess => props.onChange(accessObjectToString(newAccess)), -}); - -export const Access = withStyles(styles)( - ({ - access, - accessType, - accessOptions, - primaryText, - secondaryText, - onChange, - onRemove, - disabled, - classes, - }) => ( -
    - -
    -
    {primaryText}
    -
    {secondaryText || " "}
    -
    - - - - -
    - ) -); - -Access.propTypes = { - access: PropTypes.object.isRequired, - accessType: PropTypes.string.isRequired, - accessOptions: PropTypes.object.isRequired, - primaryText: PropTypes.string.isRequired, - onChange: PropTypes.func.isRequired, - disabled: PropTypes.bool, - secondaryText: PropTypes.string, - onRemove: PropTypes.func, -}; - -Access.defaultProps = { - secondaryText: null, - onRemove: null, - disabled: false, -}; - -export const GroupAccess = basicProps => { - const props = useAccessObjectFormat(basicProps); - const newProps = { - accessType: props.groupType, - primaryText: props.groupName, - accessOptions: { - meta: { canView: true, canEdit: true, noAccess: false }, - data: props.dataShareable && { - canView: true, - canEdit: true, - noAccess: true, - }, - }, - }; - - return ; -}; - -export const ExternalAccess = props => { - const newProps = { - ...props, - accessType: "external", - primaryText: i18n.t("External access"), - secondaryText: props.access ? i18n.t("Anyone can view without login") : i18n.t("No access"), - access: { - meta: { canEdit: false, canView: props.access }, - data: { canEdit: false, canView: false }, - }, - onChange: newAccess => props.onChange(newAccess.meta.canView), - accessOptions: { - meta: { canView: true, canEdit: false, noAccess: true }, - }, - }; - - return ; -}; - -export const PublicAccess = basicProps => { - const props = useAccessObjectFormat(basicProps); - const { canEdit, canView } = props.access.meta; - const description = canEdit - ? "Anyone can find and view" - : canView - ? "Anyone can view" - : "No access"; - - const newProps = { - ...props, - accessType: "public", - primaryText: i18n.t("Public access"), - secondaryText: description, - accessOptions: { - meta: { canView: true, canEdit: true, noAccess: true }, - data: props.dataShareable && { - canView: true, - canEdit: true, - noAccess: true, - }, - }, - }; - - return ; -}; diff --git a/src/components/sharing-dialog/AutoComplete.jsx b/src/components/sharing-dialog/AutoComplete.jsx deleted file mode 100644 index 84e5e6e88..000000000 --- a/src/components/sharing-dialog/AutoComplete.jsx +++ /dev/null @@ -1,157 +0,0 @@ -import React, { Component } from "react"; -import PropTypes from "prop-types"; -import Downshift from "downshift"; -import { withStyles } from "@material-ui/core/styles"; -import TextField from "@material-ui/core/TextField"; -import Paper from "@material-ui/core/Paper"; -import MenuItem from "@material-ui/core/MenuItem"; -import Popper from "@material-ui/core/Popper"; - -const Input = ({ InputProps }) => { - return ; -}; - -Input.propTypes = { - InputProps: PropTypes.object.isRequired, -}; - -const Suggestion = ({ suggestion, itemProps, isHighlighted, selectedItem }) => { - const isSelected = selectedItem && selectedItem.id === suggestion.id; - - return ( - - {suggestion.displayName} - - ); -}; - -Suggestion.propTypes = { - isHighlighted: PropTypes.bool.isRequired, - itemProps: PropTypes.object, - selectedItem: PropTypes.object, - suggestion: PropTypes.shape({ displayName: PropTypes.string }).isRequired, -}; - -const styles = theme => ({ - root: { - flexGrow: 1, - height: 60, - }, - popper: { - zIndex: 2000, - maxHeight: "420px", - overflowY: "hidden", - boxShadow: "0px 0px 1px 1px rgba(0,0,0,0.2)", - }, - container: { - flexGrow: 1, - position: "relative", - }, - inputRoot: { - flexWrap: "wrap", - }, -}); - -let popperNode; - -class AutoComplete extends Component { - render() { - const { classes, placeholderText, suggestions, searchText } = this.props; - - return ( -
    - (item ? item.name : "")} - inputValue={searchText} - > - {({ - getInputProps, - getItemProps, - getMenuProps, - highlightedIndex, - isOpen, - selectedItem, - }) => { - return ( -
    - { - popperNode = node; - }, - })} - /> -
    - {isOpen && ( - - - {suggestions.map((suggestion, index) => { - return ( - - ); - })} - - - )} -
    -
    - ); - }} -
    -
    - ); - } -} - -AutoComplete.propTypes = { - classes: PropTypes.object.isRequired, - placeholderText: PropTypes.string, - onInputChanged: PropTypes.func.isRequired, - onItemSelected: PropTypes.func.isRequired, - suggestions: PropTypes.array.isRequired, -}; - -AutoComplete.defaultProps = { - placeholderText: "", -}; - -export default withStyles(styles)(AutoComplete); diff --git a/src/components/sharing-dialog/ConfirmationDialog.jsx b/src/components/sharing-dialog/ConfirmationDialog.jsx deleted file mode 100644 index 4e65d5985..000000000 --- a/src/components/sharing-dialog/ConfirmationDialog.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@material-ui/core"; -import i18n from "./i18n"; - -class ConfirmationDialog extends React.Component { - static propTypes = { - isOpen: PropTypes.bool.isRequired, - title: PropTypes.string.isRequired, - description: PropTypes.string, - onSave: PropTypes.func, - onCancel: PropTypes.func, - saveText: PropTypes.string, - cancelText: PropTypes.string, - disableSave: PropTypes.bool, - }; - - render() { - const { - title, - description, - onSave, - onCancel, - isOpen, - children, - cancelText, - saveText, - disableSave, - ...other - } = this.props; - - return ( - - {title} - - - {description && ( - - {description.split("\n").map((text, idx) => ( -

    {text}

    - ))} -
    - )} - {children} -
    - - - {onCancel && ( - - )} - {onSave && ( - - )} - -
    - ); - } -} - -export default ConfirmationDialog; diff --git a/src/components/sharing-dialog/PermissionOption.jsx b/src/components/sharing-dialog/PermissionOption.jsx deleted file mode 100644 index bc13081df..000000000 --- a/src/components/sharing-dialog/PermissionOption.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import DoneIcon from "@material-ui/icons/Done"; -import MenuItem from "@material-ui/core/MenuItem"; -import ListItemIcon from "@material-ui/core/ListItemIcon"; -import ListItemText from "@material-ui/core/ListItemText"; - -const PermissionOption = props => { - if (props.disabled) { - return null; - } - - return ( - - {props.isSelected && ( - - - - )} - - - ); -}; - -PermissionOption.propTypes = { - disabled: PropTypes.bool.isRequired, - isSelected: PropTypes.bool, - primaryText: PropTypes.string.isRequired, - onClick: PropTypes.func.isRequired, -}; - -PermissionOption.defaultProps = { - isSelected: false, -}; - -export default PermissionOption; diff --git a/src/components/sharing-dialog/PermissionPicker.jsx b/src/components/sharing-dialog/PermissionPicker.jsx deleted file mode 100644 index bf1d3a78c..000000000 --- a/src/components/sharing-dialog/PermissionPicker.jsx +++ /dev/null @@ -1,167 +0,0 @@ -import PropTypes from "prop-types"; -import React, { Component, Fragment } from "react"; -import IconButton from "@material-ui/core/IconButton"; -import Divider from "@material-ui/core/Divider"; -import MenuList from "@material-ui/core/MenuList"; -import Popover from "@material-ui/core/Popover"; -import NotInterestedIcon from "@material-ui/icons/NotInterested"; -import CreateIcon from "@material-ui/icons/Create"; -import VisibilityIcon from "@material-ui/icons/Visibility"; -import { withStyles } from "@material-ui/core/styles"; - -import PermissionOption from "./PermissionOption"; -import i18n from "./i18n"; - -const styles = { - optionHeader: { - paddingLeft: 16, - paddingTop: 16, - fontWeight: "500", - color: "gray", - }, -}; - -const AccessIcon = ({ metaAccess, disabled }) => { - const iconProps = { - color: disabled ? "disabled" : "action", - }; - if (metaAccess.canEdit) { - return ; - } - - return metaAccess.canView ? ( - - ) : ( - - ); -}; - -class PermissionPicker extends Component { - state = { - open: false, - }; - - onOptionClick = access => () => { - const newAccess = { - ...this.props.access, - ...access, - }; - - this.props.onChange(newAccess); - }; - - openMenu = event => { - event.preventDefault(); - this.setState({ - open: true, - anchor: event.currentTarget, - }); - }; - - closeMenu = () => { - this.setState({ - open: false, - }); - }; - - render = () => { - const { data, meta } = this.props.access; - const { data: dataOptions, meta: metaOptions } = this.props.accessOptions; - - return ( - - - - - - - - - - - - - - {dataOptions && ( - - - - - - - - - )} - - - ); - }; -} - -PermissionPicker.propTypes = { - access: PropTypes.object.isRequired, - accessOptions: PropTypes.object.isRequired, - onChange: PropTypes.func.isRequired, - disabled: PropTypes.bool, -}; - -PermissionPicker.defaultProps = { - disabled: false, -}; - -const OptionHeader = withStyles(styles)(({ text, classes }) => ( -
    {text.toUpperCase()}
    -)); - -OptionHeader.propTypes = { - text: PropTypes.string.isRequired, -}; - -export default PermissionPicker; diff --git a/src/components/sharing-dialog/Sharing.jsx b/src/components/sharing-dialog/Sharing.jsx deleted file mode 100644 index 6bd10f274..000000000 --- a/src/components/sharing-dialog/Sharing.jsx +++ /dev/null @@ -1,222 +0,0 @@ -import PropTypes from "prop-types"; -import React from "react"; -import Divider from "@material-ui/core/Divider"; -import Typography from "@material-ui/core/Typography"; -import { withStyles } from "@material-ui/core/styles"; - -import UserSearch from "./UserSearch"; -import { PublicAccess, ExternalAccess, GroupAccess } from "./Access"; -import i18n from "./i18n"; - -const styles = { - title: { - fontSize: "24px", - fontWeight: 300, - color: "rgba(0, 0, 0, 0.87)", - padding: "16px 0px 5px", - margin: "0px", - }, - createdBy: { - color: "#818181", - }, - titleBodySpace: { - paddingTop: 30, - }, - rules: { - height: "240px", - overflowY: "scroll", - }, -}; - -/** - * Content of the sharing dialog; a set of components for changing sharing - * preferences. - */ -class Sharing extends React.Component { - onAccessRuleChange = id => accessRule => { - const changeWithId = rule => (rule.id === id ? { ...rule, access: accessRule } : rule); - const userAccesses = (this.props.sharedObject.object.userAccesses || []).map(changeWithId); - const userGroupAccesses = (this.props.sharedObject.object.userGroupAccesses || []).map( - changeWithId - ); - - this.props.onChange({ - userAccesses, - userGroupAccesses, - }); - }; - - onAccessRemove = accessOwnerId => () => { - const withoutId = accessOwner => accessOwner.id !== accessOwnerId; - const userAccesses = (this.props.sharedObject.object.userAccesses || []).filter(withoutId); - const userGroupAccesses = (this.props.sharedObject.object.userGroupAccesses || []).filter( - withoutId - ); - - this.props.onChange({ - userAccesses, - userGroupAccesses, - }); - }; - - onPublicAccessChange = publicAccess => { - this.props.onChange({ - publicAccess, - }); - }; - - onExternalAccessChange = externalAccess => { - this.props.onChange({ - externalAccess, - }); - }; - - setAccessListRef = ref => { - this.accessListRef = ref; - }; - - accessListRef = null; - - addUserAccess = userAccess => { - const currentAccesses = this.props.sharedObject.object.userAccesses || []; - this.props.onChange( - { - userAccesses: [...currentAccesses, userAccess], - }, - this.scrollAccessListToBottom() - ); - }; - - addUserGroupAccess = userGroupAccess => { - const currentAccesses = this.props.sharedObject.object.userGroupAccesses || []; - this.props.onChange( - { - userGroupAccesses: [...currentAccesses, userGroupAccess], - }, - this.scrollAccessListToBottom() - ); - }; - - scrollAccessListToBottom = () => { - this.accessListRef.scrollTop = this.accessListRef.scrollHeight; - }; - - render() { - const { - user, - displayName, - name, - userAccesses, - userGroupAccesses, - publicAccess, - externalAccess, - } = this.props.sharedObject.object; - const { allowPublicAccess = true, allowExternalAccess = false } = - this.props.sharedObject.meta || {}; - const { controls, classes } = this.props; - - const accessIds = (userAccesses || []) - .map(access => access.id) - .concat((userGroupAccesses || []).map(access => access.id)); - - return ( -
    -

    {displayName || name}

    - {user && user.name && ( -
    - {`${i18n.t("Created by")}: ${user.name}`} -
    - )} - {controls || null} -
    - {i18n.t("Who has access")} - -
    - - - {allowExternalAccess && ( - - )} - - {userAccesses && - userAccesses.map(access => ( -
    - - -
    - ))} - {userGroupAccesses && - userGroupAccesses.map(access => ( -
    - - -
    - ))} -
    - -
    - ); - } -} - -Sharing.propTypes = { - /** - * The object to share - */ - sharedObject: PropTypes.shape({ - object: PropTypes.object, - meta: PropTypes.shape({ - allowPublicAccess: PropTypes.bool, - allowExternalAccess: PropTypes.bool, - }), - }).isRequired, - - /* - * If true, the object's data should have their own settings. - */ - dataShareable: PropTypes.bool.isRequired, - - /** - * Function that takes an object containing updated sharing preferences and - * an optional callback fired when the change was successfully posted. - */ - onChange: PropTypes.func.isRequired, - - /** - * Takes a string and a callback, and returns matching users and userGroups. - */ - onSearch: PropTypes.func.isRequired, - - controls: PropTypes.node, -}; - -export default withStyles(styles)(Sharing); diff --git a/src/components/sharing-dialog/SharingDialog.jsx b/src/components/sharing-dialog/SharingDialog.jsx deleted file mode 100644 index d1f8cc7e8..000000000 --- a/src/components/sharing-dialog/SharingDialog.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; -import DialogContent from "@material-ui/core/DialogContent"; -import ConfirmationDialog from "./ConfirmationDialog"; -import Sharing from "./Sharing"; -import i18n from "./i18n"; - -const SharingDialog = ({ - isOpen, - isDataShareable, - sharedObject, - onCancel, - onSharingChanged, - onSearchRequest, - controls, -}) => { - return ( - - - {sharedObject && ( - - )} - - - ); -}; - -export default SharingDialog; diff --git a/src/components/sharing-dialog/SharingDialogMultiple.jsx b/src/components/sharing-dialog/SharingDialogMultiple.jsx deleted file mode 100644 index c716fae25..000000000 --- a/src/components/sharing-dialog/SharingDialogMultiple.jsx +++ /dev/null @@ -1,63 +0,0 @@ -import _ from "lodash" -import React, { useState } from "react"; -import { FormControlLabel, Switch } from "@material-ui/core"; -import SharingDialog from "./SharingDialog"; -import { mergeShareableAccesses } from "./utils"; -import i18n from "./i18n"; - -const SharingDialogMultiple = props => { - const { meta, objects, onSharingChanged, ...otherProps } = props; - const initialStrategy = objects.length === 1 ? "replace" : "merge"; - const [strategy, setStrategy] = useState(initialStrategy); - - const names = _(objects) - .map(obj => obj.displayName || obj.name) - .take(4); - const name = _.compact([ - objects.length > 1 ? `[${objects.length}] ` : null, - names.join(", "), - names.size() > objects.length ? `, ...` : null, - ]).join(""); - - const users = _.uniq(objects.map(obj => obj.user)); - const user = users.length === 1 ? users[0] : undefined; - const object = { name, user, ...mergeShareableAccesses(objects) }; - const mergedObject = { object, meta }; - const controls = - objects.length > 1 ? : null; - - const onChange = objects => onSharingChanged(objects, strategy); - - return ( - - ); -}; - -const StrategySwitch = props => { - const { strategy, onChange } = props; - const strategies = { merge: i18n.t("Merge"), replace: i18n.t("Replace") }; - const label = [i18n.t("Update strategy"), ": ", strategies[strategy]].join(""); - - return ( -
    - onChange(ev.target.checked ? "replace" : "merge")} - value="checkedB" - color="primary" - /> - } - label={label} - /> -
    - ); -}; - -export default SharingDialogMultiple; diff --git a/src/components/sharing-dialog/UserSearch.jsx b/src/components/sharing-dialog/UserSearch.jsx deleted file mode 100644 index 1d3f821bc..000000000 --- a/src/components/sharing-dialog/UserSearch.jsx +++ /dev/null @@ -1,165 +0,0 @@ -import React, { Component } from "react"; -import PropTypes from "prop-types"; -import { Subject } from "rxjs/Subject"; -import { timer } from "rxjs/observable/timer"; -import { debounce } from "rxjs/operators"; -import { withStyles } from "@material-ui/core/styles"; - -import { accessObjectToString } from "./utils"; -import PermissionPicker from "./PermissionPicker"; -import AutoComplete from "./AutoComplete"; -import i18n from "./i18n"; - -const styles = { - container: { - fontWeight: "400", - padding: 16, - backgroundColor: "#F5F5F5", - display: "flex", - flexDirection: "column", - justifyContent: "center", - }, - - innerContainer: { - display: "flex", - flexDirection: "row", - flex: 1, - }, - - title: { - color: "#818181", - paddingBottom: 8, - }, -}; - -const searchDelay = 300; - -class UserSearch extends Component { - state = { - defaultAccess: { - meta: { canView: true, canEdit: true }, - data: { canView: false, canEdit: false }, - }, - searchResult: [], - searchText: "", - }; - - componentDidMount() { - this.inputStream.pipe(debounce(() => timer(searchDelay))).subscribe(searchText => { - this.fetchSearchResult(searchText); - }); - } - - onItemSelected = selected => { - // Material UI triggers an 'onUpdateInput' when a search result is clicked. Therefore, we - // immediately pushes a new item to the search stream to prevent the stream from searching - // for the item again. - this.inputStream.next(""); - - const selection = this.state.searchResult.find(r => r.id === selected.id); - - const type = selection.type; - delete selection.type; - - if (type === "userAccess") { - this.props.addUserAccess({ - ...selection, - access: accessObjectToString(this.state.defaultAccess), - }); - } else { - this.props.addUserGroupAccess({ - ...selection, - access: accessObjectToString(this.state.defaultAccess), - }); - } - this.clearSearchText(); - }; - - inputStream = new Subject(); - - hasNoCurrentAccess = userOrGroup => this.props.currentAccessIds.indexOf(userOrGroup.id) === -1; - - fetchSearchResult = searchText => { - if (searchText === "") { - this.handleSearchResult([]); - } else { - this.props.onSearch(searchText).then(({ users, userGroups }) => { - const addType = type => result => ({ ...result, type }); - const searchResult = users - .map(addType("userAccess")) - .filter(this.hasNoCurrentAccess) - .concat( - userGroups.map(addType("userGroupAccess")).filter(this.hasNoCurrentAccess) - ); - - this.handleSearchResult(searchResult); - }); - } - }; - - handleSearchResult = searchResult => { - this.setState({ searchResult }); - }; - - onInputChanged = searchText => { - this.inputStream.next(searchText); - this.setState({ searchText }); - }; - - accessOptionsChanged = accessOptions => { - this.setState({ - defaultAccess: accessOptions, - }); - }; - - clearSearchText = () => { - this.setState({ - searchText: "", - }); - }; - - render() { - const { classes } = this.props; - return ( -
    -
    {i18n.t("Add users and user groups")}
    -
    - - -
    -
    - ); - } -} - -UserSearch.propTypes = { - onSearch: PropTypes.func.isRequired, - addUserAccess: PropTypes.func.isRequired, - dataShareable: PropTypes.bool.isRequired, - addUserGroupAccess: PropTypes.func.isRequired, - currentAccessIds: PropTypes.array.isRequired, -}; - -export default withStyles(styles)(UserSearch); diff --git a/src/components/sharing-dialog/i18n.js b/src/components/sharing-dialog/i18n.js deleted file mode 100644 index 9bc014c30..000000000 --- a/src/components/sharing-dialog/i18n.js +++ /dev/null @@ -1,12 +0,0 @@ -export let config = { d2: null }; - -export function t(...args) { - const { d2 } = config; - if (!d2) { - throw new Error("d2 not initialized"); - } else { - return d2.i18n.getTranslation(...args); - } -} - -export default { t, config }; diff --git a/src/components/sharing-dialog/utils.js b/src/components/sharing-dialog/utils.js deleted file mode 100644 index 60042fc61..000000000 --- a/src/components/sharing-dialog/utils.js +++ /dev/null @@ -1,149 +0,0 @@ -import _ from "lodash"; -import { getOwnedPropertyJSON } from "../../utils/Dhis2Helpers"; - -export const cachedAccessTypeToString = (canView, canEdit) => { - if (canView) { - return canEdit ? "rw------" : "r-------"; - } - - return "--------"; -}; - -export const transformAccessObject = (access, type) => ({ - id: access.id, - name: access.name, - displayName: access.displayName, - type, - canView: access.access && access.access.includes("r"), - canEdit: access.access && access.access.includes("rw"), -}); - -export const accessStringToObject = access => { - if (!access) { - return { - data: { canView: false, canEdit: false }, - meta: { canView: false, canEdit: false }, - }; - } - - const metaAccess = access.substring(0, 2); - const dataAccess = access.substring(2, 4); - - return { - meta: { - canView: metaAccess.includes("r"), - canEdit: metaAccess.includes("rw"), - }, - data: { - canView: dataAccess.includes("r"), - canEdit: dataAccess.includes("rw"), - }, - }; -}; - -export const accessObjectToString = accessObject => { - const convert = ({ canEdit, canView }) => { - if (canEdit) { - return "rw"; - } - - return canView ? "r-" : "--"; - }; - - let accessString = ""; - accessString += convert(accessObject.meta); - accessString += convert(accessObject.data); - accessString += "----"; - - return accessString; -}; - -/* Batch mode helpers */ - -export function mergeShareableAccesses(objects) { - return { - publicAccess: mergeAccesses(objects, "publicAccess"), - externalAccess: _(objects) - .map(obj => obj.externalAccess) - .uniq() - .isEqual([true]), - userAccesses: mergeEntityAccesses(objects, "userAccesses"), - userGroupAccesses: mergeEntityAccesses(objects, "userGroupAccesses"), - }; -} - -function mergeAccesses(objects, field, defaultAccess = "--------") { - return _.zip(...objects.map(objects => (objects[field] || defaultAccess).split(""))) - .map(vals => (_.uniq(vals).length === 1 ? vals[0] : "-")) - .join(""); -} - -function mergeEntityAccesses(objects, field) { - const commonAccesses = _.intersectionBy(...objects.map(o => o[field]), "id"); - - return _(objects) - .flatMap(field) - .groupBy("id") - .at(commonAccesses.map(obj => obj.id)) - .values() - .map(permissions => ({ ...permissions[0], access: mergeAccesses(permissions, "access") })) - .value(); -} - -function mergePermissions(object, newAttributes, field, strategy, commonPermissionIds) { - const objPermissions = object[field] || []; - const newPermissions = newAttributes[field]; - if (!newPermissions) return {}; - - switch (strategy) { - case "merge": - // If a permission id was common but it's now not present in newPermissions, it means - // the user removed it from the list, should be removed here. - const idsToRemove = _.difference(commonPermissionIds, newPermissions.map(p => p.id)); - const ids = _(objPermissions) - .map("id") - .concat(_.map(newPermissions, "id")) - .uniq() - .value(); - const newObjPermissions = _(objPermissions) - .keyBy("id") - .merge(_.keyBy(newPermissions, "id")) - .omit(idsToRemove) - .at(ids) - .compact() - .value(); - return { [field]: newObjPermissions }; - case "replace": - return { [field]: newPermissions }; - default: - throw new Error("Unknown strategy: " + strategy); - } -} - -export function save(d2, objects, sharingAttributes, strategy) { - const plainObjects = objects.map(object => - object.modelDefinition ? getOwnedPropertyJSON(object) : object - ); - - const commonIds = _(objects) - .flatMap(obj => [...(obj.userAccesses || []), ...(obj.userGroupAccesses || [])]) - .countBy(permission => permission.id) - .pickBy(count => count === objects.length) - .keys() - .value(); - - const dataSetsUpdated = plainObjects.map(object => ({ - ...object, - ...mergePermissions(object, sharingAttributes, "userAccesses", strategy, commonIds), - ...mergePermissions(object, sharingAttributes, "userGroupAccesses", strategy, commonIds), - ..._.pick(sharingAttributes, ["publicAccess", "externalAccess"]), - })); - - const api = d2.Api.getApi(); - const payload = { dataSets: dataSetsUpdated }; - - return api - .post("metadata", payload) - .then(response => ({ status: response.status === "OK", ...payload })) - .catch(_err => ({ status: "ERROR" })); -} diff --git a/src/config/periodTypes.json b/src/config/periodTypes.json deleted file mode 100644 index 28e932293..000000000 --- a/src/config/periodTypes.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - "Daily", - "Weekly", - "Monthly", - "BiMonthly", - "Quarterly", - "SixMonthly", - "SixMonthlyApril", - "Yearly", - "FinancialApril", - "FinancialJuly", - "FinancialOct" -] diff --git a/src/data/api-futures.ts b/src/data/api-futures.ts new file mode 100644 index 000000000..502ffe7a1 --- /dev/null +++ b/src/data/api-futures.ts @@ -0,0 +1,20 @@ +import { Future } from "$/domain/entities/generic/Future"; +import { CancelableResponse } from "$/types/d2-api"; + +export type FutureData = Future; + +export function apiToFuture(res: CancelableResponse): FutureData { + return Future.fromComputation((resolve, reject) => { + res.getData() + .then(resolve) + .catch((err: unknown) => { + if (err instanceof Error) { + reject(err); + } else { + console.error("apiToFuture:uncatched", err); + reject(new Error("Unknown error")); + } + }); + return res.cancel; + }); +} diff --git a/src/data/repositories/UserD2Repository.ts b/src/data/repositories/UserD2Repository.ts new file mode 100644 index 000000000..7013272d8 --- /dev/null +++ b/src/data/repositories/UserD2Repository.ts @@ -0,0 +1,40 @@ +import { User } from "$/domain/entities/User"; +import { UserRepository } from "$/domain/repositories/UserRepository"; +import { D2Api, MetadataPick } from "$/types/d2-api"; +import { apiToFuture, FutureData } from "$/data/api-futures"; + +export class UserD2Repository implements UserRepository { + constructor(private api: D2Api) {} + + public getCurrent(): FutureData { + return apiToFuture( + this.api.currentUser.get({ + fields: userFields, + }) + ).map(d2User => { + const res = this.buildUser(d2User); + return res; + }); + } + + private buildUser(d2User: D2User) { + return new User({ + id: d2User.id, + name: d2User.displayName, + userGroups: d2User.userGroups, + ...d2User.userCredentials, + }); + } +} + +const userFields = { + id: true, + displayName: true, + userGroups: { id: true, name: true }, + userCredentials: { + username: true, + userRoles: { id: true, name: true, authorities: true }, + }, +} as const; + +type D2User = MetadataPick<{ users: { fields: typeof userFields } }>["users"][number]; diff --git a/src/data/repositories/UserTestRepository.ts b/src/data/repositories/UserTestRepository.ts new file mode 100644 index 000000000..1378d1e48 --- /dev/null +++ b/src/data/repositories/UserTestRepository.ts @@ -0,0 +1,11 @@ +import { User } from "$/domain/entities/User"; +import { createAdminUser } from "$/domain/entities/__tests__/userFixtures"; +import { Future } from "$/domain/entities/generic/Future"; +import { UserRepository } from "$/domain/repositories/UserRepository"; +import { FutureData } from "$/data/api-futures"; + +export class UserTestRepository implements UserRepository { + public getCurrent(): FutureData { + return Future.success(createAdminUser()); + } +} diff --git a/src/domain/entities/Ref.ts b/src/domain/entities/Ref.ts new file mode 100644 index 000000000..8b95ca2f4 --- /dev/null +++ b/src/domain/entities/Ref.ts @@ -0,0 +1,9 @@ +export type Id = string; + +export interface Ref { + id: Id; +} + +export interface NamedRef extends Ref { + name: string; +} diff --git a/src/domain/entities/User.ts b/src/domain/entities/User.ts new file mode 100644 index 000000000..9323f57c6 --- /dev/null +++ b/src/domain/entities/User.ts @@ -0,0 +1,24 @@ +import { Struct } from "./generic/Struct"; +import { NamedRef } from "./Ref"; + +export interface UserAttrs { + id: string; + name: string; + username: string; + userRoles: UserRole[]; + userGroups: NamedRef[]; +} + +export interface UserRole extends NamedRef { + authorities: string[]; +} + +export class User extends Struct() { + belongToUserGroup(userGroupUid: string): boolean { + return this.userGroups.some(({ id }) => id === userGroupUid); + } + + isAdmin(): boolean { + return this.userRoles.some(({ authorities }) => authorities.includes("ALL")); + } +} diff --git a/src/domain/entities/__tests__/User.spec.ts b/src/domain/entities/__tests__/User.spec.ts new file mode 100644 index 000000000..49bfcb4c8 --- /dev/null +++ b/src/domain/entities/__tests__/User.spec.ts @@ -0,0 +1,37 @@ +import { describe, expect, it } from "vitest"; +import { createAdminUser, createNonAdminUser, createUserWithGroups } from "./userFixtures"; + +describe("User", () => { + it("should be admin if has a role with authority ALL", () => { + const user = createAdminUser(); + + expect(user.isAdmin()).toBe(true); + }); + it("should no be admin if hasn't a role with authority ALL", () => { + const user = createNonAdminUser(); + + expect(user.isAdmin()).toBe(false); + }); + it("should return belong to user group equal to false when the id exist", () => { + const userGroupId = "BwyMfDBLih9"; + + const user = createUserWithGroups([{ id: userGroupId, name: "Group 1" }]); + + expect(user.belongToUserGroup(userGroupId)).toBe(true); + }); + it("should return belong to user group equal to false when the id does not exist", () => { + const existedUserGroupId = "BwyMfDBLih9"; + const nonExistedUserGroupId = "f31IM13BgwJ"; + + const user = createUserWithGroups([{ id: existedUserGroupId, name: "Group 1" }]); + + expect(user.belongToUserGroup(nonExistedUserGroupId)).toBe(false); + }); + it("should return belong to user group equal to false if user groups is empty", () => { + const nonExistedUserGroupId = "f31IM13BgwJ"; + + const user = createUserWithGroups(); + + expect(user.belongToUserGroup(nonExistedUserGroupId)).toBe(false); + }); +}); diff --git a/src/domain/entities/__tests__/userFixtures.ts b/src/domain/entities/__tests__/userFixtures.ts new file mode 100644 index 000000000..a54c92ac5 --- /dev/null +++ b/src/domain/entities/__tests__/userFixtures.ts @@ -0,0 +1,31 @@ +import { User, UserRole } from "$/domain/entities/User"; +import { NamedRef } from "$/domain/entities/Ref"; + +export function createAdminUser(): User { + const adminRoles = [{ id: "Hg7n0MwzUQn", name: "Super user", authorities: ["ALL"] }]; + + return createUser(adminRoles, []); +} +export function createNonAdminUser(): User { + const nonAdminRoles = [{ id: "Hg7n0MwzUQn", name: "Malaria", authorities: ["F_EXPORT_DATA"] }]; + + return createUser(nonAdminRoles, []); +} +export function createUserWithGroups(userGroups: NamedRef[] = []): User { + return new User({ + id: "YjJdEO6d38H", + name: "John Traore", + username: "user", + userRoles: [], + userGroups, + }); +} +function createUser(userRoles: UserRole[], userGroups: NamedRef[] = []): User { + return new User({ + id: "kQiwoyMYHBS", + name: "John Traore", + username: "user", + userRoles, + userGroups, + }); +} diff --git a/src/domain/entities/generic/Collection.ts b/src/domain/entities/generic/Collection.ts new file mode 100644 index 000000000..b48d66232 --- /dev/null +++ b/src/domain/entities/generic/Collection.ts @@ -0,0 +1,328 @@ +import { HashMap } from "./HashMap"; + +/** + * Wrap a collection of values, expanding methods for Javascript Arrays. An example: + * + * ``` + * import _ from "./Collection"; + * + * const values = _(["1", "2", "3", "3", "4"]) + * .map(x => parseInt(x)) + * .filter(x => x > 1) + * .uniq() + * .reverse() + * .value(); // [4, 3, 2] + * ``` + */ + +export class Collection { + protected xs: T[]; + + protected constructor(values: T[]) { + this.xs = values; + } + + /* Builders */ + + static from(xs: T[]): Collection { + return new Collection(xs); + } + + static range(start: number, end: number, step = 1): Collection { + const output = []; + for (let idx = start; idx < end; idx = idx + step) output.push(idx); + return Collection.from(output); + } + + /* Unwrappers */ + + value(): T[] { + return this.xs; + } + + toArray = this.value; + + get size() { + return this.xs.length; + } + + /* Methods that return a Collection */ + + map(fn: (x: T) => U): Collection { + return _c(this.xs.map(fn)); + } + + flatten(): T extends Array ? Collection : never { + return _c(this.xs.flat()) as any; + } + + flatMap(fn: (x: T) => Collection): Collection { + return _c(this.xs.flatMap(x => fn(x).toArray())); + } + + select(pred: (x: T) => boolean): Collection { + return _c(this.xs.filter(pred)); + } + + filter = this.select; + + reject(pred: (x: T) => boolean): Collection { + return _c(this.xs.filter(x => !pred(x))); + } + + enumerate(): Collection<[number, T]> { + return _c(this.xs.map((x, idx) => [idx, x])); + } + + compact(): Collection> { + return this.reject(x => x === undefined || x === null) as unknown as Collection< + NonNullable + >; + } + + compactMap(fn: (x: T) => U | undefined | null): Collection { + return this.map(fn).compact() as unknown as Collection; + } + + append(x: T): Collection { + return _c(this.xs.concat([x])); + } + + includes(x: T): boolean { + return this.xs.includes(x); + } + + every(pred: (x: T) => boolean): boolean { + return this.xs.every(pred); + } + + all = this.every; + + some(pred: (x: T) => boolean): boolean { + return this.xs.some(pred); + } + + any = this.some; + + find(pred: (x: T) => boolean, options: { or?: Or } = {}): T | Or { + return this.xs.find(pred) || (options?.or as Or); + } + + sort(): Collection { + return this.sortWith(defaultCompareFn); + } + + reverse(): Collection { + return _c([...this.xs].reverse()); + } + + sortWith(compareFn: CompareFn): Collection { + return _c(this.xs.slice().sort(compareFn)); + } + + sortBy(fn: (x: T) => U, options: { compareFn?: CompareFn } = {}): Collection { + const compareFn = options.compareFn || defaultCompareFn; + // TODO: Schwartzian transform: decorate + sort tuple + undecorate + return this.sortWith((a, b) => compareFn(fn(a), fn(b))); + } + + orderBy(items: OrderItem[]): Collection { + return this.sortWith((a, b) => { + return compareArray(a, b, items); + }); + } + + first(): T | undefined { + return this.xs[0]; + } + + last(): T | undefined { + return this.xs[this.xs.length - 1]; + } + + sum(): number { + return this.xs.reduce((acc, x) => acc + Number(x), 0); + } + + take(n: number): Collection { + return _c(this.xs.slice(0, n)); + } + + drop(n: number): Collection { + return _c(this.xs.slice(n)); + } + + pairwise(): Collection<[T, T]> { + const n = 2; + + return _c( + this.xs + .slice(0, this.xs.length - n + 1) + .map((_x, idx) => [this.xs[idx], this.xs[idx + 1]] as [T, T]) + ); + } + + prepend(x: T) { + return _c([x, ...this.xs]); + } + + tap(fn: (xs: Collection) => void) { + fn(this); + return this; + } + + splitAt(indexes: number[]): Collection> { + return _c(indexes) + .prepend(0) + .append(this.xs.length) + .pairwise() + .map(([i1, i2]) => _c(this.xs.slice(i1, i2))); + } + + thru(fn: (xs: Collection) => Collection) { + return fn(this); + } + + join(char: string): string { + return this.xs.join(char); + } + + get(idx: number): T | undefined { + return this.xs[idx]; + } + + getMany(idxs: number[]): Collection { + return _c(idxs.map(idx => this.xs[idx])); + } + + intersperse(value: T): Collection { + return this.flatMap(x => _c([x, value])).thru(cs => cs.take(cs.size - 1)); + } + + uniq(): Collection { + return this.uniqBy(x => x); + } + + uniqBy(mapper: (value: T) => U): Collection { + const seen = new Set(); + const output: Array = []; + + for (const item of this.xs) { + const mapped = mapper(item); + if (!seen.has(mapped)) { + output.push(item); + seen.add(mapped); + } + } + + return _c(output); + } + + reduce(mapper: (acc: U, value: T) => U, initialAcc: U): U { + return this.xs.reduce(mapper, initialAcc); + } + + chunk(size: number): Collection { + return Collection.range(0, this.xs.length, size).map(index => { + return this.xs.slice(index, index + size); + }); + } + + cartesian(): T extends Array ? Collection : never { + const [ys, ...zss] = this.xs; + + if (!ys) { + return _c([[]]) as any; + } else { + return _c(ys as T[]).flatMap(x => + _c(zss) + .cartesian() + .map(zs => [x, ...zs]) + ) as any; + } + } + + // forEach(fn: (value: T) => void): void + + zipLongest(xs: Collection): Collection<[T | undefined, S | undefined]> { + const max = Math.max(this.size, xs.size); + const pairs = Collection.range(0, max) + .map(i => [this.xs[i], xs.xs[i]] as [T | undefined, S | undefined]) + .value(); + return _c(pairs); + } + + zip(xs: Collection): Collection<[T, S]> { + const min = Math.min(this.size, xs.size); + const pairs = Collection.range(0, min) + .map(i => [this.xs[i], xs.xs[i]] as [T, S]) + .value(); + return _c(pairs); + } + + /* Methods that return HashMap */ + + indexBy(grouperFn: (x: T) => U): HashMap { + const initialValue = HashMap.empty(); + + return this.reduce((acc, x) => { + const key = grouperFn(x); + return acc.set(key, x); + }, initialValue); + } + + keyBy = this.indexBy; + + groupBy(grouperFn: (x: T) => U): HashMap { + const map = this.reduce((acc, value) => { + const key = grouperFn(value); + const valuesForKey = acc.get(key) || []; + valuesForKey.push(value); + return acc.set(key, valuesForKey); + }, new Map()); + + return HashMap.fromPairs(Array.from(map.entries())); + } + + groupFromMap(pairGrouperFn: (x: T) => [U, W]): HashMap { + const map = this.reduce((acc, x) => { + const [key, value] = pairGrouperFn(x); + const valuesForKey = acc.get(key) || []; + valuesForKey.push(value); + return acc.set(key, valuesForKey); + }, new Map()); + + return HashMap.fromPairs(Array.from(map.entries())); + } + + toHashMap(toPairFn: (x: T) => [K, V]): HashMap { + const pairs = this.map(toPairFn).toArray(); + return HashMap.fromPairs(pairs); + } +} + +type CompareRes = -1 | 0 | 1; + +type CompareFn = (a: T, b: T) => CompareRes; + +type Direction = "asc" | "desc"; + +function defaultCompareFn(a: T, b: T, direction: Direction = "asc"): CompareRes { + const [value1, value2] = + direction === "asc" ? [1 as const, -1 as const] : [-1 as const, 1 as const]; + return a > b ? value1 : b > a ? value2 : 0; +} + +function compareArray(a: T, b: T, items: OrderItem[]): CompareRes { + const item = items[0]; + if (!item) return 0; + const [mapper, direction] = item; + const res = defaultCompareFn(mapper(a), mapper(b), direction); + return res !== 0 ? res : compareArray(a, b, items.slice(1)); +} + +type OrderItem = [(obj: T) => unknown, "asc" | "desc"]; + +export default function _c(xs: T[]): Collection { + return Collection.from(xs); +} diff --git a/src/domain/entities/generic/Either.ts b/src/domain/entities/generic/Either.ts new file mode 100644 index 000000000..332340901 --- /dev/null +++ b/src/domain/entities/generic/Either.ts @@ -0,0 +1,86 @@ +/** + * Either a success value or an error. Example: + * + * ``` + * Either.success<{ message: string }, string>("9") + * .map(s => parseInt(s)) + * .flatMap(x => { + * return x > 0 ? Either.success(Math.sqrt(x)) : Either.error({ message: "negative!" }); + * }) + * .match({ + * success: x => console.log(`Value is ${x}`), + * error: error => console.error(`Some error: ${error.message}`), + * }); // prints `Value is 3` + * ``` + */ + +export class Either { + constructor(public value: EitherValue) {} + + match(matchObj: MatchObject): Res { + switch (this.value.type) { + case "success": + return matchObj.success(this.value.data); + case "error": + return matchObj.error(this.value.error); + } + } + + isError(): this is this & { value: EitherValueError } { + return this.value.type === "error"; + } + + isSuccess(): this is this & { value: EitherValueSuccess } { + return this.value.type === "success"; + } + + map(fn: (data: Data) => Data1): Either { + return this.flatMap(data => new Either({ type: "success", data: fn(data) })); + } + + mapError(fn: (error: Error) => Error1): Either { + return this.flatMapError( + error => new Either({ type: "error", error: fn(error) }) + ); + } + + flatMap(fn: (data: Data) => Either): Either { + return this.match({ + success: data => fn(data), + error: () => this as Either, + }); + } + + flatMapError(fn: (error: Error) => Either): Either { + return this.match({ + success: () => this as Either, + error: error => fn(error), + }); + } + + static error(error: Error) { + return new Either({ type: "error", error }); + } + + static success(data: Data) { + return new Either({ type: "success", data }); + } + + static map2( + [either1, either2]: [Either, Either], + fn: (data1: Data1, data2: Data2) => Res + ): Either { + return either1.flatMap(data1 => { + return either2.map(data2 => fn(data1, data2)); + }); + } +} + +type EitherValueError = { type: "error"; error: Error; data?: never }; +type EitherValueSuccess = { type: "success"; error?: never; data: Data }; +type EitherValue = EitherValueError | EitherValueSuccess; + +type MatchObject = { + success: (data: Data) => Res; + error: (error: Error) => Res; +}; diff --git a/src/domain/entities/generic/Future.ts b/src/domain/entities/generic/Future.ts new file mode 100644 index 000000000..0e95bd58a --- /dev/null +++ b/src/domain/entities/generic/Future.ts @@ -0,0 +1,193 @@ +import * as rcpromise from "real-cancellable-promise"; +import { Cancellation } from "real-cancellable-promise"; + +/** + * Futures are async values similar to promises, with some differences: + * - Futures are only executed when their method `run` is called. + * - Futures are cancellable (thus, they can be easily used in a `React.useEffect`, for example). + * - Futures have fully typed errors. Subclass Error if you need full stack traces. + * - You may still use async/await monad-style blocks (check Future.block). + * + * More info: https://github.com/EyeSeeTea/know-how/wiki/Async-futures + */ +export class Future { + private constructor(private _promise: () => rcpromise.CancellablePromise) {} + + static success(data: D): Future { + return new Future(() => rcpromise.CancellablePromise.resolve(data)); + } + + static error(error: E): Future { + return new Future(() => rcpromise.CancellablePromise.reject(error)); + } + + static fromComputation( + computation: (resolve: (value: D) => void, reject: (error: E) => void) => Cancel + ): Future { + let cancel: Cancel = () => {}; + + return new Future(() => { + const promise = new Promise((resolve, reject) => { + cancel = computation(resolve, error => reject(error)); + }); + + return new rcpromise.CancellablePromise(promise, cancel || (() => {})); + }); + } + + run(onSuccess: (data: D) => void, onError: (error: E) => void): Cancel { + return this._promise().then(onSuccess, err => { + if (err instanceof rcpromise.Cancellation) { + // no-op + } else { + onError(err); + } + }).cancel; + } + + map(fn: (data: D) => U): Future { + return new Future(() => this._promise().then(fn)); + } + + mapError(fn: (error: E) => E2): Future { + return new Future(() => + this._promise().catch((error: E) => { + throw fn(error); + }) + ); + } + + flatMap(fn: (data: D) => Future): Future { + return new Future(() => this._promise().then(data => fn(data)._promise())); + } + + chain(fn: (data: D) => Future): Future { + return this.flatMap(fn); + } + + toPromise(): Promise { + return this._promise(); + } + + static join2(async1: Future, async2: Future): Future { + return new Future(() => { + return rcpromise.CancellablePromise.all([async1._promise(), async2._promise()]); + }); + } + + static joinObj>>( + obj: Obj, + options: ParallelOptions = { concurrency: 1 } + ): Future< + Obj[keyof Obj] extends Future ? E : never, + { [K in keyof Obj]: Obj[K] extends Future ? U : never } + > { + const asyncs = Object.values(obj); + + return Future.parallel(asyncs, options).map(values => { + const keys = Object.keys(obj); + const pairs = keys.map((key, idx) => [key, values[idx]]); + return Object.fromEntries(pairs); + }); + } + + static sequential(asyncs: Future[]): Future { + return Future.block(async $ => { + const output: D[] = []; + for (const async of asyncs) { + const res = await $(async); + output.push(res); + } + return output; + }); + } + + static parallel(asyncs: Future[], options: ParallelOptions): Future { + return new Future(() => + rcpromise.buildCancellablePromise(async $ => { + const queue: rcpromise.CancellablePromise[] = []; + const output: D[] = new Array(asyncs.length); + + for (const [idx, async] of asyncs.entries()) { + const queueItem$ = async._promise().then(res => { + queue.splice(queue.indexOf(queueItem$), 1); + output[idx] = res; + }); + + queue.push(queueItem$); + + if (queue.length >= options.concurrency) + await $(rcpromise.CancellablePromise.race(queue)); + } + + await $(rcpromise.CancellablePromise.all(queue)); + return output; + }) + ); + } + + static sleep(ms: number): Future { + return new Future(() => rcpromise.CancellablePromise.delay(ms)).map(() => ms); + } + + static void(): Future { + return Future.success(undefined); + } + + static block(blockFn: (capture: CaptureAsync) => Promise): Future { + return new Future((): rcpromise.CancellablePromise => { + return rcpromise.buildCancellablePromise(capturePromise => { + const captureAsync: CaptureAsync = async => { + return capturePromise(async._promise()); + }; + + captureAsync.throw = function (error: E) { + throw error; + }; + + return blockFn(captureAsync); + }); + }); + } + + static block_() { + return function (blockFn: (capture: CaptureAsync) => Promise): Future { + return Future.block(blockFn); + }; + } +} + +export type Cancel = (() => void) | undefined; + +interface CaptureAsync { + (async: Future): Promise; + throw: (error: E) => never; +} + +type ParallelOptions = { concurrency: number }; + +export function getJSON(url: string): Future { + const abortController = new AbortController(); + + return Future.fromComputation((resolve, reject) => { + // exceptions: TypeError | DOMException[name=AbortError] + fetch(url, { method: "get", signal: abortController.signal }) + .then(res => res.json() as U) // exceptions: SyntaxError + .then(data => resolve(data)) + .catch((error: unknown) => { + if (isNamedError(error) && error.name === "AbortError") { + throw new Cancellation(); + } else if (error instanceof TypeError || error instanceof SyntaxError) { + reject(error); + } else { + reject(new TypeError("Unknown error")); + } + }); + + return () => abortController.abort(); + }); +} + +function isNamedError(error: unknown): error is { name: string } { + return Boolean(error && typeof error === "object" && "name" in error); +} diff --git a/src/domain/entities/generic/HashMap.ts b/src/domain/entities/generic/HashMap.ts new file mode 100644 index 000000000..57d98aaba --- /dev/null +++ b/src/domain/entities/generic/HashMap.ts @@ -0,0 +1,128 @@ +import { Collection } from "./Collection"; +import * as imap from "typed-immutable-map"; + +/** + * Like ES6 Map, but immutable. + * + * ``` + * import HashMap from "./HashMap"; + * + * const map = HashMap.fromObject({ x: 1, y: 2, z: 3 }) + * .invert() + * .pickBy(([key, value]) => key > 1) + * .values(); // ["y", "z"] + */ + +/* Immutable Hash Map. Keys and values can be of any type. */ + +export class HashMap { + protected constructor(protected _map: imap.HashMap) {} + + /* Constructors */ + + static empty() { + return new HashMap(imap.empty()); + } + + static fromPairs(pairs: Array<[K, V]>): HashMap { + return new HashMap(imap.fromIterable(pairs)); + } + + static fromObject(obj: Record) { + return new HashMap(imap.fromObject(obj)); + } + + /* Methods */ + + get(key: K): V | undefined { + return imap.get(key, this._map); + } + + set(key: K, value: V): HashMap { + const updated = imap.set(key, value, this._map); + return new HashMap(updated); + } + + equals(map: HashMap): boolean { + const mapsHaveEqualSize = () => this.size === map.size; + const allValuesEqual = () => this.keys().every(k => this.get(k) === map.get(k)); + return mapsHaveEqualSize() && allValuesEqual(); + } + + keys(): K[] { + return Array.from(imap.keys(this._map)); + } + + values(): V[] { + return Array.from(imap.values(this._map)); + } + + toPairs(): Array<[K, V]> { + return Array.from(imap.entries(this._map)); + } + + get size(): number { + return this._map.size; + } + + pick(keys: K[]): HashMap { + return this.pickBy(([key, _value]) => keys.includes(key)); + } + + pickBy(pred: (pair: readonly [K, V]) => boolean): HashMap { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return new HashMap(imap.filter((value, key) => pred([key!, value]), this._map)); + } + + omit(keys: K[]): HashMap { + return this.pickBy(([key, _value]) => !keys.includes(key)); + } + + omitBy(pred: (pair: readonly [K, V]) => boolean): HashMap { + return this.pickBy(([key, value]) => !pred([key, value])); + } + + toCollection(): Collection<[K, V]> { + return Collection.from(this.toPairs()); + } + + hasKey(key: K): boolean { + return imap.has(key, this._map); + } + + invert(): HashMap { + const invertedPairs = this.toPairs().map<[V, K]>(([key, value]) => [value, key]); + return HashMap.fromPairs(invertedPairs); + } + + invertMulti(): HashMap { + return this.toCollection().groupFromMap(([key, value]) => [value, key]); + } + + mapValues(mapper: (pair: [K, V]) => V2): HashMap { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return new HashMap(imap.map((value, key) => mapper([key!, value]), this._map)); + } + + mapKeys(_mapper: (pair: [K, V]) => K2): HashMap { + const pairs = this.toPairs().map(([key, value]) => { + return [_mapper([key, value]), value] as [K2, V]; + }); + return HashMap.fromPairs(pairs); + } + + merge(other: HashMap): HashMap { + return HashMap.fromPairs(this.toPairs().concat(other.toPairs())); + } + + forEach(fn: (pair: readonly [K, V]) => void): void { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + imap.forEach((value, key) => fn([key!, value]), this._map); + } + + toObject(): ToObject { + return imap.toObject(this._map) as ToObject; + } +} + +type ToObject = K extends keyof any ? Record : Record; diff --git a/src/domain/entities/generic/Rec.ts b/src/domain/entities/generic/Rec.ts new file mode 100644 index 000000000..e2b15dbbd --- /dev/null +++ b/src/domain/entities/generic/Rec.ts @@ -0,0 +1,67 @@ +/** + * Expand methods for Javascript objects. An example: + * + * ``` + * import _r from "./Rec"; + * + * const obj = _r({ x: 1, y: 2, s: "hello" }) + * .pick(["x", "y"]) + * .merge(_r({ z: 3 })) + * .value(); // { x: 1, y: 2, z: 3} + * ``` + */ + +export class Rec { + protected constructor(protected obj: T) {} + + static from(obj: T): Rec { + return new Rec(obj); + } + + keys(): Array { + return Object.keys(this.obj) as Array; + } + + values(): Array { + return Object.values(this.obj) as Array; + } + + toObject(): T { + return this.obj; + } + + value(): T { + return this.obj; + } + + pick(keys: K[]): Rec> { + return this.pickBy(key => keys.includes(key as K)) as unknown as Rec>; + } + + omit(keys: K[]): Rec> { + return this.pickBy(key => !keys.includes(key as K)) as unknown as Rec>; + } + + pickBy(filter: (key: keyof T) => boolean): Rec> { + const pairs = Object.entries(this.obj); + const filtered = Object.fromEntries(pairs.filter(([k, _v]) => filter(k as keyof T))); + return new Rec(filtered) as unknown as Rec>; + } + + omitBy(filter: (key: keyof T) => boolean): Rec> { + return this.pickBy(key => !filter(key)); + } + + merge(rec2: Rec): Rec> { + const merged = { ...this.obj, ...rec2.obj } as Merge; + return new Rec(merged); + } +} + +export default function _r(obj: T): Rec { + return Rec.from(obj); +} + +type Merge = Omit & T2; + +type BaseObj = Record; diff --git a/src/domain/entities/generic/Struct.ts b/src/domain/entities/generic/Struct.ts new file mode 100644 index 000000000..cf4d98160 --- /dev/null +++ b/src/domain/entities/generic/Struct.ts @@ -0,0 +1,45 @@ +/** + * Base class for typical classes with attributes. Features: create, update. + * + * ``` + * class Counter extends Struct<{ id: Id; value: number }>() { + * add(value: number): Counter { + * return this._update({ value: this.value + value }); + * } + * } + * + * const counter1 = Counter.create({ id: "some-counter", value: 1 }); + * const counter2 = counter1._update({ value: 2 }); + * ``` + */ + +export function Struct() { + abstract class Base { + constructor(_attributes: Attrs) { + Object.assign(this, _attributes); + } + + _getAttributes(): Attrs { + const entries = Object.getOwnPropertyNames(this).map(key => [key, (this as any)[key]]); + return Object.fromEntries(entries) as Attrs; + } + + protected _update(partialAttrs: Partial): this { + const ParentClass = this.constructor as new (values: Attrs) => typeof this; + return new ParentClass({ ...this._getAttributes(), ...partialAttrs }); + } + + static create(this: new (attrs: Attrs) => U, attrs: Attrs): U { + return new this(attrs); + } + } + + return Base as { + new (values: Attrs): Attrs & Base; + create: (typeof Base)["create"]; + }; +} + +const GenericStruct = Struct(); + +export type GenericStructInstance = InstanceType; diff --git a/src/domain/entities/generic/__tests/Collection.spec.ts b/src/domain/entities/generic/__tests/Collection.spec.ts new file mode 100644 index 000000000..1b19d6273 --- /dev/null +++ b/src/domain/entities/generic/__tests/Collection.spec.ts @@ -0,0 +1,336 @@ +import { describe, expect, test } from "vitest"; +import _, { Collection } from "$/domain/entities/generic/Collection"; +import { expectTypeOf } from "expect-type"; + +describe("Collection", () => { + test("range", () => { + expect(Collection.range(2, 5).toArray()).toEqual([2, 3, 4]); + expect(Collection.range(2, -1).toArray()).toEqual([]); + }); + + test("map", () => { + const values = _([1, 2, 3]).map(x => 2 * x); + expect(values.toArray()).toEqual([2, 4, 6]); + }); + + test("flatMap", () => { + const values = _([1, 2, 3]).flatMap(x => _([x, -x])); + expect(values.toArray()).toEqual([1, -1, 2, -2, 3, -3]); + }); + + test("flatten", () => { + expect( + _([[1, 2], [3], [], [4, 5]]) + .flatten() + .toArray() + ).toEqual([1, 2, 3, 4, 5]); + }); + + test("filter/select", () => { + const values = _([1, 2, 3, 0, 3]).select(x => x > 1); + expect(values.toArray()).toEqual([2, 3, 3]); + }); + + test("reject", () => { + const values = _([1, 2, 3]).reject(x => x > 1); + expect(values.toArray()).toEqual([1]); + }); + + test("enumerate", () => { + expect(_(["a", "b", "c"]).enumerate().toArray()).toEqual([ + [0, "a"], + [1, "b"], + [2, "c"], + ]); + }); + + test("compact", () => { + const values = _([1, undefined, 2, null, 3]).compact(); + + expect(values.toArray()).toEqual([1, 2, 3]); + expectTypeOf(values).toEqualTypeOf>(); + }); + + test("compactMap", () => { + const values = _([1, 2, 3]).compactMap(x => (x > 1 ? x.toString() : undefined)); + + expect(values.toArray()).toEqual(["2", "3"]); + expectTypeOf(values).toEqualTypeOf>(); + }); + + test("append", () => { + expect(_([1, 2]).append(3).toArray()).toEqual([1, 2, 3]); + }); + + test("includes", () => { + const values = _([1, 2, 3]); + + expect(values.includes(2)).toEqual(true); + expect(values.includes(4)).toEqual(false); + }); + + test("every/all", () => { + const values = _([1, 2, 3]); + + expect(values.every(x => x > 0)).toEqual(true); + expect(values.every(x => x > 1)).toEqual(false); + expect(values.every(x => x > 3)).toEqual(false); + + expect(values.all(x => x > 0)).toEqual(true); + expect(values.all(x => x > 1)).toEqual(false); + expect(values.all(x => x > 3)).toEqual(false); + }); + + test("some/any", () => { + const values = _([1, 2, 3]); + + expect(values.some(x => x > 0)).toEqual(true); + expect(values.some(x => x > 1)).toEqual(true); + expect(values.some(x => x > 3)).toEqual(false); + + expect(values.any(x => x > 0)).toEqual(true); + expect(values.any(x => x > 1)).toEqual(true); + expect(values.any(x => x > 3)).toEqual(false); + }); + + test("find", () => { + const values = _([1, 2, 3]); + + const valueFound = values.find(value => value === 2); + expect(valueFound).toEqual(2); + expectTypeOf(valueFound).toEqualTypeOf(); + + const valueNotFound = values.find(value => value === 4); + expect(valueNotFound).toEqual(undefined); + expectTypeOf(valueNotFound).toEqualTypeOf(); + + const valueDefault = values.find(value => value === 4, { or: 10 }); + expect(valueDefault).toEqual(10); + expectTypeOf(valueDefault).toEqualTypeOf(); + }); + + test("splitAt", () => { + const values = _([0, 1, 2, 3, 4, 5]); + + expect( + values + .splitAt([1, 3]) + .value() + .map(xs => xs.value()) + ).toEqual([[0], [1, 2], [3, 4, 5]]); + }); + + test("join", () => { + expect(_(["a", "b", "c"]).join(" - ")).toEqual("a - b - c"); + }); + + test("get", () => { + const xs = _(["a", "b"]); + + expect(xs.get(-1)).toEqual(undefined); + expect(xs.get(0)).toEqual("a"); + expect(xs.get(1)).toEqual("b"); + expect(xs.get(2)).toEqual(undefined); + }); + + test("getMany", () => { + const xs = _(["a", "b", "c"]); + + expect(xs.getMany([]).toArray()).toEqual([]); + expect(xs.getMany([0, 2]).toArray()).toEqual(["a", "c"]); + expect(xs.getMany([1, 3]).toArray()).toEqual(["b", undefined]); + }); + + test("intersperse", () => { + const xs = _(["a", "b", "c"]); + + expect(xs.intersperse("x").toArray()).toEqual(["a", "x", "b", "x", "c"]); + }); + + test("uniq", () => { + expect(_([1, 2, 2, 3, 1]).uniq().toArray()).toEqual([1, 2, 3]); + }); + + test("uniqBy", () => { + expect( + _(["a", "ab", "b", "c", "abc", "de", "xyz"]) + .uniqBy(s => s.length) + .toArray() + ).toEqual(["a", "ab", "abc"]); + }); + + test("reduce", () => { + expect(_([1, 2, 3]).reduce((acc, x) => acc + x, 10)).toEqual(16); + }); + + test("reverse", () => { + expect(_([1, 2, 3]).reverse().toArray()).toEqual([3, 2, 1]); + }); + + test("sort (strings)", () => { + expect(_(["a", "c", "b"]).sort().toArray()).toEqual(["a", "b", "c"]); + expect(_(["22", "3", "1"]).sort().toArray()).toEqual(["1", "22", "3"]); + }); + + test("sort (numbers)", () => { + expect(_([2, 33, 1, 4]).sort().toArray()).toEqual([1, 2, 4, 33]); + }); + + test("sortBy", () => { + const values = _([2, 33, 1, 4]); + + expect(values.sortBy(x => x).toArray()).toEqual([1, 2, 4, 33]); + expect(values.sortBy(x => -x).toArray()).toEqual([33, 4, 2, 1]); + expect(values.sortBy(x => x.toString()).toArray()).toEqual([1, 2, 33, 4]); + }); + + test("sortBy with custom compareFn", () => { + const values = _([2, 33, 1, 4]); + + expect( + values + .sortBy(x => x, { compareFn: (a, b) => (a === 1 ? -1 : b === 1 ? +1 : 0) }) + .toArray() + ).toEqual([1, 2, 33, 4]); + }); + + test("first", () => { + expect(_([1, 2, 3]).first()).toEqual(1); + expect(_([]).first()).toEqual(undefined); + }); + + test("last", () => { + expect(_([1, 2, 3]).last()).toEqual(3); + expect(_([]).last()).toEqual(undefined); + }); + + test("take", () => { + expect(_([1, 2, 3]).take(-10).toArray()).toEqual([]); + expect(_([1, 2, 3]).take(2).toArray()).toEqual([1, 2]); + expect(_([1, 2, 3]).take(10).toArray()).toEqual([1, 2, 3]); + }); + + test("drop", () => { + expect(_([1, 2, 3]).drop(-0).toArray()).toEqual([1, 2, 3]); + expect(_([1, 2, 3]).drop(2).toArray()).toEqual([3]); + expect(_([1, 2, 3]).drop(10).toArray()).toEqual([]); + }); + + test("pairwise", () => { + expect(_([1, 2, 3, 4]).pairwise().toArray()).toEqual([ + [1, 2], + [2, 3], + [3, 4], + ]); + }); + + test("chunk", () => { + expect(_([1, 2, 3, 4, 5]).chunk(2).toArray()).toEqual([[1, 2], [3, 4], [5]]); + }); + + test("cartesian", () => { + expect(_([[]]).cartesian().toArray()).toEqual([]); + + expect( + _([[1, 2], [3, 4], [5]]) + .cartesian() + .toArray() + ).toEqual([ + [1, 3, 5], + [1, 4, 5], + [2, 3, 5], + [2, 4, 5], + ]); + }); + + test("orderBy", () => { + const unsortedObjects = [ + { id: 1, value: 10 }, + { id: 2, value: 5 }, + { id: 3, value: 10 }, + { id: 4, value: 5 }, + ]; + + const sortedObjects = [ + { id: 4, value: 5 }, + { id: 2, value: 5 }, + { id: 3, value: 10 }, + { id: 1, value: 10 }, + ]; + + expect( + _(unsortedObjects) + .orderBy([ + [obj => obj.value, "asc"], + [obj => obj.id, "desc"], + ]) + .toArray() + ).toEqual(sortedObjects); + }); + + test("zipLongest", () => { + expect( + _([1, 2, 3]) + .zipLongest(_(["a", "b"])) + .toArray() + ).toEqual([ + [1, "a"], + [2, "b"], + [3, undefined], + ]); + }); + + test("zip", () => { + const zipped = _([1, 2, 3]).zip(_(["a", "b"])); + + expectTypeOf(zipped).toEqualTypeOf>(); + expect(zipped.toArray()).toEqual([ + [1, "a"], + [2, "b"], + ]); + }); + + test("prepend", () => { + expect(_([2, 3]).prepend(1).toArray()).toEqual([1, 2, 3]); + }); + + test("indexBy", () => { + const values = _(["a", "ab", "x", "xy"]).indexBy(s => s.length); + + expect(values.size).toEqual(2); + expect(values.get(1)).toEqual("x"); + expect(values.get(2)).toEqual("xy"); + }); + + test("groupBy", () => { + const values = _(["a", "ab", "x", "y", "xy"]).groupBy(s => s.length); + + expect(values.size).toEqual(2); + expect(values.get(1)).toEqual(["a", "x", "y"]); + expect(values.get(2)).toEqual(["ab", "xy"]); + }); + + test("groupBy", () => { + const values = _(["a", "ab", "x", "y", "xy"]).groupBy(s => s.length); + + expect(values.size).toEqual(2); + expect(values.get(1)).toEqual(["a", "x", "y"]); + expect(values.get(2)).toEqual(["ab", "xy"]); + }); + + test("groupAndMap", () => { + const values = _(["1", "12", "9", "89"]).groupFromMap(s => [s.length, parseInt(s)]); + + expect(values.size).toEqual(2); + expect(values.get(1)).toEqual([1, 9]); + expect(values.get(2)).toEqual([12, 89]); + }); + + test("toHashMap from pairs", () => { + const hashMap = _([1, 2]).toHashMap(x => [2 * x, x.toString()]); + + expect(hashMap.size).toEqual(2); + expect(hashMap.get(2)).toEqual("1"); + expect(hashMap.get(4)).toEqual("2"); + }); +}); diff --git a/src/domain/entities/generic/__tests/Future.spec.ts b/src/domain/entities/generic/__tests/Future.spec.ts new file mode 100644 index 000000000..4edf0ff34 --- /dev/null +++ b/src/domain/entities/generic/__tests/Future.spec.ts @@ -0,0 +1,280 @@ +import { describe, expect, test, it, vi, expectTypeOf } from "vitest"; +import { Future } from "$/domain/entities/generic/Future"; + +describe("Basic builders", () => { + test("Future.success", async () => { + const value$ = Future.success(10); + + expectTypeOf(value$).toEqualTypeOf>(); + await expectAsync(value$, { toEqual: 10 }); + }); + + test("Future.error", async () => { + const error = new CodedError("message: Error 1", { code: "E001" }); + const value$ = Future.error(error); + + expectTypeOf(value$).toEqualTypeOf>(); + await expectAsync(value$, { toThrow: error }); + }); +}); + +describe("run", () => { + it("calls the sucess branch with the value", async () => { + const success = vi.fn(); + const reject = vi.fn(); + + Future.success(1).run(success, reject); + await nextTick(); + + expect(success).toHaveBeenCalledTimes(1); + expect(success.mock.calls[0]).toEqual([1]); + expect(reject).not.toHaveBeenCalled(); + }); + + it("calls the error branch with the error", async () => { + const success = vi.fn(); + const reject = vi.fn(); + + const async = Future.error({ errorCode: "E12" }); + async.run(success, reject); + await nextTick(); + + expect(success).not.toHaveBeenCalled(); + expect(reject).toHaveBeenCalledTimes(1); + const error = reject.mock.calls[0]?.[0]; + expect(error).toEqual({ errorCode: "E12" }); + }); +}); + +describe("toPromise", () => { + it("converts a successful Async to promise", async () => { + await expect(Future.success(1).toPromise()).resolves.toEqual(1); + }); + + it("converts an error Async to promise", async () => { + await expect(Future.error(new Error("message")).toPromise()).rejects.toThrow( + new Error("message") + ); + }); +}); + +describe("helpers", () => { + test("Future.sleep", async () => { + await expectAsync(Future.sleep(1), { toEqual: 1 }); + }); + + test("Future.void", async () => { + await expectAsync(Future.void(), { toEqual: undefined }); + }); +}); + +describe("Transformations", () => { + test("map", async () => { + const value1$ = Future.success(1); + const value2$ = value1$.map(x => x.toString()); + + await expectAsync(value2$, { toEqual: "1" }); + }); + + test("mapError", async () => { + const value1$ = Future.error(1); + const value2$ = value1$.mapError(x => x.toString()); + expectTypeOf(value2$).toEqualTypeOf>(); + + await expectAsync(value2$, { toThrow: "1" }); + }); + + describe("flatMap/chain", () => { + it("builds an async value mapping to another async", async () => { + const value$ = Future.success(1) + .chain(value => Future.success(value + 2)) + .flatMap(value => Future.success(value + 3)) + .flatMap(value => Future.success(value + 4)); + + await expectAsync(value$, { toEqual: 10 }); + }); + }); +}); + +describe("Future.block", () => { + describe("when all awaited values in the block are successful", () => { + it("returns the returned value as an async", async () => { + const result$ = Future.block(async $ => { + const value1 = await $(Future.success(1)); + const value2 = await $(Future.success("2")); + const value3 = await $(Future.success(3)); + return value1 + parseInt(value2) + value3; + }); + + await expectAsync(result$, { toEqual: 6 }); + }); + }); + + describe("when any the awaited values in the block is an error", () => { + it("returns that error as the async result", async () => { + const result$ = Future.block(async $ => { + const value1 = await $(Future.success(1)); + const value2 = await $(Future.error("message") as Future); + const value3 = await $(Future.success(3)); + return value1 + value2 + value3; + }); + + await expectAsync(result$, { toThrow: "message" }); + }); + }); + + describe("when any the awaited values in the block is an error", () => { + it("returns that error as the async result", async () => { + const result$ = Future.block_()(async $ => { + const value1 = await $(Future.success(1)); + const value2 = await $(Future.error("message") as Future); + const value3 = await $(Future.success(3)); + return value1 + value2 + value3; + }); + + await expectAsync(result$, { toThrow: "message" }); + }); + }); + + describe("when the helper $.error is called", () => { + it("returns that async error as the async result", async () => { + const value1 = 1; + const double = vi.fn((x: number) => x); + + const result$ = Future.block_()(async $ => { + if (value1 > 0) $.throw(new Error("message")); + const value = await $(Future.success(double(1))); + return value; + }); + + await expectAsync(result$, { toThrow: new Error("message") }); + expect(double).not.toHaveBeenCalled(); + }); + }); +}); + +describe("fromComputation", () => { + describe("for a successful computation", () => { + it("return a success async", async () => { + const value$ = Future.fromComputation((resolve, _reject) => { + resolve(1); + return () => {}; + }); + + await expectAsync(value$, { toEqual: 1 }); + }); + }); + + describe("for an unsuccessful computation", () => { + it("return an error async", async () => { + const value$ = Future.fromComputation((_resolve, reject) => { + reject("message"); + return () => {}; + }); + + await expectAsync(value$, { toThrow: "message" }); + }); + }); +}); + +describe("cancel", () => { + it("cancels the async and the error branch is not called", async () => { + const success = vi.fn(); + const reject = vi.fn(); + + const cancel = Future.sleep(1).run(success, reject); + cancel?.(); + await nextTick(); + + expect(success).not.toHaveBeenCalled(); + expect(reject).toHaveBeenCalledTimes(0); + }); +}); + +describe("join2", () => { + it("returns a single async with the pair of values", async () => { + const join$ = Future.join2(Future.success(123), Future.success("hello")); + + expectTypeOf(join$).toEqualTypeOf>(); + await expectAsync(join$, { toEqual: [123, "hello"] }); + }); + + it("returns an error if some of the inputs is an error", async () => { + const join$ = Future.join2(Future.success(123), Future.error("Some error")); + + expectTypeOf(join$).toEqualTypeOf>(); + await expectAsync(join$, { toThrow: "Some error" }); + }); +}); + +describe("joinObj", () => { + it("returns an async with the object of values", async () => { + const join$ = Future.joinObj({ + n: Future.success(123), + s: Future.success("hello"), + }); + + await expectAsync(join$, { + toEqual: { n: 123, s: "hello" }, + }); + }); + + it("returns an error if some of the inputs is an error", async () => { + const join$ = Future.joinObj({ + n: Future.success(123) as Future, + s: Future.error("Some error") as Future, + }); + expectTypeOf(join$).toEqualTypeOf>(); + + await expectAsync(join$, { toThrow: "Some error" }); + }); +}); + +describe("sequential", () => { + it("returns an async containing all the values as an array", async () => { + const values$ = Future.sequential([ + Future.success(1), + Future.success(2), + Future.success(3), + ]); + await expectAsync(values$, { toEqual: [1, 2, 3] }); + }); +}); + +describe("parallel", async () => { + test("concurrency smaller than length", async () => { + const asyncs = [Future.sleep(3), Future.sleep(1), Future.sleep(2)]; + const values$ = Future.parallel(asyncs, { concurrency: 2 }); + await expectAsync(values$, { toEqual: [3, 1, 2] }); + }); + + test("concurrency larger than length", async () => { + const asyncs = [Future.sleep(3), Future.sleep(1), Future.sleep(2)]; + const values$ = Future.parallel(asyncs, { concurrency: 4 }); + await expectAsync(values$, { toEqual: [3, 1, 2] }); + }); +}); + +function nextTick() { + return new Promise(process.nextTick); +} + +export async function expectAsync( + value$: Future, + options: { toEqual: D; toThrow?: undefined } | { toEqual?: undefined; toThrow: E } +): Promise { + if ("toEqual" in options) { + await expect(value$.toPromise()).resolves.toEqual(options.toEqual); + } else { + await expect(value$.toPromise()).rejects.toMatchObject(options.toThrow as any); + } +} + +class CodedError extends Error { + code: string; + + constructor(message: string, data: { code: string }) { + super(message); + this.code = data.code; + } +} diff --git a/src/domain/entities/generic/__tests/HashMap.spec.ts b/src/domain/entities/generic/__tests/HashMap.spec.ts new file mode 100644 index 000000000..a666d0c5b --- /dev/null +++ b/src/domain/entities/generic/__tests/HashMap.spec.ts @@ -0,0 +1,189 @@ +import { describe, expect, test } from "vitest"; +import { HashMap } from "$/domain/entities/generic/HashMap"; + +const mapAbc123 = HashMap.fromPairs([ + ["a", 1], + ["b", 2], + ["c", 3], +]); + +describe("constructors", () => { + test("empty", () => { + const map = HashMap.empty(); + expect(map.size).toEqual(0); + expectMapPairsToEqual(map, []); + }); + + test("fromPairs", () => { + const map = HashMap.fromPairs([ + ["a", 1], + ["b", 2], + ]); + + expect(map.size).toEqual(2); + expectMapPairsToEqual(map, [ + ["a", 1], + ["b", 2], + ]); + }); + + test("fromObject", () => { + const map = HashMap.fromObject({ a: 1, b: 2 }); + + expect(map.size).toEqual(2); + expect(map.get("a")).toEqual(1); + expect(map.get("b")).toEqual(2); + }); +}); + +describe("conversors", () => { + test("toCollection", () => { + expect(mapAbc123.toCollection().toArray()).toEqual([ + ["a", 1], + ["b", 2], + ["c", 3], + ]); + }); + + test("toObj", () => { + const obj = mapAbc123.toObject(); + expect(obj).toEqual({ a: 1, b: 2, c: 3 }); + }); +}); + +describe("key/value inclusion", () => { + test("hasKey", () => { + expect(mapAbc123.hasKey("b")).toBe(true); + expect(mapAbc123.hasKey("d")).toBe(false); + }); +}); + +describe("get", () => { + test("returns value if present", () => { + expect(mapAbc123.get("a")).toEqual(1); + expect(mapAbc123.get("b")).toEqual(2); + }); + + test("returns undefined if not present", () => { + expect(mapAbc123.get("d")).toBeUndefined(); + }); +}); + +describe("set", () => { + test("creates key entry for non-existing key", () => { + expectMapPairsToEqual(mapAbc123.set("d", 4), [ + ["a", 1], + ["b", 2], + ["c", 3], + ["d", 4], + ]); + }); + + test("overwrites value for existing key", () => { + expectMapPairsToEqual(mapAbc123.set("a", 11), [ + ["a", 11], + ["b", 2], + ["c", 3], + ]); + }); +}); + +describe("transformations", () => { + test("invert", () => { + expectMapPairsToEqual(mapAbc123.invert(), [ + [1, "a"], + [2, "b"], + [3, "c"], + ]); + }); + + test("invertMulti", () => { + const mapAbc122 = HashMap.fromPairs([ + ["a", 1], + ["b", 2], + ["c", 2], + ]); + + expectMapPairsToEqual(mapAbc122.invertMulti(), [ + [1, ["a"]], + [2, ["b", "c"]], + ]); + }); + + test("mapValues", () => { + expectMapPairsToEqual( + mapAbc123.mapValues(([key, value]) => `${key}${value}`), + [ + ["a", "a1"], + ["b", "b2"], + ["c", "c3"], + ] + ); + }); + + test("mapKeys", () => { + const mapped = mapAbc123.mapKeys(([key, value]) => `${key}${value}`); + expectMapPairsToEqual(mapped, [ + ["a1", 1], + ["b2", 2], + ["c3", 3], + ]); + }); + + test("merge", () => { + const mapAcd = HashMap.fromPairs([ + ["a", 11], + ["c", 33], + ["d", 44], + ]); + + expectMapPairsToEqual(mapAbc123.merge(mapAcd), [ + ["a", 11], + ["b", 2], + ["c", 33], + ["d", 44], + ]); + }); + + test("forEach", () => { + const output: Array<[string, number]> = []; + mapAbc123.forEach(([key, value]) => output.push([key, value])); + + expect(output).toEqual([ + ["a", 1], + ["b", 2], + ["c", 3], + ]); + }); +}); + +describe("filtering by key or value", () => { + test("pick", () => { + expectMapPairsToEqual(mapAbc123.pick(["a", "c"]), [ + ["a", 1], + ["c", 3], + ]); + }); + + test("pickBy", () => { + expectMapPairsToEqual( + mapAbc123.pickBy(([k, v]) => k !== "b" && v > 2), + [["c", 3]] + ); + }); + + test("omit", () => { + expectMapPairsToEqual(mapAbc123.omit(["a", "c"]), [["b", 2]]); + }); + + test("omitBy", () => { + expectMapPairsToEqual( + mapAbc123.omitBy(([k, v]) => k === "b" || v === 1), + [["c", 3]] + ); + }); +}); + +function expectMapPairsToEqual(map: HashMap, pairsSet: Array<[K, V]>): void { + expect(map.toPairs()).toEqual(expect.arrayContaining(pairsSet)); +} diff --git a/src/domain/entities/generic/__tests/Rec.spec.ts b/src/domain/entities/generic/__tests/Rec.spec.ts new file mode 100644 index 000000000..7f406a91a --- /dev/null +++ b/src/domain/entities/generic/__tests/Rec.spec.ts @@ -0,0 +1,43 @@ +import { Rec } from "$/domain/entities/generic/Rec"; +import { expectTypeOf } from "expect-type"; + +const rec1 = Rec.from({ x: 1, s: "hello", n: null }); + +describe("Rec", () => { + test("keys", () => { + const keys = rec1.keys(); + expectTypeOf(keys).toEqualTypeOf>(); + expect(keys).toEqual(["x", "s", "n"]); + }); + + test("values", () => { + const values = rec1.values(); + expectTypeOf(values).toEqualTypeOf>(); + expect(values).toEqual([1, "hello", null]); + }); + + test("pick", () => { + const picked = rec1.pick(["x", "n"]); + expectTypeOf(picked).toEqualTypeOf>(); + expect(picked.toObject()).toEqual({ x: 1, n: null }); + }); + + test("pickBy", () => { + expect(rec1.pickBy(key => key === "x").toObject()).toEqual({ x: 1 }); + }); + + test("omit", () => { + expect(rec1.omit(["x", "n"]).toObject()).toEqual({ s: "hello" }); + }); + + test("omitBy", () => { + expect(rec1.omitBy(key => key === "x").toObject()).toEqual({ s: "hello", n: null }); + }); + + test("merge", () => { + const rec2 = Rec.from({ n: true, z: 123 }); + const merged = rec1.merge(rec2); + expectTypeOf(merged).toEqualTypeOf>(); + expect(merged.toObject()).toEqual({ x: 1, s: "hello", n: true, z: 123 }); + }); +}); diff --git a/src/domain/entities/generic/__tests/Struct.spec.ts b/src/domain/entities/generic/__tests/Struct.spec.ts new file mode 100644 index 000000000..1da70df11 --- /dev/null +++ b/src/domain/entities/generic/__tests/Struct.spec.ts @@ -0,0 +1,19 @@ +import { expect, test } from "vitest"; +import { Struct } from "$/domain/entities/generic/Struct"; + +class Person extends Struct<{ name: string; age: number }>() { + description() { + return `${this.name} has ${this.age} years`; + } +} + +const mary = new Person({ name: "Mary Cassatt", age: 54 }); + +test("public attributes", () => { + expect(mary.name).toEqual("Mary Cassatt"); + expect(mary.age).toEqual(54); +}); + +test("public custom methods", () => { + expect(mary.description()).toEqual("Mary Cassatt has 54 years"); +}); diff --git a/src/domain/repositories/UserRepository.ts b/src/domain/repositories/UserRepository.ts new file mode 100644 index 000000000..b197630f1 --- /dev/null +++ b/src/domain/repositories/UserRepository.ts @@ -0,0 +1,6 @@ +import { FutureData } from "$/data/api-futures"; +import { User } from "$/domain/entities/User"; + +export interface UserRepository { + getCurrent(): FutureData; +} diff --git a/src/domain/usecases/GetCurrentUserUseCase.ts b/src/domain/usecases/GetCurrentUserUseCase.ts new file mode 100644 index 000000000..e20f22d43 --- /dev/null +++ b/src/domain/usecases/GetCurrentUserUseCase.ts @@ -0,0 +1,11 @@ +import { FutureData } from "$/data/api-futures"; +import { User } from "$/domain/entities/User"; +import { UserRepository } from "$/domain/repositories/UserRepository"; + +export class GetCurrentUserUseCase { + constructor(private usersRepository: UserRepository) {} + + public execute(): FutureData { + return this.usersRepository.getCurrent(); + } +} diff --git a/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts b/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts new file mode 100644 index 000000000..91d98850f --- /dev/null +++ b/src/domain/usecases/__tests__/GetCurrentUserUseCase.spec.ts @@ -0,0 +1,11 @@ +import { getTestCompositionRoot } from "$/CompositionRoot"; + +describe("GetCurrentUserUseCase", () => { + it("returns user", async () => { + const compositionRoot = getTestCompositionRoot(); + + const res = compositionRoot.users.getCurrent.execute(); + const user = await res.toPromise(); + expect(user.name).toEqual("John Traore"); + }); +}); diff --git a/src/forms/DataInputPeriods.component.js b/src/forms/DataInputPeriods.component.js deleted file mode 100644 index 2d4a6562a..000000000 --- a/src/forms/DataInputPeriods.component.js +++ /dev/null @@ -1,234 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import Dialog from "material-ui/Dialog"; -import RaisedButton from "material-ui/RaisedButton"; -import FlatButton from "material-ui/FlatButton"; -import DatePicker from "material-ui/DatePicker"; -import IconButton from "material-ui/IconButton"; -import FontIcon from "material-ui/FontIcon"; -import Divider from "material-ui/Divider"; - -import { generateUid } from "d2/lib/uid"; - -import getPeriod from "d2/lib/period/parser"; -import PeriodPicker from "d2-ui/lib/period-picker/PeriodPicker.component"; - -const styles = { - periodRow: { display: "flex" }, - periodColumn: { flex: 2, paddingTop: 16 }, - dateColumn: { flex: 1 }, - datePicker: { display: "inline-block" }, - datePickerField: { width: 100 }, - periodPicker: { display: "inline-block" }, - iconButton: { top: 4 }, - divider: { marginTop: -9 }, - openDialogButton: { margin: "16px 0" }, -}; - -class DataInputPeriods extends React.Component { - constructor(props, context) { - super(props, context); - - this.state = { - dialogOpen: false, - dataInputPeriods: props.value, - }; - - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - this.openDialog = this.openDialog.bind(this); - this.closeDialog = this.closeDialog.bind(this); - this.addPeriod = this.addPeriod.bind(this); - this.removePeriod = this.removePeriod.bind(this); - this.changePeriodDate = this.changePeriodDate.bind(this); - - this.handleCancel = this.handleCancel.bind(this); - this.handleSave = this.handleSave.bind(this); - } - - openDialog() { - this.setState({ - dialogOpen: true, - dataInputPeriods: (this.props.value || []).sort((a, b) => - a.period.id.localeCompare(b.period.id) - ), - }); - } - - closeDialog() { - this.setState({ - dialogOpen: false, - }); - } - - addPeriod(periodId) { - this.setState({ - dataInputPeriods: this.state.dataInputPeriods.concat({ - id: generateUid(), - period: { id: periodId }, - }), - }); - } - - removePeriod(uid) { - this.setState({ - dataInputPeriods: this.state.dataInputPeriods.filter(dip => dip.id !== uid), - }); - } - - changePeriodDate(uid, dateField, nothing, value) { - this.setState({ - dataInputPeriods: this.state.dataInputPeriods.map(dip => { - if (dip.id === uid) { - dip[dateField] = value; - } - - return dip; - }), - }); - } - - handleCancel() { - this.closeDialog(); - } - - handleSave() { - this.props.onChange({ - target: { - value: this.state.dataInputPeriods.map(dip => ({ - id: dip.id, - period: { - id: dip.period.id, - }, - openingDate: dip.openingDate, - closingDate: dip.closingDate, - })), - }, - }); - this.closeDialog(); - } - - renderDatePicker(labelText, dateValue, onChange, onCancelClick) { - return ( -
    - - {dateValue && ( - - - clear - - - )} -
    - ); - } - - renderPeriods() { - const removePeriodProxy = uid => { - return () => this.removePeriod(uid); - }; - - const changeDateProxy = (uid, dateField) => { - return this.changePeriodDate.bind(this, uid, dateField); - }; - - const removeDateProxy = (periodId, dateField) => { - return () => this.changePeriodDate(periodId, dateField, null, null); - }; - - return ( - this.state.dataInputPeriods && - this.state.dataInputPeriods.map(dataInputPeriod => ( -
    -
    -
    - - - delete - - - {getPeriod(dataInputPeriod.period.id).name} -
    - {this.renderDatePicker( - this.getTranslation("opening_date"), - dataInputPeriod.openingDate && new Date(dataInputPeriod.openingDate), - changeDateProxy(dataInputPeriod.id, "openingDate"), - removeDateProxy(dataInputPeriod.id, "openingDate") - )} - {this.renderDatePicker( - this.getTranslation("closing_date"), - dataInputPeriod.closingDate && new Date(dataInputPeriod.closingDate), - changeDateProxy(dataInputPeriod.id, "closingDate"), - removeDateProxy(dataInputPeriod.id, "closingDate") - )} -
    - -
    - )) - ); - } - - render() { - const actions = [ - , - , - ]; - - return ( -
    - - - {this.renderPeriods()} -
    - -
    -
    -
    - ); - } -} -DataInputPeriods.contextTypes = { d2: PropTypes.any }; - -export default DataInputPeriods; diff --git a/src/forms/DataSetElementCategoryComboSelectionDialog.component.js b/src/forms/DataSetElementCategoryComboSelectionDialog.component.js deleted file mode 100644 index 3b4cb4489..000000000 --- a/src/forms/DataSetElementCategoryComboSelectionDialog.component.js +++ /dev/null @@ -1,199 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import withState from "recompose/withState"; -import withHandlers from "recompose/withHandlers"; -import compose from "recompose/compose"; -import getContext from "recompose/getContext"; -import Column from "d2-ui/lib/layout/Column.component"; -import Row from "d2-ui/lib/layout/Row.component"; -import SelectField from "material-ui/SelectField/SelectField"; -import MenuItem from "material-ui/MenuItem/MenuItem"; -import Translate from "d2-ui/lib/i18n/Translate.component"; -import { collectionToArray, getDseId } from "../utils/Dhis2Helpers"; -import _ from "lodash"; - -const enhance = compose( - getContext({ d2: PropTypes.object }), - withState("open", "updateOpen", false), - withHandlers({ - onRequestClose: props => () => { - props.updateOpen(false); - }, - onRequestOpen: props => () => { - props.updateOpen(true); - }, - }) -); - -const getCategoryOptions = categoryCombo => { - if (!categoryCombo || categoryCombo.isDefault) { - return ""; - } else { - return collectionToArray(categoryCombo.categories) - .map(category => - collectionToArray(category.categoryOptions) - .map(co => co.displayName) - .join(" - ") - ) - .join(" / "); - } -}; - -const getOptions = (selectableCategories, selectedCategories) => { - const selectedCategoryIds = new Set(selectedCategories.map(cat => cat.id)); - - return selectableCategories.map(category => { - const { displayName, id } = category; - const categoryOptions = collectionToArray(category.categoryOptions) - .map(co => co.displayName) - .join(" - "); - const checked = selectedCategoryIds.has(category.id); - - return ( - - ); - }); -}; - -const CategoriesSelectField = ({ - hintText, - selectableCategories, - selectedCategories, - onChange, -}) => { - const options = getOptions(selectableCategories, selectedCategories); - const title = _(selectedCategories) - .map("displayName") - .sortBy() - .join(" / "); - const selectableCategoriesById = _.keyBy(selectableCategories, "id"); - const onChangeSelect = (event, index, categoryIds) => - onChange(_.at(selectableCategoriesById, categoryIds)); - const selectionRenderer = categoryIds => { - return _(selectableCategoriesById) - .at(categoryIds) - .map(category => category.displayName) - .join(", "); - }; - - return ( - cat.id)} - title={title} - onChange={onChangeSelect} - fullWidth={true} - selectionRenderer={selectionRenderer} - floatingLabelText={override_data_element_category_combo} - > - {options} - - ); -}; - -function DataSetElementList( - { dataSetElementsGroups, categoryCombos, onCategoriesSelected, canEdit }, - { d2 } -) { - const styles = { - elementListItem: { width: "49%" }, - elementListItemDataElement: { width: "49%", marginTop: "2.5%" }, - noDataElementMessage: { paddingTop: "2rem" }, - originalCategoryCombo: { color: "#CCC", fontSize: "1rem", fontWeight: "300" }, - }; - const categoryCombosById = _.keyBy(categoryCombos, "id"); - const toArray = collectionToArray; - const categories = _(categoryCombos) - .filter(cc => !cc.isDefault) - .flatMap(cc => collectionToArray(cc.categories)) - .uniqBy("id") - .sortBy("displayName") - .value(); - - const dataSetElementsRows = _.flatMap(dataSetElementsGroups, dseGroup => { - const { categoryCombo = {}, dataElement = {} } = dseGroup[0]; - const dseIds = dseGroup.map(dse => getDseId(dse)); - const dataElementCategoryIds = new Set( - toArray(dataElement.categoryCombo.categories).map(cat => cat.id) - ); - const selectableCategories = categories.filter( - category => !dataElementCategoryIds.has(category.id) - ); - const selectedCategories = _.differenceBy( - toArray(categoryCombo.categories), - toArray(dataElement.categoryCombo.categories), - "id" - ); - const categoryOptions = getCategoryOptions( - categoryCombosById[dataElement.categoryCombo.id] - ); - - return ( - -
    - {dseGroup.map(dse => ( -
    {dse.dataElement.displayName}
    - ))} - - {dataElement.categoryCombo.displayName} - -
    - - {canEdit ? ( -
    - onCategoriesSelected(dseIds, categories)} - /> -
    - ) : ( -
    - )} - - ); - }); - - if (dataSetElementsRows.length === 0) { - return ( -
    - {d2.i18n.getTranslation("select_a_data_element_before_applying_an_override")} -
    - ); - } else { - return {dataSetElementsRows}; - } -} - -DataSetElementList.contextTypes = { - d2: PropTypes.object, -}; - -export function DataSetElementCategoryComboSelection(props) { - const { categoryCombos, dataSetElementsGroups, onCategoriesSelected, canEdit } = props; - - return ( -
    - -
    - ); -} - -export default enhance(DataSetElementCategoryComboSelection); diff --git a/src/forms/Dropdown.component.js b/src/forms/Dropdown.component.js deleted file mode 100644 index 34819a0cd..000000000 --- a/src/forms/Dropdown.component.js +++ /dev/null @@ -1,226 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import SelectField from "material-ui/SelectField/SelectField"; -import TextField from "material-ui/TextField"; -import isString from "d2-utilizr/lib/isString"; -import Dialog from "material-ui/Dialog"; -import FlatButton from "material-ui/FlatButton"; -import MenuItem from "material-ui/MenuItem/MenuItem"; - -class Dropdown extends React.Component { - constructor(props, context) { - super(props, context); - - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - - this._onChange = this._onChange.bind(this); - this.openDialog = this.openDialog.bind(this); - this.closeDialog = this.closeDialog.bind(this); - - this.state = { - value: - this.props.value !== undefined && this.props.value !== null ? this.props.value : "", - options: this.getOptions(this.props.options, this.props.isRequired), - dialogOpen: false, - }; - } - - UNSAFE_componentWillReceiveProps(newProps) { - this.setState({ - // value: this.state.value || ((newProps.defaultValue !== undefined && newProps.defaultValue !== null) ? newProps.defaultValue : ''), - options: this.getOptions(newProps.options, newProps.isRequired), - }); - } - - getOptions(options, _required = false) { - let opts = options.map(option => { - return { - value: option.value, - text: option.text, - }; - }); - - return opts.map(option => { - if (option.text && this.props.translateOptions) { - option.text = isString(option.text) - ? this.getTranslation(option.text.toLowerCase()) - : option.text; - } - return option; - }); - } - - _onChange(event, index, value) { - this.props.onChange({ - target: { - value, - }, - }); - } - - openDialog() { - this.setState({ dialogOpen: true, filterText: "" }); - } - - closeDialog() { - this.setState({ dialogOpen: false }); - } - - getOptionText(value) { - return value && this.state.options.length - ? this.state.options.find(option => option.value === value).text - : ""; - } - - renderDialogOption(value, label) { - return ( -
    { - this.props.onChange({ target: { value: value } }); - this.setState({ dialogOpen: false, value: value }); - }} - > - {label} -
    - ); - } - - render() { - const { - onFocus, - onBlur, - labelText, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - translateOptions, - isRequired, - options, - model, - limit, - fullWidth, - translateLabel, - ...other - } = this.props; - - return this.state.options.length > limit ? ( -
    - , - ]} - > - { - this.setState({ filterText: value }); - }} - style={{ marginBottom: 16 }} - /> - {!this.props.isRequired && - this.renderDialogOption(null, this.getTranslation("no_value"))} - {this.state.options - .filter( - o => - !this.state.filterText || - this.state.filterText - .trim() - .toLocaleLowerCase() - .split(" ") - .every(f => - o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) - ) - ) - .map(o => this.renderDialogOption(o.value, o.text))} - - -
    - open_in_new -
    -
    - ) : ( - - {this.renderOptions()} - - ); - } - - renderOptions() { - const options = this.state.options.map((option, index) => ( - - )); - - if (!this.props.isRequired) { - // When the value is not required we add an item that sets the value to null - // For this value we pass an empty label to not show the label no_value - // when this option is selected. - options.unshift([ - , - ]); - } - - return options; - } -} - -Dropdown.propTypes = { - defaultValue: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool, - ]), - onFocus: PropTypes.func, - onBlur: PropTypes.func, - options: PropTypes.array.isRequired, - isRequired: PropTypes.bool, - labelText: PropTypes.string.isRequired, - translateOptions: PropTypes.bool, - limit: PropTypes.number, -}; -Dropdown.defaultProps = { - limit: 50, -}; -Dropdown.contextTypes = { - d2: PropTypes.any, -}; - -export default Dropdown; diff --git a/src/forms/FormHelpers.js b/src/forms/FormHelpers.js deleted file mode 100644 index 0705f4ef7..000000000 --- a/src/forms/FormHelpers.js +++ /dev/null @@ -1,186 +0,0 @@ -import React from "react"; -import TextField from "d2-ui/lib/form-fields/TextField.js"; -import Dropdown from "./Dropdown.component"; -import RichDropdown from "./RichDropdown.component"; -import CheckBox from "d2-ui/lib/form-fields/CheckBox.component"; -import MultiSelect from "./MultiSelect.component"; -import DateSelect from "./form-fields/date-select"; - -function getLabel(label, isRequired, help = null) { - return label + (help ? ` (${help})` : "") + (isRequired ? " (*)" : ""); -} - -function getTextField({ - name, - label, - value = "", - isRequired = false, - multiLine = false, - type = "string", - help = null, - validators = [], - asyncValidators = [], -}) { - return { - name: name, - value: value !== null && value !== undefined ? value.toString() : "", - component: TextField, - validators: validators, - asyncValidators: asyncValidators, - props: { - type: type, - multiLine: multiLine, - style: { width: "100%" }, - changeEvent: "onBlur", - floatingLabelText: getLabel(label, isRequired, help), - }, - }; -} - -function getSelectField({ name, label, options, value = undefined, isRequired = false }) { - return { - name: name, - component: Dropdown, - value: value, - props: { - options: options, - isRequired: isRequired, - labelText: getLabel(label, isRequired), - style: { width: "100%" }, - }, - }; -} - -function getRichSelectField({ - name, - label, - options, - filterOptions, - value = undefined, - isRequired = false, - controls = [], - description = undefined, - validators = [], - asyncValidators = [], -}) { - return { - name: name, - component: ({ description, ...otherProps }) => { - return ( -
    - {description ?

    {description}:

    : null} - -
    - ); - }, - value: value, - validators: validators, - asyncValidators: asyncValidators, - props: { - options: options, - filterOptions: filterOptions, - isRequired: isRequired, - labelText: getLabel(label, isRequired), - style: { width: "30%" }, - description: description, - controls: controls, - }, - }; -} - -function getBooleanField({ name, label, onChange, value = false, style }) { - return { - name: name, - component: CheckBox, - value: value, - props: { - checked: value, - label: getLabel(label), - onCheck: (ev, newValue) => onChange(name, newValue), - style, - }, - }; -} - -function getMultiSelect({ name, label, onChange, options = [], selected = [], errors = [] }) { - return { - name: name, - component: MultiSelect, - props: { - options: options, - onChange: onChange, - label: label, - selected: selected, - errors: errors, - }, - }; -} - -function getFormLabel({ value, forSection, style }) { - return { - name: forSection ? `${value}_${forSection}` : value, - component: FormLabel, - props: { - value, - style: { fontSize: 16, marginTop: 16, marginBottom: -15, ...style }, - }, - }; -} - -function getDateField({ - name, - label, - value = undefined, - isRequired = false, - disabled = false, - validators = undefined, - minDate = undefined, - maxDate = undefined, - wrapStyle = undefined, -}) { - return { - name: name, - component: DateSelect, - value: value ? new Date(value) : undefined, - validators: validators, - props: { - wrapStyle, - labelText: getLabel(label, isRequired), - changeEvent: "onChange", - fullWidth: false, - disabled, - minDate, - maxDate, - }, - }; -} - -function SimpleCheckBox({ onClick, checked, ...otherProps }) { - return ( - - - - - ); -} - -function FormLabel({ value, style }) { - return
    {value}
    ; -} - -function separator(name) { - return { name, component: () => null, props: { wrapStyle: { clear: "both" } } }; -} - -export default { - getLabel, - getTextField, - getSelectField, - getRichSelectField, - getBooleanField, - getMultiSelect, - getDateField, - SimpleCheckBox, - getFormLabel, - separator, -}; diff --git a/src/forms/GreyFieldsTable.component.js b/src/forms/GreyFieldsTable.component.js deleted file mode 100644 index 11d0e6088..000000000 --- a/src/forms/GreyFieldsTable.component.js +++ /dev/null @@ -1,410 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import DropDown from "../forms/form-fields/drop-down"; -import LinearProgress from "material-ui/LinearProgress/LinearProgress"; -import { getCategoryCombos, getCategoryCombo } from "../utils/Dhis2Helpers"; -import FormHelpers from "./FormHelpers"; -import _ from "../utils/lodash-mixins"; - -const { SimpleCheckBox } = FormHelpers; - -const styles = { - table: { - borderSpacing: 0, - borderCollapse: "collapse", - margin: "5px 0px", - }, - th: { - whiteSpace: "nowrap", - textAlign: "center", - border: "1px solid #e0e0e0", - padding: 6, - }, - thDataElements: { - whiteSpace: "nowrap", - border: "1px solid #e0e0e0", - background: "#f0f0f0", - textAlign: "left", - padding: 6, - }, - td: { - whiteSpace: "nowrap", - padding: 2, - border: "1px solid #e0e0e0", - textAlign: "center", - }, - tdDataElement: { - whiteSpace: "nowrap", - padding: 6, - border: "1px solid #e0e0e0", - maxWidth: "33vw", - overflow: "hidden", - textOverflow: "ellipsis", - }, -}; - -// Return the key to use in structure cocByCategoryKey -const getKey = (categoryCombo, categoryOptions) => { - // categoryOptionCombo.categoryOptions holds non-repeated IDs, in any order - const sortedUniqueIds = _(categoryOptions) - .map("id") - .orderBy() - .uniq() - .value(); - return [categoryCombo.id, ...sortedUniqueIds].join("."); -}; - -class GreyFieldsTable extends React.Component { - constructor(props, context) { - super(props, context); - - this.state = { - loaded: false, - categories: [], - categoryCombos: null, - currentSection: null, - currentCategoryCombo: null, - }; - - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - } - - componentDidMount() { - const d2 = this.context.d2; - const cocFields = "id,categoryOptions[id]"; - - const categoryComboIds = _(this.props.dataSet.dataSetElements) - .map(dse => getCategoryCombo(dse).id) - .uniq() - .value(); - const options = { cocFields, filterIds: categoryComboIds }; - - getCategoryCombos(d2, options).then(persistedCategoryCombos => { - const categoryCombosById = _(this.props.dataSet.dataSetElements) - .map(dse => getCategoryCombo(dse)) - .keyBy("id") - .merge(_.keyBy(persistedCategoryCombos.toArray(), "id")) - .value(); - - // greyedFields: {"dataElementId.categoryOptionComboId": true | false} - const greyedFields = _(this._sectionsMap(section => section.greyedFields)) - .map(gf => [gf.dataElement, gf.categoryOptionCombo].map(o => o.id).join(".")) - .map(fieldId => [fieldId, true]) - .fromPairs() - .value(); - const cocByCategoryKey = _(categoryCombosById) - .values() - .flatMap(cc => - cc.categoryOptionCombos - .toArray() - .map(coc => [getKey(cc, coc.categoryOptions.toArray()), coc]) - ) - .fromPairs() - .value(); - - this.setState({ - loaded: true, - categoryCombosById, - cocByCategoryKey, - greyedFields, - }); - }); - } - - _getGreyedFieldsBySections() { - const { sections } = this.props; - const ids = _(this.state.greyedFields) - .map((v, k) => (v ? k : null)) - .compact() - .value(); - const greyedFields = ids.map(id => { - const [dataElementId, cocId] = id.split("."); - return { - dataElement: { id: dataElementId }, - categoryOptionCombo: { id: cocId }, - }; - }); - const greyedFieldsByDataElementId = _(greyedFields) - .groupBy(field => field.dataElement.id) - .value(); - return sections.map(section => { - const dataElementIds = section.dataElements.toArray().map(de => de.id); - return _(greyedFieldsByDataElementId) - .at(dataElementIds) - .flatten() - .compact() - .value(); - }); - } - - componentWillUnmount() { - if (this.props.onClose && this.state.loaded) { - this.props.onClose(this._getGreyedFieldsBySections()); - } - } - - _renderHeaderCheckBox(label, dataSetElements, categoryOptionCombos) { - const fieldIds = _(dataSetElements) - .cartesianProduct(categoryOptionCombos) - .flatMap(([dse, coc]) => [dse.dataElement.id, coc.id].join(".")) - .value(); - const allFieldsInColumnAreSelected = _(this.state.greyedFields) - .at(fieldIds) - .every(v => !v); - const toggleAll = () => { - const updatedGreyedFields = _(fieldIds) - .map(fieldId => [fieldId, allFieldsInColumnAreSelected]) - .fromPairs() - .value(); - this.setState({ - greyedFields: _.merge(this.state.greyedFields, updatedGreyedFields), - }); - }; - - return ( -
    - {(dataSetElements.length > 1 || categoryOptionCombos.length > 1) && ( - - )} - {label === "default" ? "" : label} -
    - ); - } - - _getCategoryOptionCombos(categoryComboId) { - const categoryCombo = this.state.categoryCombosById[categoryComboId]; - const categories = categoryCombo.categories.toArray(); - const categoryOptions = categories.map(c => c.categoryOptions.toArray()); - return _.cartesianProduct(...categoryOptions); - } - - renderTableHeader(dataSetElements, categoryCombo, categoryOptionCombos) { - const nCategories = categoryOptionCombos[0].length; - const rows = _.range(nCategories).map(idx => { - return _(categoryOptionCombos) - .groupConsecutiveBy(product => product.slice(0, idx + 1)) - .map(consecutiveProducts => { - const cocs = consecutiveProducts - .map(cos => getKey(categoryCombo, cos)) - .map(key => this.state.cocByCategoryKey[key]); - return { - label: consecutiveProducts[0][idx].displayName, - cocs: _.compact(cocs), - }; - }) - .value(); - }); - - return rows.map((row, rowNum) => { - const isLastHeader = rowNum === rows.length - 1; - - return ( -
    - {isLastHeader && this.getTranslation("data_element")} - - {this._renderHeaderCheckBox(label, dataSetElements, cocs)} -
    - -
    - {dse.dataElement.displayName} -
    - - {this.renderTableHeader(dataSetElements, categoryCombo, cocs)} - {this.renderDataElements(dataSetElements, cocs)} - -
    - ); - }; - - const renderTablesForCocs = (categoryCombo, cocs, categoryIndex) => { - const nCategories = cocs[0].length; - if (cocs.length <= 12 || categoryIndex >= nCategories - 1) { - return renderTable(categoryCombo, cocs); - } else { - const tables = _(cocs) - .groupConsecutiveBy(cos => cos.slice(0, categoryIndex + 1)) - .flatMap(splitCocs => - renderTablesForCocs(categoryCombo, splitCocs, categoryIndex + 1) - ) - .value(); - const key = - categoryCombo.id + - _(cocs) - .flatten() - .map("id") - .join(""); - return
    {tables}
    ; - } - }; - - const renderTables = categoryCombo => { - const cocs = this._getCategoryOptionCombos(categoryCombo.id); - return ( -
    -

    {this._getCategoryComboLabel(categoryCombo)}

    - {renderTablesForCocs(categoryCombo, cocs, 0)} -
    - ); - }; - - const changeSection = ev => { - this.setState({ - currentSection: _(this.props.sections) - .keyBy("name") - .get(ev.target.value), - currentCategoryCombo: null, - }); - }; - - const changeCategoryCombo = ev => { - this.setState({ - currentCategoryCombo: _(categoryCombosForVisibleSections) - .keyBy("id") - .get(ev.target.value), - }); - }; - - return ( -
    - ({ - value: section.name, - text: section.name.replace("@", "->"), - }))} - labelText={this.getTranslation("section")} - value={this.state.currentSection && this.state.currentSection.name} - onChange={changeSection} - style={{ width: "33%", marginRight: 20 }} - /> - - ({ - value: cc.id, - text: cc.displayName, - }))} - labelText={this.getTranslation("category_combo")} - value={currentCategoryCombo && currentCategoryCombo.id} - onChange={changeCategoryCombo} - style={{ width: "33%" }} - /> - - {categoryCombosToShow.map(categoryCombo => renderTables(categoryCombo))} -
    - ); - } - - render() { - if (this.state.loaded) { - return this._renderForm(); - } else { - return ; - } - } -} - -GreyFieldsTable.contextTypes = { d2: PropTypes.any.isRequired }; - -GreyFieldsTable.propTypes = { - sections: PropTypes.any.isRequired, - dataSet: PropTypes.any.isRequired, - onClose: PropTypes.func, -}; - -export default GreyFieldsTable; diff --git a/src/forms/MultiSelect.component.js b/src/forms/MultiSelect.component.js deleted file mode 100644 index 44d7945a4..000000000 --- a/src/forms/MultiSelect.component.js +++ /dev/null @@ -1,88 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import _ from "lodash"; -import Store from "d2-ui/lib/store/Store"; -import GroupEditor from "d2-ui/lib/group-editor/GroupEditor.component"; - -const MultiSelect = createReactClass({ - propTypes: { - options: PropTypes.arrayOf(PropTypes.object), - selected: PropTypes.arrayOf(PropTypes.string), - onChange: PropTypes.func.isRequired, - label: PropTypes.string, - errors: PropTypes.arrayOf(PropTypes.string), - }, - - getInitialState() { - const availableStore = Store.create(); - const assignedStore = Store.create(); - availableStore.setState(this.props.options); - assignedStore.setState(this.props.selected); - return { availableStore, assignedStore }; - }, - - UNSAFE_componentWillReceiveProps(nextProps) { - this.state.availableStore.setState(nextProps.options); - this.state.assignedStore.setState(nextProps.selected); - }, - - getDefaultProps() { - return { height: 300, options: [], selected: [] }; - }, - - _onItemAssigned(newItems) { - const assigned = this.state.assignedStore.state.concat(newItems); - this.state.assignedStore.setState(assigned); - this.props.onChange(assigned); - return Promise.resolve(); - }, - - _onItemRemoved(removedItems) { - const assigned = _.difference(this.state.assignedStore.state, removedItems); - this.state.assignedStore.setState(assigned); - this.props.onChange(assigned); - return Promise.resolve(); - }, - - render() { - const styles = { - labelStyle: { - display: "block", - width: "calc(100% - 60px)", - lineHeight: "24px", - color: "rgba(0,0,0,0.3)", - marginTop: "1rem", - fontSize: 16, - }, - errorStyle: { - color: "red", - }, - }; - const { errors, label, ...otherProps } = this.props; - - return ( -
    - - -
    - {(errors || []).map((error, idx) => ( -

    - {error} -

    - ))} -
    - - -
    - ); - }, -}); - -export default MultiSelect; diff --git a/src/forms/RichDropdown.component.js b/src/forms/RichDropdown.component.js deleted file mode 100644 index 9c3f890cf..000000000 --- a/src/forms/RichDropdown.component.js +++ /dev/null @@ -1,244 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import _ from "lodash"; -import TextField from "material-ui/TextField"; -import isString from "d2-utilizr/lib/isString"; -import Dialog from "material-ui/Dialog"; -import FlatButton from "material-ui/FlatButton"; -import MenuItem from "material-ui/MenuItem/MenuItem"; -import CheckBox from "d2-ui/lib/form-fields/CheckBox.component"; - -class RichDropdown extends React.Component { - constructor(props, context) { - super(props, context); - - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - - this._onChange = this._onChange.bind(this); - this.openDialog = this.openDialog.bind(this); - this.closeDialog = this.closeDialog.bind(this); - const initialControls = _(this.props.controls) - .map(c => [c.name, c.value]) - .fromPairs() - .value(); - - this.state = { - value: - this.props.value !== undefined && this.props.value !== null ? this.props.value : "", - controls: initialControls, - options: this.getOptions(this.props.options, this.props.isRequired), - dialogOpen: false, - }; - } - - UNSAFE_componentWillReceiveProps(newProps) { - const controls = _(newProps.controls) - .map(c => [c.name, c.value]) - .fromPairs() - .value(); - this.setState({ - controls: controls, - options: this.getOptions(newProps.options, newProps.isRequired), - }); - } - - getOptions(options, _required = false) { - let opts = options.map(option => { - return { - value: option.value, - text: option.text, - }; - }); - - return opts.map(option => { - if (option.text && this.props.translateOptions) { - option.text = isString(option.text) - ? this.getTranslation(option.text.toLowerCase()) - : option.text; - } - return option; - }); - } - - _onChange(event, index, value) { - this.props.onChange({ - target: { - value, - }, - }); - } - - openDialog() { - this.setState({ dialogOpen: true, filterText: "" }); - } - - closeDialog() { - this.setState({ dialogOpen: false }); - } - - getOptionText(value) { - return value && this.state.options.length - ? this.state.options.find(option => option.value === value).text - : ""; - } - - renderDialogOption(value, label) { - return ( -
    { - this.props.onChange({ target: { value: value } }); - this.setState({ dialogOpen: false, value: value }); - }} - > - {label} -
    - ); - } - - render() { - const { - onFocus, - onBlur, - labelText, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - translateOptions, - isRequired, - options, - filterOptions, - model, - fullWidth, - translateLabel, - ...other - } = this.props; - - return ( -
    - , - ]} - > - {this.props.controls.map(control => ( - - this.setState({ - controls: _.merge(this.state.controls, { - [control.name]: !this.state.controls[control.name], - }), - }) - } - /> - ))} - { - this.setState({ filterText: value }); - }} - style={{ marginBottom: 5, marginTop: -25 }} - /> - {!this.props.isRequired && - this.renderDialogOption(null, this.getTranslation("no_value"))} - {this.props - .filterOptions(this.state.options, this.state.controls) - .filter( - o => - !this.state.filterText || - this.state.filterText - .trim() - .toLocaleLowerCase() - .split(" ") - .every(f => - o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) - ) - ) - .map(o => this.renderDialogOption(o.value, o.text))} - - -
    - open_in_new -
    -
    - ); - } - - renderOptions() { - const options = this.state.options.map((option, index) => ( - - )); - - if (!this.props.isRequired) { - // When the value is not required we add an item that sets the value to null - // For this value we pass an empty label to not show the label no_value - // when this option is selected. - options.unshift([ - , - ]); - } - - return options; - } -} - -RichDropdown.propTypes = { - defaultValue: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool, - ]), - onFocus: PropTypes.func, - onBlur: PropTypes.func, - options: PropTypes.array.isRequired, - isRequired: PropTypes.bool, - labelText: PropTypes.string.isRequired, - translateOptions: PropTypes.bool, - filterOptions: PropTypes.func, - controls: PropTypes.array, -}; -RichDropdown.defaultProps = { - controls: [], - filterOptions: (options, _controls) => options, -}; -RichDropdown.contextTypes = { - d2: PropTypes.any, -}; - -export default RichDropdown; diff --git a/src/forms/TimePeriodSelector.component.js b/src/forms/TimePeriodSelector.component.js deleted file mode 100644 index a1ec42e4f..000000000 --- a/src/forms/TimePeriodSelector.component.js +++ /dev/null @@ -1,90 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import SelectField from "material-ui/SelectField/SelectField"; -import TextField from "material-ui/TextField"; -import MenuItem from "material-ui/MenuItem/MenuItem"; - -class TimePeriodSelector extends React.Component { - constructor(props, context) { - super(props, context); - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - this.unitsOptions = this.getUnitsOptions(); - } - - onUnitChange = (event, index, value) => { - const newValue = { ...this.props.value, units: value }; - this.notifyChange(newValue); - }; - - onValueChange = (event, value) => { - const newValue = { ...this.props.value, value: parseInt(value) }; - this.notifyChange(newValue); - }; - - getUnitsOptions() { - return ["day", "week", "month"].map(key => ({ - text: this.getTranslation(key), - value: key, - })); - } - - notifyChange(value) { - this.props.onChange({ target: { value } }); - } - - render() { - const { labelText, value } = this.props; - - return ( -
    - - - - {this.renderOptions(this.unitsOptions)} - -
    - ); - } - - renderOptions(options) { - return options.map((option, index) => ( - - )); - } -} - -TimePeriodSelector.propTypes = { - value: PropTypes.shape({ - units: PropTypes.oneOf(["day", "week", "month"]), - value: PropTypes.number, - }).isRequired, - labelText: PropTypes.string.isRequired, -}; - -TimePeriodSelector.contextTypes = { - d2: PropTypes.any, -}; - -const styles = { - wrapper: { display: "flex" }, - value: { marginRight: 20, width: "28em" }, - unitsSelector: {}, -}; - -export default TimePeriodSelector; diff --git a/src/forms/YearlyDateSelector.component.js b/src/forms/YearlyDateSelector.component.js deleted file mode 100644 index 1f9ed6527..000000000 --- a/src/forms/YearlyDateSelector.component.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from "react"; -import _ from "lodash"; -import moment from "moment"; -import PropTypes from "prop-types"; -import SelectField from "material-ui/SelectField/SelectField"; -import MenuItem from "material-ui/MenuItem/MenuItem"; - -const daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - -class YearlyDateSelector extends React.Component { - constructor(props, context) { - super(props, context); - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - this.monthOptions = this.getMonthOptions(); - } - - onMonthChange = (event, index, value) => { - const newValue = { month: value, day: 1 }; - this.notifyChange(newValue); - }; - - onDayChange = (event, index, value) => { - const newValue = { ...this.props.value, day: value }; - this.notifyChange(newValue); - }; - - getDayOptionsForMonth(month) { - return month && _.has(daysInMonths, month) - ? _(1) - .range(daysInMonths[month - 1] + 1) - .map(ndays => ({ text: ndays, value: ndays })) - .value() - : []; - } - - getMonthOptions() { - return moment - .localeData("en") - .monthsShort() - .map(shortName => this.getTranslation(shortName.toLowerCase())) - .map((name, index) => ({ text: name, value: index + 1 })); - } - - notifyChange(value) { - this.props.onChange({ target: { value } }); - } - - render() { - const { labelText, value } = this.props; - const dayOptions = this.getDayOptionsForMonth(value.month); - - return ( -
    - - {this.renderOptions(this.monthOptions)} - - - - {this.renderOptions(dayOptions)} - -
    - ); - } - - renderOptions(options) { - return options.map((option, index) => ( - - )); - } -} - -YearlyDateSelector.propTypes = { - value: PropTypes.shape({ - month: PropTypes.number, - day: PropTypes.number, - }).isRequired, - labelText: PropTypes.string.isRequired, -}; - -YearlyDateSelector.contextTypes = { - d2: PropTypes.any, -}; - -const styles = { - monthSelector: { marginRight: 20 }, -}; - -export default YearlyDateSelector; diff --git a/src/forms/form-fields/check-box.js b/src/forms/form-fields/check-box.js deleted file mode 100644 index 0245632a5..000000000 --- a/src/forms/form-fields/check-box.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import Checkbox from "material-ui/Checkbox/Checkbox"; - -function isTrueOrTheStringTrue(value) { - return value === true || value === "true"; -} - -export default createReactClass({ - propTypes: { - onChange: PropTypes.func.isRequired, - labelText: PropTypes.string.isRequired, - value: PropTypes.bool, - }, - - render() { - // Do not pass the value on to the CheckBox component - const { - value, - errorStyle, - errorText, - labelText, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - multiLine, - fullWidth, - translateOptions, - isRequired, - options, - model, - ...otherProps - } = this.props; - - return ( -
    - -
    - ); - }, - - _onClick() { - this.props.onChange({ - target: { - value: !isTrueOrTheStringTrue(this.props.value), - }, - }); - }, -}); diff --git a/src/forms/form-fields/date-select.js b/src/forms/form-fields/date-select.js deleted file mode 100644 index 41490bdfa..000000000 --- a/src/forms/form-fields/date-select.js +++ /dev/null @@ -1,108 +0,0 @@ -import React from "react"; -import createReactClass from "create-react-class"; -import PropTypes from "prop-types"; -import DatePicker from "material-ui/DatePicker/DatePicker"; -import IconButton from "material-ui/IconButton/IconButton"; - -const DateSelect = createReactClass({ - propTypes: { - value: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), - labelText: PropTypes.string.isRequired, - onChange: PropTypes.func.isRequired, - disabled: PropTypes.bool, - defaultDate: PropTypes.object, - minDate: PropTypes.object, - maxDate: PropTypes.object, - }, - - renderDatePicker() { - const { - labelText, - referenceType, - referenceProperty, - isInteger, - translateOptions, - isRequired, - options, - model, - models, - modelDefinition, - disabled, - defaultDate, - minDate, - maxDate, - value, - ...other - } = this.props; - - // Set an empty object instead of undefined for the no-value case, otherwise the component - // assumes it's being used in un-controlled state and does not react properly to changes - const valueProp = value ? new Date(value) : {}; - - return ( - - ); - }, - - render() { - const styles = { - closeButton: { - position: "absolute", - right: "-16px", - top: "28px", - zIndex: 1, - }, - closeIcon: { - color: "#888888", - }, - }; - - return ( -
    - {!this.props.isRequired && - this.props.value !== undefined && - this.props.value !== "" && - !this.props.disabled ? ( - - close - - ) : null} - {this.renderDatePicker()} -
    - ); - }, - - _clearDate() { - this._onDateSelect(undefined, ""); - }, - - _onDateSelect(event, date) { - this.props.onChange({ - target: { - value: date, - }, - }); - }, -}); - -DateSelect.defaultProps = { - disabled: false, -}; - -export default DateSelect; diff --git a/src/forms/form-fields/drop-down-async.js b/src/forms/form-fields/drop-down-async.js deleted file mode 100644 index 1cbc4ddbc..000000000 --- a/src/forms/form-fields/drop-down-async.js +++ /dev/null @@ -1,190 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import DropDown from "./drop-down"; -import { getInstance } from "d2/lib/d2"; -import QuickAddLink from "./helpers/QuickAddLink.component"; -import RefreshMask from "./helpers/RefreshMask.component"; - -export default createReactClass({ - propTypes: { - referenceType: PropTypes.string.isRequired, - value: PropTypes.shape({ - id: PropTypes.string.isRequired, - }), - onChange: PropTypes.func.isRequired, - }, - - getInitialState() { - return { - options: [], - isRefreshing: false, - }; - }, - - loadOptions() { - const fieldsForReferenceType = - this.props.referenceType === "optionSet" - ? "id,displayName,name,valueType" - : "id,displayName,name"; - const filter = this.props.queryParamFilter; - - return getInstance() - .then(d2 => - d2.models[this.props.referenceType].list( - Object.assign( - { - fields: fieldsForReferenceType, - paging: false, - filter, - }, - filter && filter.length > 1 - ? { - rootJunction: "OR", - } - : {} - ) - ) - ) - .then(modelCollection => modelCollection.toArray()) - .then(values => - values.map(model => { - return { - text: model.displayName, - value: model.id, - model: model, - }; - }) - ) - .then(options => { - this.setState( - { - // TODO: Behold the very special hack for renaming the very special 'default' cat combo to 'None' - options: options.map(option => - Object.assign( - option, - option.model && - option.model.modelDefinition && - option.model.modelDefinition.name === "categoryCombo" && - option.text === "default" - ? { text: "None" } - : {} - ) - ), - }, - () => { - // TODO: Hack to default categoryCombo to 'default' - const defaultOption = this.state.options.find(option => { - return option.model.name === "default"; - }); - - if (!this.props.value && defaultOption) { - this.props.onChange({ - target: { - value: defaultOption.model, - }, - }); - } - - this.forceUpdate(); - } - ); - }); - }, - - componentDidMount() { - this.loadOptions(); - }, - - // TODO: Remove this hack to update the categoryCombo property when the domainType is set to TRACKER - // This should probably be done in the objectActions, however there we currently do not have any knowledge of the options - // It might be worth loading the categoryOption with name `default` just for this. - UNSAFE_componentWillReceiveProps(newProps) { - const defaultOption = this.state.options.find(option => { - return option.model.name === "default"; - }); - - if ( - newProps.value && - defaultOption && - defaultOption.model.id !== newProps.value.id && - this.props.model.domainType === "TRACKER" - ) { - this.props.onChange({ - target: { - value: defaultOption.model, - }, - }); - } - }, - - render() { - const { - errorStyle, - errorText, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - multiLine, - fullWidth, - translateOptions, - options, - model, - queryParamFilter, - ...other - } = this.props; - const styles = { - wrap: { - display: "flex", - alignItems: "flex-end", - }, - }; - - return ( -
    - {this.state.isRefreshing ? : null} - - -
    - ); - }, - - _onRefreshClick() { - this.setState({ - isRefreshing: true, - }); - - this.loadOptions().then(() => this.setState({ isRefreshing: false })); - }, - - _onChange(event) { - if (event.target.value === null) { - this.props.onChange({ - target: { - value: null, - }, - }); - return; - } - - const option = this.state.options.find(opt => opt.model.id === event.target.value); - if (option && option.model) { - this.props.onChange({ - target: { - value: option.model, - }, - }); - } - }, -}); diff --git a/src/forms/form-fields/drop-down.js b/src/forms/form-fields/drop-down.js deleted file mode 100644 index 34819a0cd..000000000 --- a/src/forms/form-fields/drop-down.js +++ /dev/null @@ -1,226 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import SelectField from "material-ui/SelectField/SelectField"; -import TextField from "material-ui/TextField"; -import isString from "d2-utilizr/lib/isString"; -import Dialog from "material-ui/Dialog"; -import FlatButton from "material-ui/FlatButton"; -import MenuItem from "material-ui/MenuItem/MenuItem"; - -class Dropdown extends React.Component { - constructor(props, context) { - super(props, context); - - this.getTranslation = context.d2.i18n.getTranslation.bind(context.d2.i18n); - - this._onChange = this._onChange.bind(this); - this.openDialog = this.openDialog.bind(this); - this.closeDialog = this.closeDialog.bind(this); - - this.state = { - value: - this.props.value !== undefined && this.props.value !== null ? this.props.value : "", - options: this.getOptions(this.props.options, this.props.isRequired), - dialogOpen: false, - }; - } - - UNSAFE_componentWillReceiveProps(newProps) { - this.setState({ - // value: this.state.value || ((newProps.defaultValue !== undefined && newProps.defaultValue !== null) ? newProps.defaultValue : ''), - options: this.getOptions(newProps.options, newProps.isRequired), - }); - } - - getOptions(options, _required = false) { - let opts = options.map(option => { - return { - value: option.value, - text: option.text, - }; - }); - - return opts.map(option => { - if (option.text && this.props.translateOptions) { - option.text = isString(option.text) - ? this.getTranslation(option.text.toLowerCase()) - : option.text; - } - return option; - }); - } - - _onChange(event, index, value) { - this.props.onChange({ - target: { - value, - }, - }); - } - - openDialog() { - this.setState({ dialogOpen: true, filterText: "" }); - } - - closeDialog() { - this.setState({ dialogOpen: false }); - } - - getOptionText(value) { - return value && this.state.options.length - ? this.state.options.find(option => option.value === value).text - : ""; - } - - renderDialogOption(value, label) { - return ( -
    { - this.props.onChange({ target: { value: value } }); - this.setState({ dialogOpen: false, value: value }); - }} - > - {label} -
    - ); - } - - render() { - const { - onFocus, - onBlur, - labelText, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - translateOptions, - isRequired, - options, - model, - limit, - fullWidth, - translateLabel, - ...other - } = this.props; - - return this.state.options.length > limit ? ( -
    - , - ]} - > - { - this.setState({ filterText: value }); - }} - style={{ marginBottom: 16 }} - /> - {!this.props.isRequired && - this.renderDialogOption(null, this.getTranslation("no_value"))} - {this.state.options - .filter( - o => - !this.state.filterText || - this.state.filterText - .trim() - .toLocaleLowerCase() - .split(" ") - .every(f => - o.text.toLocaleLowerCase().includes(f.toLocaleLowerCase()) - ) - ) - .map(o => this.renderDialogOption(o.value, o.text))} - - -
    - open_in_new -
    -
    - ) : ( - - {this.renderOptions()} - - ); - } - - renderOptions() { - const options = this.state.options.map((option, index) => ( - - )); - - if (!this.props.isRequired) { - // When the value is not required we add an item that sets the value to null - // For this value we pass an empty label to not show the label no_value - // when this option is selected. - options.unshift([ - , - ]); - } - - return options; - } -} - -Dropdown.propTypes = { - defaultValue: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool, - ]), - onFocus: PropTypes.func, - onBlur: PropTypes.func, - options: PropTypes.array.isRequired, - isRequired: PropTypes.bool, - labelText: PropTypes.string.isRequired, - translateOptions: PropTypes.bool, - limit: PropTypes.number, -}; -Dropdown.defaultProps = { - limit: 50, -}; -Dropdown.contextTypes = { - d2: PropTypes.any, -}; - -export default Dropdown; diff --git a/src/forms/form-fields/helpers/QuickAddLink.component.js b/src/forms/form-fields/helpers/QuickAddLink.component.js deleted file mode 100644 index bf35cc3f3..000000000 --- a/src/forms/form-fields/helpers/QuickAddLink.component.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from "react"; -import IconButton from "material-ui/IconButton/IconButton"; -import AddCircleOutlineIcon from "material-ui/svg-icons/content/add-circle-outline"; -import RefreshIcon from "material-ui/svg-icons/navigation/refresh"; -import { getSectionForType } from "../../../config/maintenance-models"; -import { Link } from "react-router"; - -export default function QuickAddLink(props) { - const { referenceType, onRefreshClick } = props; - - const sectionForReferenceType = getSectionForType(referenceType); - - const styles = { - quickAddWrap: { - display: "flex", - }, - hidden: { - display: "none", - }, - }; - - if (!sectionForReferenceType) { - return
    ; - } - - return ( -
    - - - - - - - - -
    - ); -} diff --git a/src/forms/form-fields/helpers/RefreshMask.component.js b/src/forms/form-fields/helpers/RefreshMask.component.js deleted file mode 100644 index d1a4883e7..000000000 --- a/src/forms/form-fields/helpers/RefreshMask.component.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; -import { CircularProgress } from "@material-ui/core"; - -export default function RefreshMask({ horizontal }, { d2 }) { - const styles = { - fieldMask: { - position: "absolute", - zIndex: 1000, - backgroundColor: "rgba(0, 0, 0, 0.2)", - top: 0, - bottom: 0, - left: 0, - right: 0, - display: "flex", - alignItems: "center", - justifyContent: "center", - flexDirection: horizontal ? "row" : "column", - }, - }; - - return ( -
    - -
    {d2.i18n.getTranslation("reloading_available_values")}
    -
    - ); -} -RefreshMask.contextTypes = { - d2: PropTypes.object, -}; diff --git a/src/forms/form-fields/icon-picker.js b/src/forms/form-fields/icon-picker.js deleted file mode 100644 index d3cf7ef88..000000000 --- a/src/forms/form-fields/icon-picker.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; -import IconPicker from "d2-ui/lib/icon-picker/IconPicker.component"; - -export default function IconPickerField(props) { - function transformChange(value) { - props.onChange({ - target: { - value, - }, - }); - } - - const { options, ...otherProps } = props; - - const iconPickerOptions = options.map(option => option.value); - - return ; -} - -IconPickerField.propTypes = IconPicker.propTypes; diff --git a/src/forms/form-fields/multi-select.js b/src/forms/form-fields/multi-select.js deleted file mode 100644 index 50ffe6c5c..000000000 --- a/src/forms/form-fields/multi-select.js +++ /dev/null @@ -1,373 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; -import Store from "d2-ui/lib/store/Store"; -import { getInstance } from "d2/lib/d2"; -import GroupEditor from "d2-ui/lib/group-editor/GroupEditor.component"; -import GroupEditorWithOrdering from "d2-ui/lib/group-editor/GroupEditorWithOrdering.component"; -import Action from "d2-ui/lib/action/Action"; -import Translate from "d2-ui/lib/i18n/Translate.mixin"; -import TextField from "material-ui/TextField/TextField"; -import log from "loglevel"; -import QuickAddLink from "./helpers/QuickAddLink.component"; -import RefreshMask from "./helpers/RefreshMask.component"; - -export const multiSelectActions = Action.createActionsFromNames([ - "addItemsToModelCollection", - "removeItemsFromModelCollection", -]); - -function unique(values) { - return Array.from(new Set(values).values()); -} - -function filterModelsMapOnItemIds(map, items) { - return Array.from(map.values()).filter(model => items.indexOf(model.id) !== -1); -} - -multiSelectActions.addItemsToModelCollection.subscribe(({ data, complete, error }) => { - try { - const [modelsToAdd, propertyName, model] = data; - - if (!model[propertyName]) { - error(`Model does not have property called '${propertyName}'`); - } - - modelsToAdd.forEach(itemToAdd => { - model[propertyName].add(itemToAdd); - }); - - complete(); - } catch (e) { - log.error(e); - } -}); - -multiSelectActions.removeItemsFromModelCollection.subscribe(({ data, complete, error }) => { - const [modelsToRemove, propertyName, model] = data; - - if (!model[propertyName]) { - error(`Model does not have property called '${propertyName}'`); - } - - modelsToRemove.forEach(itemToRemove => { - model[propertyName].remove(itemToRemove); - }); - - complete(); -}); - -export default createReactClass({ - propTypes: { - referenceType: PropTypes.string.isRequired, - referenceProperty: PropTypes.string.isRequired, - model: PropTypes.object.isRequired, - labelText: PropTypes.string.isRequired, - onChange: PropTypes.func.isRequired, - value: PropTypes.oneOfType([ - PropTypes.shape({ values: PropTypes.func.isRequired }), - PropTypes.arrayOf(PropTypes.func), - ]), - }, - - mixins: [Translate], - - getInitialState() { - const itemStore = Store.create(); - const assignedItemStore = Store.create(); - - itemStore.state = []; - assignedItemStore.state = []; - - return { - itemStore, - assignedItemStore, - filterText: "", - isRefreshing: false, - canCreate: false, - }; - }, - - UNSAFE_componentWillMount() { - if (!this.props.referenceType) { - return; - } - - getInstance() - .then(this.checkCreateAuthority) - .then(this.loadAvailableItems) - .then(this.populateItemStore) - .then(this.populateAssignedStore); - }, - - renderGroupEditor() { - if ( - this.props.model.modelDefinition.modelValidations[this.props.referenceProperty] && - this.props.model.modelDefinition.modelValidations[this.props.referenceProperty] - .ordered && - this.props.referenceProperty !== - "aggregationLevels" /* TODO: The aggregation levels should either not be "ordered" or should be returned from the API properly */ - ) { - return ( - - ); - } - - return ( - - ); - }, - - render() { - const styles = { - labelStyle: { - float: "left", - position: "relative", - display: "block", - width: "calc(100% - 60px)", - lineHeight: "24px", - color: "rgba(0,0,0,0.3)", - marginTop: "1rem", - fontSize: 16, - }, - - labelWrap: { - display: "flex", - }, - fieldWrap: { - position: "relative", - }, - }; - - return ( -
    - {this.state.isRefreshing ? : null} -
    - - {this.state.canCreate ? ( - - ) : null} -
    - - {this.renderGroupEditor()} -
    -
    - ); - }, - - _orderChanged(newOrder) { - const itemList = this.state.itemStore.getState(); - - // TODO: Move the following mutation to an `Action` - // Reset the ModelCollectionProperty / ModelCollection - this.props.model[this.props.referenceProperty].clear(); - - // Add the items back in the correct order - newOrder.forEach(item => { - if (itemList.has(item)) { - this.props.model[this.props.referenceProperty].add(itemList.get(item)); - } - }); - - // Set the state to the store to emit the value to all subscribers - this.state.assignedItemStore.setState( - this.props.model[this.props.referenceProperty].toArray().map(value => value.id) - ); - }, - - _assignItems(items) { - if (this.props.referenceProperty === "aggregationLevels") { - const newList = Array.from( - new Set( - (this.props.model[this.props.referenceProperty] || []).concat(items.map(Number)) - ).values() - ); - - this.props.onChange({ - target: { - value: newList, - }, - }); - this.state.assignedItemStore.setState(newList); - return Promise.resolve(); - } - - return new Promise((resolve, reject) => { - const modelsToAdd = filterModelsMapOnItemIds(this.state.itemStore.state, items); - - multiSelectActions - .addItemsToModelCollection( - modelsToAdd, - this.props.referenceProperty, - this.props.model - ) - .subscribe(() => { - const newAssignedItems = [] - .concat(this.state.assignedItemStore.getState()) - .concat(items) - .filter(value => value); - - this.state.assignedItemStore.setState(unique([].concat(newAssignedItems))); - - this.props.onChange({ - target: { - value: this.props.model[this.props.referenceProperty], - }, - }); - - resolve(); - }, reject); - }); - }, - - _removeItems(items) { - if (this.props.referenceProperty === "aggregationLevels") { - const newList = Array.from( - new Set( - (this.props.model[this.props.referenceProperty] || []).filter( - v => items.map(Number).indexOf(v) === -1 - ) - ).values() - ); - - this.props.onChange({ - target: { - value: newList, - }, - }); - this.state.assignedItemStore.setState(newList); - return Promise.resolve(); - } - - return new Promise((resolve, reject) => { - const modelsToRemove = filterModelsMapOnItemIds(this.state.itemStore.state, items); - - multiSelectActions - .removeItemsFromModelCollection( - modelsToRemove, - this.props.referenceProperty, - this.props.model - ) - .subscribe(() => { - const newAssignedItems = [] - .concat(this.state.assignedItemStore.getState()) - .filter(item => items.indexOf(item) === -1) - .filter(value => value); - - this.updateForm(newAssignedItems); - resolve(); - }, reject); - }); - }, - - _setFilterText(event) { - this.setState({ - filterText: event.target.value, - }); - }, - - updateForm(newAssignedItems) { - this.state.assignedItemStore.setState(unique([].concat(newAssignedItems))); - - this.props.onChange({ - target: { - value: this.props.model[this.props.referenceProperty], - }, - }); - }, - - reloadAvailableItems() { - this.setState({ - isRefreshing: true, - }); - - getInstance() - .then(this.loadAvailableItems) - .then(this.populateItemStore) - .then(() => { - this.setState({ - isRefreshing: false, - }); - }); - }, - - checkCreateAuthority(d2) { - const key = this.props.referenceType; - if (d2.currentUser.canCreate(d2.models[key])) { - this.setState({ canCreate: true }); - } - return d2; - }, - - loadAvailableItems(d2) { - if (d2.models[this.props.referenceType]) { - const multiSelectSourceModelDefinition = d2.models[this.props.referenceType]; - - // When there are any special filters set we need to apply them to the modelDefinition before loading - // the items. An array of filters can be passed to the filter property of the options to the .list() call - // As the default should always be filtered out we concat the set filters with default filter that filters - // out anything with the name 'default' - const filters = ["name:ne:default"].concat(this.props.queryParamFilter).filter(f => f); - - return multiSelectSourceModelDefinition.list({ - paging: false, - fields: "displayName|rename(name),id,level", - filter: filters, - }); - } - return Promise.reject(`${this.props.referenceType} is not a model on d2.models`); - }, - - populateItemStore(availableItems) { - if (this.props.referenceProperty === "aggregationLevels") { - this.state.itemStore.setState( - Array.from(availableItems.values()).map(model => { - return { - value: model.level, - text: model.displayName || model.name, - }; - }) - ); - return; - } - - this.state.itemStore.setState(availableItems); - }, - - populateAssignedStore() { - if (!this.props.value) { - return this.state.assignedItemStore.setState([]); - } - - if (Array.isArray(this.props.value)) { - this.state.assignedItemStore.setState(Array.from(this.props.value)); - } else { - this.state.assignedItemStore.setState( - Array.from(this.props.value.values()).map(value => value.id) - ); - } - }, -}); diff --git a/src/forms/form-fields/multi-toggle.js b/src/forms/form-fields/multi-toggle.js deleted file mode 100644 index e226df736..000000000 --- a/src/forms/form-fields/multi-toggle.js +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import createReactClass from 'create-react-class'; -import PropTypes from "prop-types"; - -// Material UI -import Checkbox from "material-ui/Checkbox/Checkbox"; - -export default createReactClass({ - propTypes: { - label: PropTypes.string.isRequired, - onChange: PropTypes.func.isRequired, - items: PropTypes.arrayOf( - PropTypes.shape({ - name: PropTypes.string.isRequired, - value: PropTypes.bool, - text: PropTypes.string.isRequired, - }) - ), - style: PropTypes.object, - }, - - contextTypes: { - muiTheme: PropTypes.object, - }, - - getInitialState() { - return { - values: this.props.items.reduce((prev, curr) => { - if (curr.value) { - prev.push(curr.name); - } - return prev; - }, []), - }; - }, - - render() { - const style = Object.assign({}, this.context.muiTheme.forms, this.props.style); - return ( -
    -
    {this.props.label}
    - {this.props.items.map(item => { - return ( - - ); - })} -
    - ); - }, - - _handleToggle(value, event, checked) { - this.setState( - oldState => { - if (checked) { - if (oldState.values.indexOf(value) === -1) { - oldState.values.push(value); - } - } else { - if (oldState.values.indexOf(value) !== -1) { - oldState.values.splice(oldState.values.indexOf(value), 1); - } - } - return oldState; - }, - () => { - this.props.onChange({ target: { value: this.state.values } }); - } - ); - }, -}); diff --git a/src/forms/form-fields/text-field.js b/src/forms/form-fields/text-field.js deleted file mode 100644 index 520c544cf..000000000 --- a/src/forms/form-fields/text-field.js +++ /dev/null @@ -1,96 +0,0 @@ -import React, { Component } from "react"; -import PropTypes from "prop-types"; -import TextField from "material-ui/TextField/TextField"; -import Action from "d2-ui/lib/action/Action"; - -export default class TextFormField extends Component { - constructor(props, ...args) { - super(props, ...args); - this.state = { - fieldValue: props.value || "", - }; - - this.updateOnChange = Action.create(`updateOnKeyUp - ${props.name}`); - this._onValueChanged = this._onValueChanged.bind(this); - } - - componentDidMount() { - // Debounce the value, so the request handler does not get executed on each change event - this.disposable = this.updateOnChange - .debounce(300) - .map(action => action.data) - .distinctUntilChanged() - .subscribe(value => { - this.props.onChange({ - target: { - value, - }, - }); - }); - } - - componentWillUnmount() { - if (this.disposable && this.disposable.dispose) { - this.disposable.dispose(); - } - } - - UNSAFE_componentWillReceiveProps(newProps) { - // Keep local state in sync with the passed in value - if (newProps.value !== this.props.value) { - this.setState({ - fieldValue: newProps.value, - }); - } - } - - render() { - const { - label, - labelText, - multiLine, - model, - modelDefinition, - models, - referenceType, - referenceProperty, - isInteger, - translateOptions, - isRequired, - options, - ...rest - } = this.props; - const errorStyle = { - lineHeight: multiLine ? "48px" : "12px", - marginTop: multiLine ? -16 : -12, - }; - - return ( - - ); - } - - _onValueChanged(event) { - event.preventDefault(); - event.stopPropagation(); - // Keep local state to keep the field responsiveness - this.setState({ - fieldValue: event.currentTarget.value, - }); - - // Fire the update handler - this.updateOnChange(event.currentTarget.value); - } -} -TextFormField.propTypes = { - labelText: PropTypes.string.isRequired, - multiLine: PropTypes.bool, -}; diff --git a/src/i18n/i18n_module_ar.properties b/src/i18n/i18n_module_ar.properties deleted file mode 100644 index 48f3cfd24..000000000 --- a/src/i18n/i18n_module_ar.properties +++ /dev/null @@ -1,249 +0,0 @@ -yes=Yes -no=No -last_updated=Last updated -id=Id -of_page=of -search_by_name=Search by name -created=Created -details=Show details -share=Sharing settings -public_access=Public access -href=Api URL -actions=Actions -public_can_edit=Public view/edit -public_none=No public access -define_associations=Assign to organisation units -period_dates=Set output/outcome period dates -period_dates_for_year=Set output/outcome period dates for $$year$$ -delete=Delete -edit=Edit -clone=Clone -select=Select -all=All -assign_all=Assign all -description=Description -value_required=This field is required -value_not_unique=This field requires a unique value -deselect=Deselect -select_all=Select all -deselect_all=Deselect all -select_all_in_tree=Select all in tree -deselect_all_in_tree=Deselect all in tree -confirm=Confirm -for_organisation_units_within=For organisation units within -for_all_organisation_units=Select/deselect all organisation units in -tree=tree -code=Code -short_name=Short name -display_name=Name -display_description=Description -subsection=Subsection -origin=Origin -disaggregation=Disaggregation -no_value= -filter_organisation_units_by_name=Filtering organisation units by name -organisation_units_selected=Organisation units selected -no_roots_found=No roots found -period_type=Period type -expiry_days=Expiry days -expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock -notify_completing_user=Send notification to completing user -open_future_periods=Open future periods for data entry -save=Save -data_input_periods=Data input periods -day=Day -week=Week -month=Month -jan=January -feb=February -mar=March -apr=April -may=May -jun=June -jul=July -aug=August -sep=September -oct=October -nov=November -dec=December -biMonth=Bi-month -jan-feb=January-February -mar-apr=March-April -may-jun=May-June -jul-aug=July-August -sep-oct=September-October -nov-dec=November-December -quarter=Quarter -Q1=Q1: January-March -Q2=Q2: April-June -Q3=Q3: July-September -Q4=Q4: October-December -sixMonth=Half year -jan-jun=January-June -jul-dec=July-December -opening_date=Opening date -closing_date=Closing date -year=Year -next=Next -previous=Previous -sharing=Sharing -show_closed_projects=Show closed projects -linked_project=Linked project -data_input_period=Data input period -no_project_linked=No project linked -step_initial_configuration=Initial configuration -step_general_information=General information -step_core_indicators=Core indicators -step_non_core_indicators=Donor and Local Indicators -step_disaggregation=Disaggregation -step_grey_fields=Grey fields -step_sharing=Sharing -core_competencies=Core competencies -confirm_wizard_cancel=Data will be lost, are you sure you want cancel? -confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. -wizard_presave_message=The data set is finished. Press the button Save to save the data -wizard_save_message=The data set is being saved, please wait -wizard_save_error_message=There was an error saving the dataset, administrators have been notified -dataset_saved=Dataset saved successfully -data_input_start_date=Start date of data input -data_input_end_date=End date of data input -no_elements_found=No elements found -section_config=Section configuration -show_row_totals=Show row totals -show_column_totals=Show column totals -select_one_core_competency=You must select at least one core competency -select_one_organisation_unit=You must select at least one organisation unit -close=Close -login=Login -not_logged=No user logged in -not_logged_or_expired=No user logged in or the session has expired -determining_your_root_orgunits=Determining your root organisation units -public_can_view=Public view -can_edit=Can Edit -reloading_available_values=Reloading available values -search_available_selected_items=Search available/selected items -select_a_parent_organisation_unit=Select a parent organisation unit -all=All -theme=Theme -group=Group -status=Status -select_a_data_element_before_applying_an_override=Select a data element before applying an override -override_data_element_category_combo=Add disaggregate -no_override= -countries=Countries -select_at_least_one_country=Select at least one country -none=None -enabled=Enabled -disabled=Disabled -section=Section -group_data_elements_in_section=Group data elements in sections -core_competency=Core competency -settings=Configuration settings -setting_category_projects_id=Projects category -setting_category_combo_id=Category combination -setting_expiry_days=Default expiry days -setting_data_element_group_set_core_competency_id=Core competencies data element group set -setting_data_element_group_output_id=Output data element group -setting_data_element_group_outcome_id=Outcome data element group -setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set -setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set -setting_data_element_group_set_theme_id=Data element theme group set -setting_data_element_group_set_origin_id=Data element origin group set -setting_data_element_group_set_status_id=Data element status group set -setting_indicator_group_set_theme_id=Indicator theme group set -setting_indicator_group_set_origin_id=Indicator origin group set -setting_indicator_group_set_status_id=Indicator status group set -setting_attribute_group_id=Group attribute -setting_organisation_unit_level_for_countries_id=Country organisation unit level -setting_admin_user_group=Administrator user group -setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute -setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute -setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items -setting_data_period_output_dates_attribute_id=Attribute for output dates -setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates -setting_data_period_interval_dates_attribute_id=Attribute for interval dates -setting_output_end_date=Default Output End Date -setting_outcome_end_date=Default Outcome End Date -setting_output_last_year_end_date=Default Output Time Period End Date (Last year) -setting_outcome_last_year_end_date=Default Outcome Time Period End Date (Last year) -sharing_countries_description=Please select the regions you want to share this dataset with -sharing_warning=Note that, if modified, your sharing settings will also be changed -confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? -dataset_deleted=Dataset(s) deleted -this_and_n_others=$$this$$ and $$n$$ others -members=members -update_strategy=Bulk update strategy -update_strategy_merge=Merge -update_strategy_replace=Replace -orgunits_settings=Organisation Units -sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. -validation_error=Validation error. Please contact the Dhis2 Administrator with this error: -more_errors=[and $$n$$ more errors...] -cannot_disaggregate=Your user cannot create category combos, so this step is disabled -config_tab_general=General -config_tab_sections=Sections -total=Total -value=Value -sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. -action_add=Create: $$title$$ -action_edit=Edit: $$title$$ -action_clone=Clone from $$sourceTitle$$: $$title$$ -help=Help -help_initial_configuration= -help_general_information= -help_organisation_unit= -help_core_indicators= -help_non_core_indicators= -help_disaggregation= -help_grey_fields= -help_sharing= -help_save= -help_landing_page= -logs=Logs -logs_none=No logs -logs_loading=Loading logs... -logs_older=Load logs older than -logs_no_older=No logs older than -display_only_datasets_created_by_app=Only created by the app -loading=Loading... -user_access=User access -user_group_access=User group access -dataset_name_exists=There is already a dataset with this name -output_start_date=Output Start Date -output_end_date=Output End Date -outcome_start_date=Outcome Start Date -outcome_end_date=Outcome End Date -apply_periods_to_all=Apply same dates for every year -output_dates=Output Dates -outcome_dates=Outcomes Dates -start_date_before_project_start=Start date should be after the start of the project -current_date_out_of_period=Current date out of accepted period -no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. -Add users and user groups=Add users and user groups -Anyone can view without login=Anyone can view without login -Can capture and view=Can capture and view -Cancel=Cancel -Can edit and view=Can edit and view -Can view only=Can view only -Close=Close -Created by=Created by -DATA=DATA -Enter names=Enter names -External access=External access -METADATA=METADATA -No access=No access -Public access=Public access -Save=Save -Sharing settings=Sharing settings -Who has access=Who has access -Update strategy=Update strategy -Merge=Merge -Replace=Replace -end_date_for_year=Change output/outcome end date for year -not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ -units=Units -cannot_set_only_start_or_end_dates=Start and end dates are compulsory -end_dates_empty=Some end dates are empty, so old values will be kept -output_outcome_dates_compulsory=All output and outcome dates are compulsory -no_project_selected=No linked project has been selected. It is highly recommended to select a project -select_a_project=It is highly recommended to select a project in the first step diff --git a/src/i18n/i18n_module_en.properties b/src/i18n/i18n_module_en.properties deleted file mode 100644 index f9128b37c..000000000 --- a/src/i18n/i18n_module_en.properties +++ /dev/null @@ -1,249 +0,0 @@ -yes=Yes -no=No -last_updated=Last updated -id=Id -of_page=of -search_by_name=Search by name -created=Created -details=Show details -share=Sharing settings -public_access=Public access -href=Api URL -actions=Actions -public_can_edit=Public view/edit -public_none=No public access -define_associations=Assign to organisation units -period_dates=Set output/outcome period dates -period_dates_for_year=Set output/outcome period dates for $$year$$ -delete=Delete -edit=Edit -clone=Clone -select=Select -all=All -assign_all=Assign all -description=Description -value_required=This field is required -value_not_unique=This field requires a unique value -deselect=Deselect -select_all=Select all -deselect_all=Deselect all -select_all_in_tree=Select all in tree -deselect_all_in_tree=Deselect all in tree -confirm=Confirm -for_organisation_units_within=For organisation units within -for_all_organisation_units=Select/deselect all organisation units in -tree=tree -code=Code -short_name=Short name -display_name=Name -display_description=Description -subsection=Subsection -origin=Origin -disaggregation=Disaggregation -no_value= -filter_organisation_units_by_name=Filtering organisation units by name -organisation_units_selected=Organisation units selected -no_roots_found=No roots found -period_type=Period type -expiry_days=Expiry days -expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock -notify_completing_user=Send notification to completing user -open_future_periods=Open future periods for data entry -save=Save -data_input_periods=Data input periods -day=Day -week=Week -month=Month -jan=January -feb=February -mar=March -apr=April -may=May -jun=June -jul=July -aug=August -sep=September -oct=October -nov=November -dec=December -biMonth=Bi-month -jan-feb=January-February -mar-apr=March-April -may-jun=May-June -jul-aug=July-August -sep-oct=September-October -nov-dec=November-December -quarter=Quarter -Q1=Q1: January-March -Q2=Q2: April-June -Q3=Q3: July-September -Q4=Q4: October-December -sixMonth=Half year -jan-jun=January-June -jul-dec=July-December -opening_date=Opening date -closing_date=Closing date -year=Year -next=Next -previous=Previous -sharing=Sharing -show_closed_projects=Show closed projects -linked_project=Linked project -data_input_period=Data input period -no_project_linked=No project linked -step_initial_configuration=Initial configuration -step_general_information=General information -step_core_indicators=Core indicators -step_non_core_indicators=Donor and Local Indicators -step_disaggregation=Disaggregation -step_grey_fields=Grey fields -step_sharing=Sharing -core_competencies=Core competencies -confirm_wizard_cancel=Data will be lost, are you sure you want cancel? -confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. -wizard_presave_message=The data set is finished. Press the button Save to save the data -wizard_save_message=The data set is being saved, please wait -wizard_save_error_message=There was an error saving the dataset, administrators have been notified -dataset_saved=Dataset saved successfully -data_input_start_date=Start date of data input -data_input_end_date=End date of data input -no_elements_found=No elements found -section_config=Section configuration -show_row_totals=Show row totals -show_column_totals=Show column totals -select_one_core_competency=You must select at least one core competency -select_one_organisation_unit=You must select at least one organisation unit -close=Close -login=Login -not_logged=No user logged in -not_logged_or_expired=No user logged in or the session has expired -determining_your_root_orgunits=Determining your root organisation units -public_can_view=Public view -can_edit=Can Edit -reloading_available_values=Reloading available values -search_available_selected_items=Search available/selected items -select_a_parent_organisation_unit=Select a parent organisation unit -all=All -theme=Theme -group=Group -status=Status -select_a_data_element_before_applying_an_override=Select a data element before applying an override -override_data_element_category_combo=Add disaggregate -no_override= -countries=Countries -select_at_least_one_country=Select at least one country -none=None -enabled=Enabled -disabled=Disabled -section=Section -group_data_elements_in_section=Group data elements in sections -core_competency=Core competency -settings=Configuration settings -setting_category_projects_id=Projects category -setting_category_combo_id=Category combination -setting_expiry_days=Default expiry days -setting_data_element_group_set_core_competency_id=Core competencies data element group set -setting_data_element_group_output_id=Output data element group -setting_data_element_group_outcome_id=Outcome data element group -setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set -setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set -setting_data_element_group_set_theme_id=Data element theme group set -setting_data_element_group_set_origin_id=Data element origin group set -setting_data_element_group_set_status_id=Data element status group set -setting_indicator_group_set_theme_id=Indicator theme group set -setting_indicator_group_set_origin_id=Indicator origin group set -setting_indicator_group_set_status_id=Indicator status group set -setting_attribute_group_id=Group attribute -setting_organisation_unit_level_for_countries_id=Country organisation unit level -setting_admin_user_group=Administrator user group -setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute -setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute -setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items -setting_data_period_output_dates_attribute_id=Attribute for output dates -setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates -setting_data_period_interval_dates_attribute_id=Attribute for interval dates -setting_output_end_date=Default Output End Date -setting_outcome_end_date=Default Outcome End Date -setting_output_last_year_end_date=Default Output Time Period End Date (Last year) -setting_outcome_last_year_end_date=Default Outcome Time Period End Date (Last year) -sharing_countries_description=Please select the regions you want to share this dataset with -sharing_warning=Note that, if modified, your sharing settings will also be changed -confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? -dataset_deleted=Dataset(s) deleted -this_and_n_others=$$this$$ and $$n$$ others -members=members -update_strategy=Bulk update strategy -update_strategy_merge=Merge -update_strategy_replace=Replace -orgunits_settings=Organisation Units -sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. -validation_error=Validation error. Please contact the Dhis2 Administrator with this error: -more_errors=[and $$n$$ more errors...] -cannot_disaggregate=Your user cannot create category combos, so this step is disabled -config_tab_general=General -config_tab_sections=Sections -total=Total -value=Value -sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. -action_add=Create: $$title$$ -action_edit=Edit: $$title$$ -action_clone=Clone from $$sourceTitle$$: $$title$$ -help=Help -help_initial_configuration= -help_general_information= -help_organisation_unit= -help_core_indicators= -help_non_core_indicators= -help_disaggregation= -help_grey_fields= -help_sharing= -help_save= -help_landing_page= -logs=Logs -logs_none=No logs -logs_loading=Loading logs... -logs_older=Load logs older than -logs_no_older=No logs older than -display_only_datasets_created_by_app=Only created by the app -loading=Loading... -user_access=User access -user_group_access=User group access -dataset_name_exists=There is already a dataset with this name -output_start_date=Output Start Date -output_end_date=Output End Date -outcome_start_date=Outcome Start Date -outcome_end_date=Outcome End Date -apply_periods_to_all=Apply same dates for every year -output_dates=Output Dates -outcome_dates=Outcome Dates -start_date_before_project_start=Start date should be after the start of the project -current_date_out_of_period=Current date out of accepted period -no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. -Add users and user groups=Add users and user groups -Anyone can view without login=Anyone can view without login -Can capture and view=Can capture and view -Cancel=Cancel -Can edit and view=Can edit and view -Can view only=Can view only -Close=Close -Created by=Created by -DATA=DATA -Enter names=Enter names -External access=External access -METADATA=METADATA -No access=No access -Public access=Public access -Save=Save -Sharing settings=Sharing settings -Who has access=Who has access -Update strategy=Update strategy -Merge=Merge -Replace=Replace -end_date_for_year=Change output/outcome end date for year -not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ -units=Units -cannot_set_only_start_or_end_dates=Start and end dates are compulsory -end_dates_empty=Some end dates are empty, so old values will be kept -output_outcome_dates_compulsory=All output and outcome dates are compulsory -no_project_selected=No linked project has been selected. It is highly recommended to select a project -select_a_project=It is highly recommended to select a project in the first step diff --git a/src/i18n/i18n_module_es.properties b/src/i18n/i18n_module_es.properties deleted file mode 100644 index efaa663bf..000000000 --- a/src/i18n/i18n_module_es.properties +++ /dev/null @@ -1,249 +0,0 @@ -yes=Sí -no=No -last_updated=Última actualización -id=Id -of_page=de -search_by_name=Buscar por nombre -created=Creado -details=Mostrar detalles -share=Compartir -public_access=Acceso público -href=Api URL -actions=Acciones -public_can_edit=Acceso público de lectura/edición -public_none=Sin acceso público -define_associations=Asignar a unidad organizativa -period_dates=Asignar fechas de salida/resultados -period_dates_for_year=Asignar fechas de salida/resultados para el añor $$year$$ -delete=Borrar -edit=Editar -clone=Clonar -select=Seleccionar -all=Todos -assign_all=Assignar todos -description=Descripción -value_required=Este campo es obligatorio -value_not_unique=Este campo debe ser único, ya existe un objeto con este valor -deselect=Deseleccionar -select_all=Seleccionar todo -deselect_all=Deseleccionar todo -select_all_in_tree=Seleccionar todo en árbol -deselect_all_in_tree=Deseleccionar todo en árbol -confirm=Confirmar -for_organisation_units_within=Solo para unidades organizativas -for_all_organisation_units=Seleccionar/deseleccionar todas las unidades organizativas en el -tree=árbol -code=Código -short_name=Nombre corto -display_name=Nombre -display_description=Descripción -subsection=Subsección -origin=Origen -disaggregation=Disagregación -no_value= -filter_organisation_units_by_name=Filtrando unidades organizativas por nombre -organisation_units_selected=Unidades organizativas seleccionadas -no_roots_found=No se han encontrado elementos raíz -period_type=Tipo de periodo -expiry_days=Días para vencimiento -expiry_days_help=Establece el periodo en el que es posible introducir datos. Ej: 5 significa: después del 5/Feb, ya no se pueden hacer cambiar de Enero. 0 desactiva cualquier limitación -notify_completing_user=Enviar notificación al usuario que lo completó -open_future_periods=Permitir periodos en el futuro para introducción de datos -save=Guardar -data_input_periods=Periodos de entrada de datos -day=Día -week=Semana -month=Mes -jan=Enero -feb=Febrero -mar=Marzo -apr=Abril -may=Mayo -jun=Junio -jul=Julio -aug=Agosto -sep=Septiembre -oct=Octubre -nov=Noviembre -dec=Diciembre -biMonth=Bimensual -jan-feb=Enero-Febrero -mar-apr=Marzo-Abril -may-jun=Mayo-Junio -jul-aug=Julio-Agosto -sep-oct=Septiembre-Octubre -nov-dec=Noviembre-Diciembre -quarter=Trimestre -Q1=T1: Enero-Marzo -Q2=T2: Abril-Junio -Q3=T3: Julio-Septiembre -Q4=T4: Octubre-Diciembre -sixMonth=Medio año -jan-jun=Enero-Junio -jul-dec=Julio-Diciembre -opening_date=Apertura -closing_date=Cierre -year=Año -next=Siguiente -previous=Anterior -sharing=Compartido -show_closed_projects=Muestra proyectos cerrados -linked_project=Proyecto asociado -data_input_period=Periodo de entrada de datos -no_project_linked=Sin proyecto asociado -step_initial_configuration=Configuración inicial -step_general_information=Información general -step_core_indicators=Indicadores básicos -step_non_core_indicators=Indicatores locales -step_disaggregation=Desagregación -step_grey_fields=Campos sobreados -step_sharing=Compartir -core_competencies=Competencias básicas -confirm_wizard_cancel=Se perderán los datos, ¿está seguro de que quiere cancelar? -confirm_project_updates=¿Confirma que quiere usar la información del proyecto para establecer valores por defecto del dataset? Se modificarán en el dataset: nombre, fechas de introducción de datos, unidades organizativas, países en compartición. -wizard_presave_message=El dataset ha sido completado, pulse [guardar] para persistirlo. -wizard_save_message=El dataset se está guardando, por favor espere. -wizard_save_error_message=Se produjo un error guardando el dataset, se ha notificado a los administratores -dataset_saved=Dataset guardado con éxito -data_input_start_date=Fecha de inicio de entrada de datos -data_input_end_date=Fecha de fin de entrada de datos -no_elements_found=No se han encontrado elementos -section_config=Configuración de sección -show_row_totals=Mostrar totales de fila -show_column_totals=Mostrar totales de columna -select_one_core_competency=Debes seleccionar al menos una competencia básica -select_one_organisation_unit=Debes seleccionar al menos una unidad organizativa -close=Cerrar -login=Acceder -not_logged=No hay sesión activa -not_logged_or_expired=No hay sesión activa o ha expirado -determining_your_root_orgunits=Estableciendo tus unidades organizativas -public_can_view=Acceso público de lectura -can_edit=Acceso de edición -reloading_available_values=Recargando valores disponibles -search_available_selected_items=Buscar elementos disponibles/seleccionados -select_a_parent_organisation_unit=Selecciona una unidad organizativa padre -all=Todos -theme=Tema -group=Grupo -status=Estado -select_a_data_element_before_applying_an_override=No hay elementos de datos seleccionados -override_data_element_category_combo=Añadir desgregación -no_override= -countries=Países -select_at_least_one_country=Select at least one country -none=Ninguno -enabled=Activo -disabled=Inactivo -section=Sección -group_data_elements_in_section=Agrupa elementos de datos en secciones -core_competency=Competencia básica -settings=Parámetros de configuración -setting_category_projects_id=Categoría de proyectos -setting_category_combo_id=Combinación de categoría por defecto -setting_expiry_days=Días de expiración por defecto -setting_data_element_group_set_core_competency_id=Competencias básica (data element group set) -setting_data_element_group_output_id=Salida (data element group) -setting_data_element_group_outcome_id=Resultados (data element group) -setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set -setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set -setting_data_element_group_set_theme_id=Tema (data element group set) -setting_data_element_group_set_origin_id=Origen (element origin group set) -setting_data_element_group_set_status_id=Estado (data element group set) -setting_indicator_group_set_theme_id=Tema (indicator group set) -setting_indicator_group_set_origin_id=Origen (indicator group set) -setting_indicator_group_set_status_id=Estado (indicator group set) -setting_attribute_group_id=Grupo (attribute) -setting_organisation_unit_level_for_countries_id=Nivel organizativo de país -setting_admin_user_group=Grupo de usuario con derechos administrativos -setting_hide_in_data_set_app_attribute_id=Atributo de ocultación en dataset -setting_created_by_data_set_configuration_attribute_id=Creado por Dataset Configuration (atributo) -setting_exclusion_rule_core_user_group_id=Grupo de usuario excluido de seleccionar elementos básicos -sharing_countries_description=Por favor, selecciona las regiones con las que quieres compartir el dataset -setting_data_period_output_dates_attribute_id=Atributo para fechas de salida -setting_data_period_outcome_dates_attribute_id=Atributo para fechas de resultados -setting_data_period_interval_dates_attribute_id=Atributo para intérvalo de fechas -setting_output_end_date=Fin de fecha por defecto de salida -setting_outcome_end_date=Fin de fecha port defecto de resultados -sharing_warning=Nota: si modifica este campo, la configuración de compartición también cambiará -setting_output_last_year_end_date=Periodo de fin de fecha de salida por defecto (último año) -setting_outcome_last_year_end_date=Periodo de fin de fecha de resultador por defecto (último año) -confirm_delete_dataset=¿Estás seguro de que quieres eliminar este(os) dataset? -dataset_deleted=Dataset(s) eliminado(s) -this_and_n_others=$$this$$ y otros $$n$$ -members=miembros -update_strategy=Estrategia de actualización -update_strategy_merge=Unir -update_strategy_replace=Reemplazar -orgunits_settings=Unidades organizativas -sharing_settings_help=La estrategia UNIR actualiza solo los accesos visibles; REEMPLAZAR sobreescribe todos los accesos. Solo se actualizan cambios cuando se cambia el valor de algún acceso. -validation_error=Error en la validación. Por favor contacte con el administrador Dhis2 con este error: -more_errors=[y $$n$$ errores más...] -cannot_disaggregate=Este usuario no tiene permisos para crear combinaciones de categoría, así que este paso está deshabilitado -config_tab_general=General -config_tab_sections=Secciones -total=Total -value=Value -sections_many_items_selected=Advertencia: Ha seleccionado un total de $$itemsCount$$ elementos (entre elementos de datos e indicadores). El límite recomendado para evitar tiempos elevados de carga de formularios es $$warningItemsCount$$. -action_add=Crear: $$title$$ -action_edit=Editar: $$title$$ -action_clone=Clonar $$sourceTitle$$: $$title$$ -help=Ayuda -help_initial_configuration= -help_general_information= -help_organisation_unit= -help_core_indicators= -help_non_core_indicators= -help_disaggregation= -help_grey_fields= -help_sharing= -help_save= -help_landing_page= -logs=Logs -logs_none=Ningún registro -logs_loading=Cargando logs... -logs_older=Cargar logs anteriores a -logs_no_older=No hay logs anteriores a -display_only_datasets_created_by_app=Solo creados por la aplicación -loading=Cargando... -user_access=Acceso de usuarios -user_group_access=Acceso de grupos de usuario -dataset_name_exists=Ya existe un dataset con este nombre -output_start_date=Salida - Fecha inicial -output_end_date=Salida - Fecha final -outcome_start_date=Resultados - Fecha inicial -outcome_end_date=Resultados - Fecha final -apply_periods_to_all=Aplica las mismas fechas para todos los años -output_dates=Salida - Fechas -outcome_dates=Resultados - Fechas -start_date_before_project_start=La fecha de inicio debe ser posterior al inicio del proyecto -current_date_out_of_period=La fecha actual está fuera del periodo válido -no_match_start_end_dates=Atención: La fecha de inicio/fin no coincide para todos los datasets. Los nuevos valores de fecha de inicio/fin se sobreescribirán -Add users and user groups=Añadir usuarios y grupos de usuario -Anyone can view without login=Acceso sin login -Can capture and view=Puede capturar y ver -Cancel=Cancelar -Can edit and view=Puede editar y ver -Can view only=Solo ver -Close=Cerrar -Created by=Creado po -DATA=DATOS -Enter names=Introduzca nombres -External access=Acceso externo -METADATA=METADATA -No access=Sin acceso -Public access=Acceso público -Save=Guardar -Sharing settings=Compartir -Who has access=¿Quién tiene acceso? -Update strategy=Estrategia -Merge=Mezclar -Replace=Reemplazar -end_date_for_year=Cambiar la fecha final de salida/resultados -not_all_datasets_contain_year=Todos los datasets seleccionados deben contener el año $$year$$ para la entrada de datos -units=Unidades -cannot_set_only_start_or_end_dates=Las fechas de inicio y fin son obligatorias -end_dates_empty=Algunas fechas de final están vacías, así que los valores antiguos se mantendrán -output_outcome_dates_compulsory=Todas las fechas de salida y resultados son obligatorias -no_project_selected=No se ha seleccionado un proyecto asociado. Es altamente recomendado seleccionar un proyecto -select_a_project=Es altamente recomendado seleccionar un proyecto en el primer paso diff --git a/src/i18n/i18n_module_fr.properties b/src/i18n/i18n_module_fr.properties deleted file mode 100644 index f076dd5d1..000000000 --- a/src/i18n/i18n_module_fr.properties +++ /dev/null @@ -1,249 +0,0 @@ -yes=Yes -no=No -last_updated=Last updated -id=Id -of_page=of -search_by_name=Search by name -created=Created -details=Show details -share=Sharing settings -public_access=Public access -href=Api URL -actions=Actions -public_can_edit=Public view/edit -public_none=No public access -define_associations=Assign to organisation units -period_dates=Set output/outcome period dates -period_dates_for_year=Set output/outcome period dates for $$year$$ -delete=Delete -edit=Edit -clone=Clone -select=Select -all=All -assign_all=Assign all -description=Description -value_required=This field is required -value_not_unique=This field requires a unique value -deselect=Deselect -select_all=Select all -deselect_all=Deselect all -select_all_in_tree=Select all in tree -deselect_all_in_tree=Deselect all in tree -confirm=Confirm -for_organisation_units_within=For organisation units within -for_all_organisation_units=Select/deselect all organisation units in -tree=tree -code=Code -short_name=Short name -display_name=Name -display_description=Description -subsection=Subsection -origin=Origin -disaggregation=Disaggregation -no_value= -filter_organisation_units_by_name=Filtering organisation units by name -organisation_units_selected=Organisation units selected -no_roots_found=No roots found -period_type=Period type -expiry_days=Expiry days -expiry_days_help=How many days after the period before the dataset is locked for changing data. Example: 5 means: after February 5th it's not possible to make changes to January anymore. 0 is no lock -notify_completing_user=Send notification to completing user -open_future_periods=Open future periods for data entry -save=Save -data_input_periods=Data input periods -day=Day -week=Week -month=Month -jan=January -feb=February -mar=March -apr=April -may=May -jun=June -jul=July -aug=August -sep=September -oct=October -nov=November -dec=December -biMonth=Bi-month -jan-feb=January-February -mar-apr=March-April -may-jun=May-June -jul-aug=July-August -sep-oct=September-October -nov-dec=November-December -quarter=Quarter -Q1=Q1: January-March -Q2=Q2: April-June -Q3=Q3: July-September -Q4=Q4: October-December -sixMonth=Half year -jan-jun=January-June -jul-dec=July-December -opening_date=Opening date -closing_date=Closing date -year=Year -next=Next -previous=Previous -sharing=Sharing -show_closed_projects=Show closed projects -linked_project=Linked project -data_input_period=Data input period -no_project_linked=No project linked -step_initial_configuration=Initial configuration -step_general_information=General information -step_core_indicators=Core indicators -step_non_core_indicators=Donor and Local Indicators -step_disaggregation=Disaggregation -step_grey_fields=Grey fields -step_sharing=Sharing -core_competencies=Core competencies -confirm_wizard_cancel=Data will be lost, are you sure you want cancel? -confirm_project_updates=Use project information to set default values in dataset? Overridden data in dataset: name, data input dates, organisation units, sharing countries. -wizard_presave_message=The data set is finished. Press the button Save to save the data -wizard_save_message=The data set is being saved, please wait -wizard_save_error_message=There was an error saving the dataset, administrators have been notified -dataset_saved=Dataset saved successfully -data_input_start_date=Start date of data input -data_input_end_date=End date of data input -no_elements_found=No elements found -section_config=Section configuration -show_row_totals=Show row totals -show_column_totals=Show column totals -select_one_core_competency=You must select at least one core competency -select_one_organisation_unit=You must select at least one organisation unit -close=Close -login=Login -not_logged=No user logged in -not_logged_or_expired=No user logged in or the session has expired -determining_your_root_orgunits=Determining your root organisation units -public_can_view=Public view -can_edit=Can Edit -reloading_available_values=Reloading available values -search_available_selected_items=Search available/selected items -select_a_parent_organisation_unit=Select a parent organisation unit -all=All -theme=Theme -group=Group -status=Status -select_a_data_element_before_applying_an_override=Select a data element before applying an override -override_data_element_category_combo=Add disaggregate -no_override= -countries=Countries -select_at_least_one_country=Select at least one country -none=None -enabled=Enabled -disabled=Disabled -section=Section -group_data_elements_in_section=Group data elements in sections -core_competency=Core competency -settings=Configuration settings -setting_category_projects_id=Projects category -setting_category_combo_id=Category combination -setting_expiry_days=Default expiry days -setting_data_element_group_set_core_competency_id=Core competencies data element group set -setting_data_element_group_output_id=Output data element group -setting_data_element_group_outcome_id=Outcome data element group -setting_data_element_group_global_indicator_mandatory_id=Global indicators mandatory data element group set -setting_indicator_group_global_indicator_mandatory_id=Global indicators mandatory indicator group set -setting_data_element_group_set_theme_id=Data element theme group set -setting_data_element_group_set_origin_id=Data element origin group set -setting_data_element_group_set_status_id=Data element status group set -setting_indicator_group_set_theme_id=Indicator theme group set -setting_indicator_group_set_origin_id=Indicator origin group set -setting_indicator_group_set_status_id=Indicator status group set -setting_attribute_group_id=Group attribute -setting_organisation_unit_level_for_countries_id=Country organisation unit level -setting_admin_user_group=Administrator user group -setting_hide_in_data_set_app_attribute_id=Hide in dataset attribute -setting_created_by_data_set_configuration_attribute_id=Created by Dataset Configuration attribute -sharing_countries_description=Please select the regions you want to share this dataset with -sharing_warning=Note that, if modified, your sharing settings will also be changed -setting_exclusion_rule_core_user_group_id=User group excluded of selecting core items -setting_data_period_output_dates_attribute_id=Attribute for output dates -setting_data_period_outcome_dates_attribute_id=Attribute for outcome dates -setting_data_period_interval_dates_attribute_id=Attribute for interval dates -setting_output_end_date=Default Output End Date -setting_outcome_end_date=Default Outcome End Date -setting_output_last_year_end_date=Default Output Time Period End Date (Last year) -setting_outcome_last_year_end_date=Default Output Time Period End Date (Last year) -confirm_delete_dataset=Are you sure you want to delete this/those dataset(s)? -dataset_deleted=Dataset(s) deleted -this_and_n_others=$$this$$ and $$n$$ others -members=members -update_strategy=Bulk update strategy -update_strategy_merge=Merge -update_strategy_replace=Replace -orgunits_settings=Organisation Units -sharing_settings_help=MERGE strategy updates only visible user group accesses; REPLACE overwrites all accesses. Saving occurs only when some access is toggled. -validation_error=Validation error. Please contact the Dhis2 Administrator with this error: -more_errors=[and $$n$$ more errors...] -cannot_disaggregate=Your user cannot create category combos, so this step is disabled -config_tab_general=General -config_tab_sections=Sections -total=Total -value=Value -sections_many_items_selected=Warning: You have selected a total of $$itemsCount$$ items (data elements and indicators). The recommended limit to avoid long load times is $$warningItemsCount$$ items. -action_add=Create: $$title$$ -action_edit=Edit: $$title$$ -action_clone=Clone from $$sourceTitle$$: $$title$$ -help=Help -help_initial_configuration= -help_general_information= -help_organisation_unit= -help_core_indicators= -help_non_core_indicators= -help_disaggregation= -help_grey_fields= -help_sharing= -help_save= -help_landing_page= -logs=Logs -logs_none=No logs -logs_loading=Loading logs... -logs_older=Load logs older than -logs_no_older=No logs older than -display_only_datasets_created_by_app=Only created by the app -loading=Loading... -user_access=User access -user_group_access=User group access -dataset_name_exists=There is already a dataset with this name -output_start_date=Output Start Date -output_end_date=Output End Date -outcome_start_date=Outcome Start Date -outcome_end_date=Outcome End Date -apply_periods_to_all=Apply same dates for every year -output_dates=Output Dates -outcome_dates=Outcomes Dates -start_date_before_project_start=Start date should be after the start of the project -current_date_out_of_period=Current date out of accepted period -no_match_start_end_dates=Caution: start/end dates do not match for selected datasets. Note any new start/end date will overwrite the existing ones. -Add users and user groups=Add users and user groups -Anyone can view without login=Anyone can view without login -Can capture and view=Can capture and view -Cancel=Cancel -Can edit and view=Can edit and view -Can view only=Can view only -Close=Close -Created by=Created by -DATA=DATA -Enter names=Enter names -External access=External access -METADATA=METADATA -No access=No access -Public access=Public access -Save=Save -Sharing settings=Sharing settings -Who has access=Who has access -Update strategy=Update strategy -Merge=Merge -Replace=Replace -end_date_for_year=Change output/outcome end date for year -not_all_datasets_contain_year=All selected datasets must contain data input year $$year$$ -units=Units -cannot_set_only_start_or_end_dates=Start and end dates are compulsory -end_dates_empty=Some end dates are empty, so old values will be kept -output_outcome_dates_compulsory=All output and outcome dates are compulsory -no_project_selected=No linked project has been selected. It is highly recommended to select a project -select_a_project=It is highly recommended to select a project in the first step diff --git a/src/models/CustomForm.js b/src/models/CustomForm.js deleted file mode 100644 index ee5df2891..000000000 --- a/src/models/CustomForm.js +++ /dev/null @@ -1,240 +0,0 @@ -import velocity from "velocityjs"; -import htmlencode from "htmlencode"; -import I18n from "d2/lib/i18n/I18n"; -import _ from "../utils/lodash-mixins"; -import { getCategoryCombo } from "../utils/Dhis2Helpers"; - -/* eslint import/no-webpack-loader-syntax: off */ -import customFormTemplate from "!!raw-loader!./custom-form-resources/sectionForm.vm"; -import customFormJs from "!!raw-loader!./custom-form-resources/script.js"; -import customFormCss from "!!raw-loader!./custom-form-resources/style.css"; - -const data = { - template: customFormTemplate, - css: customFormCss, - js: customFormJs, -}; - -const a = obj => (obj.toArray ? obj.toArray() : obj); -const _a = (...args) => _(a(...args)); - -class Map { - constructor(obj) { - this.obj = obj; - } - - keys() { - return Object.keys(this.obj).sort(); - } - - get(key) { - if (this.obj[key] !== undefined) { - return this.obj[key]; - } else { - const keys = JSON.stringify(Object.keys(this.obj), null, 4); - throw new Error( - `[post-custom-form] No key ${JSON.stringify(key)} in object with keys: ${keys}` - ); - } - } - - getOr(key, defaultValue) { - return this.obj[key] !== undefined ? this.obj[key] : defaultValue; - } -} - -const map = obj => new Map(obj); - -const createViewDataElement = de => ({ - id: de.id, - displayFormName: de.displayName, - url: de.href, - hasUrl: () => !!de.href, - valueType: de.valueType, - optionSet: de.optionSetValue, - hasDescription: () => !!de.description, - displayDescription: de.description, -}); - -const getVisibleOptionCombos = (greyedFields, optionCombos, dataElements) => - _a(optionCombos) - .filter(coc => _a(dataElements).some(de => !greyedFields[`${de.id}.${coc.id}`])) - .value(); - -const getGroupedItems = sections => - _a(sections) - .map(section => { - const groupedItemsForSection = _a(section.items) - .values() - .filter(item => item.selected) - .groupByKeys(["theme", "group"], map) - .value(); - return [section.id, groupedItemsForSection]; - }) - .fromPairs() - .value(); - -const getKey = cos => - _a(cos) - .map("id") - .sortBy() - .uniq() - .join("-"); - -const getOrderedCategoryOptionCombos = categoryCombos => - _a(categoryCombos) - .map(categoryCombo => { - const categoryOptionsForCategories = _.cartesianProduct( - ...a(categoryCombo.categories).map(category => a(category.categoryOptions)) - ); - const cocByCosKey = _.keyBy(a(categoryCombo.categoryOptionCombos), coc => - getKey(coc.categoryOptions) - ); - const orderedCocs = a(categoryOptionsForCategories).map( - cos => cocByCosKey[getKey(cos)] - ); - - return [categoryCombo.id, orderedCocs]; - }) - .fromPairs() - .value(); - -// coc.categoryOptionCombo.categoryOptions return an unorder set, so it cannot be used to -// univocaly relate a coc with its categoryOptions. Use sets comparison. -const getHeaders = (categories, categoryOptionCombos) => { - const categoryOptionsForCategories = a(categories).map(category => a(category.categoryOptions)); - const allCategoryOptions = _.cartesianProduct(...categoryOptionsForCategories); - const categoryOptionsByCategoryOptionKey = _.keyBy(allCategoryOptions, getKey); - - return a(categories).map((category, catIndex) => - _a(categoryOptionCombos) - .map(coc => categoryOptionsByCategoryOptionKey[getKey(coc.categoryOptions)]) - .groupConsecutiveBy(cos => - _a(cos) - .map(co => co.id) - .take(catIndex + 1) - .value() - ) - .map(group => { - const categoryOption = group[0][catIndex]; - return { - colSpan: group.length, - name: categoryOption.name, - displayName: categoryOption.displayName, - }; - }) - .value() - ); -}; - -const getGreyedFields = dataset => - _a(dataset.sections) - .flatMap(section => a(section.greyedFields)) - .map(field => [field.dataElement.id + "." + field.categoryOptionCombo.id, true]) - .fromPairs() - .value(); - -const getRowTotalId = (dataElement, optionCombos) => - ["row", dataElement.id, ...a(optionCombos).map(coc => coc.id)].join("-"); - -const getContext = (d2, i18n, dataset, richSections, allCategoryCombos) => { - const sections = richSections.filter(richSection => - _(richSection.items) - .values() - .some("selected") - ); - const categoryComboByDataElementId = _a(dataset.dataSetElements) - .map(dse => [dse.dataElement.id, getCategoryCombo(dse)]) - .fromPairs() - .value(); - const categoryCombosId = _a(dataset.dataSetElements) - .map(dse => getCategoryCombo(dse).id) - .uniq() - .value(); - const categoryCombos = _a(allCategoryCombos) - .keyBy("id") - .at(categoryCombosId) - .value(); - const orderedCategoryOptionCombos = getOrderedCategoryOptionCombos(categoryCombos); - const orderedCategories = _a(categoryCombos) - .map(cc => [cc.id, cc.categories]) - .fromPairs() - .value(); - const getDataElementsByCategoryCombo = dataElements => - _a(dataElements) - .groupBy(de => categoryComboByDataElementId[de.id].id) - .thru(map) - .value(); - const getDataElementsByCategoryComboForIndicators = indicators => - _a(indicators) - .flatMap("dataElements") - .groupBy(de => categoryComboByDataElementId[de.id].id) - .thru(map) - .value(); - const greyedFields = getGreyedFields(dataset); - - return { - helpers: { - getDataElementsByCategoryCombo, - getDataElementsByCategoryComboForIndicators, - createViewDataElement, - getHeaders, - getVisibleOptionCombos: getVisibleOptionCombos.bind(null, greyedFields), - getRowTotalId, - }, - i18n: { - getString: key => i18n.getTranslation(key), - }, - encoder: { - htmlEncode: htmlencode.htmlEncode, - }, - auth: { - // Used in automatic form, cannot be calculated for a static custom form, leave it as true - hasAccess: (_app, _key) => true, - }, - dataSet: { - renderAsTabs: dataset.renderAsTabs, - dataElementDecoration: dataset.dataElementDecoration, - }, - sections: sections, - groupedItems: map(getGroupedItems(sections)), - orderedCategoryOptionCombos: map(orderedCategoryOptionCombos), - orderedCategories: map(orderedCategories), - greyedFields: map(greyedFields), - }; -}; - -// d2.i18n contains uiLocale translations, a custom form should use dbLocale translations. -const getI18n = d2 => { - const { keyUiLocale, keyDbLocale } = d2.currentUser.settings; - - if (!keyDbLocale || keyDbLocale === keyUiLocale) { - return Promise.resolve(d2.i18n); - } else { - const locales = _([keyDbLocale, "en"]) - .compact() - .uniq() - .value(); - const sources = locales.map(locale => `./i18n/i18n_module_${locale}.properties`); - const i18n = new I18n(sources); - return i18n.load().then(() => i18n); - } -}; - -const get = async (d2, dataset, periodDates, sections, categoryCombos) => { - const i18n = await getI18n(d2); - const context = getContext(d2, i18n, dataset, sections, categoryCombos); - const config = { env: "development", escape: false }; - const htmlForm = velocity.render(data.template, context, {}, config); - - return ` - - - ${htmlForm} - `; -}; - -export default get; diff --git a/src/models/DataSetStore.js b/src/models/DataSetStore.js deleted file mode 100644 index bd1753ab7..000000000 --- a/src/models/DataSetStore.js +++ /dev/null @@ -1,969 +0,0 @@ -import fp from "lodash/fp"; -import _ from "../utils/lodash-mixins"; -import { generateUid } from "d2/lib/uid"; -import moment from "moment"; -import { - getCategoryCombos, - collectionToArray, - getAsyncUniqueValidator, - sendMessage, - getUserGroups, - mapPromise, - getOrgUnitsForLevel, - getCountryCode, - getSharing, - deepMerge, - buildSharingFromUserGroupNames, - postMetadata, - update, - sendMessageToGroups, - getCategoryCombo, - setAttributes, - getOwnedPropertyJSON, -} from "../utils/Dhis2Helpers"; - -import { getCoreCompetencies, getProject } from "./dataset"; -import * as Section from "./Section"; -import getCustomForm from "./CustomForm"; -import * as dataPeriods from "./data-periods"; -import { ProjectsService } from "./ProjectService"; - -const toArray = collectionToArray; -const dataInputPeriodDatesFormat = "YYYYMMDD"; - -function parseDate(value) { - const date = moment(value, dataInputPeriodDatesFormat); - return value && date.isValid() ? date.toDate() : undefined; -} - -function parsePeriodDates(stringDate) { - // Example: "2018=20180501-20180531,2019=20190501-20190531" - return _((stringDate || "").split(",")) - .map(stringDateForYear => { - const [year, stringDateInterval] = stringDateForYear.split("="); - const [start, end] = (stringDateInterval || "").split("-").map(parseDate); - return year ? [year, { start, end }] : null; - }) - .compact() - .fromPairs() - .value(); -} - -class Factory { - constructor(d2, config) { - this.d2 = d2; - this.config = config; - } - - get() { - const dataset = this.getInitialModel(); - return this.getStore(dataset, "add"); - } - - getFromDB(id) { - return this.getDataset(id).then(dataset => { - return this.getStore(dataset, "edit"); - }); - } - - cloneFromDB(id) { - return this.getDataset(id).then(dataset => { - dataset.id = undefined; - dataset._sourceId = id; - dataset._sourceName = dataset.name; - dataset.code = undefined; - dataset.dataInputPeriods.forEach(dip => { - dip.id = generateUid(); - }); - dataset.dataSetElements.forEach(dse => { - dse.dataSet = { id: undefined }; - }); - toArray(dataset.sections).forEach(section => { - section.id = undefined; - }); - // On dataset clone, the custom form is reused, clear the field explicitly - dataset.dataEntryForm = undefined; - return this.getStore(dataset, "clone"); - }); - } - - getStore(dataset, action) { - return this.getCountries().then(countries => - this.getAssociations(dataset, countries).then( - associations => - new DataSetStore(action, this.d2, this.config, countries, dataset, associations) - ) - ); - } - - getDataset(id) { - const fields = [ - "*,dataSetElements[*,categoryCombo[*,categories[id,name,displayName]],dataElement[*,categoryCombo[*]]]", - "sections[*,code,href],organisationUnits[*],dataEntryForm[id]", - ].join(","); - return this.d2.models.dataSets.get(id, { fields }); - } - - getCountries() { - const countryLevelId = this.config.organisationUnitLevelForCountriesId; - return countryLevelId - ? getOrgUnitsForLevel(this.d2, countryLevelId) - : Promise.reject("No country level configured"); - } - - getInitialModel() { - return this.d2.models.dataSet.create({ - attributeValues: [], - name: undefined, - code: undefined, - description: undefined, - expiryDays: 0, - openFuturePeriods: 1, - periodType: "Monthly", - dataInputPeriods: [], - categoryCombo: { id: this.config.categoryComboId }, - notifyCompletingUser: false, - noValueRequiresComment: false, - legendSets: [], - organisationUnits: [], - skipOffline: false, - dataElementDecoration: true, - renderAsTabs: true, - indicators: [], - dataSetElements: [], - sections: [], - publicAccess: "--------", - }); - } - - getCountriesFromSharing(dataset, countries) { - const datasetId = dataset.id || dataset._sourceId; - - if (datasetId) { - const _dataset = this.d2.models.dataSets.create({ id: datasetId }); - const countriesByCode = _.keyBy(countries, getCountryCode); - const getCode = userGroupAccess => userGroupAccess.displayName.split("_")[0]; - return getSharing(this.d2, _dataset) - .then(sharing => - _(sharing.object.userGroupAccesses) - .map(getCode) - .compact() - .uniq() - .value() - ) - .then(sharingCountryCodes => - _(countriesByCode) - .at(sharingCountryCodes) - .compact() - .value() - ) - .catch(err => { - console.error( - "Cannot get sharing for dataset, default to empty countries", - err - ); - return []; - }); - } else { - return Promise.resolve([]); - } - } - - getUserRolesForCurrentUser() { - // d2.currentUser.getUserRoles generates an invalid URL. Use directly endpoint /api/me instead. - const api = d2.Api.getApi(); - return api - .get("/me", { fields: "userCredentials[userRoles[id,name]]" }) - .then(user => user.userCredentials.userRoles); - } - - getAssociations(dataset, countries) { - const promises = [ - getProject(this.d2, this.config, dataset), - getCoreCompetencies(this.d2, this.config, dataset), - this.getCountriesFromSharing(dataset, countries), - this.getUserRolesForCurrentUser(), - ]; - - return Promise.all(promises).then( - ([project, coreCompetencies, sharingCountries, userRoles]) => ({ - project, - coreCompetencies, - initialOrgUnits: collectionToArray(dataset.organisationUnits), - initialSections: collectionToArray(dataset.sections), - initialCoreCompetencies: coreCompetencies, - processedCoreCompetencies: coreCompetencies, - sections: collectionToArray(dataset.sections), - countries: sharingCountries, - userRoles, - ...dataPeriods.getDataInputDates(dataset, this.config), - ...this.getPeriodAssociations(dataset), - }) - ); - } - - getPeriodAssociations(dataset) { - const { dataPeriodOutputDatesAttributeId, dataPeriodOutcomeDatesAttributeId } = this.config; - - const valueByAttrId = _(dataset.attributeValues) - .map(av => [av.attribute.id, av.value]) - .fromPairs() - .value(); - - const output = parsePeriodDates(valueByAttrId[dataPeriodOutputDatesAttributeId]); - const outcome = parsePeriodDates(valueByAttrId[dataPeriodOutcomeDatesAttributeId]); - - const hasSameDatesAcrossYears = datesByYear => { - return _(datesByYear) - .values() - .map(dates => - _(dates) - .values() - .map(date => (date ? moment(date).format("MM-DD") : undefined)) - .value() - ) - .unzip() - .every(datesGroup => datesGroup.length > 1 && _.uniq(datesGroup).length === 1); - }; - - return { - periodDatesApplyToAll: { - output: hasSameDatesAcrossYears(output), - outcome: hasSameDatesAcrossYears(outcome), - }, - periodDates: { output, outcome }, - }; - } -} - -export default class DataSetStore { - constructor(action, d2, config, countries, dataset, associations) { - this.action = action; - this.d2 = d2; - this.api = d2.Api.getApi(); - this.config = config; - this.countriesByCode = _.keyBy(countries, getCountryCode); - this.countriesById = _.keyBy(countries, "id"); - this.countryLevel = _.isEmpty(countries) ? null : countries[0].level; - this.dataset = dataset; - this.associations = associations; - window.store = this; - } - - getTranslation(...args) { - return this.d2.i18n.getTranslation(...args); - } - - static add(d2, config) { - const factory = new Factory(d2, config); - return factory.get(); - } - - static edit(d2, config, datasetId) { - const factory = new Factory(d2, config); - return factory.getFromDB(datasetId); - } - - static clone(d2, config, datasetId) { - const factory = new Factory(d2, config); - return factory.cloneFromDB(datasetId); - } - - static getPeriodAssociations(d2, config, dataset) { - const factory = new Factory(d2, config); - return factory.getPeriodAssociations(dataset); - } - - isSharingStepVisible() { - return !this.associations.project; - } - - getPeriodYears() { - const { dataInputStartDate, dataInputEndDate } = this.associations; - if (!dataInputStartDate || !dataInputEndDate) { - return []; - } else { - const startYear = moment(dataInputStartDate).year(); - const endYear = moment(dataInputEndDate) - .add(1, "year") - .year(); - return _.range(startYear, endYear); - } - } - - getPeriodDates() { - const { associations } = this; - const { periodDatesApplyToAll, periodDates } = associations; - const years = this.getPeriodYears(); - const firstYear = years[0]; - const processDate = (date, index) => - date - ? moment(date) - .add(index, "years") - .format("YYYY-MM-DD") - : undefined; - - return _(periodDates) - .mapValues((datesByYear, type) => { - const datesFirstYear = periodDates[type][firstYear]; - const applyToAll = periodDatesApplyToAll[type]; - return _(years) - .map((year, index) => { - const dates = datesByYear[year]; - const value = - applyToAll && datesFirstYear - ? { - start: processDate(datesFirstYear.start, 0), - end: processDate(datesFirstYear.end, index), - } - : { - start: dates ? processDate(dates.start, 0) : undefined, - end: dates ? processDate(dates.end, 0) : undefined, - }; - return [year, value]; - }) - .fromPairs() - .value(); - }) - .value(); - } - - async _getCustomForm(saving, categoryCombos_) { - const { richSections, dataset } = saving; - const periodDates = this.getPeriodDates(); - const categoryCombos = categoryCombos_ || (await this.getCategoryCombos(dataset)); - const id = (dataset.dataEntryForm ? dataset.dataEntryForm.id : null) || generateUid(); - - return getCustomForm(this.d2, dataset, periodDates, richSections, categoryCombos).then( - htmlCode => ({ - id: id, - style: "NORMAL", - htmlCode, - name: [dataset.id, id].join("-"), // Form name must be unique - }) - ); - } - - getDataInputPeriods(options) { - const { dataInputStartDate: startDate, dataInputEndDate: endDate, periodDates } = options; - if (!startDate || !endDate) return []; - - const outputStart = _.min(_.compact(_.values(periodDates.output).map(x => x.start))); - const outputEnd = _.max(_.compact(_.values(periodDates.output).map(x => x.end))); - const outcomeStart = _.min(_.compact(_.values(periodDates.outcome).map(x => x.start))); - const outcomeEnd = _.max(_.compact(_.values(periodDates.outcome).map(x => x.end))); - - const dataInputStart = _.min(_.compact([startDate, outputStart, outcomeStart])); - const dataInputEnd = _.max(_.compact([endDate, outputEnd, outcomeEnd])); - - const endDateM = moment(endDate); - let currentDateM = moment(startDate); - let periods = []; - - while (currentDateM <= endDateM) { - periods.push({ - id: generateUid(), - period: { id: currentDateM.format("YYYYMM") }, - openingDate: formatDateToISO(dataInputStart), - closingDate: formatDateToISO(dataInputEnd), - }); - currentDateM.add(1, "month").startOf("month"); - } - - return periods; - } - - getOpenFuturePeriods(endDate) { - if (endDate) { - const endDateM = moment(endDate); - const currentDate = moment(); - const monthsDiff = Math.ceil(moment(endDateM).diff(currentDate, "months", true)); - return monthsDiff > 0 ? monthsDiff + 1 : 1; - } else { - return 1; - } - } - - getDataFromProject(dataset, associations) { - const { project } = associations; - this.associations.countries = this.getSharingCountries(); - - if (project) { - const newDataset = dataset; - const newAssociations = _.clone(associations); - - newDataset.name = project.displayName ? `${project.displayName} DataSet` : ""; - newAssociations.dataInputStartDate = project.startDate - ? new Date(project.startDate) - : undefined; - newAssociations.dataInputEndDate = project.endDate - ? new Date(project.endDate) - : undefined; - newDataset.openFuturePeriods = this.getOpenFuturePeriods( - newAssociations.dataInputEndDate - ); - newDataset.dataInputPeriods = this.getDataInputPeriods(newAssociations); - newDataset.organisationUnits = project.organisationUnits; - return { dataset: newDataset, associations: newAssociations }; - } else { - const newDataset = dataset; - const newAssociations = _.clone(associations); - - newDataset.name = ""; - newAssociations.dataInputStartDate = undefined; - newAssociations.dataInputEndDate = undefined; - newAssociations.countries = []; - newDataset.openFuturePeriods = this.getOpenFuturePeriods( - newAssociations.dataInputEndDate - ); - newDataset.dataInputPeriods = this.getDataInputPeriods(newAssociations); - newDataset.organisationUnits.clear(); - return { dataset: newDataset, associations: newAssociations }; - } - } - - getSharingCountries() { - const { dataset, associations, countriesByCode, countriesById } = this; - const { project } = associations; - const projectCountryCode = - project && project.code ? project.code.slice(0, 2).toUpperCase() : null; - - const dataSetCountryIds = _(toArray(dataset.organisationUnits)) - .map(ou => ou.path.split("/")[3]) - .uniq() - .value(); - - if (projectCountryCode && countriesByCode[projectCountryCode]) { - return [countriesByCode[projectCountryCode]]; - } else { - return _(countriesById) - .at(dataSetCountryIds) - .compact() - .value(); - } - } - - setDefaultPeriodValues() { - const { - outputEndDate, - outcomeEndDate, - outputLastYearEndDate, - outcomeLastYearEndDate, - } = this.config; - const { dataInputStartDate, dataInputEndDate } = this.associations; - if (!(dataInputStartDate && dataInputEndDate)) return; - - const years = this.getPeriodYears(); - const lastYear = _.last(years); - const dataInputEndDateM = moment(dataInputEndDate); - - const getPeriodDates = (years, endDate, endDateOffset) => { - const { month = 4, day = 1 } = endDate; - const { units, value } = endDateOffset; - - return _(years) - .map(year => { - const defaultEndM = moment([year + 1, month - 1, day]); - const lastYearEndDateM = - units && value - ? dataInputEndDateM.clone().add(value, units) - : dataInputEndDateM; - const endM = year === lastYear ? lastYearEndDateM : defaultEndM; - const start = dataInputStartDate; - const period = { start, end: endM.toDate() }; - return [year, period]; - }) - .fromPairs() - .value(); - }; - - _.assign(this.associations, { - periodDatesApplyToAll: { - output: false, - outcome: false, - }, - periodDates: { - output: getPeriodDates(years, outputEndDate, outputLastYearEndDate), - outcome: getPeriodDates(years, outcomeEndDate, outcomeLastYearEndDate), - }, - }); - } - - updateLinkedFields(fieldPath, oldValue) { - const { dataset, associations } = this; - - switch (fieldPath) { - case "associations.project": - if (!oldValue || window.confirm(this.getTranslation("confirm_project_updates"))) { - const { - dataset: newDataset, - associations: newAssociations, - } = this.getDataFromProject(dataset, associations); - this.dataset = newDataset; - this.associations = newAssociations; - this.setDefaultPeriodValues(); - } - break; - case "associations.dataInputStartDate": - case "associations.dataInputEndDate": - const { dataInputEndDate } = associations; - this.setDefaultPeriodValues(); - this.dataset.openFuturePeriods = this.getOpenFuturePeriods(dataInputEndDate); - this.dataset.dataInputPeriods = this.getDataInputPeriods(associations); - break; - case "associations.organisationUnits": - this.associations.countries = this.getSharingCountries(); - break; - default: - if (fieldPath.startsWith("associations.periodDates")) { - this.dataset.dataInputPeriods = this.getDataInputPeriods(associations); - } - break; - } - } - - updateField(fieldPath, newValue) { - const oldValue = fp.get(fieldPath, this); - _.set(this, fieldPath, newValue); - this.updateLinkedFields(fieldPath, oldValue); - } - - processDatasetSections(dataset, stateSections) { - this.associations.processedCoreCompetencies = this.associations.coreCompetencies; - return Section.processDatasetSections(this.d2, this.config, dataset, stateSections); - } - - setGreyedFields(greyedFieldsForSections) { - const sections = collectionToArray(this.dataset.sections); - - if (sections.length !== greyedFieldsForSections.length) { - throw new Error("setGreyedFields: invalid input array length"); - } - _(sections) - .zip(greyedFieldsForSections) - .each(([section, greyedFields]) => update(section, { greyedFields })); - } - - hasSections() { - return collectionToArray(this.dataset.sections).length > 0; - } - - getCategoryCombos(dataset) { - const categoryComboIds = _(dataset.dataSetElements) - .flatMap(dse => [ - _.get(dse, "dataElement.categoryCombo.id"), - _.get(dse, "categoryCombo.id"), - ]) - .compact() - .uniq() - .value(); - - return getCategoryCombos(this.d2, { - cocFields: "id,categoryOptions[id]", - filterIds: categoryComboIds, - }); - } - - /* Save */ - - _getInitialSaving() { - const { countries, project } = this.associations; - const userGroups$ = this.d2.models.userGroups.list({ paging: false, fields: "id,name" }); - const project$ = project - ? this.d2.models.categoryOption.get(project.id) - : Promise.resolve(null); - const categoryCombos$ = this.getCategoryCombos(this.dataset); - - const countryCodes = _(countries) - .map(getCountryCode) - .compact() - .value(); - - return Promise.all([userGroups$, project$, categoryCombos$]).then( - ([userGroups, project, categoryCombos]) => { - return { - dataset: this.dataset, - warnings: [], - project: project, - countryCodes: countryCodes, - userGroups: toArray(userGroups), - metadata: {}, - categoryCombos: categoryCombos, - }; - } - ); - } - - _processDisaggregation(saving) { - const { dataset, categoryCombos } = saving; - - const existingCategoryCombos = new Set(toArray(categoryCombos).map(cc => cc.id)); - const dataSetElements = collectionToArray(dataset.dataSetElements); - const removeUnusedGreyedFields = (sections, newCategoryCombos) => { - const categoryComboOptionsByCCId = _(collectionToArray(saving.categoryCombos)) - .concat(newCategoryCombos) - .map(cc => [cc.id, toArray(cc.categoryOptionCombos).map(coc => coc.id)]) - .fromPairs() - .value(); - - const allowedGreyedFieldKeys = new Set( - _(dataSetElements) - .flatMap(dse => - _([dse.dataElement.id]) - .cartesianProduct(categoryComboOptionsByCCId[getCategoryCombo(dse).id]) - .map(([dataElementId, cocId]) => dataElementId + "." + cocId) - .value() - ) - .value() - ); - - return collectionToArray(sections).map(section => { - const allowedGreyedFields = section.greyedFields.filter(greyedField => { - const key = - greyedField.dataElement.id + "." + greyedField.categoryOptionCombo.id; - return allowedGreyedFieldKeys.has(key); - }); - section.greyedFields = allowedGreyedFields; - return section; - }); - }; - - const newCategoryCombos = _(dataSetElements) - .map(getCategoryCombo) - .uniqBy(cc => cc.id) - .filter(cc => !existingCategoryCombos.has(cc.id)) - .map(cc => this._addSharingToCategoryCombo(saving, cc)) - .value(); - const newCategoryComboOptions = _(newCategoryCombos) - .flatMap(cc => toArray(cc.categoryOptionCombos)) - .value(); - - dataset.sections = removeUnusedGreyedFields(dataset.sections, newCategoryCombos); - - const savingWithAllCategoryCombos = { - ...saving, - categoryCombos: saving.categoryCombos.toArray().concat(newCategoryCombos), - }; - - return this._addMetadataOp(savingWithAllCategoryCombos, { - create_and_update: { - categoryCombos: newCategoryCombos, - categoryOptionCombos: newCategoryComboOptions, - }, - }); - } - - _setDatasetId(saving) { - const { dataset } = saving; - const datasetId = dataset.id || generateUid(); - return _.imerge(saving, { dataset: update(dataset, { id: datasetId }) }); - } - - async _saveDataset(saving) { - const { dataset, categoryCombos } = saving; - - const form = await this._getCustomForm(saving, categoryCombos); - - // Cleanup dataSetElements to avoid "circular references" error on POST - const datasetPayload = getOwnedPropertyJSON(dataset); - const newDataSetElements = dataset.dataSetElements.map(dataSetElement => ({ - dataSet: { id: dataset.id }, - dataElement: { id: dataSetElement.dataElement.id }, - categoryCombo: { id: getCategoryCombo(dataSetElement).id }, - })); - datasetPayload.dataSetElements = newDataSetElements; - datasetPayload.dataEntryForm = { id: form.id }; - datasetPayload.expiryDays = 0; - - return this._addMetadataOp(saving, { - create_and_update: { - dataSets: [datasetPayload], - dataEntryForms: [form], - }, - }); - } - - _setDatasetCode(saving) { - const { dataset, warnings } = saving; - const { project } = this.associations; - const projectCode = project ? project.code : null; - - if (projectCode) { - const datasetCode = projectCode + " Data Set"; - const codeValidator = getAsyncUniqueValidator(this.d2.models.dataSet, "code"); - return codeValidator(datasetCode) - .then(() => _.imerge(saving, { dataset: update(dataset, { code: datasetCode }) })) - .catch(_err => - _.imerge(saving, { - warnings: warnings.concat(["Dataset code already used: " + datasetCode]), - }) - ); - } else { - return Promise.resolve(saving); - } - } - - _setDatasetShortName(saving) { - const { dataset, warnings } = saving; - const shortName = dataset.name.slice(0, 50); - const validator = getAsyncUniqueValidator(this.d2.models.dataSet, "shortName"); - - return validator(shortName) - .then(() => _.imerge(saving, { dataset: update(dataset, { shortName: shortName }) })) - .catch(_err => - _.imerge(saving, { - warnings: warnings.concat(["Dataset shortName already used: " + shortName]), - }) - ); - } - - _addSharingToCategoryCombo(saving, categoryCombo) { - const userGroupSharingByName = _(saving.countryCodes) - .map(countryCode => [countryCode + "_Users", { access: "r-------" }]) - .fromPairs() - .value(); - const sharing = buildSharingFromUserGroupNames( - {}, - saving.userGroups, - userGroupSharingByName - ); - return update(categoryCombo, sharing.object); - } - - _addWarnings(saving, msgs) { - return _.imerge(saving, { warnings: saving.warnings.concat(msgs) }); - } - - _addSharingToDataset(saving) { - const { dataset } = saving; - - const userGroupSharingByName = _(saving.countryCodes) - .flatMap(countryCode => [ - [countryCode + "_Users", { access: "r-rw----" }], - [countryCode + "_Administrators", { access: "rwrw----" }], - ]) - .fromPairs() - .value(); - - const baseSharing = { object: { publicAccess: dataset.publicAccess } }; - const sharing = buildSharingFromUserGroupNames( - baseSharing, - saving.userGroups, - userGroupSharingByName - ); - const datasetWithSharing = update(dataset, sharing.object); - return _.imerge(saving, { dataset: datasetWithSharing }); - } - - _processSections(saving) { - const { dataset } = saving; - const { coreCompetencies, initialCoreCompetencies } = this.associations; - return Section.getSections( - this.d2, - this.config, - dataset, - initialCoreCompetencies, - coreCompetencies - ).then(sectionsArray => { - const sections = _.keyBy(sectionsArray, "name"); - const { errors, dataset: newDataset } = this.processDatasetSections(dataset, sections); - - return _(errors).isEmpty() - ? _.imerge(saving, { dataset: newDataset, richSections: sectionsArray }) - : Promise.reject("Cannot get sections. Go to sections step for more details"); - }); - } - - _saveSections(saving) { - const { dataset } = saving; - const { initialSections } = this.associations; - const sections = collectionToArray(dataset.sections); - - const datasetId = dataset.id; - const sectionsToSave = _(sections) - .filter(section => section.dataElements.size > 0 || section.indicators.size > 0) - .sortBy(section => section.name) - .map(section => update(section, { dataSet: { id: datasetId } })) - .value(); - const sectionsToSaveIds = sectionsToSave.map(section => section.id); - const sectionsToDelete = initialSections.filter( - existingSection => - existingSection.id && !_.includes(sectionsToSaveIds, existingSection.id) - ); - - // Metadata API for sections delete returns 500 (see https://jira.dhis2.org/browse/DHIS2-2541), - // so we will use metada only to create/update sections. Delete sections using non-batch d2 methods. - const deleteSections$ = mapPromise(sectionsToDelete, section => { - return section.delete().catch(err => { - if (err && err.httpStatusCode === 404) { - return Promise.resolve(true); - } else { - throw err; - } - }); - }); - return deleteSections$.then(() => - this._addMetadataOp(saving, { create_and_update: { sections: sectionsToSave } }) - ); - } - - _addMetadataOp(saving, metadata) { - return deepMerge(saving, { metadata: metadata }); - } - - _addOrgUnitsToProject(saving) { - const { dataset, project } = saving; - - const orgUnits = collectionToArray(dataset.organisationUnits); - const initialOrgUnitIds = _.sortBy(this.associations.initialOrgUnits.map(ou => ou.id)); - const newOrgUnitIds = _.sortBy(toArray(dataset.organisationUnits).map(ou => ou.id)); - const orgUnitsWereChanged = !_.isEqual(initialOrgUnitIds, newOrgUnitIds); - const projectsService = new ProjectsService(this.api, this.config); - - if (project && !_(orgUnits).isEmpty() && orgUnitsWereChanged) { - return projectsService - .updateOrgUnits(project, orgUnits) - .then(() => saving) - .catch(err => { - const errStr = JSON.stringify(err); - const msg = `Error adding orgUnits to ${project.displayName}: ${errStr}`; - return this._addWarnings(saving, [msg]); - }); - } else { - return Promise.resolve(saving); - } - } - - _getUserGroupsForNotifications() { - return _(this.associations.countries) - .map(getCountryCode) - .compact() - .map(countryCode => countryCode + "_M&EDatasetCompletion") - .concat(["GL_GlobalAdministrator"]) - .value(); - } - - _sendNotificationMessages(saving) { - const { dataset, warnings } = saving; - const d2 = this.d2; - const userName = this.d2.currentUser.name; - const op = this.action === "edit" ? "edited" : "created"; - const warningsList = warnings.map(s => "- " + s).join("\n"); - const msg = { - subject: - `Dataset ${op}: ${dataset.name}` + - (_(warnings).isEmpty() ? "" : " (with warnings)"), - body: - `Dataset ${op}: ${dataset.name} by ${userName}.` + - (_(warnings).isEmpty() ? "" : `\n\nWarnings: \n\n${warningsList}`), - }; - const userGroupNames = this._getUserGroupsForNotifications(); - - return getUserGroups(d2, userGroupNames) - .then(toArray) - .then(userGroups => sendMessage(d2, msg.subject, msg.body, userGroups)) - .then(() => saving) - .catch(err => { - // An error sending a notification message is not critical, log and continue - console.error("Could not send message", err); - return saving; - }); - } - - _runMetadataOps(saving) { - return postMetadata(this.d2, saving.metadata).then(() => saving); - } - - _notifyError(err) { - const datasetName = this.dataset.name; - const stringErr = err.message || err; - const title = `[dataset-configuration] Error when saving dataset '${datasetName}'`; - const currentUser = this.d2.currentUser; - const currentUserInfo = `User: ${currentUser.username} (${currentUser.id})`; - const body = [ - `There has been an error when dataset '${datasetName}' was being saved.`, - currentUserInfo, - stringErr, - ].join("\n\n"); - const userGroupNames = this._getUserGroupsForNotifications(); - - sendMessageToGroups(this.d2, userGroupNames, title, body); - throw err; - } - - _setAttributes(saving) { - const attributeKeys = [ - "createdByDataSetConfigurationAttributeId", - "dataPeriodIntervalDatesAttributeId", - ]; - - const missingAttributeKeys = attributeKeys.filter(key => !this.config[key]); - - if (!_(missingAttributeKeys).isEmpty()) { - this._notifyError({ - message: `Missing settings: ${missingAttributeKeys.join(", ")}`, - }); - return Promise.resolve(saving); - } - - const dataInterval = [ - dataPeriods.formatDate(this.associations.dataInputStartDate), - dataPeriods.formatDate(this.associations.dataInputEndDate), - ].join("-"); - - const attributeValues = dataPeriods.getAttributeValues(this, saving.dataset); - const valuesByKey = { - createdByDataSetConfigurationAttributeId: "true", - dataPeriodIntervalDatesAttributeId: dataInterval, - }; - const values = _.mapKeys(valuesByKey, (_value, key) => this.config[key]); - const newAttributeValues = setAttributes(attributeValues, values); - saving.dataset.attributeValues = newAttributeValues; - return Promise.resolve(saving); - } - - _processSave(methods) { - const reducer = (accPromise, method) => accPromise.then(method.bind(this)); - return methods - .reduce(reducer, this._getInitialSaving()) - .catch(err => this._notifyError(err)); - } - - buildCustomForm(categoryCombos) { - return this._processSections({ dataset: this.dataset }).then(saving => - this._getCustomForm(saving, categoryCombos) - ); - } - - save() { - return this._processSave([ - this._setAttributes, - this._setDatasetId, - this._setDatasetCode, - this._setDatasetShortName, - this._addSharingToDataset, - this._processSections, - this._processDisaggregation, - this._saveSections, - this._saveDataset, - this._runMetadataOps, - this._addOrgUnitsToProject, - this._sendNotificationMessages, - ]); - } -} - -function formatDateToISO(date) { - if (!date) return undefined; - - const dateParts = [ - padDigits(date.getFullYear(), 4), - padDigits(date.getMonth() + 1, 2), - padDigits(date.getDate(), 2), - ]; - return dateParts.join("-") + "T00:00:00.000"; -} - -function padDigits(number: number, digits: number): string { - return Array(Math.max(digits - String(number).length + 1, 0)).join("0") + number; -} diff --git a/src/models/ProjectService.js b/src/models/ProjectService.js deleted file mode 100644 index a9af16474..000000000 --- a/src/models/ProjectService.js +++ /dev/null @@ -1,66 +0,0 @@ -import _ from "lodash"; -import { collectionToArray } from "../utils/Dhis2Helpers"; - -export class ProjectsService { - constructor(api, config) { - this.api = api; - this.config = config; - } - - async updateOrgUnits(project, orgUnits) { - const categoryOptionUrl = `/categoryOptions/${project.id}`; - const categoryOption = await this.api.get(categoryOptionUrl, { fields: ":owner" }); - const payload = { - ...categoryOption, - organisationUnits: orgUnits.map(ou => ({ id: ou.id })), - }; - return this.api.update(`/categoryOptions/${project.id}`, payload); - } - - async updateOrgUnitsFromDataSets(dataSetRefs) { - if (!this.config.categoryProjectsId) return; - - const projectCategoryUrl = `/categories/${this.config.categoryProjectsId}`; - const projectCategory = await this.api.get(projectCategoryUrl, { - fields: "categoryOptions[id,name]", - }); - if (!projectCategory) return; - - const { dataSets } = await this.api.get("/dataSets", { - fields: "id,name,organisationUnits[id]", - filter: `id:in:[${dataSetRefs.map(ds => ds.id)}]`, - }); - - const allProjects = projectCategory.categoryOptions; - - const orgUnitsByProjectId = _(dataSets) - .map(dataSet => { - const project = allProjects.find(project => _.includes(dataSet.name, project.name)); - return project ? [project.id, collectionToArray(dataSet.organisationUnits)] : null; - }) - .compact() - .fromPairs() - .value(); - - const projectIds = _.keys(orgUnitsByProjectId); - if (_.isEmpty(projectIds)) return; - - const res = await this.api.get(`/categoryOptions`, { - fields: ":owner", - filter: `id:in:[${projectIds.join(",")}]`, - }); - - const projects = res.categoryOptions || []; - - const projectsUpdated = projects.map(categoryOption => { - const orgUnits = orgUnitsByProjectId[categoryOption.id]; - return { ...categoryOption, organisationUnits: orgUnits.map(ou => ({ id: ou.id })) }; - }); - - const postRes = await this.api.post(`/metadata`, { categoryOptions: projectsUpdated }); - - if (postRes.status !== "OK") { - throw new Error(`Error updating projects: ${res.status}`); - } - } -} diff --git a/src/models/Section.js b/src/models/Section.js deleted file mode 100644 index 83156a5ae..000000000 --- a/src/models/Section.js +++ /dev/null @@ -1,649 +0,0 @@ -import { generateUid } from "d2/lib/uid"; -import _ from "lodash"; -import { update, collectionToArray, subQuery, getOwnedPropertyJSON } from "../utils/Dhis2Helpers"; -import fp from "lodash/fp"; -import memoize from "nano-memoize"; - -const toArray = collectionToArray; - -/* Return an array of sections containing its data elements and associated indicators. Schema: - - [{ - name: string - showRowTotals: boolean - showColumnTotals: boolean - items: {id: { - type: "dataElement" | "indicator" - id: string - name: string - selected: boolean - origin: string - disaggregation: string - group: string - } - }] - -Notes: - - * DataElements can only be used within one section. Since we are getting DataElements from - indicators, we can have duplicated items that must be removed. -*/ -export const getSections = (d2_, config, dataset, initialCoreCompetencies, coreCompetencies) => { - const d2 = getCachedD2(d2_); - - const data$ = [ - getDataElementGroupRelations(d2), - getIndicatorGroupRelations(d2), - getIndicatorsByGroupName(d2, coreCompetencies), - getOutputDataElementsByCoreCompetencyId(d2, config, coreCompetencies), - ]; - - return Promise.all(data$).then( - ([degRelations, igRelations, indicatorsByGroupName, dataElementsByCCId]) => { - return Promise.all( - _.flatMap(coreCompetencies, coreCompetency => { - const opts = { - d2, - config, - coreCompetency, - degRelations, - igRelations, - indicatorsByGroupName, - dataElementsByCCId, - }; - return [getOutputSection(opts), getOutcomeSection(opts)]; - }) - ).then(sections => - updateSectionsFromD2Sections( - sections, - collectionToArray(dataset.sections), - initialCoreCompetencies - ) - ); - } - ); -}; - -// Cache d2.models[].list() -let cachedD2; - -const getCachedD2 = d2 => { - if (cachedD2) { - return cachedD2; - } else { - const models = _(d2.models) - .mapValues(model => { - const model2 = model.clone(); - model2.list = memoize(opts => model.list(opts), { serializer: JSON.stringify }); - return model2; - }) - .value(); - cachedD2 = { ...d2, models }; - return cachedD2; - } -}; - -const validateCoreItemsSelectedForCurrentUser = (_d2, _config) => { - return false; -}; - -/* Return an object with the info of the sections and selected dataElements/indicators and errors: - - { - sections: [d2.models.Section] - dataSetElements: [dataSetElement] - indicators: [Indicator] - errors: [String] - } -*/ -export const getDataSetInfo = (d2, config, dataset, sections) => { - const validateCoreSelected = validateCoreItemsSelectedForCurrentUser(d2, config); - - const d2Sections = _(sections) - .map(section => getD2Section(d2, dataset, section)) - .map((d2s, index) => _.set(d2s, "sortOrder", index)) - .value(); - const dataElements = _(d2Sections) - .flatMap(d2s => toArray(d2s.dataElements)) - .value(); - const indicators = _(d2Sections) - .flatMap(d2s => toArray(d2s.indicators)) - .value(); - const dataSetElements = dataElements.map(dataElement => ({ - id: generateUid(), - dataSet: {}, - categoryCombo: dataElement.categoryCombo, - dataElement: { - id: dataElement.id, - displayName: dataElement.displayName, - categoryCombo: dataElement.categoryCombo, - }, - })); - const dataElementsById = _(dataElements) - .keyBy("id") - .value(); - const dataElementErrors = _(dataElements) - .map("id") - .countBy() - .map((count, deId) => (count > 1 ? deId : null)) - .compact() - .map(repeatedId => { - const deName = dataElementsById[repeatedId].displayName; - const invalidSections = d2Sections - .filter(d2Section => d2Section.dataElements.has(repeatedId)) - .map(d2Section => d2Section.name); - return { - key: "data_element_in_multiple_sections", - message: `Data element '${deName}' is used in multiple sections: ${invalidSections.join( - ", " - )}`, - }; - }) - .value(); - const emptyCoreCompetenciesErrors = _(sections) - .groupBy(section => section.coreCompetency.name) - .toPairs() - .filter( - ([_ccName, sectionsForCC]) => - !_(sectionsForCC) - .flatMap(section => _.values(section.items)) - .some("selected") - ) - .map(([ccName, _sectionsForCC]) => ({ - key: "core_competency_no_items", - message: `Core competency ${ccName} has no data elements or indicators selected`, - })) - .value(); - - const nonCoreItemsSelectedErrors = () => - _(sections) - .groupBy(section => section.coreCompetency.name) - .toPairs() - .filter( - ([_ccName, sectionsForCC]) => - !_(sectionsForCC) - .flatMap(section => _.values(section.items)) - .some(item => item.selected && item.isCore) - ) - .map(([ccName, _sectionsForCC]) => ({ - key: "core_competency_no_core_items", - message: `Core competency ${ccName} has no core data elements or indicators selected`, - })) - .value(); - - const errors = _.concat( - dataElementErrors, - emptyCoreCompetenciesErrors, - validateCoreSelected ? nonCoreItemsSelectedErrors() : [] - ); - return { sections: d2Sections, dataSetElements, indicators, errors }; -}; - -/* Return status key of item (dataElement or indicator). - - Values: "unknown" | "active" | "inactive" | "phased-out" -*/ -export const getItemStatus = item => { - if (!item.status) { - return "unknown"; - } else if (item.status.startsWith("Active")) { - return "active"; - } else if (item.status.startsWith("Inactive")) { - return "inactive"; - } else if (item.status.startsWith("Phased")) { - return "phased-out"; - } else { - return "unknown"; - } -}; - -export const processDatasetSections = (d2, config, dataset, stateSections) => { - const { sections, dataSetElements, indicators, errors } = getDataSetInfo( - d2, - config, - dataset, - _.values(stateSections) - ); - - const prevSections = collectionToArray(dataset.sections); - const sectionsByName = _(sections) - .keyBy("name") - .value(); - const prevSectionsByName = _(prevSections) - .keyBy("name") - .value(); - const allNames = _(sections) - .concat(prevSections) - .map("name") - .uniq() - .value(); - - const mergedSections = allNames.map(name => { - const section = sectionsByName[name]; - if (section) { - // Keep id/href/greyedFields for existing sections - const prevSection = prevSectionsByName[name] || {}; - update(section, _.pick(prevSection, ["id", "href", "greyedFields"])); - return section; - } else { - // Section has no DE/indicators in this new configuration - const section = prevSectionsByName[name]; - section.dataElements.clear(); - section.indicators.clear(); - return section; - } - }); - - // Don't override dataSetElements (disaggregation) - const newDataSetElements = _.keyBy(dataSetElements, dse => dse.dataElement.id); - const prevDataSetElements = _.keyBy(dataset.dataSetElements || [], dse => dse.dataElement.id); - const mergedDataSetElements = _({ ...newDataSetElements, ...prevDataSetElements }) - .at(_.keys(newDataSetElements)) - .value(); - - const newDataset = update(dataset, { - sections: mergedSections, - dataSetElements: mergedDataSetElements, - indicators: indicators, - }); - return { errors, dataset: newDataset }; -}; - -export const sectionSelectedItemsCount = sections => { - return _(sections) - .flatMap((section, _sectionName) => _.values(section.items)) - .filter(item => item.selected) - .flatMap(item => (item.type === "dataElement" ? 1 : item.dataElements.length + 1)) - .sum(); -}; - -/* Private functions */ - -const sectionSep = "@"; - -const getSectionName = d2Section => { - return d2Section.name.split(sectionSep)[0]; -}; - -const updateSectionsFromD2Sections = (sections, d2Sections, initialCoreCompetencies) => { - const d2SectionsByName = _(d2Sections) - .groupBy(getSectionName) - .value(); - const updateSection = section => { - const d2SectionsForSection = d2SectionsByName[section.name]; - const sectionWasInInitialCoreCompetencies = _(initialCoreCompetencies).some( - cc => cc.id === section.coreCompetency.id - ); - - if (d2SectionsForSection) { - const d2Section = d2SectionsForSection[0]; - const itemsIds = new Set( - _(d2SectionsForSection) - .flatMap(d2s => [ - collectionToArray(d2s.dataElements).map(de => "dataElement-" + de.id), - collectionToArray(d2s.indicators).map(ind => "indicator-" + ind.id), - ]) - .flatten() - .value() - ); - - section.showRowTotals = d2Section.showRowTotals; - section.showColumnTotals = d2Section.showColumnTotals; - section.items = _.mapValues(section.items, item => - fp.merge(item, { selected: itemsIds.has(item.type + "-" + item.id) }) - ); - } else if (sectionWasInInitialCoreCompetencies) { - // This section was not persisted, but its core compentency was amongst the initial ones, - // meaning that no items were selected. So clear all default _selected_ values. - section.items = _.mapValues(section.items, obj => fp.merge(obj, { selected: false })); - } - - // Add attribute selectedOnLoad required to sort items by the default criteria - section.items = _(section.items) - .mapValues(obj => _.set(obj, "selectedOnLoad", obj.selected)) - .value(); - return section; - }; - - return sections.map(updateSection); -}; - -const getD2Section = (d2, dataset, section) => { - const items = _(section.items) - .values() - .filter("selected") - .value(); - const dataElements = _(items) - .flatMap(item => (item.type === "dataElement" ? [item] : item.dataElements)) - .map(de => ({ - id: de.id, - displayName: de.displayName, - categoryCombo: de.categoryCombo, - })) - .uniqBy("id") - .value(); - const indicators = _(items) - .flatMap(item => (item.type === "indicator" ? [item] : [])) - .map(ind => ({ id: ind.id, displayName: ind.displayName, name: ind.displayName })) - .uniqBy("id") - .value(); - const sectionTypeCode = section.type.toUpperCase() + "S"; - - // On creation, a data set has no ID, use a random string (prefix used only to observe uniqueness) - const randomId = dataset.id || getRandomString(); - - return d2.models.sections.create({ - name: section.name, - code: [randomId, sectionTypeCode, section.coreCompetency.code].join("_"), - displayName: section.name, - showRowTotals: section.showRowTotals, - showColumnTotals: section.showColumnTotals, - dataElements: dataElements, - indicators: indicators, - greyedFields: [], - }); -}; - -const getOutputSection = opts => { - const { config, degRelations, coreCompetency, dataElementsByCCId } = opts; - const sectionName = coreCompetency.name + " Outputs"; - const dataElements = dataElementsByCCId[coreCompetency.id]; - const getDataElementInfo = dataElement => { - const groupSets = _(toArray(dataElement.dataElementGroups)) - .map(deg => [degRelations[deg.id], deg]) - .fromPairs() - .value(); - const degSetOrigin = groupSets[config.dataElementGroupSetOriginId]; - const theme = groupSets[config.dataElementGroupSetThemeId]; - const group = _(dataElement.attributeValues).find( - av => av.attribute.id === config.attributeGroupId - ); - const attributes = _(dataElement.attributeValues) - .map(av => [av.attribute.id, av.value]) - .fromPairs() - .value(); - const mandatoryIndicatorId = config.dataElementGroupGlobalIndicatorMandatoryId; - const degSetStatus = groupSets[config.dataElementGroupSetStatusId]; - const status = degSetStatus ? degSetStatus.displayName : null; - - return { - type: "dataElement", - id: dataElement.id, - code: dataElement.code, - name: dataElement.name, - displayName: dataElement.displayName, - description: dataElement.description, - sectionName: sectionName, - coreCompetency: coreCompetency, - theme: theme ? theme.displayName : null, - group: group ? group.value : null, - categoryCombo: dataElement.categoryCombo, - isCore: degSetOrigin && degSetOrigin.id === mandatoryIndicatorId, - selected: false, - origin: degSetOrigin ? degSetOrigin.displayName : null, - status: status, - hidden: attributes[config.hideInDataSetAppAttributeId] === "true", - disaggregation: - dataElement.categoryCombo.name !== "default" - ? dataElement.categoryCombo.displayName - : "None", - }; - }; - const indexedDataElementsInfo = _(dataElements) - .map(getDataElementInfo) - .filter(item => getItemStatus(item) !== "inactive" && !item.hidden) - .keyBy("id") - .value(); - - return { - type: "output", - id: coreCompetency.id + "-output", - name: sectionName, - showRowTotals: false, - showColumnTotals: false, - items: indexedDataElementsInfo, - coreCompetency: getOwnedPropertyJSON(coreCompetency), - }; -}; - -const getOutcomeSection = opts => { - const { d2, config, igRelations, indicatorsByGroupName, coreCompetency } = opts; - const sectionName = coreCompetency.name + " Outcomes"; - const indicators = indicatorsByGroupName[coreCompetency.name] || []; - const getIndicatorInfo = (indicator, dataElements) => { - const indicatorGroupSets = _(toArray(indicator.indicatorGroups)) - .map(ig => [igRelations[ig.id], ig]) - .fromPairs() - .value(); - const origin = indicatorGroupSets[config.indicatorGroupSetOriginId]; - const theme = indicatorGroupSets[config.indicatorGroupSetThemeId]; - const group = _(indicator.attributeValues).find( - av => av.attribute.id === config.attributeGroupId - ); - const attributes = _(indicator.attributeValues) - .map(av => [av.attribute.id, av.value]) - .fromPairs() - .value(); - const mandatoryIndicatorId = config.indicatorGroupGlobalIndicatorMandatoryId; - const igSetStatus = indicatorGroupSets[config.indicatorGroupSetStatusId]; - const status = igSetStatus ? igSetStatus.displayName : null; - - return { - type: "indicator", - dataElements: dataElements.map(de => - _.assign(getOwnedPropertyJSON(de), { displayName: de.displayName }) - ), - dataElementsNumeric: dataElements.filter(de => de.code && !de.code.endsWith("-C")), - id: indicator.id, - code: indicator.code, - name: indicator.name, - displayName: indicator.displayName, - description: indicator.description, - sectionName: sectionName, - coreCompetency: coreCompetency, - theme: theme ? theme.displayName : null, - group: group ? group.value : indicator.displayName, - categoryCombo: null, - selected: false, - isCore: origin && origin.id === mandatoryIndicatorId, - origin: origin ? origin.displayName : null, - status: status, - disaggregation: null, - hidden: attributes[config.hideInDataSetAppAttributeId] === "true", - }; - }; - - return getDataElementsByIndicator(d2, indicators).then(dataElementsByIndicator => { - const indexedIndicatorsInfo = _(indicators) - .filter(indicator => !_(dataElementsByIndicator[indicator.id]).isEmpty()) - .map(indicator => getIndicatorInfo(indicator, dataElementsByIndicator[indicator.id])) - .filter(item => getItemStatus(item) !== "inactive" && !item.hidden) - .keyBy("id") - .value(); - - return { - type: "outcome", - id: coreCompetency.id + "-outcome", - name: sectionName, - showRowTotals: false, - showColumnTotals: false, - items: indexedIndicatorsInfo, - coreCompetency: getOwnedPropertyJSON(coreCompetency), - }; - }); -}; - -const getDataElementsByIndicator = (d2, indicators) => { - const filtersForIndicator = indicators.map(indicator => { - const fromNumerator = getDeIdsFromFormula(indicator.numerator).map(id => ["id", id]); - const fromDenominator = getDeIdsFromFormula(indicator.denominator).map(id => ["id", id]); - const fromComments = indicator.code ? [["code", indicator.code + "-C"]] : []; - return { indicator, filters: _.flatten([fromNumerator, fromDenominator, fromComments]) }; - }); - const getMapping = dataElements => { - return _(filtersForIndicator) - .map(({ indicator, filters }) => { - const dataElementsForIndicator = _(filters) - .flatMap(([key, value]) => dataElements.filter(de => de[key] === value)) - .value(); - return [indicator.id, dataElementsForIndicator]; - }) - .fromPairs() - .value(); - }; - const allFilters = _(filtersForIndicator) - .flatMap("filters") - .value(); - - return getDataElements(d2, allFilters).then(getMapping); -}; - -const matchAll = (string, re) => { - let match, - matches = []; - const globalRe = new RegExp(re, "g"); - do { - match = globalRe.exec(string); - if (match) { - matches.push(match[1]); - } - } while (match); - return matches; -}; - -const getDeIdsFromFormula = formula => { - return matchAll(formula, /#{(\w+)/); -}; - -const filterDataElements = (dataElements, requiredDegIds) => { - return dataElements.filter(dataElement => { - const degIds = new Set(toArray(dataElement.dataElementGroups).map(deg => deg.id)); - return requiredDegIds.every(requiredDegId => degIds.has(requiredDegId)); - }); -}; - -/* Return object {dataElementGroupId: dataElementGroupSetId} */ -const getDataElementGroupRelations = d2 => { - return d2.models.dataElementGroupSets - .list({ fields: "id,name,displayName,dataElementGroups[id,name,displayName]" }) - .then(collection => - toArray(collection).map(degSet => - _(toArray(degSet.dataElementGroups)) - .map(deg => [deg.id, degSet.id]) - .fromPairs() - .value() - ) - ) - .then(relationsArray => _.reduce(relationsArray, _.extend, {})); -}; - -/* Return object {indicatorGroupId: indicatorGroupSetId} */ -const getIndicatorGroupRelations = d2 => { - return d2.models.indicatorGroupSets - .list({ fields: "id,displayName,indicatorGroups[id,displayName]" }) - .then(collection => - toArray(collection).map(igSet => - _(toArray(igSet.indicatorGroups)) - .map(ig => [ig.id, igSet.id]) - .fromPairs() - .value() - ) - ) - .then(relationsArray => _.reduce(relationsArray, _.extend, {})); -}; - -/* Return a promise with an array of d2 items filtered by an array of [field, value] pairs */ -const getFilteredItems = (model, filters, listOptions) => { - if (_.isEmpty(filters)) { - return Promise.resolve([]); - } else { - // rootJunction=OR does not work on 2.26 (it returns all unfiltered objects) - // build a request for each filter (we have at most 2), and join the results. - const requests = _(filters) - .groupBy(([key, _value]) => key) - .mapValues(pairs => pairs.map(([_key, value]) => value)) - .map((values, field) => - model - .list({ - paging: false, - filter: `${field}:in:[${values.join(",")}]`, - ...listOptions, - }) - .then(collectionToArray) - ); - return Promise.all(requests).then(_.flatten); - } -}; - -const getDataElements = async (d2, dataElementFilters) => { - const fields = [ - "id", - "displayName", - "code", - "description", - "valueType", - "categoryCombo[id]", - "dataElementGroups[id]", - "attributeValues[value,attribute[id]]", - ]; - - const dataElementGroupsFields = "id,name,displayName"; - - const categoryComboFields = - "id,name,displayName,categoryOptionCombos[id,name,displayName,categoryOptions[id,displayName]]," + - "categories[id,name,displayName,categoryOptions[id,name,displayName]]"; - - const dataElements = await getFilteredItems(d2.models.dataElements, dataElementFilters, { - fields: fields.join(","), - }); - - const dataElementsWithCatCombos = await subQuery( - d2, - dataElements, - "categoryCombo", - categoryComboFields - ); - - const dataElementsWithGroups = await subQuery( - d2, - dataElementsWithCatCombos, - "dataElementGroups", - dataElementGroupsFields - ); - - return dataElementsWithGroups; -}; - -const getOutputDataElementsByCoreCompetencyId = (d2, config, coreCompetencies) => { - const ccFilters = coreCompetencies.map(cc => ["dataElementGroups.id", cc.id]); - return getDataElements(d2, ccFilters).then(dataElements => { - return _(coreCompetencies) - .map(cc => [ - cc.id, - filterDataElements(dataElements, [cc.id, config.dataElementGroupOutputId]), - ]) - .fromPairs() - .value(); - }); -}; - -const getIndicatorsByGroupName = (d2, coreCompetencies) => { - const filters = coreCompetencies.map(cc => ["name", cc.name]); - const fields = [ - "id", - "name", - "displayName", - "indicators[id,displayName,code,numerator,denominator,indicatorGroups[id,displayName],attributeValues[value,attribute]]", - ].join(","); - - return getFilteredItems(d2.models.indicatorGroups, filters, { fields }).then(indicatorGroups => - _(indicatorGroups) - .map(indGroup => [indGroup.displayName, toArray(indGroup.indicators)]) - .fromPairs() - .value() - ); -}; - -function getRandomString() { - return (new Date().getTime().toString() + Math.random()).replace(".", ""); -} diff --git a/src/models/Settings.js b/src/models/Settings.js deleted file mode 100644 index af4bea373..000000000 --- a/src/models/Settings.js +++ /dev/null @@ -1,295 +0,0 @@ -import _ from "../utils/lodash-mixins"; -import { currentUserIsSuperuser, getExistingUserRoleByName } from "../utils/Dhis2Helpers"; -import camelCaseToUnderscores from "d2-utilizr/lib/camelCaseToUnderscores"; - -export default class Settings { - dataStoreNamespace = "dataset-configuration"; - - dataStoreSettingsKey = "settings"; - - adminRoleAttributes = { - name: "DataSet Configuration admin", - description: "Can change settings of the DataSet Configuration app", - authorities: ["M_Dataset_Configuration"], - }; - - fieldDefinitions = [ - { - name: "categoryProjectsId", - type: "d2-object", - model: "category", - defaultFilter: "code:eq:GL_Project", - }, - { - name: "categoryComboId", - type: "d2-object", - model: "categoryCombo", - defaultFilter: "code:eq:GL_CATBOMBO_ProjectCCTarAct", - }, - { - name: "dataElementGroupSetCoreCompetencyId", - type: "d2-object", - model: "dataElementGroupSet", - defaultFilter: "code:eq:GL_CoreComp_DEGROUPSET", - }, - { - name: "expiryDays", - type: "value", - defaultValue: 0, - }, - { - name: "outputEndDate", - type: "yearlyDate", - defaultValue: { month: 4, day: 1 }, - }, - { - name: "outcomeEndDate", - type: "yearlyDate", - defaultValue: { month: 5, day: 1 }, - }, - { - name: "outputLastYearEndDate", - type: "timePeriod", - defaultValue: { units: "month", value: 0 }, - }, - { - name: "outcomeLastYearEndDate", - type: "timePeriod", - defaultValue: { units: "month", value: 0 }, - }, - { - name: "dataElementGroupOutputId", - type: "d2-object", - model: "dataElementGroup", - defaultFilter: "code:eq:GL_Output_DEGROUP", - }, - { - name: "dataElementGroupGlobalIndicatorMandatoryId", - type: "d2-object", - model: "dataElementGroup", - defaultFilter: "code:eq:GL_MAND_DEGROUP", - }, - { - name: "indicatorGroupGlobalIndicatorMandatoryId", - type: "d2-object", - model: "indicatorGroup", - defaultFilter: "name:eq:Global Indicators (Mandatory)", - }, - { - name: "dataElementGroupSetThemeId", - type: "d2-object", - model: "dataElementGroupSet", - defaultFilter: "code:eq:GL_DETHEME_DEGROUPSET", - }, - { - name: "indicatorGroupSetThemeId", - type: "d2-object", - model: "indicatorGroupSet", - defaultFilter: "name:eq:Theme", - }, - { - name: "dataElementGroupSetOriginId", - type: "d2-object", - model: "dataElementGroupSet", - defaultFilter: "code:eq:GL_DEORIGIN_DEGROUPSET", - }, - { - name: "indicatorGroupSetOriginId", - type: "d2-object", - model: "indicatorGroupSet", - defaultFilter: "name:eq:Indicator Origin", - }, - { - name: "dataElementGroupSetStatusId", - type: "d2-object", - model: "dataElementGroupSet", - defaultFilter: "code:eq:GL_DESTATUS_DEGROUPSET", - }, - { - name: "indicatorGroupSetStatusId", - type: "d2-object", - model: "indicatorGroupSet", - defaultFilter: "name:eq:Status", - }, - { - name: "attributeGroupId", - type: "d2-object", - model: "attribute", - defaultFilter: "code:eq:DE_IND_GROUP", - }, - { - name: "organisationUnitLevelForCountriesId", - type: "d2-object", - model: "organisationUnitLevel", - defaultFilter: "name:eq:Country", - }, - { - name: "hideInDataSetAppAttributeId", - type: "d2-object", - model: "attributes", - defaultFilter: "code:eq:Hide in data set app", - }, - { - name: "createdByDataSetConfigurationAttributeId", - type: "d2-object", - model: "attributes", - defaultFilter: "code:eq:GL_CREATED_BY_DATASET_CONFIGURATION", - }, - { - name: "dataPeriodOutputDatesAttributeId", - type: "d2-object", - model: "attributes", - defaultFilter: "code:eq:GL_OUTPUT_DATES", - }, - { - name: "dataPeriodOutcomeDatesAttributeId", - type: "d2-object", - model: "attributes", - defaultFilter: "code:eq:GL_OUTCOME_DATES", - }, - { - name: "dataPeriodIntervalDatesAttributeId", - type: "d2-object", - model: "attributes", - defaultFilter: "code:eq:GL_INTERVAL_DATES", - }, - { - name: "exclusionRuleCoreUserGroupId", - type: "d2-object", - model: "userGroup", - defaultFilter: "name:eq:GL_AllAdmins", - }, - ]; - - constructor(d2) { - this.d2 = d2; - } - - init() { - if (currentUserIsSuperuser(this.d2)) { - return this._createOrUpdateAdminRole().then(this._saveInitialConfig.bind(this)); - } else { - return Promise.resolve(true); - } - } - - get() { - return this._getStoreNamespace().then(ns => ns.get(this.dataStoreSettingsKey)); - } - - save(config) { - return this._save(saved => _.imerge(saved, config)); - } - - getFields() { - const models = _(this.fieldDefinitions) - .filter(fd => fd.type === "d2-object") - .map("model") - .uniq(); - const optionsForModelPairs$ = models.map(model => - this.d2.models[model] - .list({ paging: false, fields: "id,displayName" }) - .then(collection => collection.toArray()) - .then(objects => objects.map(obj => ({ text: obj.displayName, value: obj.id }))) - .then(options => [model, options]) - ); - - return Promise.all(optionsForModelPairs$) - .then(_.fromPairs) - .then(optionsForModel => - this.fieldDefinitions.map(fd => this._getField(fd, optionsForModel)) - ); - } - - _getStoreNamespace() { - return this.d2.dataStore.get(this.dataStoreNamespace); - } - - _save(merger) { - const names = this.fieldDefinitions.map(fd => fd.name); - - return this._getStoreNamespace().then(namespace => { - return namespace - .get(this.dataStoreSettingsKey) - .catch(() => ({})) - .then(saved => { - const newConfig = _.pick(merger(saved), names); - if (_.isEqual(saved, newConfig)) { - return true; - } else { - return namespace.set(this.dataStoreSettingsKey, newConfig); - } - }); - }); - } - - _saveInitialConfig() { - return this._getDefaultValues().then(defaults => - this._save(saved => _.imerge(defaults, saved)) - ); - } - - _getDefaultValue(fieldDefinition) { - switch (fieldDefinition.type) { - case "d2-object": - return this.d2.models[fieldDefinition.model] - .list({ filter: fieldDefinition.defaultFilter, fields: "id" }) - .then(collection => collection.toArray().map(obj => obj.id)[0]); - case "value": - case "yearlyDate": - case "timePeriod": - return Promise.resolve(fieldDefinition.defaultValue); - default: - throw new Error(`Unknown field type: ${fieldDefinition.type}`); - } - } - - _getField(fieldDefinition, optionsForModel) { - const base = _.imerge(fieldDefinition, { - i18n_key: "setting_" + camelCaseToUnderscores(fieldDefinition.name), - }); - - switch (fieldDefinition.type) { - case "d2-object": - return _.imerge(base, { options: optionsForModel[fieldDefinition.model] }); - case "value": - case "yearlyDate": - case "timePeriod": - return base; - default: - throw new Error(`Unknown field type: ${fieldDefinition.type}`); - } - } - - _getDefaultValues() { - const defaultValuesPairs$ = this.fieldDefinitions.map(field => - this._getDefaultValue(field).then(defaultValue => [field.name, defaultValue]) - ); - return Promise.all(defaultValuesPairs$).then(_.fromPairs); - } - - _createOrUpdateAdminRole() { - const attrs = this.adminRoleAttributes; - - return getExistingUserRoleByName(this.d2, attrs.name).then(existingUserRole => { - if (existingUserRole) { - const existingUserRoleHasRequiredAuthorities = _(attrs.authorities) - .difference(existingUserRole.authorities) - .isEmpty(); - if (existingUserRoleHasRequiredAuthorities) { - return true; - } else { - existingUserRole.authorities = _.union( - existingUserRole.authorities, - attrs.authorities - ); - existingUserRole.dirty = true; - return existingUserRole.save(); - } - } else { - const adminRole = this.d2.models.userRoles.create(attrs); - return adminRole.create(); - } - }); - } -} diff --git a/src/models/Sharing.js b/src/models/Sharing.js deleted file mode 100644 index 412cc1ec6..000000000 --- a/src/models/Sharing.js +++ /dev/null @@ -1,38 +0,0 @@ -import _ from "lodash"; - -const sharingFields = ["externalAccess", "publicAccess", "userAccesses", "userGroupAccesses"]; - -function normalizeAccesses(accesses) { - return _(accesses || []) - .map(info => _.pick(info, ["id", "access"])) - .sortBy("id") - .value(); -} - -function getNormalizedSharing(data) { - const sharing = _.pick(data, sharingFields); - return { - ...sharing, - userGroupAccesses: normalizeAccesses(sharing.userGroupAccesses), - userAccesses: normalizeAccesses(sharing.userAccesses), - }; -} - -export function getChanges(models, newSharings) { - const sharingById = _(newSharings) - .keyBy(sharing => sharing.id) - .value(); - const newModels = models.map(model => { - const sharing = sharingById[model.id]; - const sharingChanged = - sharing && !_(getNormalizedSharing(model)).isEqual(getNormalizedSharing(sharing)); - return sharingChanged ? { ...model, ...sharing } : model; - }); - const updatedModels = _(models) - .zip(newModels) - .map(([model, newModel]) => (model !== newModel ? newModel : null)) - .compact() - .value(); - - return { updated: updatedModels, all: newModels }; -} diff --git a/src/models/custom-form-resources/script.js b/src/models/custom-form-resources/script.js deleted file mode 100644 index ee348383d..000000000 --- a/src/models/custom-form-resources/script.js +++ /dev/null @@ -1,393 +0,0 @@ -var _ = window._; -var $ = window.$; -var periodDates = {}; - -/* eslint-disable no-unused-vars */ -function setPeriodDates(periodDates_) { - periodDates = periodDates_; -} - -(function() { - _.mixin({ - cartesianProduct: function(args) { - return _.reduce( - args, - function(a, b) { - return _.flatten( - _.map(a, function(x) { - return _.map(b, function(y) { - return x.concat([y]); - }); - }), - true - ); - }, - [[]] - ); - }, - - groupConsecutiveBy: function(xs, mapper) { - mapper = mapper || _.identity; - var reducer = (acc, x) => { - if (_.isEmpty(acc)) { - return acc.concat([[x]]); - } else { - var last = _.last(acc); - if (_.isEqual(mapper(_.last(last)), mapper(x))) { - last.push(x); - return acc; - } else { - return acc.concat([[x]]); - } - } - }; - return _(xs).reduce(reducer, []); - }, - }); - - var debugElapsed = (label, fn) => { - var start = new Date().getTime(); - fn(); - var elapsed = new Date().getTime() - start; - console.debug(`[elapsed] ${label}: ${elapsed} ms`); - }; - - var loadCss = function(url) { - $("", { - rel: "stylesheet", - type: "text/css", - href: url, - }).appendTo(document.head); - }; - - var loadJs = function(url, cb) { - $.getScript(url, cb); - }; - - var repeat = function(times, n) { - return Array.from(Array(times), () => n); - }; - - var splitWideTables = function() { - var splitedTablesCount = 0; - var createTablesCount = 0; - - $(".sectionTable") - .get() - .map($) - .forEach((table, _count) => { - if (tableFitsInViewport(table)) return; - splitedTablesCount++; - var firstRow = table.find("tbody tr:first-child td .entryfield"); - if (firstRow.size() === 0) return; - var cocIds = firstRow.get().map( - input => - $(input) - .attr("id") - .split("-")[1] - ); - var allCategoryOptions = table - .find("thead tr") - .get() - .map(tr => - _.chain( - $(tr) - .find("th[scope=col]") - .get() - ) - .map(th => [ - repeat( - parseInt($(th).attr("colspan")), - $(th) - .text() - .trim() - ), - ]) - .flatten() - .value() - ); - - var categoryOptions = _.zip.apply(null, allCategoryOptions); - var uniqCategories = allCategoryOptions.map(categoryOptions => - _.uniq(categoryOptions) - ); - if (categoryOptions.length !== cocIds.length) { - alert("Error: parsing of form failed"); - } - var cocs = _.zip(categoryOptions, cocIds).map(pair => ({ - cos: pair[0], - id: pair[1], - })); - - var rows = _.chain(table.find("tbody tr").get()) - .map($) - .map(tr => { - var td = tr.find("td:first-child"); - var tdId = td.attr("id"); - - if (tdId) { - var deId = tdId.split("-")[0]; - var deName = td.text().trim(); - var valuesByCocId = _.chain(tr.find("td .entryfield").get()) - .map($) - .map(input => { - var cocId = input.attr("id").split("-")[1]; - return [cocId, { td: input.parent("td"), coc: cocId }]; - }) - .object() - .value(); - return { - de: { id: deId, name: deName, td: td }, - valuesByCocId: valuesByCocId, - }; - } else { - return null; - } - }) - .compact() - .value(); - - var data = { - group: table - .find("nrcinfoheader") - .text() - .trim(), - categories: uniqCategories, - cocs: cocs, - rows: rows, - showRowTotals: - table - .find("tbody tr:first-child td:last-child input.dataelementtotal") - .size() > 0, - showColumnTotals: - table - .find("tbody tr:last-child td:nth-child(2) input.dataelementtotal") - .size() > 0, - }; - - var newTables = splitTables(data, { categoryIndex: 0, tableIndex: 0 }); - createTablesCount += newTables.length; - table.replaceWith($("
    ").append(newTables)); - }); - - console.log( - "Split tables: " + splitedTablesCount + ", tables created: " + createTablesCount - ); - }; - - var splitTables = function(data, options) { - var categoryIndex = options.categoryIndex; - var nCategories = data.categories.length; - var renderDataElementInfo = options.tableIndex === 0; - var table = buildTable(data, renderDataElementInfo); - - if (categoryIndex >= nCategories - 1 || tableFitsInViewport(table)) { - return [table]; - } else { - return _.chain(data.cocs) - .groupConsecutiveBy(coc => coc.cos.slice(0, categoryIndex + 1)) - .map((splitCocs, splitTableIndex) => - splitTables(_.extend({}, data, { cocs: splitCocs }), { - categoryIndex: categoryIndex + 1, - tableIndex: options.tableIndex + splitTableIndex, - }) - ) - .flatten(1) - .value(); - } - }; - - var buildTable = function(data, renderDataElementInfo) { - var getValues = row => data.cocs.map(coc => row.valuesByCocId[coc.id]); - var nCategories = data.categories.length; - var categoryThsList = _.range(nCategories).map(categoryIndex => { - return _.chain(data.cocs) - .groupConsecutiveBy(coc => coc.cos.slice(0, categoryIndex + 1)) - .map(group => { - var label = group[0].cos[categoryIndex]; - return $("", { - class: "nrcdataheader", - colspan: group.length, - scope: "col", - }).text(label); - }) - .value(); - }); - - return $("", { id: "sectionTable", class: "sectionTable", cellspacing: "0" }).append( - [ - $("").append( - categoryThsList.map((categoryThs, index) => - $("").append( - $("").append( - data.rows.map(row => { - // id = "row-DE-COC1-COC2-.." - var rowTotalId = ["row", row.de.id] - .concat(getValues(row).map(val => val.coc)) - .join("-"); - var rowTotal = $("", { - class: "dataelementtotal", - type: "text", - disabled: "", - id: rowTotalId, - }); - var cssClass = [ - "derow", - "de-" + row.de.id, - renderDataElementInfo ? "primary" : "secondary", - ].join(" "); - return $("", { class: cssClass }).append( - $("").append( - $("
    ", { class: "nrcinfoheader" }).html( - renderDataElementInfo && index === 0 ? data.group : " " - ), - categoryThs, - index === 0 && data.showRowTotals - ? $("", { - class: "nrctotalheader", - rowspan: nCategories, - verticalAlign: "top", - }).text("Total") - : null - ) - ) - ), - $("
    ", { class: "nrcindicatorName" }) - .css("opacity", renderDataElementInfo ? 1 : 0) - .html(row.de.name), - getValues(row).map(val => val.td.clone()), - data.showRowTotals ? $("").append(rowTotal) : null - ); - }), - - data.showColumnTotals - ? $("
    ", { class: "nrcindicatorName" }).text( - renderDataElementInfo ? "Total" : "" - ), - getValues(data.rows[0]).map(val => - $("").append( - $("", { - class: "dataelementtotal", - type: "text", - id: "col-" + val.coc, - disabled: "", - }) - ) - ) - ) - : null - ), - ] - ); - }; - - var tableFitsInViewport = function(table) { - // TODO: get input size and use tableWidth - // var tableWidth = table.width(); - return table.find("thead tr:last th").size() - 1 <= 16; - }; - - var fixActionsBox = function() { - // Button does not fit in the box, add some more width. - $("#completenessDiv").css("width", "+=5px"); - }; - - var renumerateInputFields = function() { - var lastIndex = - _.chain($("[tabindex]").get()) - .map(x => parseInt($(x).attr("tabindex"))) - .max() - .value() || 0; - $("#contentDiv .entryfield").each((i, input) => - $(input).attr("tabindex", lastIndex + i + 1) - ); - }; - - var highlightDataElementRows = function() { - var setClass = function(ev, className, isActive) { - var tr = $(ev.currentTarget); - var de_class = (tr.attr("class") || "") - .split(" ") - .filter(cl => cl.startsWith("de-"))[0]; - if (de_class) { - var deId = de_class.split("-")[1]; - var el = $(".de-" + deId); - el.toggleClass(className, isActive); - if (tr.hasClass("secondary")) { - var opacity = isActive ? 1 : 0; - tr.find(".nrcindicatorName") - .clearQueue() - .delay(500) - .animate({ opacity: opacity }, 100); - } - } - }; - - $("tr.derow") - .mouseover(ev => setClass(ev, "hover", true)) - .mouseout(ev => setClass(ev, "hover", false)) - .focusin(ev => setClass(ev, "focus", true)) - .focusout(ev => setClass(ev, "focus", false)); - }; - - var setTabsVisibility = function(type, isDateOutsidePeriod, info) { - const tabContents = $(".type-" + type); - - if (isDateOutsidePeriod) { - tabContents.find(".in-period").hide(); - tabContents.find(".out-of-period").show(); - tabContents.find(".out-of-period .info").text(info); - } else { - tabContents.find(".in-period").show(); - tabContents.find(".out-of-period").hide(); - } - }; - - var applyPeriodDates = function() { - /* eslint-disable no-undef */ - const selectedPeriod = dhis2.de.getSelectedPeriod(); - if (!selectedPeriod || !selectedPeriod.startDate) return; - const getDate = isoDate => (isoDate ? new Date(isoDate.split("T")[0]) : null); - const getFormatDate = isoDate => - isoDate ? formatDate(new Date(isoDate.split("T")[0]), "dd/MM/yyyy") : null; - const startDate = selectedPeriod.startDate; - const periodYear = startDate.split("-")[0]; - const today = new Date(); - console.debug("applyPeriodDates", { periodDates, selectedPeriod, periodYear, today }); - - ["output", "outcome"].forEach(type => { - const obj = (periodDates[type] || {})[periodYear]; - const isDateOutsidePeriod = - obj !== undefined && ((obj.start && today < getDate(obj.start)) || (obj.end && today > getDate(obj.end))); - let info; - if (isDateOutsidePeriod){ - const ns = { from: getFormatDate(obj.start) || "-", to: getFormatDate(obj.end) || "-" }; - info = `${ns.from} -> ${ns.to}`; - } - - setTabsVisibility(type, isDateOutsidePeriod, info); - }); - }; - - var applyChangesToForm = function() { - if (!$("#tabs").hasClass("dataset-configuration-custom-form")) return; - - applyPeriodDates(); - debugElapsed("Split tables", splitWideTables); - highlightDataElementRows(); - renumerateInputFields(); - fixActionsBox(); - }; - - var init = function() { - if (window.datasetConfigurationCustomFormLoaded) return; - window.datasetConfigurationCustomFormLoaded = true; - $(document).on("dhis2.de.event.formLoaded", applyChangesToForm); - applyChangesToForm(); - $("#selectedPeriodId").change(applyPeriodDates); - loadJs("../dhis-web-commons/bootstrap/js/bootstrap.min.js"); - loadCss("../dhis-web-commons/bootstrap/css/bootstrap.min.css"); - }; - - $(init); -})(); diff --git a/src/models/custom-form-resources/sectionForm.vm b/src/models/custom-form-resources/sectionForm.vm deleted file mode 100644 index cfacd57ed..000000000 --- a/src/models/custom-form-resources/sectionForm.vm +++ /dev/null @@ -1,275 +0,0 @@ -#macro(renderIndicators $indicators) - #if( $indicators.size() > 0 ) - #set( $mark = 0 ) -
    - - #foreach( $indicator in $indicators ) - #if( $mark == 1 ) - #set( $mark = 0 ) - #else - #set( $mark = 1 ) - #end - - - - - - - #end -
    - $indicator.displayName - - -
    -
    - #end -#end - -#macro(renderSectionTable $dataElements $categoryComboId $group $groupCount) - #set( $allOptionCombos = $orderedCategoryOptionCombos.get( $categoryComboId ) ) - - - #set( $categories = $orderedCategories.get( $categoryComboId ) ) - #set( $mark = 0 ) - #set( $optionCombos = $helpers.getVisibleOptionCombos($allOptionCombos, $dataElements) ) - - - #set( $rowTotalRendered = false ) - - #foreach( $headersRow in $helpers.getHeaders($categories, $optionCombos ) ) - - - - #foreach( $header in $headersRow ) - - #end - - #if( $section.showRowTotals && $!rowTotalRendered && $optionCombos.size() > 1) - #set( $rowTotalRendered = true ) - - #end - - #end - - - - #foreach( $modelDataElement in $dataElements ) - #set ($dataElement = $helpers.createViewDataElement($modelDataElement)) - #set( $rowTotalIds = "row-$dataElement.id" ) - #set( $cellCounter = 1 ) - - #if( $mark == 1 ) - #set( $mark = 0 ) - #else - #set( $mark = 1 ) - #end - - - - - #foreach( $optionCombo in $optionCombos ) - #set( $dataEntryId = "${dataElement.id}-${optionCombo.id}-val" ) - #set( $commentId = "${dataElement.id}-${optionCombo.id}-comment" ) - #set( $rowTotalIds = "${rowTotalIds}-$optionCombo.id" ) - #set( $greyedField = false ) - #set( $greyedField = $greyedFields.getOr( "${dataElement.id}.${optionCombo.id}", false ) ) - - #if( $dataElement.valueType == "BOOLEAN" ) - - #elseif( $dataElement.valueType == "TRUE_ONLY" ) - - #elseif( "LONG_TEXT" == $dataElement.valueType ) - - #elseif( "FILE_RESOURCE" == $dataElement.valueType ) - - #elseif( $dataElement.valueType == "TIME" ) - - #else - #if( $dataElement.optionSet ) - - #else - - #end - #end - - #set( $tabIndex = $tabIndex + 1 ) - #end - - #set( $needRowColumnTotal = false ) - #if($section.showRowTotals && $optionCombos.size() > 1 ) - #set( $needRowColumnTotal = true ) - - #end - - #end - - #if($section.showColumnTotals && $dataElements.size() > 1) - #if( $mark == 1 ) - #set( $mark = 0 ) - #else - #set( $mark = 1 ) - #end - - - - - #set( $columnTotalIds = "col" ) - - #foreach( $optionCombo in $optionCombos ) - #set( $columnTotalIds = "${columnTotalIds}-$optionCombo.id" ) - - #end - - #if( $needRowColumnTotal ) - - #end - - #end - -
    #if ($group != "null" && $velocityCount == 1 && $groupCount == 1) $group #end - - #if( $header.displayName == 'default' ) - ${i18n.getString( "value" )} - #else - ${encoder.htmlEncode( $header.displayName )} - #end - - - ${i18n.getString( "total" )} -
    - - #if( $decoration && $!dataElement.hasUrl() )#end${encoder.htmlEncode( $dataElement.displayFormName )}#if( $decoration && $dataElement.hasUrl() )#end - - - - - - - -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -
    - - - -
    - ${i18n.getString( "total" )} - - - - -
    -#end - -#macro( renderSection $section $title ) -
    -

    $!encoder.htmlEncode( $title )

    - #if ( $description ) -
    $!encoder.htmlEncode( $description )
    - #end - #set( $themes = $groupedItems.get( $section.id ) ) - - #foreach( $theme in $themes.keys() ) - #set( $identifier = "theme-" + $section.id + "-" + $velocityCount ) - -
      -
    • - - -
      - #set( $groups = $themes.get( $theme ) ) - #foreach( $group in $groups.keys() ) - #set( $items = $groups.get( $group ) ) - - #if ($section.type == "output") - #set( $dataElementsByCategoryCombo = $helpers.getDataElementsByCategoryCombo($items) ) - - #foreach( $categoryComboId in $dataElementsByCategoryCombo.keys() ) - #set( $dataElements = $dataElementsByCategoryCombo.get( $categoryComboId ) ) - #renderSectionTable($dataElements $categoryComboId $group $velocityCount) - #end - #elseif ($section.type == "outcome") - #set( $dataElementsByCategoryCombo = $helpers.getDataElementsByCategoryComboForIndicators($items) ) - - #foreach( $categoryComboId in $dataElementsByCategoryCombo.keys() ) - #set( $dataElements = $dataElementsByCategoryCombo.get( $categoryComboId ) ) - #renderSectionTable($dataElements $categoryComboId $group $velocityCount) - #end - - #renderIndicators($items) - #end - #end -
      -
    • -
    - #end - -
    -
    - -#end - -#set( $tabIndex = 1 ) -#set( $hasAccess = $auth.hasAccess( "dhis-web-dataentry", "saveValue" ) ) -#set( $decoration = $dataSet.dataElementDecoration ) - -#if( $dataSet.renderAsTabs ) -
    - - - #foreach( $section in $sections ) -
    -
    - #renderSection( $section ) -
    - - -
    - #end -
    -#else - #foreach( $section in $sections ) - #renderSection( $section $section.name ) - #end -#end diff --git a/src/models/custom-form-resources/style.css b/src/models/custom-form-resources/style.css deleted file mode 100644 index 6de5dd03f..000000000 --- a/src/models/custom-form-resources/style.css +++ /dev/null @@ -1,217 +0,0 @@ -.formSection { - border: 1px solid #cacaca; - border-radius: 3px; - margin: 0; - padding: 1px 4px 1px 4px; -} - -.formSection h3 { - color: #000; - font-size: 16px; - text-align: left; - font-weight: bold; - padding: 0; -} - -.formSection td { - text-align: center; - min-width: 75px; - padding: 1; -} - -.formSection th { - font-weight: normal; - font-size: 14px; - text-align: center; - white-space: normal !important; - max-width: 75px; - background-color: #eaf7fb; - max-width: 200px; -} - -.indicatorArea { - margin-top: 0px; - margin-bottom: 5px; - border-top: none; -} - -.indicatorArea td { - width: 100% !important; - text-align: left !important; -} - -.entryfield, -.indicator { - max-width: 75px; -} - -.entryarea { - max-width: 300px; -} - -#contentDiv .nrcsubsection { - background-color: #fff; - height: 5px; -} - -#contentDiv input.entryfield { - width: 70px; - height: 18px; - padding: 2px; -} - -#contentDiv input.dataelementtotal { - width: 70px; - height: 16px; - padding: 2px; -} - -#contentDiv input.indicator { - width: 70px; - height: 18px; - padding: 2px; -} - -#contentDiv tr.derow { - background-color: #fff; -} - -#contentDiv tr.focus { - background-color: #e5f5e5; -} - -#contentDiv tr.hover, -#contentDiv tr:hover { - background-color: #e5e5e5; -} - -#contentDiv th { - border-style: hidden !important; -} - -#contentDiv td { - padding: 2px !important; - height: 16px; - text-align: center; - border-style: none !important; -} - -#contentDiv td.nrcindicatorName { - text-align: left; - white-space: normal; - max-width: 33%; -} - -#contentDiv tr.secondary td.nrcindicatorName { - font-style: italic; -} - -#contentDiv td.lastinrow { - background-color: #eee; - text-align: center; -} - -#contentDiv th.nrcinfoheader { - text-align: left; - border-bottom-style: hidden; - border-left-style: hidden; - border-top-style: hidden; - width: 100%; - white-space: nowrap; - background-color: #fff; - padding: 2px !important; -} - -#contentDiv th.nrcdataheader { - text-align: center; - border-bottom: 1px solid #ddd !important; - background-color: #eaf7fb; - white-space: nowrap; - padding-top: 2px !important; - padding-bottom: 2px !important; - padding-left: 10px; - padding-right: 10px; - word-wrap: break-word; -} - -#contentDiv th.nrctotalheader { - text-align: center; - border-bottom: 1px solid #ddd !important; - background-color: #eee; - white-space: nowrap; - padding-top: 2px !important; - padding-bottom: 2px !important; - padding-left: 10px; - padding-right: 10px; -} - -#contentDiv .panel { - margin-bottom: 7px; -} - -#contentDiv .panel-body { - padding-top: 0; - padding-left: 8px; - padding-right: 8px; - padding-bottom: 4px; -} - -#contentDiv .panel-default > .panel-heading { - background-color: #3c3c3c !important; - border-color: #3c3c3c; - padding: 7px; - margin-bottom: 5px; - cursor: pointer; -} - -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #053e21; -} - -.ui-widget-header { - background: none; - background-color: #2f3867; -} - -#contentDiv a.nrc-panel-title { - color: white; - cursor: pointer; -} - -#contentDiv .accordion-toggle:after { - font-family: FontAwesome; - content: "\f077"; - float: right; - color: white !important; -} - -#contentDiv .panel-heading.collapsed .accordion-toggle:after { - content: "\f078"; -} - -#contentDiv .sectionTable { - margin-bottom: 0px !important; - margin-top: 5px; -} - -.page p, -.page td, -.page th, -.page input, -.page select, -.page textarea { - font-size: 9pt; -} - -.page th { - text-align: left; - color: #39547d; - padding: 3px 0 3px 1px; - font-size: 13px; - font-weight: bold; - border-collapse: collapse; - border-bottom: 1px solid #cad5e5; - min-height: 28px; -} diff --git a/src/models/data-periods.js b/src/models/data-periods.js deleted file mode 100644 index 60a0f4091..000000000 --- a/src/models/data-periods.js +++ /dev/null @@ -1,338 +0,0 @@ -import moment from "moment"; -import { generateUid } from "d2/lib/uid"; - -import _ from "../utils/lodash-mixins"; -import { - setAttributes, - postMetadata, - getCategoryCombos, - mapPromise, - getOwnedPropertyJSON, -} from "../utils/Dhis2Helpers"; -import Settings from "./Settings"; -import DataSetStore from "./DataSetStore"; - -const dataInputPeriodDatesFormat = "YYYYMMDD"; - -export async function getDataSets(d2, ids) { - return await d2.models.dataSets - .list({ - fields: - "id,displayName,attributeValues,dataInputPeriods[id,openingDate,closingDate,period]", - filter: `id:in:[${ids.join(",")}]`, - paging: false, - }) - .then(collection => collection.toArray()); -} - -export function getAttributeValues(store, dataset) { - const { config } = store; - const attributeKeys = [ - "dataPeriodOutputDatesAttributeId", - "dataPeriodOutcomeDatesAttributeId", - "dataPeriodIntervalDatesAttributeId", - ]; - const missingAttributeKeys = attributeKeys.filter(key => !config[key]); - const oldAttributeValues = (dataset && dataset.attributeValues) || []; - - if (!_(missingAttributeKeys).isEmpty()) { - console.error(`Missing settings: ${missingAttributeKeys.join(", ")}`); - return oldAttributeValues; - } - - const periodDates = store.getPeriodDates(); - const years = store.getPeriodYears(); - const dataInterval = [ - formatDate(store.associations.dataInputStartDate), - formatDate(store.associations.dataInputEndDate), - ].join("-"); - - const valuesByKey = { - dataPeriodOutputDatesAttributeId: formatPeriodDates(periodDates.output, years), - dataPeriodOutcomeDatesAttributeId: formatPeriodDates(periodDates.outcome, years), - dataPeriodIntervalDatesAttributeId: dataInterval, - }; - const newValues = _.mapKeys(valuesByKey, (_value, key) => config[key]); - - return setAttributes(oldAttributeValues, newValues); -} - -let categoryCombos = null; - -async function getCachedCategoryCombos(d2) { - categoryCombos = - categoryCombos || (await getCategoryCombos(d2, { cocFields: "id,categoryOptions[id]" })); - return categoryCombos; -} - -export async function saveDataSets(d2, store, dataSets) { - return saveDataSetsWithMapper(d2, store, dataSets, dataSet => ({ - ...getOwnedPropertyJSON(dataSet), - attributeValues: getAttributeValues(store, dataSet), - dataInputPeriods: store.getDataInputPeriods(store.associations), - openFuturePeriods: store.dataset.openFuturePeriods, - })); -} - -export async function saveDataSetsEndDate(d2, store, dataSets, endYear) { - const { config, associations } = store; - const newPartialPeriodDates = associations.periodDates; - - return saveDataSetsWithMapper(d2, store, dataSets, dataSet => { - const { periodDates } = DataSetStore.getPeriodAssociations(d2, config, dataSet); - - // Modify only periodDates for end date and endYear. - const newPeriodDates = { - output: _.mapValues(periodDates.output, (interval, year) => - parseInt(year) === endYear - ? { - start: interval.start, - end: newPartialPeriodDates.output[year].end || interval.end, - } - : interval - ), - outcome: _.mapValues(periodDates.outcome, (interval, year) => - parseInt(year) === endYear - ? { - start: interval.start, - end: newPartialPeriodDates.outcome[year].end || interval.end, - } - : interval - ), - }; - - const newAssociations = { - ...associations, - ...getDataInputDates(dataSet, config), - periodDatesApplyToAll: { output: false, outcome: false }, - periodDates: newPeriodDates, - }; - store.associations = newAssociations; - - const newDataset = { - ...getOwnedPropertyJSON(dataSet), - attributeValues: getAttributeValues(store, dataSet), - dataInputPeriods: store.getDataInputPeriods(newAssociations), - }; - - return newDataset; - }); -} - -export async function saveDataSetsWithMapper(d2, store, dataSets, mapper) { - const dataSetsWithForms = await d2.models.dataSets - .list({ - fields: ":owner,dataEntryForm[:owner]", - filter: `id:in:[${dataSets.map(ds => ds.id).join(",")}]`, - paging: false, - }) - .then(collection => collection.toArray()); - - const periodDates = store.getPeriodDates(); - categoryCombos = null; - - const pairs = await mapPromise(dataSetsWithForms, async dataSet => { - const htmlCode = (dataSet.dataEntryForm && dataSet.dataEntryForm.htmlCode) || ""; - const regexp = /setPeriodDates\({.*}\)/; - const newJsCode = `setPeriodDates(${JSON.stringify(periodDates)})`; - - const formPayload = htmlCode.match(regexp) - ? { htmlCode: htmlCode.replace(regexp, newJsCode) } - : await store.buildCustomForm(await getCachedCategoryCombos(d2)); - - const id = (dataSet.dataEntryForm ? dataSet.dataEntryForm.id : null) || generateUid(); - const dataEntryFormUpdated = { - ...dataSet.dataEntryForm, - ...formPayload, - id: id, - name: [dataSet.id, id].join("-"), - }; - dataSet.dataEntryForm = { id: dataEntryFormUpdated.id }; - - return [dataSet, dataEntryFormUpdated]; - }); - const [dataSetsClean, dataEntryFormsUpdated] = _.unzip(pairs); - - const dataSetsUpdated = dataSetsClean.map(dataSet => mapper(dataSet)); - - const payload = { - create_and_update: { - dataSets: dataSetsUpdated, - dataEntryForms: _.compact(dataEntryFormsUpdated), - }, - }; - - return postMetadata(d2, payload); -} - -function areDatesUniq(dates) { - const uniqValues = _.uniq(dates.map(date => (date ? date.toISOString() : null))); - return uniqValues.length === 1 && uniqValues[0]; -} - -export async function getDataSetsForPeriodsEndDate(d2, dataSetIds, endYear) { - const dataSets = await getDataSets(d2, dataSetIds); - const config = await new Settings(d2).get(); - const store = await DataSetStore.edit(d2, config, dataSetIds[0]); - const t = d2.i18n.getTranslation.bind(d2.i18n); - - const [startDates, endDates] = _(dataSets) - .map(dataset => getDataInputDates(dataset, config)) - .map(o => [o.dataInputStartDate, o.dataInputEndDate]) - .unzip() - .value(); - - const allDataSetsContainYear = - _.every(startDates, startDate => startDate && startDate.getFullYear() <= endYear) && - _.every(endDates, endDate => endDate && endDate.getFullYear() >= endYear); - - if (!allDataSetsContainYear) - return { error: t("not_all_datasets_contain_year", { year: endYear }) }; - - const dataSetsData = dataSets.map(dataSet => - DataSetStore.getPeriodAssociations(d2, config, dataSet) - ); - - const outputEnds = dataSetsData.map(data => data.periodDates.output[endYear].end); - const outputEnd = areDatesUniq(outputEnds) ? outputEnds[0] : null; - - const outcomeEnds = dataSetsData.map(data => data.periodDates.outcome[endYear].end); - const outcomeEnd = areDatesUniq(outcomeEnds) ? outcomeEnds[0] : null; - - // If all datasets have the same date, pre-fill it; otherwise, show empty field. - _.assign(store.associations, { - periodDates: { - output: { [endYear]: { end: outputEnd } }, - outcome: { [endYear]: { end: outcomeEnd } }, - }, - }); - - return { store, dataSets }; -} - -export async function getDataSetsForPeriods(d2, dataSetIds) { - const dataSets = await getDataSets(d2, dataSetIds); - const config = await new Settings(d2).get(); - const store = await DataSetStore.edit(d2, config, dataSetIds[0]); - const t = d2.i18n.getTranslation.bind(d2.i18n); - - const [startDates, endDates] = _(dataSets) - .map(dataset => getDataInputDates(dataset, config)) - .map(o => [o.dataInputStartDate, o.dataInputEndDate]) - .unzip() - .value(); - - const areDatesEqual = dates => - _(dates) - .map(date => (date ? date.toISOString() : null)) - .uniq() - .thru(dates => dates.length === 1) - .value(); - - const allDatesEqual = areDatesEqual(startDates) && areDatesEqual(endDates); - - if (!allDatesEqual) { - _.assign(store.associations, { - dataInputStartDate: undefined, - dataInputEndDate: undefined, - periodDatesApplyToAll: { - output: false, - outcome: false, - }, - periodDates: { - output: {}, - outcome: {}, - }, - }); - } - - const warning = allDatesEqual ? null : t("no_match_start_end_dates"); - - return { store, dataSets, warning }; -} - -export function getDataInputDates(dataset, config) { - const getDate = value => (value ? new Date(value) : undefined); - - const adjustDateString = value => - value - ? [value.slice(0, 4), value.slice(4, 6), value.slice(6, 8)].join("-") + "T00:00:00.000" - : undefined; - - const startFromDataInputPeriods = _(dataset.dataInputPeriods) - .map("openingDate") - .compact() - .min(); - const endFromDataInputPeriods = _(dataset.dataInputPeriods) - .map("closingDate") - .compact() - .max(); - - const attributeValueInterval = dataset.attributeValues.find( - av => av.attribute.id === config.dataPeriodIntervalDatesAttributeId - ); - - const interval = attributeValueInterval ? attributeValueInterval.value : ""; - const [startFromAttribute, endFromAttribute] = interval.split("-").map(adjustDateString); - - return { - dataInputStartDate: getDate(startFromAttribute || startFromDataInputPeriods), - dataInputEndDate: getDate(endFromAttribute || endFromDataInputPeriods), - }; -} - -export function formatDate(value) { - const date = moment(value); - return value && date.isValid() ? date.format(dataInputPeriodDatesFormat) : ""; -} - -function formatPeriodDates(dates, years) { - return _(dates) - .toPairs() - .sortBy(([year, _period]) => year) - .filter(([year, _period]) => years.includes(parseInt(year))) - .map(([year, { start, end }]) => `${year}=${formatDate(start)}-${formatDate(end)}`) - .join(","); -} - -export function getPeriodsValidationsErrors(store, options) { - const { associations } = store; - const t = store.d2.i18n.getTranslation.bind(store.d2.i18n); - - const { dataInputStartDate, dataInputEndDate } = associations; - const areBothDataInputDatesSet = Boolean(dataInputStartDate && dataInputEndDate); - - return _.compact([ - areBothDataInputDatesSet ? null : t("cannot_set_only_start_or_end_dates"), - getOutputOutcomeValidation(store, options), - ]); -} - -function getOutputOutcomeValidation(store, options) { - const { associations } = store; - const t = store.d2.i18n.getTranslation.bind(store.d2.i18n); - - if (options.validateOutputOutcome) { - const years = store.getPeriodYears(); - - const allDatesFilled = _(years).every(year => { - const outputPeriod = associations.periodDates.output[year]; - const outcomePeriod = associations.periodDates.outcome[year]; - - return ( - outputPeriod && - outcomePeriod && - _.every([ - outputPeriod.start, - outputPeriod.end, - outcomePeriod.start, - outcomePeriod.end, - ]) - ); - }); - - return allDatesFilled ? null : t("output_outcome_dates_compulsory"); - } else { - return null; - } -} diff --git a/src/models/dataset.js b/src/models/dataset.js deleted file mode 100644 index 500bbde32..000000000 --- a/src/models/dataset.js +++ /dev/null @@ -1,46 +0,0 @@ -import _ from "lodash"; - -export function getCoreCompetencies(d2, config, dataset) { - const extractCoreCompetenciesCodesFromSection = section => { - const { code } = section; - if (!code) { - console.error(`Section has not code: ${section.id}`); - return; - } - const [_prefix, _type, ...ccCodeParts] = section.code.split("_"); - return ccCodeParts.join("_"); - }; - - const coreCompetencyCodes = _(dataset.sections.toArray()) - .map(extractCoreCompetenciesCodesFromSection) - .compact() - .uniq() - .value(); - - return d2.models.dataElementGroups - .filter() - .on("groupSets.id") - .equals(config.dataElementGroupSetCoreCompetencyId) - .list({ - paging: false, - filter: `code:in:[${coreCompetencyCodes.join(",")}]`, - fields: "id,code,name,displayName", - }) - .then(collection => collection.toArray()); -} - -export function getProject(d2, config, dataset) { - if (dataset.name) { - return d2.models.categoryOptions - .filter() - .on("categories.id") - .equals(config.categoryProjectsId) - .list({ fields: "id,code,displayName", paging: false }) - .then(collection => collection.toArray()) - .then(projects => - _(projects).find(project => _.includes(dataset.name, project.displayName)) - ); - } else { - return Promise.resolve(null); - } -} diff --git a/src/router.js b/src/router.js deleted file mode 100644 index 2545bd7c2..000000000 --- a/src/router.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from "react"; -import { Router, Route, hashHistory, IndexRedirect } from "react-router"; -import App from "./App/App.component"; -import DataSets from "./DataSets/DataSets.component"; -import DataSetFormSteps from "./DataSets/FormSteps.component"; - -const wizard = action => props => ; - -const routes = ( - - - - - - - - - - -); - -export function goToRoute(url) { - hashHistory.push(url); -} - -export function goBack() { - hashHistory.goBack(); -} - -export default routes; diff --git a/src/scripts/README.md b/src/scripts/README.md deleted file mode 100644 index 3c5fb27f1..000000000 --- a/src/scripts/README.md +++ /dev/null @@ -1,5 +0,0 @@ -To run the scripts, copy and execute in a node/TS/d2-api project (i.e d2-tools): - -``` -$ npx ts-node src/scripts/name.ts ARGS -``` diff --git a/src/scripts/example.ts b/src/scripts/example.ts new file mode 100644 index 000000000..2d092db58 --- /dev/null +++ b/src/scripts/example.ts @@ -0,0 +1,27 @@ +import { command, run, string, option } from "cmd-ts"; +import path from "path"; +import { D2Api } from "$/types/d2-api"; + +function main() { + const cmd = command({ + name: path.basename(__filename), + description: "Show DHIS2 instance info", + args: { + url: option({ + type: string, + long: "dhis2-url", + short: "u", + description: "DHIS2 base URL. Example: http://USERNAME:PASSWORD@localhost:8080", + }), + }, + handler: async args => { + const api = new D2Api({ baseUrl: args.url }); + const info = await api.system.info.getData(); + console.debug(info); + }, + }); + + run(cmd, process.argv.slice(2)); +} + +main(); diff --git a/src/scripts/migrate-datasets-input-periods.ts b/src/scripts/migrate-datasets-input-periods.ts deleted file mode 100644 index 8a7b7387f..000000000 --- a/src/scripts/migrate-datasets-input-periods.ts +++ /dev/null @@ -1,306 +0,0 @@ -import moment from "moment"; -import _ from "lodash"; -import fs from "fs"; -import { ArgumentParser } from "argparse"; -import { D2Api, MetadataPick } from "../types/d2-api"; - -/* 2021/12/20: This scripts migrates data sets with output/outcome dates, but no attribute - for period dates. Steps: - - - For each data set: - - Get data input periods opening/closing dates. - - Get output/outcome dates (from attributes). - - Set new opening/closing dates from min/max of these periods. - - Set new period dates attributes from min/max of opening/closing dates. - - NOTE: Run this script within a dhis2 typescript project (copy to src/scripts): - - $ npx ts-node src/scripts/nrc-migrate-datasets-input-periods.ts \ - -u 'EyeSeeTea:PASSWORD' --url="https://gorsdev.nrc.no" --name-pattern="" -*/ - -type DateObj = { year: number; month: number; day: number }; - -const metadata = { - attributes: { - createdByApp: "wA748YSs3Qk", - dataInputDates: "YyqT5dfIwL7", - outcomeDates: "mrpeo3N3qcy", - outputDates: "fhTYUbHAWiX", - }, -}; - -interface Args { - auth: string; - dhis2Url: string; - namePattern: string; -} - -function getArgs() { - const parser = new ArgumentParser({ - description: "Migrate NRC data sets input periods", - }); - - parser.add_argument("-u", "--user-auth", { - required: true, - metavar: "USERNAME:PASS", - dest: "auth", - }); - - parser.add_argument("--url", { - required: true, - help: "DHIS2 Base URL", - metavar: "URL", - dest: "dhis2Url", - }); - - parser.add_argument("--name-pattern", { - required: true, - help: "Datasets name pattern", - metavar: "STRING", - dest: "namePattern", - }); - - return parser.parse_args() as Args; -} - -async function getDataSets(api: D2Api, options: { namePattern: string }): Promise { - const { dataSets } = await api.metadata - .get({ - dataSets: { - fields: { $owner: true, attributeValues: { attribute: { id: true }, value: true } }, - filter: { name: { like: options.namePattern } }, - }, - }) - .getData(); - - return dataSets; -} - -function getApi(args: Args) { - const [username = "", password = ""] = args.auth.split(":", 2); - const api = new D2Api({ baseUrl: args.dhis2Url, auth: { username, password } }); - return api; -} - -function writeJson(path: string, obj: unknown): void { - const json = JSON.stringify(obj, null, 4); - fs.writeFileSync(path, json); - console.debug(`Written: ${path}`); -} - -function getAttributeValue( - obj: Obj, - attributeId: string -): string | undefined { - const attributeValue = obj.attributeValues.find(av => av.attribute.id === attributeId); - return attributeValue ? attributeValue.value : undefined; -} - -const request = { - dataSets: { - fields: { $owner: true }, - }, -}; - -interface D2AttributeValue { - attribute: { id: string }; - value: string; -} - -type D2DataSetBase = MetadataPick["dataSets"][number]; - -interface D2DataSet extends Omit { - attributeValues: D2AttributeValue[]; -} - -function addOneMonth(date: DateObj): DateObj { - return date.month === 12 - ? { ...date, year: date.year + 1, month: 1 } - : { ...date, month: date.month + 1 }; -} - -function setAttribute( - attributeValues: D2AttributeValue[], - attributeId: string, - value: string -): D2AttributeValue[] { - const attributeFound = _(attributeValues).some(av => av.attribute.id === attributeId); - - return attributeFound - ? attributeValues.map(av => (av.attribute.id === attributeId ? { ...av, value } : av)) - : attributeValues.concat([{ attribute: { id: attributeId }, value }]); -} - -function getDates(datesListStr: string | undefined): Array<{ start: DateObj; end: DateObj }> { - const parts = (datesListStr || "").split(","); - - return _(parts) - .map(part => { - const interval = part.split("=")[1]; - const [startS, endS] = (interval || "").split("-"); - const start = getDateObjFromString(startS); - const end = getDateObjFromString(endS); - return start && end ? { start, end } : undefined; - }) - .compact() - .value(); -} - -function getDateObjFromString( - dateStr: string | undefined, - defaults: { month: number; day: number } = { month: 1, day: 1 } -): DateObj | undefined { - if (!dateStr) return; - - const [s1, s2, s3] = [dateStr.slice(0, 4), dateStr.slice(4, 6), dateStr.slice(6, 8)]; - const year = parseInt(s1); - const month = s2 ? parseInt(s2) : defaults.month; - const day = s3 ? parseInt(s3) : defaults.day; - return year && month && day ? { year, month, day } : undefined; -} - -function dateToIso(date: DateObj): string { - const dateParts = [padDigits(date.year, 4), padDigits(date.month, 2), padDigits(date.day, 2)]; - return dateParts.join("-") + "T00:00:00.000"; -} - -function dateToString(date: DateObj): string { - const dateParts = [padDigits(date.year, 4), padDigits(date.month, 2), padDigits(date.day, 2)]; - return dateParts.join(""); -} - -function padDigits(number: number, digits: number): string { - return Array(Math.max(digits - String(number).length + 1, 0)).join("0") + number; -} - -function processDataSets(dataSets: D2DataSet[]): [D2DataSet[], D2DataSet[]] { - const data = _(dataSets) - .filter(dataSet => getAttributeValue(dataSet, metadata.attributes.createdByApp) === "true") - .map(dataSet => { - const dataSetUpdated = updateDataSet(dataSet); - return _.isEqual(dataSetUpdated, dataSet) - ? undefined - : { original: dataSet, updated: dataSetUpdated }; - }) - .compact() - .value(); - - const dataSetsOriginal = data.map(d => d.original); - const dataSetsUpdated = data.map(d => d.updated); - - return [dataSetsOriginal, dataSetsUpdated]; -} - -function getDateFromISO(s: string | undefined): DateObj | undefined { - if (!s) return; - const m0 = moment.utc(s); - // Tipically hours > 12 indicate a time-offset due to time-zone, then increment 1 day. - const m = - m0.hour() > 12 - ? m0 - .clone() - .add(1, "day") - .startOf("day") - : m0.clone().startOf("day"); - return { year: m.year(), month: m.month() + 1, day: m.date() }; -} - -function updateDataSet(dataSet: D2DataSet): D2DataSet { - const { attributes } = metadata; - - const periodDates = getAttributeValue(dataSet, attributes.dataInputDates); - const outputDatesS = getAttributeValue(dataSet, attributes.outputDates); - const outcomeDatesS = getAttributeValue(dataSet, attributes.outcomeDates); - const outputDates = getDates(outputDatesS); - const outcomeDates = getDates(outcomeDatesS); - - const minFromDipsOpening = getDateFromISO( - _(dataSet.dataInputPeriods) - .map(dip => dip.openingDate) - .compact() - .min() - ); - - const maxFromDipsClosing = getDateFromISO( - _(dataSet.dataInputPeriods) - .map(dip => dip.closingDate) - .compact() - .max() - ); - - const periods = dataSet.dataInputPeriods.map(dip => dip.period.id as string); - const _minFromDips = getDateObjFromString(_.min(periods)); - const maxFromDips0 = getDateObjFromString(_.max(periods)); - const _maxFromDips = maxFromDips0 ? addOneMonth(maxFromDips0) : maxFromDips0; - - const minStartDate = _(outputDates.map(date => date.start)) - .concat(outcomeDates.map(date => date.start)) - //.concat(minFromDips ? [minFromDips] : []) - .minBy(dateToIso); - - const maxEndDate = _(outputDates.map(date => date.end)) - .concat(outcomeDates.map(date => date.end)) - //.concat(maxFromDips ? [maxFromDips] : []) - .maxBy(dateToIso); - - const dataSetS = `${dataSet.name} [${dataSet.id}]`; - - if (periodDates) { - console.debug(`${dataSetS}: already has period dates`); - return dataSet; - } else if (!outputDatesS && !outcomeDatesS) { - console.debug(`${dataSetS}: no output/outcome info`); - return dataSet; - } else if (!minStartDate) { - console.debug(`${dataSetS}: no start dates`); - return dataSet; - } else if (!maxEndDate) { - console.debug(`${dataSetS}: no end dates`); - return dataSet; - } else if (!minFromDipsOpening || !maxFromDipsClosing) { - console.debug(`${dataSetS}: no dataInputPeriods data`); - return dataSet; - } else { - const dataInputPeriodsUpdated = dataSet.dataInputPeriods.map(dip => ({ - ...dip, - openingDate: dateToIso(minStartDate), - closingDate: dateToIso(maxEndDate), - })); - - const dipsUpdated = [ - dateToString(minFromDipsOpening), - dateToString(maxFromDipsClosing), - ].join("-"); - - return { - ...dataSet, - attributeValues: setAttribute( - dataSet.attributeValues, - attributes.dataInputDates, - dipsUpdated - ), - dataInputPeriods: dataInputPeriodsUpdated, - }; - } -} - -/* Main */ - -async function runMigration() { - const args = getArgs(); - const api = getApi(args); - const dataSets = await getDataSets(api, args); - console.debug(`Data sets with pattern '${args.namePattern}': ${dataSets.length}`); - - const [dataSetsOriginal, dataSetsUpdated] = processDataSets(dataSets); - - console.debug(`Data sets with changes: ${dataSetsUpdated.length}`); - writeJson("datasets-original.json", { dataSets: dataSetsOriginal }); - - _.chunk(dataSetsUpdated, 500).forEach((dataSetsGroup, idx) => { - writeJson(`datasets-updated-${idx + 1}.json`, { dataSets: dataSetsGroup }); - }); -} - -runMigration(); diff --git a/src/scripts/tsconfig.json b/src/scripts/tsconfig.json new file mode 100644 index 000000000..be7f725e1 --- /dev/null +++ b/src/scripts/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es2015", + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "noUnusedParameters": false, + "noUnusedLocals": false, + "experimentalDecorators": true, + "lib": ["dom", "dom.iterable", "esnext"] + }, + "include": ["src"] +} diff --git a/src/tests/setup.js b/src/tests/setup.js new file mode 100644 index 000000000..d5919ffd1 --- /dev/null +++ b/src/tests/setup.js @@ -0,0 +1,9 @@ +import { expect, afterEach } from "vitest"; +import { cleanup } from "@testing-library/react"; +import matchers from "@testing-library/jest-dom/matchers"; + +expect.extend(matchers); + +afterEach(() => { + cleanup(); +}); diff --git a/src/types/d2-api.ts b/src/types/d2-api.ts new file mode 100644 index 000000000..b8db7a3ac --- /dev/null +++ b/src/types/d2-api.ts @@ -0,0 +1,7 @@ +import { D2Api } from "@eyeseetea/d2-api/2.36"; +import { getMockApiFromClass } from "@eyeseetea/d2-api"; + +export { CancelableResponse } from "@eyeseetea/d2-api"; +export { D2Api } from "@eyeseetea/d2-api/2.36"; +export type { MetadataPick } from "@eyeseetea/d2-api/2.36"; +export const getMockApi = getMockApiFromClass(D2Api); diff --git a/src/types/d2-ui.d.ts b/src/types/d2-ui.d.ts new file mode 100644 index 000000000..c80113fbc --- /dev/null +++ b/src/types/d2-ui.d.ts @@ -0,0 +1,3 @@ +declare module "@dhis2/ui" { + export function HeaderBar(props: { className?: string; appName?: string }): React.ReactElement; +} diff --git a/src/types/d2.d.ts b/src/types/d2.d.ts new file mode 100644 index 000000000..8de6a6bdf --- /dev/null +++ b/src/types/d2.d.ts @@ -0,0 +1,6 @@ +declare module "d2" { + import { D2 } from "./d2"; + + export function init(config: { baseUrl: string; headers?: any; schemas?: string[] }): D2; + export function generateUid(): string; +} diff --git a/src/types/declarations.d.ts b/src/types/declarations.d.ts new file mode 100644 index 000000000..0357e4f19 --- /dev/null +++ b/src/types/declarations.d.ts @@ -0,0 +1,4 @@ +declare module "*.png"; +declare module "*.svg"; +declare module "*.jpeg"; +declare module "*.jpg"; diff --git a/src/types/i18n.d.ts b/src/types/i18n.d.ts new file mode 100644 index 000000000..636fc4968 --- /dev/null +++ b/src/types/i18n.d.ts @@ -0,0 +1,5 @@ +declare module "@dhis2/d2-i18n" { + export function t(value: string, namespace?: object): string; + export function changeLanguage(locale: string); + export function setDefaultNamespace(namespace: string); +} diff --git a/src/utils/Dhis2Helpers.js b/src/utils/Dhis2Helpers.js deleted file mode 100644 index 0646f9f47..000000000 --- a/src/utils/Dhis2Helpers.js +++ /dev/null @@ -1,633 +0,0 @@ -import { getJSONForProperties } from "d2/lib/model/helpers/json"; -import { generateUid } from "d2/lib/uid"; -import _ from "./lodash-mixins"; - -function collectionToArray(collectionOrArray) { - const array = - collectionOrArray && collectionOrArray.toArray - ? collectionOrArray.toArray() - : collectionOrArray || []; - return _.compact(array); -} - -const toArray = collectionToArray; - -const accesses = { - none: "--------", - read: "r-------", - write: "rw------", -}; - -function update(obj1, obj2) { - const obj1c = obj1; - _(obj2).each((value, key) => { - obj1c[key] = value; - }); - return obj1c; -} - -function mapPromise(items, mapper) { - const reducer = (promise, item) => - promise.then(mappedItems => mapper(item).then(res => mappedItems.concat([res]))); - return items.reduce(reducer, Promise.resolve([])); -} - -function redirectToLogin(baseUrl) { - const loginUrl = `${baseUrl}/dhis-web-commons/security/login.action`; - window.location.assign(loginUrl); -} - -function getCategoryCombos(d2, { cocFields, filterIds } = {}) { - return d2.models.categoryCombos.list({ - fields: _([ - "id,name,displayName,isDefault", - "categories[id,name,displayName,categoryOptions[id,name,displayName]]", - cocFields ? `categoryOptionCombos[${cocFields}]` : null, - ]) - .compact() - .join(","), - filter: _.compact([ - "dataDimensionType:eq:DISAGGREGATION", - filterIds ? `id:in:[${filterIds.join(",")}]` : null, - ]), - paging: false, - }); -} - -function getCountryCode(orgUnit) { - return orgUnit && orgUnit.code ? orgUnit.code.split("_")[0] : null; -} - -function getOrgUnitsForLevel(d2, levelId) { - return d2.models.organisationUnitLevels.get(levelId, { fields: "id,level" }).then(ouLevel => { - return d2.models.organisationUnits - .list({ - fields: "id,displayName,code,level,children::isNotEmpty", - filter: "level:eq:" + ouLevel.level, - order: "displayName:asc", - paging: false, - }) - .then(collection => toArray(collection).filter(ou => ou.children)); - }); -} - -// Keep track of the created categoryCombos so objects are reused -let cachedCategoryCombos = {}; - -function getDisaggregationForCategories(d2, dataElement, categoryCombos, categories) { - const categoriesById = _(categoryCombos) - .flatMap(cc => toArray(cc.categories)) - .uniqBy("id") - .keyBy("id") - .value(); - const getCategoryIds = categories => - _(collectionToArray(categories)) - .map("id") - .uniqBy() - .value(); - const deCategories = _.at( - categoriesById, - collectionToArray(dataElement.categoryCombo.categories).map(c => c.id) - ); - const allCategories = _(deCategories) - .concat(collectionToArray(categories)) - .uniqBy("id") - .value(); - - // Special category should be used only when no other category is present, remove otherwise - const allValidCategories = - allCategories.length > 1 - ? allCategories.filter( - category => categoriesById[category.id].displayName !== "default" - ) - : allCategories; - const combinedCategoriesIds = getCategoryIds(allValidCategories); - const existingCategoryCombo = categoryCombos.find(cc => - _(getCategoryIds(cc.categories)) - .sortBy() - .isEqual(_.sortBy(combinedCategoriesIds)) - ); - const cacheKey = combinedCategoriesIds.join("."); - const cachedCategoryCombo = cachedCategoryCombos[cacheKey]; - - if (existingCategoryCombo) { - return existingCategoryCombo; - } else if (cachedCategoryCombo) { - return cachedCategoryCombo; - } else { - const newCategoryComboId = generateUid(); - const categories = _.at(categoriesById, combinedCategoriesIds); - const categoryOptions = categories.map(c => toArray(c.categoryOptions)); - const categoryOptionCombos = _.cartesianProduct(...categoryOptions).map(cos => ({ - id: generateUid(), - name: cos.map(co => co.name).join(", "), - displayName: cos.map(co => co.displayName).join(", "), - categoryCombo: { id: newCategoryComboId }, - categoryOptions: cos, - })); - const ccName = allValidCategories.map(cc => cc.name).join("/"); - const newCategoryCombo = d2.models.categoryCombo.create({ - id: newCategoryComboId, - dataDimensionType: "DISAGGREGATION", - name: ccName, - displayName: ccName, - categories: categories, - categoryOptionCombos: categoryOptionCombos, - }); - cachedCategoryCombos[cacheKey] = newCategoryCombo; - return newCategoryCombo; - } -} - -function getAsyncUniqueValidator(model, field, uid = null) { - return value => { - if (!value || !value.trim()) { - return Promise.resolve(true); - } else { - const baseFilteredModel = model - .filter() - .on(field) - .equals(value); - const filteredModel = !uid - ? baseFilteredModel - : baseFilteredModel - .filter() - .on("id") - .notEqual(uid); - - return filteredModel.list().then(collection => { - if (collection.size > 0) { - return Promise.reject("value_not_unique"); - } else { - return Promise.resolve(true); - } - }); - } - }; -} - -function getExistingUserRoleByName(d2, name) { - return d2.models.userRoles - .filter() - .on("name") - .equals(name) - .list({ fields: "*" }) - .then(collection => toArray(collection)[0]); -} - -function getUserGroups(d2, names) { - return d2.models.userGroups.list({ - filter: "name:in:[" + names.join(",") + "]", - paging: false, - }); -} - -function getSharing(d2, object) { - const api = d2.Api.getApi(); - const fields = [ - "id", - "name", - "publicAccess", - "userAccesses", - "userGroupAccesses", - "externalAccess", - ].join(","); - - return api - .get(`${object.modelDefinition.plural}/${object.id}?fields=${fields}`) - .then(object => ({ object })); -} - -function getKey(s) { - return s.toLocaleLowerCase(); -} - -function buildSharingFromUserGroupNames(baseSharing, userGroups, userGroupSharingByName) { - const userGroupsByName = _.keyBy(userGroups, userGroup => getKey(userGroup.name)); - const userGroupAccesses = _(userGroupSharingByName) - .map((sharing, name) => { - const userGroup = userGroupsByName[getKey(name)]; - if (userGroup) { - return _.imerge(sharing, { id: userGroup.id }); - } else { - console.log(`User has no access to user group: ${name}`); - return null; - } - }) - .compact() - .value(); - - return buildSharing(deepMerge(baseSharing, { object: { userGroupAccesses } })); -} - -function buildSharing(sharing) { - const base = { - meta: { - allowPublicAccess: true, - allowExternalAccess: false, - }, - object: { - userGroupAccesses: [], - publicAccess: "r-------", - externalAccess: false, - }, - }; - return deepMerge(base, sharing); -} - -function setSharings(d2, objects, userGroupAccessByName) { - const api = d2.Api.getApi(); - let userGroupAccesses$; - - if (_.isEmpty(userGroupAccessByName)) { - userGroupAccesses$ = Promise.resolve([]); - } else { - const [userGroupNames, userGroupAccesses] = _.zip(...userGroupAccessByName); - userGroupAccesses$ = getUserGroups(d2, userGroupNames).then(userGroupsCollection => - _(toArray(userGroupsCollection)) - .keyBy(userGroup => userGroup.name) - .at(userGroupNames) - .zip(userGroupAccesses) - .map(([userGroup, access]) => (userGroup ? { id: userGroup.id, access } : null)) - .compact() - .value() - ); - } - - return userGroupAccesses$.then(userGroupAccesses => - mapPromise(objects, object => - api.post( - `sharing?type=${object.modelDefinition.name}&id=${object.id}&mergeMode=MERGE`, - { - meta: { - allowPublicAccess: true, - allowExternalAccess: false, - }, - object: { - userGroupAccesses: userGroupAccesses, - publicAccess: "r-------", - externalAccess: false, - }, - } - ) - ) - ); -} - -function sendMessage(d2, subject, text, recipients) { - const api = d2.Api.getApi(); - const recipientsByModel = _(recipients) - .groupBy(recipient => recipient.modelDefinition.name) - .mapValues(models => models.map(model => ({ id: model.id }))) - .value(); - const message = { - subject: subject, - text: text, - users: recipientsByModel.user, - userGroups: recipientsByModel.userGroup, - organisationUnits: recipientsByModel.organisationUnit, - }; - - if (_.isEmpty(recipients)) { - return Promise.resolve(); - } else { - return api.post("/messageConversations", message); - } -} - -const validStrategies = new Set(["create_and_update", "create", "update", "delete"]); - -function deepMerge(obj1, obj2) { - const isModel = obj => obj && obj.modelDefinition; - const cloneCustomizer = value => (isModel(value) ? value : undefined); - const mergeCustomizer = (objValue, srcValue, _key, _object, _source, _stack) => { - if (isModel(srcValue)) { - return srcValue; - } else if (_(objValue).isArray()) { - return objValue.concat(srcValue); - } else { - return undefined; - } - }; - const clonedObj1 = _.cloneDeepWith(obj1, cloneCustomizer); - - return _.mergeWith(clonedObj1, obj2, mergeCustomizer); -} - -function postMetadata(d2, metadata) { - const api = d2.Api.getApi(); - - const sendRequest = payloadWithStrategy => { - const { strategy, payload } = payloadWithStrategy; - // Payload values may be d2 models or plain objects, get JSON only for models. - const jsonPayload = _(payload) - .mapValues(objs => - objs.map(obj => (obj.modelDefinition ? getOwnedPropertyJSON(obj) : obj)) - ) - .value(); - const path = `metadata?mergeMode=REPLACE&importStrategy=${strategy.toUpperCase()}`; - - return api.post(path, jsonPayload).then(response => { - if (response.status !== "OK") { - const msg = [ - `POST ${api.baseUrl}/${path}`, - "Request: " + JSON.stringify(jsonPayload, null, 4), - "Response: " + JSON.stringify(response, null, 4), - ].join("\n\n"); - throw new Error(msg); - } else { - return response; - } - }); - }; - - // When saving simultaneously a new dataset and its sections, the server responds with a - // <500 ERROR at index 0> whenever greyedFields are sent. However, perfoming this same call - // to sections *after* the dataset has been created raises no error, so it seems a dhis2 - // bug. We have no option but to make the calls for sections in another, separate call. - const payloadsWithStrategy = _(metadata) - .flatMap((payload, strategy) => { - if (!validStrategies.has(strategy)) { - console.error("Invalid strategy: " + strategy); - return []; - } else if (_(payload).isEmpty()) { - return []; - } else { - return _(payload) - .toPairs() - .partition(([modelName, _objs]) => modelName !== "sections") - .map(pairs => - _(pairs).isEmpty() ? null : { strategy, payload: _.fromPairs(pairs) } - ) - .compact() - .value(); - } - }) - .value(); - - return mapPromise(payloadsWithStrategy, sendRequest); -} - -function getUids(d2, length) { - if (length <= 0) { - return Promise.resolve([]); - } else { - const api = d2.Api.getApi(); - return api.get("system/uid", { limit: length }).then(res => res.codes); - } -} - -function sendMessageToGroups(d2, userGroupNames, title, body) { - return getUserGroups(d2, userGroupNames) - .then(userGroups => sendMessage(d2, title, body, toArray(userGroups))) - .catch(_err => { - alert("Could not send DHIS2 message"); - }); -} - -function collectionString(d2, objects, field, maxShown) { - const array = collectionToArray(objects); - const base = _(array) - .take(maxShown) - .map(field) - .join(", "); - - if (array.length <= maxShown) { - return base; - } else { - return d2.i18n.getTranslation("this_and_n_others", { - this: base, - n: array.length - maxShown, - }); - } -} - -function currentUserHasAdminRole(d2) { - return ( - _(d2.currentUser.userGroups).some(userGroup => userGroup.name === "GL_AllAdmins") || - currentUserIsSuperuser(d2) - ); -} - -function currentUserIsSuperuser(d2) { - return d2.currentUser.authorities.has("ALL"); -} - -const requiredAuthorities = ["F_SECTION_DELETE", "F_SECTION_ADD"]; - -function hasAuthorities(d2, authorities) { - return authorities.every(authority => d2.currentUser.authorities.has(authority)); -} - -function hasRequiredAuthorities(d2) { - return hasAuthorities(d2, requiredAuthorities); -} - -function canManage(d2, datasets) { - return datasets.every(dataset => dataset.access.manage); -} - -function canCreate(d2) { - return d2.currentUser.canCreatePrivate(d2.models.dataSets) && hasRequiredAuthorities(d2); -} - -function canDelete(d2, datasets) { - const userHasRequiredAuthorities = - currentUserIsSuperuser(d2) || - hasAuthorities(d2, [ - "F_DATASET_DELETE", - "F_SECTION_DELETE", - // DHIS2 asks for indicator update permissions to remove dataSet references - "F_INDICATOR_PUBLIC_ADD", - "F_INDICATOR_PRIVATE_ADD", - ]); - - const userCanDeleteDataSetsAndUpdateTheirIndicators = _(datasets).every(dataset => { - return ( - dataset.access.delete && - dataset.indicators.toArray().every(indicator => indicator.access.update) - ); - }); - - return userHasRequiredAuthorities && userCanDeleteDataSetsAndUpdateTheirIndicators; -} - -function canUpdate(d2, datasets) { - const publicDatasetsSelected = _(datasets).some(dataset => dataset.publicAccess.match(/^r/)); - const privateDatasetsSelected = _(datasets).some(dataset => dataset.publicAccess.match(/^-/)); - const datasetsUpdatable = _(datasets).every(dataset => dataset.access.update); - const privateCondition = - !privateDatasetsSelected || d2.currentUser.canCreatePrivate(d2.models.dataSets); - const publicCondition = - !publicDatasetsSelected || d2.currentUser.canCreatePublic(d2.models.dataSets); - - return hasRequiredAuthorities(d2) && privateCondition && publicCondition && datasetsUpdatable; -} - -async function getFilteredDatasets(d2, config, page, sorting, filters) { - const { searchValue, showOnlyCreatedByApp } = filters; - const model = d2.models.dataSets; - const attributeByAppId = config.createdByDataSetConfigurationAttributeId; - - const filterByAppId = attributeByAppId && showOnlyCreatedByApp; - const order = sorting ? sorting.join(":") : ""; - const fields = - "id,name,displayName,displayDescription,shortName,created,lastUpdated,externalAccess," + - "publicAccess,userAccesses,userGroupAccesses,user,access,attributeValues," + - "periodType,sections[id,code,name],dataInputPeriods~paging(1;1),indicators[id,access[update]]"; - const cleanOptions = options => - _.omitBy(options, value => _.isArray(value) && _.isEmpty(value)); - const baseFilters = _.compact([searchValue ? `displayName:ilike:${searchValue}` : null]); - - if (filterByAppId) { - // The API does not allow to simultaneously filter by attributeValue.attribute.id AND attributeValue.value, - // so we need to make a double request: first get non-paginated datasets, filter manually by the attribute, - // and finally make a query on paginated datasets filtering by those datasets. - const attributeFields = "id,attributeValues[value,attribute[id]]"; - const options = cleanOptions({ order, fields, filter: filters, page }); - const paramsSize = _(options) - .map((value, key) => `${key}=${encodeURIComponent(value)}`) - .join("&").length; - - const dataSetsCollectionNoPaging = await model.list({ - fields: attributeFields, - paging: false, - order: "lastUpdated:desc", - }); - const datasetsByApp = toArray(dataSetsCollectionNoPaging).filter(dataset => - _(dataset.attributeValues).some( - av => av.attribute.id === attributeByAppId && av.value.toString() === "true" - ) - ); - // Truncate IDs to avoid 413 URL too large - const maxUids = (8192 - paramsSize - 1000) / (11 + 3); - const fullFilters = [ - ...baseFilters, - `id:in:[${_(datasetsByApp) - .take(maxUids) - .map("id") - .join(",")}]`, - ]; - return model.list(cleanOptions({ order, fields, filter: fullFilters, page })); - } else { - return model.list(cleanOptions({ order, fields, filter: baseFilters, page })); - } -} - -async function subQuery(d2, objects, field, subfields) { - const filter = - "id:in:[" + - _(objects) - .map(obj => obj[field]) - .flatMap(obj => (obj.toArray ? toArray(obj).map(o => o.id) : [obj.id])) - .uniq() - .join(",") + - "]"; - - const subObjects = await d2.models[field] - .list({ - paging: false, - fields: subfields, - filter: filter, - }) - .then(collection => toArray(collection)); - - const subObjectsById = _.keyBy(subObjects, "id"); - - return objects.map(obj => { - const value = obj[field]; - obj[field] = value.toArray - ? { toArray: () => toArray(value).map(v => subObjectsById[v.id]) } - : subObjectsById[value.id]; - return obj; - }); -} - -function getCategoryCombo(dataSetElement) { - const { dataElement, categoryCombo } = dataSetElement; - - if (categoryCombo) { - return categoryCombo; - } else if (dataElement && dataElement.categoryCombo) { - return dataElement.categoryCombo; - } else { - throw new Error( - `Cannot get category combo for dataSetElement: ${JSON.stringify(dataSetElement)}` - ); - } -} - -function setAttributes(initialAttributeValues, valuesByAttributeId) { - return _(valuesByAttributeId) - .toPairs() - .reduce((attributeValues, [attributeId, value]) => { - const attributeValueExists = _(attributeValues).some( - av => av.attribute.id === attributeId - ); - - if (attributeValueExists) { - return attributeValues.map(av => - av.attribute.id === attributeId ? _.imerge(av, { value }) : av - ); - } else { - const newAttributeValue = { value, attribute: { id: attributeId } }; - return attributeValues.concat([newAttributeValue]); - } - }, initialAttributeValues); -} - -function getDseId(dse) { - const parts = [dse.dataSet, dse.dataElement, dse.categoryCombo]; - return _(parts) - .compact() - .map(obj => obj.id) - .join("."); -} - -function getOwnedPropertyJSON(model) { - const ownedProperties = [ - ...model.modelDefinition.getOwnedPropertyNames(), - "publicAccess", - "userAccesses", - "userGroupAccesses", - ]; - - return getJSONForProperties(model, ownedProperties); -} - -export { - getDseId, - accesses, - redirectToLogin, - getCategoryCombos, - collectionToArray, - getExistingUserRoleByName, - getDisaggregationForCategories, - getAsyncUniqueValidator, - setSharings, - sendMessage, - getUserGroups, - mapPromise, - getCountryCode, - getOrgUnitsForLevel, - getSharing, - buildSharingFromUserGroupNames, - postMetadata, - buildSharing, - getUids, - deepMerge, - update, - sendMessageToGroups, - collectionString, - currentUserHasAdminRole, - currentUserIsSuperuser, - canManage, - canCreate, - canDelete, - canUpdate, - getFilteredDatasets, - subQuery, - getCategoryCombo, - setAttributes, - getOwnedPropertyJSON, -}; diff --git a/src/utils/ObservedEvents.mixin.js b/src/utils/ObservedEvents.mixin.js deleted file mode 100644 index f3760315c..000000000 --- a/src/utils/ObservedEvents.mixin.js +++ /dev/null @@ -1,45 +0,0 @@ -import { Subject } from "rx/dist/rx.all"; -import log from "loglevel"; - -const ObservedEvents = { - getInitialState() { - this.events = {}; - this.eventSubjects = {}; - - return {}; - }, - - createEventObserver: (function createEventObserver() { - const subjectMap = new Map(); - - return function ObservedEventHandler(referenceName) { - let subject; - - if (!subjectMap.has(referenceName)) { - subject = new Subject(); - subjectMap.set(referenceName, subject); - } else { - subject = subjectMap.get(referenceName); - } - - if (!this.events[referenceName]) { - // Run a map that keeps a copy of the event - this.events[referenceName] = subject.map(event => Object.assign({}, event)); - } - - return event => { - subject.onNext(event); - }; - }; - })(), - - componentWillUnmount() { - // Complete any eventsSubjects - Object.keys(this.eventSubjects).forEach(eventSubjectKey => { - log.debug(`Completing: ${[this.constructor.name, eventSubjectKey].join(".")}`); - this.eventSubjects[eventSubjectKey].onCompleted(); - }); - }, -}; - -export default ObservedEvents; diff --git a/src/utils/ObserverRegistry.mixin.js b/src/utils/ObserverRegistry.mixin.js deleted file mode 100644 index 693e48bfc..000000000 --- a/src/utils/ObserverRegistry.mixin.js +++ /dev/null @@ -1,15 +0,0 @@ -const ObserverRegistry = { - UNSAFE_componentWillMount() { - this.observerDisposables = []; - }, - - componentWillUnmount() { - this.observerDisposables.forEach(disposable => disposable.dispose()); - }, - - registerDisposable(disposable) { - this.observerDisposables.push(disposable); - }, -}; - -export default ObserverRegistry; diff --git a/src/utils/i18n-typed.ts b/src/utils/i18n-typed.ts new file mode 100644 index 000000000..ea917bfd1 --- /dev/null +++ b/src/utils/i18n-typed.ts @@ -0,0 +1,38 @@ +// @ts-ignore +import i18n from "$/locales"; + +export function getModuleForNamespace(namespace: string) { + return { + t: function (...args: I18nTArgs): string { + const [s, options] = args; + return i18n.t(s, { ...options, ns: namespace }); + }, + changeLanguage: i18n.changeLanguage.bind(i18n), + setDefaultNamespace: i18n.setDefaultNamespace.bind(i18n), + }; +} + +type I18nTArgs = Interpolations extends Record + ? [Str] | [Str, Partial] + : [Str, Interpolations & Partial]; + +interface Options { + ns: string; // namespace + nsSeparator: string | boolean; // By default, ":", which breaks strings containing that char + lng: string; // language +} + +type Interpolations = Record, string | number>; + +type ExtractVars = Str extends `${string}{{${infer Var}}}${infer StrRest}` + ? Var | ExtractVars + : never; + +/* Tests */ + +type IsEqual = [T1] extends [T2] ? ([T2] extends [T1] ? true : false) : false; +const assertEqualTypes = (_eq: IsEqual): void => {}; + +assertEqualTypes, never>(true); +assertEqualTypes, "name">(true); +assertEqualTypes, "name" | "age">(true); diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts new file mode 100644 index 000000000..94c5c1fbd --- /dev/null +++ b/src/utils/i18n.ts @@ -0,0 +1,3 @@ +import { getModuleForNamespace } from "./i18n-typed"; + +export default getModuleForNamespace("d2-dataset-configuration"); diff --git a/src/utils/lodash-mixins.js b/src/utils/lodash-mixins.js deleted file mode 100644 index 5ef40bfd6..000000000 --- a/src/utils/lodash-mixins.js +++ /dev/null @@ -1,64 +0,0 @@ -import _ from "lodash"; -import fp from "lodash/fp"; - -function imerge(obj1, obj2) { - return _.assign({}, obj1, obj2); -} - -function deepMerge(object, source) { - return _.mergeWith(object, source, function(objValue, srcValue) { - if (_.isObject(objValue) && srcValue) { - return deepMerge(objValue, srcValue); - } - }); -} - -function cartesianProduct(...rest) { - return fp.reduce((a, b) => fp.flatMap(x => fp.map(y => x.concat([y]))(b))(a))([[]])(rest); -} - -function groupConsecutiveBy(xs, mapper = _.identity) { - const reducer = (acc, x) => { - if (_.isEmpty(acc)) { - return acc.concat([[x]]); - } else { - const last = _.last(acc); - if (_.isEqual(mapper(_.last(last)), mapper(x))) { - last.push(x); - return acc; - } else { - return acc.concat([[x]]); - } - } - }; - - return _(xs).reduce(reducer, []); -} - -function transpose(xss) { - return _.zip(...xss); -} - -function groupByKeys(objs, keys, thruFn = _.identity) { - if (_(keys).isEmpty()) { - return objs; - } else { - return _(objs) - .groupBy(keys[0]) - .map((vs, k) => [k, _.groupByKeys(vs, keys.slice(1), thruFn)]) - .fromPairs() - .thru(thruFn) - .value(); - } -} - -_.mixin({ - imerge, - deepMerge, - cartesianProduct, - groupConsecutiveBy, - transpose, - groupByKeys, -}); - -export default _; diff --git a/src/utils/tests.tsx b/src/utils/tests.tsx new file mode 100644 index 000000000..f1f82e386 --- /dev/null +++ b/src/utils/tests.tsx @@ -0,0 +1,25 @@ +import { render, RenderResult } from "@testing-library/react"; +import { SnackbarProvider } from "@eyeseetea/d2-ui-components"; +import { ReactNode } from "react"; +import { AppContext, AppContextState } from "$/webapp/contexts/app-context"; +import { getTestCompositionRoot } from "$/CompositionRoot"; +import { createAdminUser } from "$/domain/entities/__tests__/userFixtures"; + +export function getTestContext() { + const context: AppContextState = { + currentUser: createAdminUser(), + compositionRoot: getTestCompositionRoot(), + }; + + return context; +} + +export function getReactComponent(children: ReactNode): RenderResult { + const context = getTestContext(); + + return render( + + {children} + + ); +} diff --git a/src/utils/ts-utils.ts b/src/utils/ts-utils.ts new file mode 100644 index 000000000..1eb926f33 --- /dev/null +++ b/src/utils/ts-utils.ts @@ -0,0 +1,76 @@ +export type Maybe = T | undefined; + +export type Dictionary = Record; + +export type PartialBy = Omit & Partial>; + +export type Expand = {} & { [P in keyof T]: T[P] }; + +export type GetValue = T[keyof T]; + +export type UnionFromValues> = T[number]; + +export type RequireAtLeastOne = Pick> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; + +/* Like Partial, but recursive on object values */ +export type RecursivePartial = { + [P in keyof T]?: T[P] extends (infer U)[] + ? RecursivePartial[] + : T[P] extends object + ? RecursivePartial + : T[P]; +}; + +/* +Extract properties from an object of a certain type: + type Person = {name: string, age: number, address: string}, + type StringFields = GetPropertiesByType + // "name" | "address" +*/ +export type GetPropertiesByType = { + [Key in keyof T]: T[Key] extends FieldType ? Key : never; +}[keyof T]; + +export type RequiredProps = { + [P in keyof T]-?: NonNullable; +}; + +export function isValueInUnionType(value: S, values: readonly T[]): value is T { + return (values as readonly S[]).indexOf(value) >= 0; +} + +export function fromPairs( + pairs: Array<[Key, Value]> +): Record { + const empty = {} as Record; + return pairs.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), empty); +} + +/* Define only the value type of an object and infer the keys: + // values :: Record<"key1" | "key2", {value: string}> + const values = recordOf<{value: string}>()({ + key1: {value: "1"}, + key2: {value: "2"}, + }) +*/ +export function recordOf() { + return function (obj: { [K in keyof Obj]: T }) { + return obj; + }; +} + +/* Use as default case for exhaustive switch-blocks: + switch (type) { + case "active": + case "inactive": + ... + default: + assertUnreachable(type); + } +*/ +export function assertUnreachable(value: never, message = `Invalid union value: ${value}`) { + throw new Error(message); +} diff --git a/src/utils/uid.ts b/src/utils/uid.ts new file mode 100644 index 000000000..9032ebb7d --- /dev/null +++ b/src/utils/uid.ts @@ -0,0 +1,52 @@ +// @ts-ignore +import MD5 from "md5.js"; + +// DHIS2 UID :: /^[a-zA-Z][a-zA-Z0-9]{10}$/ +const asciiLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const asciiNumbers = "0123456789"; +const asciiLettersAndNumbers = asciiLetters + asciiNumbers; +const uidSize = 10; +const range = Array.from(new Array(uidSize).keys()); +const uidStructure = [asciiLetters, ...range.map(() => asciiLettersAndNumbers)]; +const maxHashValue = uidStructure.map(cs => cs.length).reduce((acc, n) => acc * n, 1); + +/* Return pseudo-random UID from seed string */ +export function getUid(seed: string): string { + const md5hash: string = new MD5().update(seed).digest("hex"); + const nHashChars = Math.ceil(Math.log(maxHashValue) / Math.log(16)); + const hashInteger = parseInt(md5hash.slice(0, nHashChars), 16); + const result = uidStructure.reduce( + (acc, chars) => { + const { n, uid } = acc; + const nChars = chars.length; + const quotient = Math.floor(n / nChars); + const remainder = n % nChars; + const uidChar = chars[remainder]; + return { n: quotient, uid: uid + uidChar }; + }, + { n: hashInteger, uid: "" } + ); + + return result.uid; +} + +function randomWithMax(max: number) { + return Math.floor(Math.random() * max); +} + +export function generateUid(): string { + // First char should be a letter + let randomChars = asciiLetters.charAt(randomWithMax(asciiLetters.length)); + + for (let i = 1; i <= uidSize; i += 1) { + randomChars += asciiLettersAndNumbers.charAt(randomWithMax(asciiLettersAndNumbers.length)); + } + + return randomChars; +} + +const fullUidRegex = /^[a-zA-Z]{1}[a-zA-Z0-9]{10}$/; + +export function isValidUid(code: string | undefined | null): boolean { + return !!code && fullUidRegex.test(code); +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/webapp/components/card-grid/CardGrid.tsx b/src/webapp/components/card-grid/CardGrid.tsx new file mode 100644 index 000000000..9ddd3d74e --- /dev/null +++ b/src/webapp/components/card-grid/CardGrid.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import styled from "styled-components"; +import { PageHeader } from "$/webapp/components/page-header/PageHeader"; +import { MenuCard, MenuCardProps } from "./MenuCard"; + +export const CardGrid: React.FC = React.memo(({ title, cards, onBackClick }) => { + return ( + + {!!title && } + + + {cards.map(({ key, title, children }) => ( +
    + {!!title && {title}} + + {children.map(props => ( + + ))} +
    + ))} +
    +
    + ); +}); + +export interface CardGridProps { + cards: Card[]; + title?: string; + onBackClick?: () => void; +} + +export interface Card { + title?: string; + key: string; + children: MenuCardProps[]; +} + +const Container = styled.div` + margin-left: 30px; + display: flex; + flex-direction: column; +`; + +const Title = styled.h1` + font-size: 24px; + font-weight: 300; + color: rgba(0, 0, 0, 0.87); + padding: 15px 0px 15px; + margin: 0; +`; diff --git a/src/webapp/components/card-grid/MenuCard.tsx b/src/webapp/components/card-grid/MenuCard.tsx new file mode 100644 index 000000000..61680cc7e --- /dev/null +++ b/src/webapp/components/card-grid/MenuCard.tsx @@ -0,0 +1,76 @@ +import { + Card as MUICard, + CardActions as MUICardActions, + CardContent as MUICardContent, + CardHeader as MUICardHeader, + IconButton, + Tooltip, +} from "@material-ui/core"; +import AddIcon from "@material-ui/icons/Add"; +import ViewListIcon from "@material-ui/icons/ViewList"; +import React from "react"; +import styled from "styled-components"; +import i18n from "$/utils/i18n"; + +export const MenuCard: React.FC = React.memo( + ({ name, description, addAction, listAction = () => {} }) => { + return ( + +
    + + {description} + + + {addAction && ( + + + + + + )} + + {listAction && ( + + + + + + )} + + + ); + } +); + +export interface MenuCardProps { + name: string; + description?: string; + addAction?: () => void; + listAction?: () => void; +} + +const Card = styled(MUICard)` + padding: 0; + margin: 0.5rem; + float: left; + width: 230px; +`; + +const Content = styled(MUICardContent)` + height: 120px; + padding: 0.5rem 1rem; + font-size: 14px; +`; + +const Actions = styled(MUICardActions)` + margin-left: auto; +`; + +const Header = styled(MUICardHeader)` + padding: 1rem; + height: auto; + border-bottom: 1px solid #ddd; + cursor: pointer; + font-size: 15px; + font-weight: 500; +`; diff --git a/src/webapp/components/page-header/PageHeader.tsx b/src/webapp/components/page-header/PageHeader.tsx new file mode 100644 index 000000000..dc7a4f1ad --- /dev/null +++ b/src/webapp/components/page-header/PageHeader.tsx @@ -0,0 +1,72 @@ +import { ButtonProps, Icon, IconButton as MUIIConButton, Tooltip } from "@material-ui/core"; +import { Variant } from "@material-ui/core/styles/createTypography"; +import Typography from "@material-ui/core/Typography"; +import { DialogButton } from "@eyeseetea/d2-ui-components"; +import React, { PropsWithChildren } from "react"; +import styled from "styled-components"; +import i18n from "$/utils/i18n"; + +export const PageHeader: React.FC = React.memo(props => { + const { variant = "h5", title, onBackClick, helpText, children } = props; + return ( +
    + {!!onBackClick && ( + + arrow_back + + )} + + + {title} + + + {helpText && } + + {children} +
    + ); +}); + +export interface PageHeaderProps extends PropsWithChildren { + variant?: Variant; + title: string; + onBackClick?: () => void; + helpText?: string; +} + +const Title = styled(Typography)` + display: inline-block; + font-weight: 300; +`; + +const Button: React.FC = ({ onClick }) => ( + + + help + + +); + +const HelpButton: React.FC<{ text: string }> = ({ text }) => ( + +); + +const IconButton = styled(MUIIConButton)` + margin-bottom: 8px; +`; + +const BackButton = styled(IconButton)` + padding-top: 10px; + margin-bottom: 5px; +`; diff --git a/src/webapp/components/share/Share.tsx b/src/webapp/components/share/Share.tsx new file mode 100644 index 000000000..bde3749d8 --- /dev/null +++ b/src/webapp/components/share/Share.tsx @@ -0,0 +1,140 @@ +import React from "react"; +import logo from "./logo-eyeseetea.png"; + +interface ShareProps { + visible: boolean; +} + +interface ShareState { + expanded: boolean; + hover: boolean; +} + +class Share extends React.PureComponent { + state: ShareState = { expanded: false, hover: false }; + + toggleExpanded = () => { + this.setState({ expanded: !this.state.expanded }); + }; + + openMainPage = () => { + window.open("http://www.eyeseetea.com/", "_blank"); + }; + + openTwitter = () => { + window.open("https://twitter.com/eyeseetealtd", "_blank"); + }; + + setHover = () => { + this.setState({ hover: true }); + }; + + unsetHover = () => { + this.setState({ hover: false }); + }; + + render() { + const { visible } = this.props; + const { expanded, hover } = this.state; + const shareStyles = hover ? { ...styles.share, ...styles.shareHover } : styles.share; + + if (!visible) return null; + + return ( +
    +
    + +
    + + {expanded && ( +
    +

    + +

    + +

    + +

    +
    + )} +
    + ); + } +} + +const styles = { + eyeseeteaShare: { + backgroundColor: "rgb(243,243,243)", + position: "fixed" as const, + bottom: "0px", + right: "100px", + borderRadius: "0px", + height: "auto", + opacity: ".85", + paddingBottom: "30px", + width: "65px", + zIndex: 10001, + textAlign: "center" as const, + }, + + eyeseeteaShareButtons: { + width: "35px", + cursor: "pointer" as const, + backgroundColor: "white", + borderradius: 0, + opacity: 1, + color: "white", + boxShadow: "none", + textShadow: "none", + border: "0px", + textAlign: "center" as const, + }, + + eyeseeteaIcon: { + width: "15px", + }, + + twitterIcon: { + color: "#477726", + fontSize: "20px", + }, + + shareTab: { + bottom: "-3px", + right: "100px", + position: "fixed" as const, + zIndex: 10002, + }, + + share: { + textShadow: "none", + backgroundColor: "#ff9800", + color: "white", + width: "65px", + height: "38.5px", + cursor: "pointer", + border: "1px solid rgba(0, 0, 0, 0.1)", + borderRadius: "2px", + backgroundClip: "padding-box", + boxShadow: "0 4px 16px rgba(0, 0, 0, 0.2)", + }, + + shareHover: { + border: "2px solid #ff9800", + }, +}; + +export default Share; diff --git a/src/webapp/components/share/logo-eyeseetea.png b/src/webapp/components/share/logo-eyeseetea.png new file mode 100644 index 0000000000000000000000000000000000000000..6368320f3edcee7d769c80f3e7ca3ec35e43a060 GIT binary patch literal 16196 zcmZv@by!qi^fyY%08-L0lqj82gEWeRBF)e#-7`pcioh_S2$BNQLzlEj4k+D?bPCea z_wfC__ulut&;4VbnRCwGd&OCMt-U^LO_YWjl!SFryIOra5 zC#+PN6Zj&8D;vDU!V+M=`(S(L$$0`d>D`s|-L+k9+`TN^tg#fVT;Eu;zI3**wbrt> zu<}9lT1#VL$qv7KuAt*RvpX;6%DB}c`1jypQR!$dai7wKC4a>kR#6`b9IdVFmnw?= z`jSN7D6gSyWQr$ojTT-l3QrY{GR`G}tHQ8puyvmXkP~foT1*XmAtHZL;*!<|%PBHb6 zD)M|55+q}Iq^EW?`G~AHYC;i$6F}BwO?z+_@u;1GJi7SVlSZSsT8?%KJ3lVchhvA6 z3JPXgkE7sthK$jE(Y*GL&ne{v!w~7M8RJw)wr%96vu>FBf&e{pYCN9oJIRdSTPL7V>C>#>I| zYHUT(xilQB@?K%WG)K4JBiiWRv=8t_NEL!Zq#~DDoAzD=OnqSK)dv`^*A^nx7FyV! zilY%RB$Hu?L2v3t?BQAVy$Bd>Grv!EIC(aq^wkaT8%bAkEW=7noZlgPWzR#Bq$<~Nk%q_Fhki;o9ZPmZ$_)t?a)EpdJ zby{Y|_pBr;J^vL$IQy{>9p-$t&TyHXOk18*3}0!el;{s(_sfY)`XaA`RkGIP*P^&Q zP;zARnX`kS2C#xvRMb-tbkm%xo1q)jja!Ov+&FjSVx>S0WtgYiTpM@ji(Xbe1S<$t zwa@A(5Gj9qqeu$smVGalo#e|3&d%cqtsD#XPY~C{S_1JGF|gCAe&=4S!+Ed-`a}5Q zml)pN`$pbf`h$_sP)+#}=_EJ#fHpc>>$LY0Vb}TqpFX zF!|F@!cZCq3XB@h)IQW%@_3(G%wN09PN zS2Fvjjpst1FJ9+9owyIYK%;TUz#_AKl$uXEhwd;g@DBc&gV$YMYo6OqKaz*wNZrd} zf?q6EOS2A&KJ(hrjd+s*>Nb5Z7LVJ{3Jyst?nc<8R|+oQ+kA9F1>6v8gY+$apLo#n z=3X%zPaMxuhm4YcSVcJOL|Fs`{cTBsoDeykj2U|?ADLWAB8RmbDRf)uB=)ib+VqD?5W(U4U942*4J z7CAMeMh&f@5y`Dgc7&eCtkpES5JgP!i~3mHUsB=h?v)N;+f%hQl!RWRUIe>4HyuF= zR1@JPtSd7NXzl4+OgSOf`@M0R%1^ixda+;X6^7rOrMIyJ3O9^V@j&f()0DME=Zo7Z z3{AvPA_;J=NMI~roh$@78E~$&Jy;@p%|NAjt`)*RRxIo%#f+BN-iGU)C_gR$S=8AX;rs$vs( zW1FlVJAl44VLAA>W6oa*!`TZNmYxYqZrthKPH`NfD>jnLC^i^Ch0^d6>Q?H>c&hql z1H1&PmHO#K2|bdou6YItMN`O%5975{=*0fbh9-G}poJaEltXY!RbT@=nGhTKx;?C# z4#)Fa{jE=Z$5B6XA#((KJtYCA1Rfq;+?|d7kfa-z#6$>%6OjJGlsT`3vwzaOlP|6Y zkDuDn4HnlbB<@+4c?#HewuZM;LwA%3TlhDu|VCgx7 z#`r1obOCxtoFx$Y#lLuyx8dw_MGk!2!7TYrvKcd^7qfOjuG+!ek8_~o}-A>E#x*>O%p ztYC}M4;()Z;^5(A4R7-YNk_t3C{S>I4{n*E2gm7^&^xa6pNs%HU5BlFfroqT`AqHo!lp}V7=z5_K%Kbu52Qj1AQxFcdPJKf2e>VYSga{i`~(Vl2*%z>f#FjXqP~Qh}$x-#%__`FR-=x%lDSWV@ zx5K$JiS+Ox_m+iE&j2n$5-+a)@hmA*-WSD&NJOyv_q>ML&8PJ%)We=UXII z_YsJcyco%ocboZt=gdF@A-}ISNOq&(;SRL{yPNLWhiT{=LzXY2ByEz$paEHrNzx1N z*C43FXcY-&aAVx8F&K^G$DDqC&_ws?=v8%$Q5hk$aLN?7wcvbr(7uuNOA(#{W$Ka3 z(N=WYcLkz83j%bX>0YJ7Hy#gN6!d&HCbczo)EyzEqEN_?i?j@=(6IO>EOh&L{(d1i zJ1lYKT#FnHDnkE6rj>bT@Zqn+*+kQfv;WvK+TapHxh5()%Uh;op7sl>Y4@w*;=ZlY zu^^?zc{`Q0tp!n3Y3W~xyL}Cds1X$^h++HGElAr@RW?2E7jVfJ&hF8uBJoium(1ea z1!T^~N5K6kk~(rt1ETo0h34I{G@tFXhu*Fg8y^{M`-rX&zOYfEVQyujgv3?tIbJHI z<-3Y;pW0UPqzJXYy@PGQQFNOSv&kc40P0lX$FGycoN6f#bR3qMRJ0flWE&+m?h3*p zDNXV;?DD))T*TFr&_BIpn%5+ys8Jea2|7#zqWC%wl8$<1R&-zkVTb0w1c!_1iyL9s zz5-;wIwC5JC5kqDm@6z3*|7qOcxaozd_RI6tC{Sl zLgqRM1jW)njN-roPD)tq6jc;2HL!tSxUh0oVA?AATLrOOm4PMw+iIEjrmi0291g50NOpT4&?BN?r2L zUQX{{#OG|Mh$d;fjvz-)29%C&|4t`ZmljnOdVuEXD>Y2iVl9ZE zg;MtkxbZg12@E6hVV`~U)x>~9zXgaziaH7K>}*c7Nt}%q5$sNs?<0vV><;e-{Pkr1 zR8*C2|6u98P`dh;C=Jn&du5#e`oa#MzXd@r^q9Jv%Cx3-YtdSek$#~$6$J>HlGNaj zKj{ToqPpB*dwW(=8XQe8ZmRt^Y+MDY&mbdL@?dL@QTfCL0lYlKt0iSz9E4y*wmhB! zH<&GAMJUKG=W*7sg5>ZC58x_)U<7DFt3D_AgaiI}>XA*08jv$g8khxcs{8L@IguaX zny!|&u1nN&o;yAQXY1ptVwHNvw|?)(b>jmoKyYN(!PrydU*LGbWPgaESex`q%893< z*sS2CXMq1DM`5{tAe6+a$UPz>1uj^@*uViZ7@k{s@9yE>Y=Ts*#wE_htC~>}UBHm) zhPOO^{XeGjzfHgcY)U?78V_r48yM}LMV+PXgoA}ojtYj~J^Fvm4Vd%)bL;=63yf7> z?7L&nqRlMugmdZ6W}iCq0Bo)Ox5)p8Bv$(ePpNUdA$nVYDVnP_y`V-a6xI-+s{du( zKoFRCO)1ZrP7EbS{fHE3y1^xa-iiGm#SwiGRjdplY7}q<>>_}cJVYx&1-J*FIAPI% zXr;7XZL8ZFV$W^<&#b#JxVv4-5$w6sK^_Iqb?9co{!hAKfxBJXT*UFe=stDg0cU&L z6yvm0Bu$wCu>#Berw&B%!2RwH%{9R22#^?wQ=+i`E|HYM!#}1w-~gKc-K`60e*rKB z0@(dMM~wo00H=dw2OPV+1-`BaC@iO9i8OBzG~GP-C!)8dxR{qkBJr|ULeAs&_=^7) zj)V!~fcIkEI^Hzq^k{OSeV^srE_Gk9^rC7BYIi0#*^ti~;P3}SEYTks zg_b~%tFX^6qMy2e^S1&fy0G|IS{k2zJ#%aMP~nHIgD! zo7$on=WTMR8*?%T*2zjbHL9MNpZorXLLrZnm$_PXgg~c`2`R1VSw{7|Z3cU-{kb9L zC_+g3!2Wc*J|l9?Vj>6eOSTlDBdJwa$KOaCw|`>AMs6$neL*+rsBCJ5Dhb%;)8l!M zXag?OBiKEjI{wQzQzGgF+_DqsSAu&wm|rI`r^G11&(}+Y3tXg4i4pqRbu3EejbMnAr942%(nul^Cnby9|6)c>h2mW-q@kqTKo0d~& z`bc;#A#HdS>5owzHno~3{L+H&xF4}d{GOE@9L%}?9&oP_R%8^euQ~s+QFU@2U+(%q z==urzq>Fg|@L6Pa$-ljpH3GiKt@d);=}Upr>f*(#(let!{a#zW&knho_B>Un)-&?NfuClre-zLSREFisz2W)Rt(m1Abg*!m)=SNrW37(71jHkKI zmPz)91KybUtExJcTp*vIdVjg4Cfz>7Hxk&S5BfQQ*Mnj^H!!O+p+dpmvJPZs!3&>S zg-rq|m?vYSnRZ;i_o(pvWC|Jxzz=0ee=>6H9eX}O!SO=gXBpq`EvLQt2V+LDFM+P_ zcb?NNE3;~a=oy4zxJIA$B0O7Ce(3o?n2DjA>a3(yXX;PAvy=+k{9S*)q_l0xXYvxb zymDt;QqELF+;pDcmMVmG8va}<=}IF75?0$p$WMlU?jHJ@sxQ2D5PA}?Xi*wLT%^@I zF50k%rKKE4@#%I%OCT?j&L)>ceAN;TPHrw+An3IVWJ7wQ10G*MNXd>@~MB%8hqnAS&4YL^j;&qT$L)ig6d;R9&7uDg@|RY z*=tRyA&H}nY-ZxS=Xl|{@Lbw#NMBh&Ik8f`kuo!V0u{=glWx(DkP8_l)&2p6mmBur zCt>dgkB_tG&nbuGH&U^PXgjD}57P$ix3d)>BTvLl-W^K6Vv~H?q;i*@$Ul%$$ymdd zRJ(k@4z{l^;s}1#Y1(O45D#`BT~ZG7Nn+9w=w>GXQri*#f>bOXv2h@eFuE#n7wzGJgwXWn;3G%Qv$8U2_l$Qex#~gEzse+D+#_;7No$=S zCE|h3&ExF1OaSzO+_OBKUG0rIy9y+n-8pGOYQ~m2+VU4<>HRi^h8Pi$nEv)}q*Rf# z8*IBc#*pgPH`VF2p3i;(Aea#*Kn$JOb_!Xmbi8zEJH_0=UGi4ZHtu>uLne0$;;ola zUm`~pGKV~-1b~1o4im-SR}`o$w{XSuS!yU`MAN>x^CRih{Bt191bh%V#5J59(z~SQ zUPJ_K9MFDhZu{T7NI;jRTh0`yddhn=n_ASU@o$8 z)Ur?hgG=K6E+_?dK*j-#V2(TNEdWJSxfeKms z!>ll_&qL|9xgK(TjHxVN4d7QG>qJ3t`?K8e#@U-C?zs7umqv(r3PgXC>vdP#ls~JR z-}RVPAA{SN#30=Oq%sWHrbR(fB;FEeR%KqbyavzZ1~>%ZD4um4l3>2U!;SRfM*BL! zbH|lAEOt1)tQ`E!L-&pR(pr-+Rm*3yebHcn>%e%QSFh+Z2ZM^D%gLnnjBe?wpMQ6ED>P2 zeI*iYOR-ll$=X8P9~a<|fLH=4nRu@#UIsvenq#PfDc;%Ir`I}W&RJG**>7XFj}Im5x{vjaVwN&0JYf)L=g4Jg~&x-6HD-b~O zcDONrI#?Jdlm`~rqy#)lcZB=I#~5HUbtF_ZzTCgwjSSoMb#gV0vferii)f_@3QUW7 zT|nIWMg5Af`na+AqV;yaBzMr;6oz`L3kw{s6?nS@>Lp zqMP?DzB^elry>qA*V-g`H;e|=tp#=_q$c^&t=*nQ_Weg zP0FBKFbtl+oiv8+!tI-9Vv)>haiGj!XCI^9p{Ym3iUH>z{5%NNQ-czMv3g4#Y84wUo`B*j+{(*CTc~m`9X8wF7 zdB;XgnJ==eA;($J)Q1bDRcpalIW16iu9e2$Xgu1P@$XW}E2{Wz7~0oAO%c&VwDOb+ zlTtSNEu|bPv+(3m*7}+P0>6k@IefS3s-5TEti;8fA5);Q8>oyr z3YK12_GZYBpIb}zPGoUq@1MJ$X@}EOHD==5tiivxNQLy_+S@3%_iWMC67n>ggS7O> z9T_yT&A3Z0;p{csbdl40BBV>s zL_KNf9s~`U{kPv{5XG2K;YQ8Y$p@bdlpcb!W3eT*#kAz9eUb@sw=1km-iDu`M6tc7 zC|ws;B@8jCifbSfH1i7T_Crz@)<#iux;+tqg3s$yYQ*c`b5F972Vm`%5&hw!q%2lj zj!mG16Ad7)m5;z7WW^YRo6}b+aOhyH1dx=cCO2H@iojJWThi$P{Qaq(jA>&%fOqkn?gapWJcNxs0V9gc5wM-(N?#=6(R^{qS1A}ou^iZ@Dd`=Ncf;gQ zdLGOdwNof3y#3-x_~h>AKY3$vLD6UBTWZv(A6h4NZlusg?WV2;w8mKPaWzZ#o+N?c zSFha+v>To{o%Mw5Y3v;%P9GcfFos|CNdIK;0QDB!Cmb94ms4bdM}vN7`o`X5cB%la zJC}9EpX5C^$&lgkg<$175M^;@_2Q~upE-Q)g5(ea{<&UBe%thqz%Oy2>O_#!w>w_u zlXyC&1i`5*Va{o!bBr2*3_6_-F#>hJY0i{>>_%2!tatW;CORm2>=!9};}b#eLNy^c z_^)C*p@v^;-^i>)*=*9zqcz5RPpetf4(k9WVI{UYk~oiJdcn-j#MWm!66X(KUAf*4U1oa|1;)eY$h@olci<7)W z2aC*~Lljk!a^fQmgFv7&+j&q8HgI+WHofEa7rUreT^~u}vfezlL=ELqj@%T(Ds6dyT8$>Y z66_2v=Xbi_1z=s4lnR!+Kik+i0>RHibCB9Yy_V!OA`oEiz#P2Cu2A}E9-4hJ0^X7V4KL#j#e#2WeCF+4b_CJrg z5<4v91_n*UBZYfx@dJA&x#>J|0A1)3ta3G7KF>&Y7a4eVpdSO=D#NpSJr?CMK~VQ^ zQC+(hGWro9=!i|f5}$D8k!1)d&7bZgfCCecKWwM?-4Q&e4qJUT{?Nqs5@OD4FOg<( z8$>&?;5ZHfb;aN-VrDaA^|g(oinfTEbc zl&iM>zz8qS5g*xrN+uNu%Eb#}$2uEztoSoF3rAQi;<{R_}(9ET8)JuVA(3ufc z_^fU+#V5`KErU>axQ9jk=T@eCApHzuzWxUk!XK1>ySLU7bS>>-emWA{XL_-+6y5q% z|H7$`d9vkVUrs%P8vr56-*-gF`xh!L_+%&^=4P`&$~QM)*IDlvQ${0({3W{62nxy^ zmOvSWq$}6obq#pCxiLPVkCrBZ~7jJ+8U&S9t#1HmyLYIBTLEi)F6Y>`w*UP z{pZi}mqBJ!Mf!FUP@N6e026j9HvjBE=vYELx0XdRLDc0504`1{xCDaXEei#uMSc|+ z4Hek*f$RZ&5C{7=IUUZ7CX>S7q=xZ%!P%Sg;9Pm+Brd;JwBSy1RzjrZ+-~#MFI8ot zpM_lNV7EW!mylGt=typIkF+G$WP!O)oW4()F}$tZ@3YbixnQUYXVw=IvmbaW-DrK* zAR3Yrqo?OP5Rn($U<)O#y#fvY5;2D(d*=8=)AWcHsA++N7WE=IfR6A|k!f?ujxf~5 zWTo1@GwdR7R|p&xD(7J5a=zAMAAFm;tpQ#uFVqSYq+_H;!Dc6SdAs7<0ki%U=Jrwi zmHe7A6j!*L5?Z7s`h^SJ@w(cz1`@^DXdLG(s=;rG`ot6s-LiImQ+=(H$e6(RwmEUC z-G%QF3l-60>oGDWY|(xWEyQ_EX}YX|_RrmPx$1F%B zO;UA!3|$@TcV3XmTbmTq)PLSK@N7{#RMrMTU!5MA-Pj2R#U4${Lp+lla-`nO-6~0I%ym}Zl*BACljx1 zS)(I8=7u2;-Em74$J!XX4M&ixZZX`dNdsK6sc3TM71^!{q51K=%(si=ZwetW@x(%6 zVDTo^`4&_Zrh~aub0=$2eho*Htwm7YWGdg zj0fHNtiMAeV7ZmbOH(@<>FV`93G*($>YxW=x>x5qJ5}r^#r^1qmV9m{+~Jmj#a-?S zzMdFCF&#-yb>FIJ_-lqM_nr1DW5I~6$~bX>cn`J zgFBwbREHID*p(#L-Z+~z8AMo~g;n-AAcn)H6l}XPcMPo^Io4_v1t)WeFnjObI9=~&*9Z=*qR`v;TPVhX(I?iOl^PQgRD%-mZJaFGlhbSw0*0()`5?woAo9aedO zRw3AE%h^;+Z9*ru*td`wb5f{+%?+NVjTYYGAe~`k;fL8m(9F|H+uudh=D`U}gC~6R zg@cE|yPfN6?Ug2N5asdZm3IM-XWEaOjAdSk!Iu&oVChd5*R8YLg|-bK-x?>M|V9pEE5@q0CF(if?}-ohb2< zJ|(P*byt|EHEi{esAet%zLmWZRmd})N1VUdz|n$CupldCh0tgM zri)7E(jsPdurtw+@hFF$u#VreG>)N9wYrrDY4{+FZA!@vDCYI$g=h z+OFf?I)}CP-wov1aSwr3yToTXU(AtGD;TC*VY%x+<+nG(FVD`~I5o4S-Ka!WOs5we z$GW!6yLCnFYU=lF{7;5fXdqWjFttUYyVrf{V$z&O6gEGXD@5G-kqX4lnsC zlxZW1>Fv*x=6p25V1-9{N#9wBv}y;D@m)tXuHV=>w)$P58OQo3zh^ZLVFynz3`UfI z(2eHlgUSI@)hq!fiQcP)5q5SR|g##8ppMf zSn1$*1|qh@PzN?4e9dqbFv#Ks zv%gy}6cHbKkUcTwOss5p1dmT!rllh_&WmtUY^A)T5old)huC~kB!B6TR#nRP;g-+Bgawve@m5M@jH=%b zSlbxCge*Aiayak`j^5k*)mHzx_A(`fvq(iBA}&P7zt`H-`)&_r^otOqI&L}le9Lrx zS9(XyYrE=_n^h&PjR)W_L)@dhJ7Tcr`lH|%RkN$0XY$?n3!^3zjLw^CGMhgJX+`u^ zW-U}8MBR18d zYINF-2PsqQ>P<${$lh=P{Aq(reBGc=+zxoZH*QW1iX49Up4QUjGW|kFSMb6+j2{?6 z3ocNlPU1~JKP1&YBW@nu8zIZ_JITl)SwV8j{5vO$1_Ld1p_MNe{`_dQxYG2{NVlI1 z%=+S0{{3~emtKlh|Dsea*UHxkIU;D=l>wotmW;$L8F;kMEE>Ez@a5&>P6c+kJA-wFTTs@v3Os7o13nwm}BoE+6-Z(iVHauk_MQi4T# zW=?8ipZI&8U>4^u4DxsYuBv*gn;xU)+lX?pc8)Oj3WGSj~ToJtqH+Aw42{zCT(j&bjXl$p>0dFV<$45jQDJ z#640e#|M!E9gh@qh*w4>@N<|e#z|d{;H#$Za?G7dZFjyUQ^p%@y%l^p8yBnERxd~w z(<;1c0?F@XqHLQoTqNo-@)=*Zm7vj(G5z*$s-By!fOMZxX3E1&&8!JVfTG6U8ffss zp6(`mI*XUXc>M?I<>Ln3Z$G%xdLD5^@NP;>v#Jj5v>fMVjWw}in|{e<(;WDu)=k0{Ov#gVfNcMj5oIGiV_6b{+ZCob!< zl*l{=VyM?B&Y`c#Vg&|!dM64ZK_|9bpX^HL#X+ZX;+?i#S+|s|7l*+5@>I>2BK{~P zI$)O{PFermx7leZR@6}xDs>!c8aJZp2i zzFOZoO4Lpt=Um~M7s#l$68bBMj_U0yg40e!kjaO0Vy5@X(v;Mu`lke z>Pa94yH$;iW28ONPst`^Dxcl4&DyB`-Ap1u4Btw+^3704T5f&Tj+V2o{0oU~TYK9t zPO3uP{j+@YeVU~ofYndu>m*)}rFc~bjxT3wj!%^YBLyyN=L@;%R+g^bZN!=!p^aFaZG8e5Z>9CnLJ+yghIw zroHm7Ig-UjHfM+H_S#gz%MdA%q` zS2hM4djurM@vBLMzj4obA!ct8L<}4eA}rD5oV=t0#ZOJmINUz;*qi z6H9&1%6D%3itasg#GrUAf4(_VBg1;q(Uk(VHpf=Jh2p9LqV@GmR_e~mh7y2!GjiHrnTKabV~>uKX?`9{STxT|jEx8{S=*E;*~SVgwj4YPS#kD^2b6*o zcu?I35|%pPDt|cWauM@b?_+_z4`F{XGiK{uwCBZ>a%Ob~6Ult%B^Rl85bnQ5l5WlM zo#7c%o&Ht!x;xRYsy3sf(B1ET3YHwCcx`bD28>3#j3-FVA>@8`)W%Eg)YPmrSiZv- zc6{1sh}ro<+d%a(K~(miwddKqr|G(x<2t*YyL@*oZ<*YNVUEYUSW=Ai)bid=*(`4? z@l_J4+P7eLR2s2DGjCh%toQ_f?d3M&!5ktxt%IosgC4IVa^C(RH&DTM$Sr_BWmxi*6F>{w^ zx5(@iTEnkmH+hI9V1Z61JrA6Zf$5xi~DYIus2xd9=GN3j4^}bQ4$f72G+hAZlrg?$NZV4(9M% zNQU!eOLU+wRvUpO=UnO|w84Mi*UJT0Sk|aG@>0>HhWaN>aI7=I( zF*bs-0!~`iUI--g^NyM2)kVIE*JfF<+>J}pH=gR(B|fK&nvzLV8I8Nr<;-WqCCnb> zTH$p?p^yce4W_3CN~tBIdG;q{;y{8K%P>4K z(Xtryzi+SAHC6e%&2$|zp(AqqvTPu-sa?rT!0DG(jAqcYhc z9D6?AGK&d&xIdtMw%xCZ@6$ysgqYgkdn%Iqc<~I5&lj^=lbZ6USwZ|j(F6-%!R^!rm|N7;5 z6|V#E)69v`prQl;$o^{h0=kYA(K_jpZ8YMv_jKgLu2get(RVf8a~iL4x14M5_R(Ek zDDE9@9^R5!L5|UX;=1#>CA!TLY9GE}zI$;x|4>y5#2CDCdZ@KAw3_{$-Bp zeN3Q+*7#IyG#3Z8YSnVVBAIrC^Sq{4z+<|tRPQIsjh;*e72w>R>6`ZAvLDi_i$-`$ z({5f{6B1ZTdMKt623ncHVho~fd?oOL{Ez9dO!=WX*#4fcp~)UU-kK@VU`f_*Q-%#3oZ{W;VU3WXb&Fl>;G?iSml(__S`;!7!1#8INSAdFH#P`mrpE~k=g8#^rS zGfow?TB$YOQhhXW#|aHQ;cIJQuv7CtV`*#L@Ri6z2ky|}3EN51!&8WWFslqfl~0@9 z2RRTX5n1iOY0zjv9zRc$*`a(#4<^>#HADGWmPSOMc;7+AaRbjvBy@PCKps*iHsbH7 z`pR&bjTN6=BgDuVXJ|#~w#ig^g+9LeYik9k&)9m5G+jX|whjv2Ja*pqpWI(`87Xp+`(B1P)pAM+v zsN%(m$dU4Go~iMc4+k<@F4nia^5%@Mu0G2}m(AMS_{5q6g%~g_*6XM~lxXA#;EEM& zL?55G%SVNsBHl(5A4*a95Il;4a4b`;DACXM@rPUa|M{G1AcV7~2atIaVB{wM!sFt( z2=R-oIry>Nms8+;yW865M8irKvfLqD>RbaekitEDRGo%0$9q)-(E3B#Go@-9Z$J$2 zS~^!hAnY7)N~Q|y@484USWNV+RC8oo*d2xejm_iWuj%EFlz7HzL;jUz%jK>JWx{=C$+oGDL2iN zvB4%P1)J!nK5lnNaxwf_!fJcYdlM@Tz?*a-BkhPn9|q2Ef79|gb3gGo8!vRbOmK!$ za6JYe#q6^lJwN9lSWSB(L97qz*))x{%qFQeShVqM!G2W+sIH$j4Ijx1>Y0LZq9Qr= z(IRFYTy)q=%BLQDb=-a&jzqnn<-w|TXH(|I!S7jWn%37bcIX#|DGWb3nZ>Z+taI2QQzfGT;>E0^0vJ>d&!L z7#+mtykIiyBq^@on(5qYltaJN5CYxg`mljqUX$#U_J2j`EJ{xs&B zDR)!6#@*5ElMzDr1nZ=7y$6))6Mc`kyGVUq*p zCak-j$p87#^Ykc6oH8543Xb?XU2r#sZ-Iau^{8As5i(AN)m}OHb;tdqA|hWBE8H?O z!*+5dinE&%J3NQyz;|LRWgTdf4>)}adrzr~tziav5#eU0J+>_k0|q_7PNhH%TW_SG z#$z7Sai;W&Va48uqD#pOQV`FByCZX^khU7Jl&0 z$~v`;kisUaEU85HrpUVHJ0Fl~J{D3ay$FOo#SNAS zx48?Y{pWs#O^&CcErUsBN!nOIo0p3Lf|TaQu70_k|26}r3-i!C=U3wx!6%YuyJ^M3 b#j^OIh?chRB?JBekM&YX?RlA^dFcNIZM>@f literal 0 HcmV?d00001 diff --git a/src/webapp/contexts/app-context.ts b/src/webapp/contexts/app-context.ts new file mode 100644 index 000000000..3e044f54f --- /dev/null +++ b/src/webapp/contexts/app-context.ts @@ -0,0 +1,19 @@ +import React, { useContext } from "react"; +import { CompositionRoot } from "$/CompositionRoot"; +import { User } from "$/domain/entities/User"; + +export interface AppContextState { + currentUser: User; + compositionRoot: CompositionRoot; +} + +export const AppContext = React.createContext(null); + +export function useAppContext() { + const context = useContext(AppContext); + if (context) { + return context; + } else { + throw new Error("App context uninitialized"); + } +} diff --git a/src/webapp/main.tsx b/src/webapp/main.tsx new file mode 100644 index 000000000..38cccb57a --- /dev/null +++ b/src/webapp/main.tsx @@ -0,0 +1,7 @@ +import ReactDOM from "react-dom/client"; +import { Dhis2App } from "./pages/app/Dhis2App"; + +const domElementId = "root"; +const root = document.getElementById(domElementId); +if (!root) throw new Error(`Root DOM element not found: id=${domElementId}`); +ReactDOM.createRoot(root).render(); diff --git a/src/webapp/pages/Router.tsx b/src/webapp/pages/Router.tsx new file mode 100644 index 000000000..e011f989c --- /dev/null +++ b/src/webapp/pages/Router.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { HashRouter, Route, Switch } from "react-router-dom"; +import { ExamplePage } from "./example/ExamplePage"; +import { LandingPage } from "./landing/LandingPage"; + +export function Router() { + return ( + + + } + /> + + {/* Default route */} + } /> + + + ); +} diff --git a/src/webapp/pages/app/App.css b/src/webapp/pages/app/App.css new file mode 100644 index 000000000..4f0ed8f11 --- /dev/null +++ b/src/webapp/pages/app/App.css @@ -0,0 +1,13 @@ +html { + background-color: #f3f3f3; + font-family: Roboto, Arial, sans-serif; + overflow-y: scroll; +} + +body { + margin: 0; +} + +li { + line-height: 1.75; +} diff --git a/src/webapp/pages/app/App.tsx b/src/webapp/pages/app/App.tsx new file mode 100644 index 000000000..281778757 --- /dev/null +++ b/src/webapp/pages/app/App.tsx @@ -0,0 +1,60 @@ +import styled from "styled-components"; +import { HeaderBar } from "@dhis2/ui"; +import { SnackbarProvider } from "@eyeseetea/d2-ui-components"; +import { MuiThemeProvider } from "@material-ui/core/styles"; +//@ts-ignore +import OldMuiThemeProvider from "material-ui/styles/MuiThemeProvider"; +import React, { useEffect, useState } from "react"; +import { CompositionRoot } from "$/CompositionRoot"; +import { AppContext, AppContextState } from "$/webapp/contexts/app-context"; +import { Router } from "$/webapp/pages/Router"; +import "./App.css"; +import muiThemeLegacy from "./themes/dhis2-legacy.theme"; +import { muiTheme } from "./themes/dhis2.theme"; + +export interface AppProps { + compositionRoot: CompositionRoot; +} + +function App(props: AppProps) { + const { compositionRoot } = props; + const [loading, setLoading] = useState(true); + const [appContext, setAppContext] = useState(null); + + useEffect(() => { + async function setup() { + const currentUser = await compositionRoot.users.getCurrent.execute().toPromise(); + if (!currentUser) throw new Error("User not logged in"); + + setAppContext({ currentUser, compositionRoot }); + setLoading(false); + } + setup(); + }, [compositionRoot]); + + if (loading) return null; + + return ( + + + + + +
    + + + +
    +
    +
    +
    + ); +} + +const StyledHeaderBar = styled(HeaderBar)` + div:first-of-type { + box-sizing: border-box; + } +`; + +export default React.memo(App); diff --git a/src/webapp/pages/app/Dhis2App.tsx b/src/webapp/pages/app/Dhis2App.tsx new file mode 100644 index 000000000..e1c0dc507 --- /dev/null +++ b/src/webapp/pages/app/Dhis2App.tsx @@ -0,0 +1,97 @@ +import React from "react"; +import i18n from "@dhis2/d2-i18n"; +import { Provider } from "@dhis2/app-runtime"; +import { D2Api } from "$/types/d2-api"; +import App from "./App"; +import { CompositionRoot, getWebappCompositionRoot } from "$/CompositionRoot"; + +export function Dhis2App(_props: {}) { + const [compositionRootRes, setCompositionRootRes] = React.useState({ + type: "loading", + }); + + React.useEffect(() => { + getData().then(setCompositionRootRes); + }, []); + + switch (compositionRootRes.type) { + case "loading": + return

    Loading...

    ; + case "error": { + const { baseUrl, error } = compositionRootRes.error; + return ( +

    +

    {error.message}

    + + Login {baseUrl} + + + ); + } + case "loaded": { + const { baseUrl, compositionRoot } = compositionRootRes.data; + const config = { baseUrl, apiVersion: 30 }; + + return ( + + + + ); + } + } +} + +type Data = { + compositionRoot: CompositionRoot; + baseUrl: string; +}; + +async function getData(): Promise { + const baseUrl = await getBaseUrl(); + + const auth = env["VITE_DHIS2_AUTH"]; + const [username = "", password = ""] = auth.split(":"); + const api = auth + ? new D2Api({ baseUrl: baseUrl, auth: { username, password } }) + : new D2Api({ baseUrl: baseUrl }); + const compositionRoot = getWebappCompositionRoot(api); + + const userSettings = await api.get<{ keyUiLocale: string }>("/userSettings").getData(); + configI18n(userSettings); + + try { + return { type: "loaded", data: { baseUrl, compositionRoot } }; + } catch (err) { + return { type: "error", error: { baseUrl, error: err as Error } }; + } +} + +const env = import.meta.env; +const isDev = env.DEV; + +async function getBaseUrl() { + if (isDev) { + return "/dhis2"; // See src/setupProxy.js + } else { + const manifest = await fetch("manifest.webapp").then(res => res.json()); + return manifest.activities.dhis.href; + } +} + +const isLangRTL = (code: string) => { + const langs = ["ar", "fa", "ur"]; + const prefixed = langs.map(c => `${c}-`); + return langs.includes(code) || prefixed.filter(c => code && code.startsWith(c)).length > 0; +}; + +const configI18n = ({ keyUiLocale }: { keyUiLocale: string }) => { + i18n.changeLanguage(keyUiLocale); + document.documentElement.setAttribute("dir", isLangRTL(keyUiLocale) ? "rtl" : "ltr"); +}; + +type Result = + | { type: "loading" } + | { type: "loaded"; data: Data } + | { type: "error"; error: E }; + +type CompositionRootResult = Result; diff --git a/src/webapp/pages/app/__tests__/App.spec.tsx b/src/webapp/pages/app/__tests__/App.spec.tsx new file mode 100644 index 000000000..8bdd000ee --- /dev/null +++ b/src/webapp/pages/app/__tests__/App.spec.tsx @@ -0,0 +1,25 @@ +import { fireEvent, render } from "@testing-library/react"; + +import App from "$/webapp/pages/app/App"; +import { getTestContext } from "$/utils/tests"; +import { Provider } from "@dhis2/app-runtime"; + +describe("App", () => { + it("navigates to page", async () => { + const view = getView(); + + fireEvent.click(await view.findByText("John")); + + expect(await view.findByText("Hello John")).toBeInTheDocument(); + expect(view.asFragment()).toMatchSnapshot(); + }); +}); + +function getView() { + const { compositionRoot } = getTestContext(); + return render( + + + + ); +} diff --git a/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap b/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap new file mode 100644 index 000000000..077af0848 --- /dev/null +++ b/src/webapp/pages/app/__tests__/__snapshots__/App.spec.tsx.snap @@ -0,0 +1,48 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`App > navigates to page 1`] = ` + +
    +
    +
    + +
    + Detail page +
    +
    +

    + Hello John +

    +
    + +`; diff --git a/src/App/app.theme.js b/src/webapp/pages/app/themes/dhis2-legacy.theme.ts similarity index 68% rename from src/App/app.theme.js rename to src/webapp/pages/app/themes/dhis2-legacy.theme.ts index 8f0ab4087..7d4ed0d42 100644 --- a/src/App/app.theme.js +++ b/src/webapp/pages/app/themes/dhis2-legacy.theme.ts @@ -1,25 +1,26 @@ import { - blue500, - blue700, - blue100, - orange500, - grey100, + cyan100, + cyan500, + cyan700, darkBlack, - white, - grey500, + grey100, grey400, + grey500, + orange500, + white, } from "material-ui/styles/colors"; import { fade } from "material-ui/utils/colorManipulator"; import Spacing from "material-ui/styles/spacing"; import getMuiTheme from "material-ui/styles/getMuiTheme"; +import { MuiTheme } from "material-ui/styles"; const theme = { spacing: Spacing, fontFamily: "Roboto, sans-serif", palette: { - primary1Color: blue500, - primary2Color: blue700, - primary3Color: blue100, + primary1Color: cyan500, + primary2Color: cyan700, + primary3Color: cyan100, accent1Color: orange500, accent2Color: grey100, accent3Color: grey500, @@ -31,13 +32,13 @@ const theme = { }, }; -function createAppTheme(style) { +function createAppTheme(style: MuiTheme) { return { sideBar: { backgroundColor: "#F3F3F3", backgroundColorItem: "transparent", - backgroundColorItemActive: style.palette.accent2Color, - textColor: style.palette.textColor, + backgroundColorItemActive: style.palette?.accent2Color, + textColor: style.palette?.textColor, textColorActive: "#276696", borderStyle: "1px solid #e1e1e1", }, @@ -46,10 +47,12 @@ function createAppTheme(style) { maxWidth: 900, }, formFields: { - secondaryColor: style.palette.accent4Color, + secondaryColor: style.palette?.accent3Color, }, tabs: { - backgroundColor: "#e4e4e4", + backgroundColor: "#E4E4E4", + inkBarColor: style.palette?.accent1Color, + textColor: "#666666", }, }; } diff --git a/src/App/dhis2.theme.js b/src/webapp/pages/app/themes/dhis2.theme.ts similarity index 92% rename from src/App/dhis2.theme.js rename to src/webapp/pages/app/themes/dhis2.theme.ts index 0f264f688..29bddb6af 100644 --- a/src/App/dhis2.theme.js +++ b/src/webapp/pages/app/themes/dhis2.theme.ts @@ -1,7 +1,7 @@ -import { createMuiTheme } from "@material-ui/core/styles"; +import { createTheme } from "@material-ui/core/styles"; // Color palette from https://projects.invisionapp.com/share/A7LT4TJYETS#/screens/302550228_Color -export const colors = { +const colors = { accentPrimary: "#1976d2", accentPrimaryDark: "#004BA0", accentPrimaryLight: "#63A4FF", @@ -26,7 +26,7 @@ export const colors = { info: "#EAF4FF", }; -export const palette = { +const palette = { common: { white: colors.white, black: colors.black, @@ -74,12 +74,12 @@ export const palette = { shadow: colors.grey, }; -export const muiTheme = createMuiTheme({ - colors, +export const muiTheme = createTheme({ + // colors, palette, typography: { fontFamily: "Roboto, Helvetica, Arial, sans-serif", - useNextVariants: true, + // useNextVariants: true, }, overrides: { MuiDivider: { diff --git a/src/webapp/pages/example/ExamplePage.tsx b/src/webapp/pages/example/ExamplePage.tsx new file mode 100644 index 000000000..c444f3b1e --- /dev/null +++ b/src/webapp/pages/example/ExamplePage.tsx @@ -0,0 +1,30 @@ +import React from "react"; +import { useHistory } from "react-router-dom"; +import styled from "styled-components"; +import i18n from "$/utils/i18n"; +import { PageHeader } from "$/webapp/components/page-header/PageHeader"; + +export const ExamplePage: React.FC = React.memo(props => { + const { name } = props; + const title = i18n.t("Hello {{name}}", { name }); + const history = useHistory(); + + const goBack = React.useCallback(() => { + history.goBack(); + }, [history]); + + return ( + + + {title} + + ); +}); + +const Title = styled.h2` + color: blue; +`; + +interface ExamplePageProps { + name: string; +} diff --git a/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx b/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx new file mode 100644 index 000000000..b4ea226cf --- /dev/null +++ b/src/webapp/pages/example/__tests__/ExamplePage.spec.tsx @@ -0,0 +1,15 @@ +import { getReactComponent } from "$/utils/tests"; +import { ExamplePage } from "$/webapp/pages/example/ExamplePage"; + +describe("ExamplePage", () => { + it("renders the feedback component", async () => { + const view = getView(); + + expect(await view.findByText("Hello Mary")).toBeInTheDocument(); + expect(view.asFragment()).toMatchSnapshot(); + }); +}); + +function getView() { + return getReactComponent(); +} diff --git a/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap b/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap new file mode 100644 index 000000000..b1962f721 --- /dev/null +++ b/src/webapp/pages/example/__tests__/__snapshots__/ExamplePage.spec.tsx.snap @@ -0,0 +1,40 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`ExamplePage > renders the feedback component 1`] = ` + +
    + +
    + Detail page +
    +
    +

    + Hello Mary +

    +
    +`; diff --git a/src/webapp/pages/landing/LandingPage.tsx b/src/webapp/pages/landing/LandingPage.tsx new file mode 100644 index 000000000..2166c73da --- /dev/null +++ b/src/webapp/pages/landing/LandingPage.tsx @@ -0,0 +1,40 @@ +import { Typography } from "@material-ui/core"; +import React from "react"; +import { useHistory } from "react-router-dom"; +import { Card, CardGrid } from "$/webapp/components/card-grid/CardGrid"; +import { useAppContext } from "$/webapp/contexts/app-context"; +import i18n from "$/utils/i18n"; + +export const LandingPage: React.FC = React.memo(() => { + const history = useHistory(); + const { currentUser } = useAppContext(); + + const cards: Card[] = [ + { + title: i18n.t("Section"), + key: "main", + children: [ + { + name: "John", + description: "Entry point 1", + listAction: () => history.push("/for/John"), + }, + { + name: "Mary", + description: "Entry point 2", + listAction: () => history.push("/for/Mary"), + }, + ], + }, + ]; + + return ( + <> + + Current user: {currentUser.name} [{currentUser.id}] + + + + + ); +}); diff --git a/test/app/App.test.js b/test/app/App.test.js deleted file mode 100644 index a17452c28..000000000 --- a/test/app/App.test.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import log from 'loglevel'; - -import App from '../../src/app/App'; -import HeaderBar from 'd2-ui/lib/app-header/HeaderBar'; -import Sidebar from 'd2-ui/lib/sidebar/Sidebar.component'; - -describe('App', () => { - let appComponent; - - beforeEach(() => { - appComponent = shallow(); - }); - - it('should render the startup text', () => { - expect(appComponent.find('.main-content').text()).to.equal('Hello, John! Your app skeleton set up correctly!'); - }); - - it('should render the custom name if it is passed', () => { - appComponent = shallow(); - - expect(appComponent.find('.main-content').text()).to.equal('Hello, Mark! Your app skeleton set up correctly!'); - }); - - xit('should render the HeaderBar component from d2-ui', () => { - expect(appComponent.find(HeaderBar)).to.have.length(1); - }); - - it('should render the Sidebar component from d2-ui', () => { - expect(appComponent.find(Sidebar)).to.have.length(1); - }); - - it('should pass two sections to the Sidebar component', () => { - const sidebarComponent = appComponent.find(Sidebar); - - expect(sidebarComponent.props().sections).to.have.length(2); - }); - - it('should pass the key and label properties for the sections', () => { - const sidebarComponent = appComponent.find(Sidebar); - const sidebarSections = sidebarComponent.props().sections; - - expect(sidebarSections).to.deep.equal([ - { key: 'item1', label: 'Item 1' }, - { key: 'item2', label: 'Item 2' }, - ]); - }); - - it('should log to console when a sidebar onChangeSection is called', () => { - spy(log, 'info'); - - const sidebarComponent = appComponent.find(Sidebar); - sidebarComponent.props().onChangeSection('item1'); - - expect(log.info).to.be.calledWith('Clicked on ', 'item1'); - }); -}); diff --git a/test/tests.js b/test/tests.js deleted file mode 100644 index 167d70d80..000000000 --- a/test/tests.js +++ /dev/null @@ -1,11 +0,0 @@ -beforeEach(function beforeEachSetup() { - this.sandbox = global.sinon.sandbox.create(); - global.stub = this.sandbox.stub.bind(this.sandbox); - global.spy = this.sandbox.spy.bind(this.sandbox); -}); - -afterEach(function afterEachSetup() { - delete global.stub; - delete global.spy; - this.sandbox.restore(); -}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..0b6c2b784 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noUncheckedIndexedAccess": true, + "noEmit": true, + "jsx": "react-jsx", + "baseUrl": "./src", + "paths": { + "$/*": ["./*"] + } + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 000000000..13b35d0ba --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 000000000..1e062a847 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,73 @@ +/// +import { defineConfig, loadEnv } from "vite"; +import react from "@vitejs/plugin-react"; +import checker from "vite-plugin-checker"; +import nodePolyfills from "vite-plugin-node-stdlib-browser"; +import * as path from "path"; + +export default ({ mode }) => { + const env = { ...process.env, ...loadEnv(mode, process.cwd()) }; + const proxy = getProxy(env); + + // https://vitejs.dev/config/ + return defineConfig({ + base: "", // Relative paths + plugins: [ + nodePolyfills(), + react(), + checker({ + overlay: false, + typescript: true, + eslint: { + lintCommand: 'eslint "./src/**/*.{ts,tsx}"', + dev: { + logLevel: ["warning"], + }, + }, + }), + ], + test: { + environment: "jsdom", + include: ["**/*.spec.{ts,tsx}"], + setupFiles: "./src/tests/setup.js", + exclude: ["node_modules", "src/tests/playwright"], + globals: true, + }, + server: { + port: parseInt(env.VITE_PORT), + proxy: proxy, + }, + resolve: { + alias: { + $: path.resolve(__dirname, "./src"), + }, + }, + }); +}; + +function getProxy(env: Record) { + const dhis2UrlVar = "VITE_DHIS2_BASE_URL"; + const dhis2AuthVar = "VITE_DHIS2_AUTH"; + const targetUrl = env[dhis2UrlVar]; + const auth = env[dhis2AuthVar]; + const isBuild = env.NODE_ENV === "production"; + + if (isBuild) { + return {}; + } else if (!targetUrl) { + console.error(`Set ${dhis2UrlVar}`); + process.exit(1); + } else if (!auth) { + console.error(`Set ${dhis2AuthVar}`); + process.exit(1); + } else { + return { + "/dhis2": { + target: targetUrl, + changeOrigin: true, + auth: auth, + rewrite: path => path.replace(/^\/dhis2/, ""), + }, + }; + } +} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 7a68d719c..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,133 +0,0 @@ -"use strict"; - -var webpack = require("webpack"); -var path = require("path"); -var colors = require("colors"); - -const isDevBuild = process.argv[1].indexOf("webpack-dev-server") !== -1; -const dhisConfigPath = process.env.DHIS2_HOME - ? `${process.env.DHIS2_HOME}/config` - : `${__dirname}/config`; -let dhisConfig; - -try { - dhisConfig = require(dhisConfigPath); - console.log("\nLoaded DHIS config:"); -} catch (e) { - // Failed to load config file - use default config - console.warn(`\nWARNING! Failed to load DHIS config:`, e.message); - console.info("Using default config"); - dhisConfig = { - baseUrl: "http://localhost:8031", - authorization: "Basic YWRtaW46ZGlzdHJpY3Q=", // admin:district - }; -} -console.log(JSON.stringify(dhisConfig, null, 2), "\n"); - -function log(req, res, opt) { - req.headers.Authorization = dhisConfig.authorization; - console.log( - "[PROXY]".cyan.bold, - req.method.green.bold, - req.url.magenta, - "=>".dim, - opt.target.dim - ); -} - -const webpackConfig = { - context: __dirname, - contentBase: __dirname, - entry: "./src/app.js", - devtool: "source-map", - output: { - path: __dirname + "/build", - filename: "app.js", - publicPath: "http://localhost:8081/", - }, - module: { - loaders: [ - { - test: /\.jsx?$/, - exclude: /node_modules/, - loader: "babel", - query: { - presets: ["es2015", "stage-0", "react"], - }, - }, - { - test: /\.css$/, - loader: "style!css", - }, - { - test: /\.scss$/, - loader: "style!css!sass", - }, - { - test: /\.json$/, - loader: "json-loader", - }, - ], - }, - resolve: { - extensions: ["", ".js", ".jsx"], - alias: { - react: path.resolve("./node_modules/react"), - "material-ui": path.resolve("./node_modules/material-ui"), - d2: __dirname + "/node_modules/d2", - }, - }, - devServer: { - progress: true, - colors: true, - port: 8081, - inline: true, - compress: true, - proxy: [ - { path: "/api/*", target: dhisConfig.baseUrl, bypass: log }, - { path: "/dhis-web-commons/*", target: dhisConfig.baseUrl, bypass: log }, - { path: "/icons/*", target: dhisConfig.baseUrl, bypass: log }, - { path: "/css/*", target: "http://localhost:8081/build", bypass: log }, - { path: "/i18n/*", target: "http://localhost:8081/src", bypass: log }, - { - path: "/jquery.min.js", - target: "http://localhost:8081/node_modules/jquery/dist", - bypass: log, - }, - { - path: "/polyfill.min.js", - target: "http://localhost:8081/node_modules/babel-polyfill/dist", - bypass: log, - }, - ], - }, -}; - -if (!isDevBuild) { - webpackConfig.plugins = [ - // Replace any occurance of process.env.NODE_ENV with the string 'production' - new webpack.DefinePlugin({ - "process.env.NODE_ENV": '"production"', - DHIS_CONFIG: JSON.stringify({}), - }), - new webpack.optimize.DedupePlugin(), - new webpack.optimize.OccurenceOrderPlugin(), - /* - new webpack.optimize.UglifyJsPlugin({ - // compress: { - // warnings: false, - // }, - comments: false, - beautify: true, - }), - */ - ]; -} else { - webpackConfig.plugins = [ - new webpack.DefinePlugin({ - DHIS_CONFIG: JSON.stringify(dhisConfig), - }), - ]; -} - -module.exports = webpackConfig; diff --git a/yarn.lock b/yarn.lock index c3a43653d..bd0f38220 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,2044 +2,5039 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== - dependencies: - "@babel/highlight" "^7.0.0" +"$@link:./src": + version "0.0.0" + uid "" -"@babel/generator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" - integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== - dependencies: - "@babel/types" "^7.4.0" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" +"@adobe/css-tools@^4.0.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" + integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@babel/types" "^7.0.0" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" -"@babel/helper-split-export-declaration@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" - integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/types" "^7.4.0" + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== +"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" + integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== + +"@babel/core@^7.0.0-0", "@babel/core@^7.16.0", "@babel/core@^7.20.12": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" + integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.20" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.20" + "@babel/types" "^7.22.19" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/eslint-parser@^7.16.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" + integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + +"@babel/generator@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== + dependencies: + "@babel/types" "^7.22.15" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" + integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" + integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.0.tgz#6de669e73ac3a32c754280d0fef8fca6aad2c416" - integrity sha512-ZmMhJfU/+SXXvy9ALjDZopa3T3EixQtQai89JRC48eM9OUwrxJjYjuM/0wmdl2AekytlzMVhPY8cYdLb13kpKQ== +"@babel/parser@^7.22.15", "@babel/parser@^7.22.16": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== -"@babel/runtime@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.42.tgz#352e40c92e0460d3e82f49bd7e79f6cda76f919f" - integrity sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" + integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: - core-js "^2.5.3" - regenerator-runtime "^0.11.1" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" - integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" + integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: - regenerator-runtime "^0.13.2" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" -"@babel/template@^7.1.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" - integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== +"@babel/plugin-proposal-class-properties@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/traverse@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" - integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA== +"@babel/plugin-proposal-decorators@^7.16.4": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz#dc774eae73ab8c28a644d490b45aa47a85bb0bf5" + integrity sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.0" - "@babel/parser" "^7.4.0" - "@babel/types" "^7.4.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/plugin-syntax-decorators" "^7.22.10" -"@babel/types@^7.0.0", "@babel/types@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" - integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@emotion/hash@^0.7.1": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" - integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@material-ui/core@^4.6.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.7.0.tgz#84c02a6d1c99c7900e184538c5f9d87e30cf4c23" - integrity sha512-mwLehUo0Q9ZxjuWo7J1uy1/Grh3nRxlOAaWJ3EtKeJP2HwqlSy8bWrcvRQYlapaYIPXa5jN8zWbTwi8Pk30VQg== +"@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.6.0" - "@material-ui/system" "^4.5.2" - "@material-ui/types" "^4.1.1" - "@material-ui/utils" "^4.5.2" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.2" - convert-css-length "^2.0.1" - hoist-non-react-statics "^3.2.1" - normalize-scroll-left "^0.2.0" - popper.js "^1.14.1" - prop-types "^15.7.2" - react-transition-group "^4.3.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@material-ui/icons@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.5.1.tgz#6963bad139e938702ece85ca43067688018f04f8" - integrity sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA== +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/runtime" "^7.4.4" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@material-ui/styles@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.6.0.tgz#15679fab6dcbe0cc2416f01a22966f3ea26607c5" - integrity sha512-lqqh4UEMdIYcU1Yth4pQyMTah02uAkg3NOT3MirN9FUexdL8pNA6zCHigEgDSfwmvnXyxHhxTkphfy0DRfnt9w== +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.7.1" - "@material-ui/types" "^4.1.1" - "@material-ui/utils" "^4.5.2" - clsx "^1.0.2" - csstype "^2.5.2" - hoist-non-react-statics "^3.2.1" - jss "^10.0.0" - jss-plugin-camel-case "^10.0.0" - jss-plugin-default-unit "^10.0.0" - jss-plugin-global "^10.0.0" - jss-plugin-nested "^10.0.0" - jss-plugin-props-sort "^10.0.0" - jss-plugin-rule-value-function "^10.0.0" - jss-plugin-vendor-prefixer "^10.0.0" - prop-types "^15.7.2" + "@babel/helper-plugin-utils" "^7.8.0" -"@material-ui/system@^4.5.2": - version "4.5.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.5.2.tgz#7143bd8422a3f33f435c23f378136254004bbd60" - integrity sha512-h9RWvdM9XKlHHqwiuhyvWdobptQkHli+m2jJFs7i1AI/hmGsIc4reDmS7fInhETgt/Txx7uiAIznfRNIIVHmQw== +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.5.2" - prop-types "^15.7.2" + "@babel/helper-plugin-utils" "^7.12.13" -"@material-ui/types@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b" - integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ== +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: - "@types/react" "*" + "@babel/helper-plugin-utils" "^7.14.5" -"@material-ui/utils@^4.5.2": - version "4.5.2" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.5.2.tgz#4c2fb531d357cf0da8cece53b588dff9b0bde934" - integrity sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ== +"@babel/plugin-syntax-decorators@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" + integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" -"@types/react-transition-group@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470" - integrity sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA== +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: - "@types/react" "*" + "@babel/helper-plugin-utils" "^7.8.3" -"@types/react@*": - version "16.9.13" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.13.tgz#b3ea5dd443f4a680599e2abba8cc66f5e1ce0059" - integrity sha512-LikzRslbiufJYHyzbHSW0GrAiff8QYLMBFeZmSxzCYGXKxi8m/1PHX+rsVOwhr7mJNq+VIu2Dhf7U6mjFERK6w== +"@babel/plugin-syntax-flow@^7.14.5", "@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" + "@babel/helper-plugin-utils" "^7.22.5" -abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -abbrev@1, abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -accepts@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" + "@babel/helper-plugin-utils" "^7.10.4" -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - acorn "^4.0.4" + "@babel/helper-plugin-utils" "^7.8.0" -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -acorn@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" -acorn@^4.0.3, acorn@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" -acorn@^6.0.7: - version "6.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" - integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" -ajv@^4.9.1: - version "4.11.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + "@babel/helper-plugin-utils" "^7.8.0" -ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + "@babel/helper-plugin-utils" "^7.8.0" -ajv@^6.9.1: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + "@babel/helper-plugin-utils" "^7.8.0" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" + "@babel/helper-plugin-utils" "^7.14.5" -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +"@babel/plugin-transform-async-generator-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" + integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +"@babel/plugin-transform-block-scoping@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" + integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== dependencies: - color-convert "^1.9.0" + "@babel/helper-plugin-utils" "^7.22.5" -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" +"@babel/plugin-transform-class-static-block@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" + integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" +"@babel/plugin-transform-destructuring@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" + integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== dependencies: - sprintf-js "~1.0.2" + "@babel/helper-plugin-utils" "^7.22.5" -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - arr-flatten "^1.0.1" + "@babel/helper-plugin-utils" "^7.22.5" -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" +"@babel/plugin-transform-dynamic-import@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" + integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +"@babel/plugin-transform-export-namespace-from@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" + integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +"@babel/plugin-transform-flow-strip-types@^7.16.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= +"@babel/plugin-transform-for-of@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" + integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" + "@babel/helper-plugin-utils" "^7.22.5" -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== + dependencies: + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +"@babel/plugin-transform-json-strings@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" + integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" + integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" + integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== + dependencies: + "@babel/helper-module-transforms" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" +"@babel/plugin-transform-modules-systemjs@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== dependencies: - util "0.10.3" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -assertion-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" + integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +"@babel/plugin-transform-numeric-separator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" + integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" +"@babel/plugin-transform-object-rest-spread@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" + integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.15" + +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" + integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" + integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" + integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" + integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" + +"@babel/plugin-transform-react-jsx-self@^7.18.6": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" + integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -async@1.x, async@^1.3.0, async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +"@babel/plugin-transform-react-jsx-source@^7.19.6": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" + integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -async@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" + integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.15" + +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@^7.16.4": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" + integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typescript@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" + integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.16.4": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" + integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + dependencies: + "@babel/compat-data" "^7.22.20" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.15" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.15" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.15" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.15" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-for-of" "^7.22.15" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" + "@babel/plugin-transform-modules-systemjs" "^7.22.11" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.19" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" -author-regex@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-0.2.1.tgz#8bdefaac6065a931799bec07eeef51b940e08f3c" +"@babel/preset-react@^7.16.0": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" + integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + +"@babel/preset-typescript@^7.16.0": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz#43db30516fae1d417d748105a0bc95f637239d48" + integrity sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" + "@babel/plugin-transform-typescript" "^7.22.15" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.0", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.1", "@babel/runtime@^7.9.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.5.4": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" + integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.16" + "@babel/types" "^7.22.19" + debug "^4.1.0" + globals "^11.1.0" -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" + integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.19" + to-fast-properties "^2.0.0" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +"@date-io/core@1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.6.tgz#5c518cee6fa011e754293aebc6f1192360061797" + integrity sha512-cihiu8YaTHh7IqrzekbZcA7dh+7uhViHgWyxcKAO2cg1DYGYC5J7z4/rnGGL7swrK5xFVLIeyoxJ+sacziIRKg== -aws4@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" - integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== +"@date-io/core@1.x", "@date-io/core@^1.0.2": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" + integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== -axobject-query@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" - integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== +"@date-io/moment@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-1.0.2.tgz#898ca98d2031376cfed3c7258a8078a26892a501" + integrity sha512-iQFRMH49cFYH/jzgYhdvmO+YfLRmsBZX293Vcfrvkfk+ovrd2g5KOtP5Je3CBlywfqNOQlCC3tKAxsIvaIDSYw== dependencies: - ast-types-flow "0.0.7" + "@date-io/core" "^1.0.2" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" +"@dhis2-ui/alert@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-6.12.0.tgz#7661759c505334674bab668d5b82828f87b4768d" + integrity sha512-adPF4xzo1D1h5LPBD4LrEGYssBow3Lqw6LSOUoek5lmaKqqcZmKB9KZyvFIRiUWEvoO63Jka/dmE4i++oL8oOQ== dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-core@^6.1.4, babel-core@^6.24.0, babel-core@^6.7.2: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.24.0" - babel-helpers "^6.23.0" - babel-messages "^6.23.0" - babel-register "^6.24.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-eslint@9.x: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" - integrity sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g== +"@dhis2-ui/alert@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/alert/-/alert-6.15.2.tgz#95d2de9ba0f316798d55339cb672ea632b470018" + integrity sha512-dDjHQ+5eWIPPTxBlWLIM3lPa/3Bd4DHenODi6pLsajMKKpSmrdqVo/AazQVYIqUWquVpZv2Cm/pqs4lmziNiNQ== dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -babel-generator@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -babel-helper-bindify-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" - dependencies: - babel-helper-explode-assignable-expression "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-builder-react-jsx@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.23.0" - esutils "^2.0.0" - lodash "^4.2.0" - -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" - dependencies: - babel-helper-hoist-variables "^6.22.0" - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-define-map@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" - dependencies: - babel-helper-function-name "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" - lodash "^4.2.0" - -babel-helper-explode-assignable-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-explode-class@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" - dependencies: - babel-helper-bindify-decorators "^6.22.0" - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" - dependencies: - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-optimise-call-expression@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.23.0" - -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" - -babel-helper-remap-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" - dependencies: - babel-helper-function-name "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" - dependencies: - babel-helper-optimise-call-expression "^6.23.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - -babel-helpers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.23.0" - -babel-loader@^6.2.4: - version "6.4.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" - dependencies: - find-cache-dir "^0.1.1" - loader-utils "^0.2.16" - mkdirp "^0.5.1" - object-assign "^4.0.1" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" +"@dhis2-ui/box@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-6.12.0.tgz#a0c16b7a8a12351c2ab3a19b4f9dbba6482f9ea7" + integrity sha512-rymrenQ+O5x0WnKDIpLvB3wRFszHCPU2GTtomg4jC/m00XJeCzwI4gQioKgbTx6Y2yF9XFe5ql9SW2VgK1gk+w== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" +"@dhis2-ui/box@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/box/-/box-6.15.2.tgz#7b27190363ad9250a7ea092646ab11f39c86a9cb" + integrity sha512-HXAQcFDjwEgjM8ZPS49hbkfV/bTkjC/aqPuXyJ6mqPS6S7r5bl4zzGVhVOSmi5V81Lhspx5qr16b79t6TukJTg== dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - -babel-plugin-syntax-do-expressions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" - -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-function-bind@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" +"@dhis2-ui/button@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-6.12.0.tgz#263fa2c90a5f28629f49f0cd57cdad0d8c998651" + integrity sha512-mcy0Z+QI0QUjVwo4seU+fTuzVX8OhzyGuxGT27g6qxYhPvYrL5Z2i8uIWKpZRhvQPTA/l7eoo/DU2SwRmQWMMA== + dependencies: + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +"@dhis2-ui/button@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/button/-/button-6.15.2.tgz#bdf44efa7ebd17df031c75495c833b6f8c4a8cae" + integrity sha512-MIhCN3fxHNOrlRCXVNqAi+sgZYCPfFzE/2hbMNLAtRWOQTBNqnicwfGNtcJY2wzkhO+y/8OJilmY2pBjZBjY1A== + dependencies: + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-async-generator-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" +"@dhis2-ui/card@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-6.12.0.tgz#86c576ca7aa2a5c12e83e98df8db49b3cf3f1b77" + integrity sha512-dptmtz+FovTgUtjMo9F3O/rpfX0529UT6NtGgyM+9hJ3l4rnDKNZqzNy2GXMRItBcDErSKy24ywDBNU8JnNjrQ== dependencies: - babel-helper-remap-async-to-generator "^6.22.0" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" +"@dhis2-ui/card@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/card/-/card-6.15.2.tgz#ac1db093fc1f3bc40fbca78f803e2a7d38dd69bb" + integrity sha512-y1KClCq1P9Kb5cqi/GgFeA593nrRnznXkK4mqW9xiygoB0R2ongPHSOAwJTSklff31Hzi9l2DIi1ZUgX871eaw== dependencies: - babel-helper-remap-async-to-generator "^6.22.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-class-constructor-call@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" +"@dhis2-ui/center@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-6.12.0.tgz#53b891d65618580bbc1ef6b23d1bde6a435bd58b" + integrity sha512-7ifx/ICrcHeQs1yGulodv7NbJTZrkRAdhB5tQaTfP236dpd2Tb2wZT1WMmZtcAddCIyp5WlAmfS3ABu9/8/INw== dependencies: - babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-class-properties@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" +"@dhis2-ui/center@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/center/-/center-6.15.2.tgz#7e4461c165c30b87d629bf390f03e54e8dbcb2c8" + integrity sha512-pjXWJ5nbYwNpf0t8iy/7DVN+bJnvO8XWRz3uraS8NJ7IjhHtLl0sktpG0tIatiAzjrtO1QLD9ds0o4oRgT52MQ== dependencies: - babel-helper-function-name "^6.23.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" +"@dhis2-ui/checkbox@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-6.12.0.tgz#b0d802e9f6468a2a1602c103f4bcd3b9519363c9" + integrity sha512-hgyRemDSbqSxjbNAx67RgJso/vSbMdNJWwszgz4Nyb8gqtva8um7jMNFAMqWXzHdEZwiSUt467AEdKnJfpM7WQ== dependencies: - babel-helper-explode-class "^6.22.0" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/required" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-do-expressions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" +"@dhis2-ui/checkbox@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/checkbox/-/checkbox-6.15.2.tgz#673d5f33025b4cb81984eb2c729eca5b14e12581" + integrity sha512-jM7KDsgq/fMOSoWTa08P3Qq6JzUM6zySsmCdEC4AHBmsD0u/2Eb1ktyv/BZQkPMx14lInSMtPsvcWCPaNtCtJg== dependencies: - babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/required" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" +"@dhis2-ui/chip@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-6.12.0.tgz#f90bac4f9b3cb5e4a374f8e14d8fb9c5d8c26269" + integrity sha512-llEsIp/N1tz6FKky/mrS0EHYWzuTocz2pne1ghHRjF0mBt+z/z28/2VaIGcMlDrSmzt1VbqLDjBa1tSyHeeG1g== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" +"@dhis2-ui/chip@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/chip/-/chip-6.15.2.tgz#8684980c993bb208eeca6bf625b112be346ac14c" + integrity sha512-G8DBc0EG2bIouZQ4uBWu5iB9QbWgX9WdPuGCnf6ZVIKQcM/NHFc74e2WW2XLrqqbpvm0xhNyopSAZhtZ+9YYzw== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" +"@dhis2-ui/cover@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-6.12.0.tgz#73549cc9a36ace5ddcd08d3c086c7d090942e1d0" + integrity sha512-HI2lo8xXdGsBShDjMpitrVokldtnm4fR09plnYJg39tJ23RuQEJDTYQczSXfYC6t60dGc/2mHsYFW3IMsraXsg== dependencies: - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - lodash "^4.2.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-classes@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" +"@dhis2-ui/cover@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/cover/-/cover-6.15.2.tgz#a946e696b27f6b2425f67d8f97db83e998dbeca3" + integrity sha512-iyio99zj7X88kmFBKN94MY3KLEUfFfJaDpwrrq683igBaOyd8wqkLnu+rDE4v7sSklsQoeuficJFJoRwA3CDCw== dependencies: - babel-helper-define-map "^6.23.0" - babel-helper-function-name "^6.23.0" - babel-helper-optimise-call-expression "^6.23.0" - babel-helper-replace-supers "^6.23.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" +"@dhis2-ui/css@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-6.12.0.tgz#886da44a8a860ce37471a0ebfdefdfc51058780f" + integrity sha512-SsGkVMmc0u2iYX6zhAA0s0bl7sIX5QiF0pxXU3u2IYdNZLgpndBBVtOoaI1r4pCe8fCn2SmB8DuINtj3pNG21A== dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" +"@dhis2-ui/css@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/css/-/css-6.15.2.tgz#82cdf63d42a00d4b1a9b6233c031e226898a2135" + integrity sha512-fCA0xMCHA4piMC3EcImBuC8/XR8rlBcBFWTITtOQGrE8yHsTfv+Ik8SF+j9sW/jfg7p9mZXt9s1KnT3uOdg2Kw== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" +"@dhis2-ui/divider@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-6.12.0.tgz#c442518e6ce2ee2b1a938c96ba29556f919a2687" + integrity sha512-2E5kJe948n6b47JpU4Na6H01juvmJ73PKvyHWaZmCOlItiXErSSN/LnsSQjXx6+AUe1Jhv4B1NngSvTO3NUFRA== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" +"@dhis2-ui/divider@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/divider/-/divider-6.15.2.tgz#009678eef72b1018849958b6d25572b29235ddc5" + integrity sha512-HCmrd5T7mK5YsVZO8fZDkYUBueuo5wdC8BGvY73s5PiwkQI0q1becj6dCjqGhaTlEY7z1RbXO0A/YQ62CkbDOQ== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" - dependencies: - babel-helper-function-name "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" +"@dhis2-ui/field@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-6.12.0.tgz#f29e51f6b4f5d01a410a645dfad9d8770fd1dbd0" + integrity sha512-4eseArRKJeZJMzqKqfCgglycti6EnvkbwuN4UPy45ISboPLDXrp7NldUpy3fFOG1y8riGLR3Vn4xJutyiSznkA== + dependencies: + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/help" "6.12.0" + "@dhis2-ui/label" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" +"@dhis2-ui/field@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/field/-/field-6.15.2.tgz#45939045db980fe1f6eb95c3c31aa3b59134a3ef" + integrity sha512-2b3gYg9W/gQlHiKoHHCsHbLF9WXjWPVkeRnBx1BF+E04rImbfwL6FPjin4RqtwJkskfW64/mVZW5V+Dn51cA6g== + dependencies: + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/help" "6.15.2" + "@dhis2-ui/label" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-modules-amd@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" +"@dhis2-ui/file-input@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-6.12.0.tgz#ed1abb1e8dfb7f4e35a7a96b881ed51a4253157b" + integrity sha512-dFgdtAJ7JrgwlS32WWABvpB6LUAizTlipYEAJXloPvS5sqny+DTKtYTbyFALGmFiQaKwEjZAwghhkIqqjfK1qw== + dependencies: + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/label" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-modules-commonjs@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" - dependencies: - babel-plugin-transform-strict-mode "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-types "^6.23.0" +"@dhis2-ui/file-input@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/file-input/-/file-input-6.15.2.tgz#18b170df11e89ed67af416f4d71d185dd5606fde" + integrity sha512-ehDgzscRp1m89My9Fk8EvgFUFuQyi7i1nhcFIGni+70vvmlPe/g4PvYSj8rju4MK3KR/2+7PoR6BLvyFE+H0LQ== + dependencies: + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/label" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" - dependencies: - babel-helper-hoist-variables "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" +"@dhis2-ui/header-bar@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-6.12.0.tgz#6b5c5c33a87c58e3d0281d3396427634d48c2155" + integrity sha512-VOeLUgYMEQj34U5SwMwRncS7o0iQJXxx2mb4cmmW9nZdj9EPyZSY1n7zyekGmWGTIpOCqwDXqwfNK9fdJUM1KQ== + dependencies: + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/divider" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/logo" "6.12.0" + "@dhis2-ui/menu" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-modules-umd@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" +"@dhis2-ui/header-bar@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/header-bar/-/header-bar-6.15.2.tgz#5a0ef910759c955e28a9a6157010c0596e3edaf7" + integrity sha512-tZP54F6WWCTmO6HHbS2BvWKQVfFz1dYqCUir07XoLCFUhRsBcK325C/zASC6+PzrB24n7vLXS5jSdSMXSlX6Ew== + dependencies: + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/divider" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/logo" "6.15.2" + "@dhis2-ui/menu" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" +"@dhis2-ui/help@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-6.12.0.tgz#cc269822c20399b25e98e8191d7f38309b617d69" + integrity sha512-tpfPC0HSPqPNipndM+aTdskhedEMmSjlYFbeJvYRJizqFBZrIjBIW9+CSsE7AEIigrGCdwQDyyP/lQvCa5r/dQ== dependencies: - babel-helper-replace-supers "^6.22.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" +"@dhis2-ui/help@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/help/-/help-6.15.2.tgz#ad009f14fc1721b5b1d736e4b1662208d9453ff8" + integrity sha512-mNsmR0TjhunEgJ8et3r21Bw5Q3WQaB38g6nY9W8Nbjdxt4mBgXxNKsAxCSLYrAdcNdUDzaY/tCBGWqbVkRcdFg== dependencies: - babel-helper-call-delegate "^6.22.0" - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" +"@dhis2-ui/input@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-6.12.0.tgz#d4a7eaee2649e97836f0074e3a099e282efeb3f0" + integrity sha512-uno4TJ0j95LFLMmjfeb8V3J1qcS7xqFJBrUVXDtq7AGjJCN/HYEdL+bNza5Um5NoC+RKy+PNUkkKyBKMGYVeIw== + dependencies: + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" +"@dhis2-ui/input@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/input/-/input-6.15.2.tgz#f58a102ac5b35eca590c42af195c32aae1c6e891" + integrity sha512-Nt2bVJ21RAP5uDGoYbY+5joOjrcyQwBwjx7BOScLseC5Zb7MphRLmFGTxAy1kSIvl+9XFG/QTXS4lQTrXOYrlw== + dependencies: + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" +"@dhis2-ui/intersection-detector@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-6.12.0.tgz#06228f0691496d619e10651f9196fa5c35d08468" + integrity sha512-r42BNUWbBqxtGBbX17A9W+Rz4VCLQQEAkYiUvmKKflRedKsy08JZma6HFV9zZFgLl9IuYE5A/aG/xQ9q0xMbLA== dependencies: - babel-helper-regex "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" +"@dhis2-ui/intersection-detector@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/intersection-detector/-/intersection-detector-6.15.2.tgz#cf9db0a7826f7c454864e7ea801f3a9aec456226" + integrity sha512-tP6wqu09cZHg5tvNLJteozk+YQQ4iAt1i4uaJrv4SF+iSir0EJ3hOkNQuxgkqi1qMFzmu4IVtF8OhZS1iCE0Cg== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" +"@dhis2-ui/label@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-6.12.0.tgz#1d9eef81c8b3b44c1095e26d50381923286d94cd" + integrity sha512-iuMvT4zYm+mqGPAUOOi5CSyCSVeFq5HGBHGNUvmznCaW7tp6X7PfeOYDMIK8wlac2VVk/OyEz8S/izfYrKBk4A== + dependencies: + "@dhis2-ui/required" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + +"@dhis2-ui/label@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/label/-/label-6.15.2.tgz#c6e703c9b9f129f6f4419baf0ef7ad3c9a974126" + integrity sha512-xNq1jFwj33TJADyYzyN4C6JTQxuZscoY3tUi93Mh2a2Pl8h+tz9FhM+7cM9H4FfTbYZpttBCwsP2v08viYE7Sg== + dependencies: + "@dhis2-ui/required" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + +"@dhis2-ui/layer@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-6.12.0.tgz#6a2d8cc5448f99fbe2f54dc5e4b19654952921bd" + integrity sha512-l+FJI1ONyoJn7mZmP3v7dvjMTt8sxUPQIC4VqruekJKMeQd5doT+yfSZcwUepQp/pIkY2Yo/KI5bHF4I9jg03w== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" +"@dhis2-ui/layer@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/layer/-/layer-6.15.2.tgz#46eac6f539351fa63f3fe1e0351556cf68c19594" + integrity sha512-MGf5rMGUT5a8MgFOEgafYAriU0WBQmjpAghcAumOVG+qPUrKzn0Ao7Fo8FsNcrUfW5VsAZUiYrJPXl9HAvv6sw== dependencies: - babel-helper-regex "^6.22.0" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" +"@dhis2-ui/legend@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-6.12.0.tgz#6f7f3a65b4047ffd6983c8806c76283f19857eba" + integrity sha512-HvvwoAU3tpb9mwKdkMrR9prAEGzarRjTdwBiLe1TqE3MKeYaVDAxrg+Fa+CXV5YwiiGn/aYYNlN49q+ZHJBPWQ== dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2-ui/required" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-export-extensions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" +"@dhis2-ui/legend@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/legend/-/legend-6.15.2.tgz#15f1d5ce387654147b4912fc180a17500e6323e4" + integrity sha512-miN75VfTU4SPA0kL1De5BBKot47NssRJRuohYlsIguEe2kqFZaP6mJBSsw+JG73PRX0eiCWjh6JEAEWX4Czuyw== dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2-ui/required" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" +"@dhis2-ui/loader@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-6.12.0.tgz#73c0531bd8fc9b86d657fc2b78493caf4731f7d8" + integrity sha512-d10Y+RD9YcWdjtu/fEjFeu86kDYLOlq+Ec2wxCOGx3NiiTY0xqtcvJIq870HwG4NFo97tp9h0JA0RQCM7eFUSw== dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-function-bind@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" +"@dhis2-ui/loader@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/loader/-/loader-6.15.2.tgz#e770f976acce4ff8c91c183f2f5e0b91faa93d0e" + integrity sha512-MZOzbDYYKOky62a/DVsNTmATmoWErgBDDyA+bdab0U2gvImHi9NjrRM3vbTMz6746BaX4ChqSPtvmXHB4zmZFw== dependencies: - babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" +"@dhis2-ui/logo@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-6.12.0.tgz#0e8cee990209829a6afa7557979afcb1eefaf1f9" + integrity sha512-xSc0d847QzqaqPmnccYeXX+m9l34JHVsbiZfasYMAo1mb562LLGJd1oUF2VjOBTowaK0rigNoLVWM8TLNGpjzA== dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-react-display-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" +"@dhis2-ui/logo@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/logo/-/logo-6.15.2.tgz#6750613acbcc71f9d2d3ce55f00994c41732deec" + integrity sha512-2sBAh1QOO3X95aGVocKn3HrrrynB66+iUV7dbmOMJPem8QiDLD+Fsa9y20DdGt0a4+I83SlFp1ao8mU6TGwDvg== dependencies: - babel-runtime "^6.22.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +"@dhis2-ui/menu@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-6.12.0.tgz#840883489b3a2d0566e40932a26d972fb9fb05e2" + integrity sha512-LDCjHO0edb9rWIFl4uWHSAsvO5UGTcpoKpvl7Nxl2WgpcdHwQexSpS7P37mLDG25a745F+0hHDgqPEMTeGcAgA== + dependencies: + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/divider" "6.12.0" + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +"@dhis2-ui/menu@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/menu/-/menu-6.15.2.tgz#7cf5dd281b2e61240d58791dc840fcaff13f842d" + integrity sha512-bXzPz2PK5JGOIEV619gIaBHZkoo3MCGCWys/r3Vzut2Z/qO69F0gjc5kH6DXad0SKO6UIsR+cWfRehmcAKNewQ== + dependencies: + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/divider" "6.15.2" + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-react-jsx@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" - dependencies: - babel-helper-builder-react-jsx "^6.23.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +"@dhis2-ui/modal@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-6.12.0.tgz#86f782cd4a37886549ce5b73ba91bae1b3b7a960" + integrity sha512-YCl75ngAefYA9gKKN9Xdjwv22eCJQYN9GrGD36OCvQPT97dxpvr/GescnH4ZpDtQ7THSxVgE5SoTiKX4CkK1hg== + dependencies: + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/center" "6.12.0" + "@dhis2-ui/layer" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" - dependencies: - regenerator-transform "0.9.8" +"@dhis2-ui/modal@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/modal/-/modal-6.15.2.tgz#4d92831584a1ec8f6dbd7756a3042a2aa5ffd099" + integrity sha512-2A/k3VEqgYguOe0bJyZzy95OfOUSEChkuvNx7cQ1dsSlyq8/Il7/w5CLsgBwSI+vNQu4gBqqMFQMcs0NQsDMRA== + dependencies: + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/center" "6.15.2" + "@dhis2-ui/layer" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-plugin-transform-strict-mode@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" +"@dhis2-ui/node@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-6.12.0.tgz#6b1e0c6cff0b9cb092bbf1e68fc15ada77db0188" + integrity sha512-s4jv0v7yKMRvlH0cyHQHQAwXpAcbs3TRr/MEXtTdlLrX2iGuLB8PmCeDavF3X9d/dFwfpJcYdv5plsmjzOgwtw== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-polyfill@^6.7.2: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" +"@dhis2-ui/node@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/node/-/node-6.15.2.tgz#72ba545771af69dbfb6653d1aa8b4a2f606ba21d" + integrity sha512-IKA28wWMNRzoU8LycY4z4b/yA0ljxEvhIcZUKq+em164dKKIMdIIfxN9WbN9+TkpJKJpmCJ+E4yVBDb8amrJUw== dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-es2015@^6.6.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.22.0" - babel-plugin-transform-es2015-classes "^6.22.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-plugin-transform-es2015-modules-commonjs "^6.24.0" - babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.24.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.22.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-react@^6.5.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.23.0" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-preset-stage-0@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" - dependencies: - babel-plugin-transform-do-expressions "^6.22.0" - babel-plugin-transform-function-bind "^6.22.0" - babel-preset-stage-1 "^6.22.0" - -babel-preset-stage-1@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" - dependencies: - babel-plugin-transform-class-constructor-call "^6.22.0" - babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.22.0" - -babel-preset-stage-2@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.22.0" - babel-plugin-transform-decorators "^6.22.0" - babel-preset-stage-3 "^6.22.0" - -babel-preset-stage-3@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" - dependencies: - babel-core "^6.24.0" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" +"@dhis2-ui/notice-box@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-6.12.0.tgz#e239733c6fde80ca3dc6b742dcdf76859af5eb72" + integrity sha512-k7ihDB5eZaIC4thHScfUH2NrOEs8TL8t05EkBW5QMuR5EmHlpNMDP2fPDXyqr5kP9C0r1J7/weKW0NqvcCnV2w== dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= +"@dhis2-ui/notice-box@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/notice-box/-/notice-box-6.15.2.tgz#eb99e3a8af770bfad349d929f0fd0e0877c5d714" + integrity sha512-Vj4HyD+zzseza+SdboOneiq4gNsI3JFW5QygWoEiHk03qLweZuFkTczfPRokE46ns0TWEtH3zIeuCnQyFJataA== dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.22.0, babel-template@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: - version "6.23.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -babylon@^6.11.0, babylon@^6.15.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" +"@dhis2-ui/organisation-unit-tree@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-6.12.0.tgz#82c0d5c9755c8e977e0d929bc826f9de9bc9dfe9" + integrity sha512-06ok1YBjwjxwhQZYLSUA6qgutqMqId08zYY/T79ZPFuNBPdSDl5B7L4yUWxsMFaaM9R1YQzLLfIluxV7FpxW4w== + dependencies: + "@dhis2-ui/checkbox" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2-ui/node" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -balanced-match@^0.4.1, balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +"@dhis2-ui/organisation-unit-tree@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/organisation-unit-tree/-/organisation-unit-tree-6.15.2.tgz#90560588fbc3e92a524d2d2fbf8763f806fe5f1e" + integrity sha512-ibnOCWhZzw/rsdX8JNdqYd7XNYrf5ek4EcbeMHsD2ai7NCeZgaErbQCPdavEaWdvEOLNvXB1HAHcSV/THS9qsg== + dependencies: + "@dhis2-ui/checkbox" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2-ui/node" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +"@dhis2-ui/pagination@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-6.12.0.tgz#d92914ec18ec984548b744488d96edca4bd660fa" + integrity sha512-EwHaftRzqnrN4kazqyDpzoX7tqyFxgyVJOez8GJB5AZOfLaZDKl6BZv5aUfC4Sy8P2Ng2aJGQWvxa5WGnVv7vw== + dependencies: + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/select" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= +"@dhis2-ui/pagination@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/pagination/-/pagination-6.15.2.tgz#f81dc3310e61d428a7fd8fd934551cb5da79f5d0" + integrity sha512-A9ZHWPfX0f4QRrwpsMfvnuM3gZktdW8fjwyW1yJj46FeP5iKg3U3ztV4T+2NjRxhjJBT/mnYWJ0viWgH+PsEEQ== + dependencies: + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/select" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -base62@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.1.2.tgz#22ced6a49913565bc0b8d9a11563a465c084124c" +"@dhis2-ui/popover@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-6.12.0.tgz#a6227d1573f65fad7368b1647d2406b3970cc2fd" + integrity sha512-zFY3Yv53hwjs5qf8YkMs+3YruMVNKk1+YJIo/VozeXK4ZX3iMCTK0vvVlt+evIwgwVuLY9aVK3YYt3qeFszLpQ== + dependencies: + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -base64-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" +"@dhis2-ui/popover@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popover/-/popover-6.15.2.tgz#8c1a11f4a755d61596900139baf316673c7a8578" + integrity sha512-xIuYqVSoc6BrSiS11tTen4r92XJYgFhc4c97gD0UKkTKQS+AjonIx0MJRhjaTaCFrFGIcyq+Y1BGtV4mW6xhHw== + dependencies: + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" +"@dhis2-ui/popper@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-6.12.0.tgz#07800aeefb31c571dbd3fa539edd1565e54e6ea8" + integrity sha512-KtEskgPHMU7t53OR+HMdtJyazxH1njE1RhqN59wOyLf8Zog6gRbYsRd/UWPgqnnB8xgLKotyWWUShslCp0XTRw== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@popperjs/core" "^2.6.0" + classnames "^2.3.1" + prop-types "^15.7.2" + react-popper "^2.2.5" + resize-observer-polyfill "^1.5.1" + +"@dhis2-ui/popper@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/popper/-/popper-6.15.2.tgz#1c62ba43c1376dcfb62df480782ad649b35cf43d" + integrity sha512-QZ06ACjy4NV04zp+6j9rd5SapDuBBSnu8OliQJ24bWPIcWIYC86N4HBKuRUiwfflT/j1zNfNWvM9IvoNrYscQg== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@popperjs/core" "^2.6.0" + classnames "^2.3.1" + prop-types "^15.7.2" + react-popper "^2.2.5" + resize-observer-polyfill "^1.5.1" -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" +"@dhis2-ui/radio@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-6.12.0.tgz#7e1c0815c8a317b49e36e54a959053c188a4d783" + integrity sha512-l/WSppUpc5B4mu2DNfK0x5R8xpq7hj8/mQcvdWnZz7ycl/gf69lhoyQVi6YGdJOez0sJYzJnYya7ekf4Okmlqw== dependencies: - tweetnacl "^0.14.3" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -big.js@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" +"@dhis2-ui/radio@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/radio/-/radio-6.15.2.tgz#eb2506f991f4053c074bc14e5b1fb5501d5ff340" + integrity sha512-zONnVmxehxX7UVdv59XYEQxXGKRg33hDHRKZTwdECuKvAguFM4XXcaRNqnQr1hBdTiOQocCPd+TUqV4xyukWcA== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +"@dhis2-ui/required@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-6.12.0.tgz#28c6a209f681e8eeeb30c752d467a023bf2c3b5d" + integrity sha512-t8j8Xe4MbmiDgQLiCIkmWLyuJjndPeVO9oHAaFp02IZ3YV9FrNtvlXkg2ydXEZgNaGbqCh+PwD6opstrTsSi5g== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" +"@dhis2-ui/required@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/required/-/required-6.15.2.tgz#3cdff92ca19d8e053327e28bedc1f96f63caf102" + integrity sha512-ydZVBwm0gujka9bGmBb31SEqRAoLNcNHVBPjxv0S952CQsWaebOEY+baQS/3lIjb3gvEtWcIxc5UXO2+0FcuSQ== dependencies: - inherits "~2.0.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -bluebird@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" +"@dhis2-ui/select@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-6.12.0.tgz#eda5175b769d853922c6280bcded89049ded96d7" + integrity sha512-yCLTcWP+/hM8j0P6V7/gt81aAVPYrDxcFfuZku12kAWIJ0Cg+LXDC4sIhd9FEqxBICq/2Wizsw5s2Cy8Jjhf5g== + dependencies: + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/checkbox" "6.12.0" + "@dhis2-ui/chip" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" +"@dhis2-ui/select@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/select/-/select-6.15.2.tgz#abe0d30483713bd3c592540f000a50a52a0799b2" + integrity sha512-VuRRXNIyBnhyeevLnrc6j29qFjD9MH0YdS0rmmjqddq0reAVT0gNyYQSWFOSOkaFxiKKYI7tRNE5GR0kHmEpdA== + dependencies: + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/checkbox" "6.15.2" + "@dhis2-ui/chip" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -bowser@^1.7.3: - version "1.9.4" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" - integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== +"@dhis2-ui/switch@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-6.12.0.tgz#582b855c8bde610c12b7fbb8f16f1f4bf2fe8a87" + integrity sha512-6GcKYsTezpOV7Bi1HJbV44gkud6QViDtoloTn7MyCAxfgzTIy8iZlumUSeMut6dFpJBpLIhTXrTtzOKbjD/gAw== + dependencies: + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/required" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" +"@dhis2-ui/switch@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/switch/-/switch-6.15.2.tgz#f06406b6882c22d660d425c15111ccfe0a971298" + integrity sha512-SxEmlvWIFZnd97PZkVKJyvrq+ftC+OAlF9Xa22mptAUYJr6XwykkkC9wd370fwiYHXCRVbqB+id963xkz1k4ZQ== dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/required" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== +"@dhis2-ui/tab@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-6.12.0.tgz#0de1e20e985a55a35a59f45ac666942015eda024" + integrity sha512-lWjfO8Ed13JYTddxI8SPezsuuAy+5PlNjzjZpceIXWJAuz6HfSlZUL9pxAnTy/0zhalLc+U5mJGfCEmDKtzS0g== dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" +"@dhis2-ui/tab@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tab/-/tab-6.15.2.tgz#f05a6ba4cfe06ee731887775d8ae2cdd4f3b6b67" + integrity sha512-/gGYcOQJYzrU/Lr3s7VrjA7va/unAVSDFTMETlgt9V3erQQ4t+OBk6p3JpLfuvrsdgZkXIreYbROicYmkqODAg== dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +"@dhis2-ui/table@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-6.12.0.tgz#025fac9284a8ddbb798946689632cdf7790b93ba" + integrity sha512-4peWNZaOLES3CHf3FLp0V+hubwch7VU8Z0XNnsuYvtmGaEcAqitbjIAjvYMmYa/rBTQhku7gtXWdoOazlmi9VA== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -browserify-aes@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" +"@dhis2-ui/table@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/table/-/table-6.15.2.tgz#a7b9578a0bbe7ebe52aa4a5d152d9b0668012fda" + integrity sha512-Fib8YfGSwMT+08dt4QtcrtoHKbTR/0i+HM4AEloJWUuBjF1E93aeC6yH4oDTQnxKH2vR6rvyQWgLQ54X87H3OA== dependencies: - inherits "^2.0.1" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -browserify-zlib@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" +"@dhis2-ui/tag@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-6.12.0.tgz#ced24b5d7da7d5f45419ede0d26d8ccfa7b00ef8" + integrity sha512-kAKSCBddBmB+eL6+5c72QouyvHj8Hr4oRlBW90fP97CYweHYaThvXmTbnobE2txjhRjZ10r9692xhCjpruozQQ== dependencies: - pako "~0.2.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" +"@dhis2-ui/tag@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tag/-/tag-6.15.2.tgz#b7943c7d6202af179ca978608822084bfef9661c" + integrity sha512-F3u70BS37+y5fU8kM5hSNdEDH8DAZ4HZASXPDxIqpSzOYFmHwd9h/K5k8Dx9E28RqKh1feY61mmfbom9/7RYzw== dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +"@dhis2-ui/text-area@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-6.12.0.tgz#233d8347cdf3cf85613b76af00bed54b46a2f840" + integrity sha512-oY/39hFPMPNSg8kRl1Lxo9InD08gXIZdWeg1AINGSOBiiIKZ9ZU5AGS3Jf1AVYRpqnUjbERrqZU8AH5tQ2plWQ== + dependencies: + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -buffer@^4.9.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" +"@dhis2-ui/text-area@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/text-area/-/text-area-6.15.2.tgz#e7b575e053aeb4ff443140942886184aebe1ebf0" + integrity sha512-0BkNkc0dtFMfQalrPBpcj8SqFh275ZgkZjcnmjc1OSiGaDn22oYtQqL1/ER3TZYJRGPMGaXVfBjZOhkr939Zuw== + dependencies: + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +"@dhis2-ui/tooltip@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-6.12.0.tgz#5eb14753419a2cd6ba6eee376e9022102f7ed8b8" + integrity sha512-nCgvApdVMQMnhmKzE7th8aWrJMYK+aSKsB9374NtAh+Pg0HZmOezPKRedWhmcNWcYr3EkG0gMhcRaR6t6DqzOw== + dependencies: + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" +"@dhis2-ui/tooltip@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/tooltip/-/tooltip-6.15.2.tgz#c96b2a0623c6c9004a6cc544f899f8e5b4e0ad3e" + integrity sha512-gdpuMS/rOav/c7KHGGDz0VxQbxeVHIK/j9V3sl2H7s2uj+0FWMMA1RiPqEofFIiKsV+RRwrCK3faus7jai6HXw== + dependencies: + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -bytes@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" +"@dhis2-ui/transfer@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-6.12.0.tgz#8b395fce3408ee309081e590b60742dd57959fbc" + integrity sha512-LRBXj71MNwc7RPgagpn9Nf/fMEcQTuKw+N6x6fDXrit3kK2u3mfTS//NuMvRCFLknEmjBbmAOW9RHUzWxcBWSw== + dependencies: + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/intersection-detector" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -callsites@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" - integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== +"@dhis2-ui/transfer@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2-ui/transfer/-/transfer-6.15.2.tgz#f0a99ac7840dae924ee824da6302a3f1aa5d8f14" + integrity sha512-DtY273nqsb25EKBcSrvm90o7vLu1EOiaoZI3ZaLuFVBOqCNpLm/fDJZqQngy6PbkWna57dyc78JYa/gAXyoUpg== + dependencies: + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/intersection-detector" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" +"@dhis2/app-runtime@2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-runtime/-/app-runtime-2.8.0.tgz#83ca6e96c299686ee72eea3e1825e04aa53cd5d2" + integrity sha512-Ru6x9L61fD7ITzVaxFqx88kV5/ypB9xSr8nHgRj4EE/kHl/aVejXuwnSS2OIWh80J3mtD1dpNRN/GJ8o0x0HYg== dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" + "@dhis2/app-service-alerts" "2.8.0" + "@dhis2/app-service-config" "2.8.0" + "@dhis2/app-service-data" "2.8.0" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +"@dhis2/app-service-alerts@2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-alerts/-/app-service-alerts-2.8.0.tgz#f480043a15b5a2b7d90a6e74931ddd3ebb65aa1c" + integrity sha512-hpMqdxCG9w5H2EZyLPQKcKzCdp/Sof68ZGd85lNHo+1c10+1pWhKAjt/p3zoRllHppp17TbEgKoXa1oRx2NeHg== -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +"@dhis2/app-service-config@2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-config/-/app-service-config-2.8.0.tgz#4ce7520e28a7700fa11ad7bcba6468a0a58751a4" + integrity sha512-SZnoa2EjsgV8a1QfnSk6fqxORV3pRcA+SYyz/H/nkr/VodkdgmO5CiwlZxXW8pG+4i6sbMGjGualam2jHF34wg== -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +"@dhis2/app-service-data@2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@dhis2/app-service-data/-/app-service-data-2.8.0.tgz#9cd347127968cb6f3c8a4ab0fc6699ea7058f835" + integrity sha512-5doyL4bxRMdMXY4RtWo2O3NVGwSDOSUY3hGPXaF1TeFWAqujlPTx17uDw6wEelN6LaryAnVwId2Ep3FOV8v5MA== -caniuse-api@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" +"@dhis2/d2-i18n-extract@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n-extract/-/d2-i18n-extract-1.0.8.tgz#9d98690d522a51895c8ef3fe7136f026b0f8dacd" + integrity sha512-wjQ5J0v8Td12+KcQYSuuZ1tQLReXJ1gBSqkyImf2aNtLwJKERaTOjZ71da+GXdHtd6ph/DP1ezQvFDFKhBHa/A== dependencies: - browserslist "^1.0.1" - caniuse-db "^1.0.30000346" - lodash.memoize "^4.1.0" - lodash.uniq "^4.3.0" - -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000640" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000640.tgz#7b7fd3cf13c0d9d41f8754b577b202113e2be7ca" + argparse "^1.0.10" + i18next-conv "^6.0.0" + i18next-scanner "^2.4.4" -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" +"@dhis2/d2-i18n-generate@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n-generate/-/d2-i18n-generate-1.2.0.tgz#4b7944eb4046bb1452b9ce7598b13b5c5b80c984" + integrity sha512-1jdcRs6ZA+WvK2h93y4nGSPAnvqlhAMR5YMEv4+c7bs6fjcG7UHevIK8xdm95hRATYGVhbegQRIuNWWAQ8/ylw== dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" + argparse "^1.0.10" + handlebars "^4.0.11" + i18next-conv "^6.0.0" + moment "^2.22.1" + rimraf "^2.6.2" -chai@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" +"@dhis2/d2-i18n@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.0.6.tgz#2914be8acf296f3a6bf7b51c76c46da6a120b0ff" + integrity sha512-7YdA4ppFosjuyf7ZMm47BrdsA5TWLM9lmS0lUPgjcCVeeWfUgagqzf4W5JGB9XQ3w1vzK+yy5zH2Ij8IgRAGhA== dependencies: - assertion-error "^1.0.1" - deep-eql "^0.1.3" - type-detect "^1.0.0" + i18next "^10.3" + moment "^2.24.0" -chain-function@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" - integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== +"@dhis2/d2-i18n@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.1.0.tgz#ec777c5091f747e4c5aa4f9801c62ba4d1ef3d16" + integrity sha512-x3u58goDQsMfBzy50koxNrJjofJTtjRZOfz6f6Py/wMMJfp/T6vZjWMQgcfWH0JrV6d04K1RTt6bI05wqsVQvg== + dependencies: + i18next "^10.3" + moment "^2.24.0" -chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +"@dhis2/d2-i18n@^1.0.5": version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/@dhis2/d2-i18n/-/d2-i18n-1.1.3.tgz#ad73030f7cfceeed1b5bcaad86a9b336130bdfb1" + integrity sha512-vOu6RDNumOJM396mHt35bETk9ai9b6XJyAwlUy1HstUZNvfET61F8rjCmMuXZU6zJ8ELux8kMFqlH8IG0vDJmA== dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + "@types/i18next" "^11.9.0" + i18next "^10.3" + moment "^2.24.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +"@dhis2/d2-ui-core@7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-core/-/d2-ui-core-7.4.3.tgz#d880ad82f0ce28833db02fe64016242c3031610d" + integrity sha512-X+ZlTVB4IbAaQlKKWoXjHXCaTfw5jDxHy2KRIWRskIVPhXfiTiyqzdKN/DSi2/99HDQ6PSq9eqmCY4AeTJb3Kw== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + babel-runtime "^6.26.0" + d2 "~31.7" + lodash "^4.17.10" + material-ui "^0.20.0" + rxjs "^5.5.7" -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" +"@dhis2/prop-types@^1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@dhis2/prop-types/-/prop-types-1.6.4.tgz#ec4d256c9440d4d00071524422a727c61ddaa6f6" + integrity sha512-qkVj8OuyjDmSxzYDlCWZllvC9hIbrIImMp79/U5CVsIRbjUF0zA/tfbv4rWnsWALmwEHOQFbzl5GnO5D8RNneA== dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -change-emitter@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.3.tgz#731c9360913855f613dd256568d50f854a8806ac" + prop-types "^15" -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^1.0.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" +"@dhis2/ui-constants@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-6.12.0.tgz#e2dd4d2f888434c498fc538e6d0257c3e41599e8" + integrity sha512-prTkl5KQv5azobItN9wyhLgiLKYuOoGavqFUgOonheLPF2Nf8XEg2ipdFPwj/5eDeb/DC5bd71mlmDUHYWidyQ== dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" + "@dhis2/prop-types" "^1.6.4" + prop-types "^15.7.2" -clap@^1.0.9: - version "1.1.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" +"@dhis2/ui-constants@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui-constants/-/ui-constants-6.15.2.tgz#3df26e9fa5683b87b85e75cc5b9c930ec2115b29" + integrity sha512-Ayprow4LPAbfyHcZ92KLSlSHgo7zRTa9aU+ZV/Ov3fjI+a9I7fJwgjvRXMBzZkS6NvuWFrHmOXkUMDreN7ZxAg== dependencies: - chalk "^1.1.3" + "@dhis2/prop-types" "^1.6.4" + prop-types "^15.7.2" + +"@dhis2/ui-core@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-core/-/ui-core-6.12.0.tgz#9af04b601d56ebb0881ee25e47e220dbafcd99b0" + integrity sha512-OBE/tboRYNKh0FsKNIzTTBPXgIpMSi1s4HlJKz4XmhoqPkMWUo/Ne/edfBdFbcx3Htkel07ftavS9vbENw4EQA== + dependencies: + "@dhis2-ui/alert" "6.12.0" + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/center" "6.12.0" + "@dhis2-ui/checkbox" "6.12.0" + "@dhis2-ui/chip" "6.12.0" + "@dhis2-ui/cover" "6.12.0" + "@dhis2-ui/css" "6.12.0" + "@dhis2-ui/divider" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/file-input" "6.12.0" + "@dhis2-ui/help" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/intersection-detector" "6.12.0" + "@dhis2-ui/label" "6.12.0" + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/legend" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2-ui/logo" "6.12.0" + "@dhis2-ui/menu" "6.12.0" + "@dhis2-ui/modal" "6.12.0" + "@dhis2-ui/node" "6.12.0" + "@dhis2-ui/notice-box" "6.12.0" + "@dhis2-ui/popover" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2-ui/radio" "6.12.0" + "@dhis2-ui/required" "6.12.0" + "@dhis2-ui/select" "6.12.0" + "@dhis2-ui/switch" "6.12.0" + "@dhis2-ui/tab" "6.12.0" + "@dhis2-ui/table" "6.12.0" + "@dhis2-ui/tag" "6.12.0" + "@dhis2-ui/text-area" "6.12.0" + "@dhis2-ui/tooltip" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.12.0" + classnames "^2.3.1" + prop-types "^15.7.2" -classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +"@dhis2/ui-core@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui-core/-/ui-core-6.15.2.tgz#bafd358eae994de0c532d08951663ecd2331f736" + integrity sha512-3Ucpv9a2qcN4LYQywayW0Qtn2JVsNWXOivN5DjUHSlp62DGSwj9T1ZrThV3HznXNG4DqFSjD7pGetV1wDyOTvw== + dependencies: + "@dhis2-ui/alert" "6.15.2" + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/center" "6.15.2" + "@dhis2-ui/checkbox" "6.15.2" + "@dhis2-ui/chip" "6.15.2" + "@dhis2-ui/cover" "6.15.2" + "@dhis2-ui/css" "6.15.2" + "@dhis2-ui/divider" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/file-input" "6.15.2" + "@dhis2-ui/help" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/intersection-detector" "6.15.2" + "@dhis2-ui/label" "6.15.2" + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/legend" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2-ui/logo" "6.15.2" + "@dhis2-ui/menu" "6.15.2" + "@dhis2-ui/modal" "6.15.2" + "@dhis2-ui/node" "6.15.2" + "@dhis2-ui/notice-box" "6.15.2" + "@dhis2-ui/popover" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2-ui/radio" "6.15.2" + "@dhis2-ui/required" "6.15.2" + "@dhis2-ui/select" "6.15.2" + "@dhis2-ui/switch" "6.15.2" + "@dhis2-ui/tab" "6.15.2" + "@dhis2-ui/table" "6.15.2" + "@dhis2-ui/tag" "6.15.2" + "@dhis2-ui/text-area" "6.15.2" + "@dhis2-ui/tooltip" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-constants" "6.15.2" + classnames "^2.3.1" + prop-types "^15.7.2" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +"@dhis2/ui-forms@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-6.12.0.tgz#357338456b5342486c9963ddaeb43aed78b3b56c" + integrity sha512-kqt+4NF8HRlsLsCatilhoTfyR690Zlwu43Ryt0m3/Q66WP0401uIaItcMsok70SAA322N6ShTcMJPQ3BtpOZYA== dependencies: - restore-cursor "^2.0.0" + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-core" "6.12.0" + "@dhis2/ui-widgets" "6.12.0" + classnames "^2.3.1" + final-form "^4.20.2" + prop-types "^15.7.2" + react-final-form "^6.5.3" + +"@dhis2/ui-forms@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui-forms/-/ui-forms-6.15.2.tgz#cf3a0cfaa5b9f25c0ec471dddbc6ad068a6c5ce4" + integrity sha512-ob9cTmvcGUb0oO9TCuBdrH/oHgcGJ2LMAC04KYNbIok7LIbheQxnjpMhES5IXEFvMjr46IMw2X3xcspoyzLv3Q== + dependencies: + "@dhis2/prop-types" "^1.6.4" + "@dhis2/ui-core" "6.15.2" + "@dhis2/ui-widgets" "6.15.2" + classnames "^2.3.1" + final-form "^4.20.2" + prop-types "^15.7.2" + react-final-form "^6.5.3" + +"@dhis2/ui-icons@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-6.12.0.tgz#3e3412725220fae1555ba78eabd146ea517de213" + integrity sha512-8H9ImWiKK8hwy9D9Ts6gJcH7+fCOotsPzp5T81O5AtN0tEUiaB5KaaD0Tt3YwkYICl85lmGsv8haV/k5oSxEAQ== + dependencies: + "@dhis2/prop-types" "^1.6.4" + +"@dhis2/ui-icons@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui-icons/-/ui-icons-6.15.2.tgz#acc01f5e22afda910b6a0f4027702a87207a8725" + integrity sha512-jVGhFyC693UqU2M7hxfQc5d7laaDOnttLDJejy2iFcl3w9CoSM1LBBernX0r9r8OGeOrxZvThAJ+YoGJO1vlHQ== + dependencies: + "@dhis2/prop-types" "^1.6.4" + +"@dhis2/ui-widgets@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui-widgets/-/ui-widgets-6.12.0.tgz#e7674642fa9e5c0c06f948eceec1385c7c17db57" + integrity sha512-dofT54yj7AlehYcOQi4ovdrmAT2QqJTI4tAvIulNrTAN3h5uhMjbCdxkRQXDwyDC/zIBp1fJXyEOvqNwQlzB5A== + dependencies: + "@dhis2-ui/checkbox" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/file-input" "6.12.0" + "@dhis2-ui/header-bar" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/organisation-unit-tree" "6.12.0" + "@dhis2-ui/pagination" "6.12.0" + "@dhis2-ui/select" "6.12.0" + "@dhis2-ui/switch" "6.12.0" + "@dhis2-ui/table" "6.12.0" + "@dhis2-ui/text-area" "6.12.0" + "@dhis2-ui/transfer" "6.12.0" + "@dhis2/prop-types" "^1.6.4" + classnames "^2.3.1" + +"@dhis2/ui-widgets@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui-widgets/-/ui-widgets-6.15.2.tgz#64de32ed38cd601e100c2fb96c04feee9e673204" + integrity sha512-OKT1nuh7DdArhm9T+EXm5w8VdCCgeGiJ6GfMYsMV6YsSInbQTim4qZVsQ4zJWreQokjwTTwh/Y+1NXaL+GA8sA== + dependencies: + "@dhis2-ui/checkbox" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/file-input" "6.15.2" + "@dhis2-ui/header-bar" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/organisation-unit-tree" "6.15.2" + "@dhis2-ui/pagination" "6.15.2" + "@dhis2-ui/select" "6.15.2" + "@dhis2-ui/switch" "6.15.2" + "@dhis2-ui/table" "6.15.2" + "@dhis2-ui/text-area" "6.15.2" + "@dhis2-ui/transfer" "6.15.2" + "@dhis2/prop-types" "^1.6.4" + classnames "^2.3.1" + +"@dhis2/ui@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-6.12.0.tgz#892a298a4127d670103ccb547f01f67d4eba908f" + integrity sha512-IqQM9QAkABTPjcms9QawKSvhM4FUb8UM3rxxsMXM62ZnBa9+Tatf/2/+LsWTB/CKCK0QKFS6JCPQZXyHsGGuqw== + dependencies: + "@dhis2-ui/alert" "6.12.0" + "@dhis2-ui/box" "6.12.0" + "@dhis2-ui/button" "6.12.0" + "@dhis2-ui/card" "6.12.0" + "@dhis2-ui/center" "6.12.0" + "@dhis2-ui/checkbox" "6.12.0" + "@dhis2-ui/chip" "6.12.0" + "@dhis2-ui/cover" "6.12.0" + "@dhis2-ui/css" "6.12.0" + "@dhis2-ui/divider" "6.12.0" + "@dhis2-ui/field" "6.12.0" + "@dhis2-ui/file-input" "6.12.0" + "@dhis2-ui/header-bar" "6.12.0" + "@dhis2-ui/help" "6.12.0" + "@dhis2-ui/input" "6.12.0" + "@dhis2-ui/intersection-detector" "6.12.0" + "@dhis2-ui/label" "6.12.0" + "@dhis2-ui/layer" "6.12.0" + "@dhis2-ui/legend" "6.12.0" + "@dhis2-ui/loader" "6.12.0" + "@dhis2-ui/logo" "6.12.0" + "@dhis2-ui/menu" "6.12.0" + "@dhis2-ui/modal" "6.12.0" + "@dhis2-ui/node" "6.12.0" + "@dhis2-ui/notice-box" "6.12.0" + "@dhis2-ui/organisation-unit-tree" "6.12.0" + "@dhis2-ui/pagination" "6.12.0" + "@dhis2-ui/popover" "6.12.0" + "@dhis2-ui/popper" "6.12.0" + "@dhis2-ui/radio" "6.12.0" + "@dhis2-ui/required" "6.12.0" + "@dhis2-ui/select" "6.12.0" + "@dhis2-ui/switch" "6.12.0" + "@dhis2-ui/tab" "6.12.0" + "@dhis2-ui/table" "6.12.0" + "@dhis2-ui/tag" "6.12.0" + "@dhis2-ui/text-area" "6.12.0" + "@dhis2-ui/tooltip" "6.12.0" + "@dhis2-ui/transfer" "6.12.0" + "@dhis2/ui-constants" "6.12.0" + "@dhis2/ui-forms" "6.12.0" + "@dhis2/ui-icons" "6.12.0" + prop-types "^15.7.2" -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" +"@dhis2/ui@6.15.2": + version "6.15.2" + resolved "https://registry.yarnpkg.com/@dhis2/ui/-/ui-6.15.2.tgz#cdc86a7bf55bc0fc6725a94fcd2c7cd4642408b0" + integrity sha512-huVjhujg3FXeJ+0B2qrTtfColePA2ipi43Q+TpV0VUAD/yw1NtvLapeEl2LMGVg4jnYdhQyk9mNCdl/K9EOshQ== + dependencies: + "@dhis2-ui/alert" "6.15.2" + "@dhis2-ui/box" "6.15.2" + "@dhis2-ui/button" "6.15.2" + "@dhis2-ui/card" "6.15.2" + "@dhis2-ui/center" "6.15.2" + "@dhis2-ui/checkbox" "6.15.2" + "@dhis2-ui/chip" "6.15.2" + "@dhis2-ui/cover" "6.15.2" + "@dhis2-ui/css" "6.15.2" + "@dhis2-ui/divider" "6.15.2" + "@dhis2-ui/field" "6.15.2" + "@dhis2-ui/file-input" "6.15.2" + "@dhis2-ui/header-bar" "6.15.2" + "@dhis2-ui/help" "6.15.2" + "@dhis2-ui/input" "6.15.2" + "@dhis2-ui/intersection-detector" "6.15.2" + "@dhis2-ui/label" "6.15.2" + "@dhis2-ui/layer" "6.15.2" + "@dhis2-ui/legend" "6.15.2" + "@dhis2-ui/loader" "6.15.2" + "@dhis2-ui/logo" "6.15.2" + "@dhis2-ui/menu" "6.15.2" + "@dhis2-ui/modal" "6.15.2" + "@dhis2-ui/node" "6.15.2" + "@dhis2-ui/notice-box" "6.15.2" + "@dhis2-ui/organisation-unit-tree" "6.15.2" + "@dhis2-ui/pagination" "6.15.2" + "@dhis2-ui/popover" "6.15.2" + "@dhis2-ui/popper" "6.15.2" + "@dhis2-ui/radio" "6.15.2" + "@dhis2-ui/required" "6.15.2" + "@dhis2-ui/select" "6.15.2" + "@dhis2-ui/switch" "6.15.2" + "@dhis2-ui/tab" "6.15.2" + "@dhis2-ui/table" "6.15.2" + "@dhis2-ui/tag" "6.15.2" + "@dhis2-ui/text-area" "6.15.2" + "@dhis2-ui/tooltip" "6.15.2" + "@dhis2-ui/transfer" "6.15.2" + "@dhis2/ui-constants" "6.15.2" + "@dhis2/ui-forms" "6.15.2" + "@dhis2/ui-icons" "6.15.2" + prop-types "^15.7.2" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" +"@emotion/is-prop-valid@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/unitless@0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== -clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.49.0": + version "8.49.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" + integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== + +"@eyeseetea/d2-api@1.16.0-beta.9": + version "1.16.0-beta.9" + resolved "https://registry.yarnpkg.com/@eyeseetea/d2-api/-/d2-api-1.16.0-beta.9.tgz#bd318b62d8c94ea4e490c8e9b90461869f748c25" + integrity sha512-ASOcekMZoOOAZ9+Aq4I34qkiHW4sZFWoB5V8V51WAgYTv0ONoS8uLdFpmc1kFXJ5jsWC7IgSnE79rkLLZ9h9mg== + dependencies: + "@babel/runtime" "^7.5.4" + "@dhis2/d2-i18n" "^1.0.5" + "@types/prettier" "^1.18.3" + "@types/qs" "^6.5.3" + abort-controller "3.0.0" + argparse "^2.0.1" + axios "0.19.2" + axios-debug-log "^0.6.2" + axios-mock-adapter "1.18.2" + btoa "^1.2.1" + cronstrue "^1.81.0" + cryptr "^4.0.2" + d2 "^31.8.1" + dotenv "^8.0.0" + express "^4.17.1" + form-data "^4.0.0" + iconv-lite "0.6.2" + isomorphic-fetch "3.0.0" + lodash "^4.17.15" + log4js "^4.5.1" + node-schedule "^1.3.2" + qs "^6.9.0" + react "^16.12.0" + side-channel "^1.0.4" + yargs "^14.0.0" + +"@eyeseetea/d2-ui-components@2.9.0-beta.3": + version "2.9.0-beta.3" + resolved "https://registry.yarnpkg.com/@eyeseetea/d2-ui-components/-/d2-ui-components-2.9.0-beta.3.tgz#86e79bdb4b469580b79eb54e13a839eafab62654" + integrity sha512-y6LQXvYHUG2eX/ttJcHBRIBfjOsMway6RV8b/bThwmVlc3UuAPUUT8ANExc24gnwcM57u1iPg2Q5/RyOCK2ryA== + dependencies: + "@date-io/core" "1.3.6" + "@date-io/moment" "1.0.2" + "@dhis2/d2-i18n" "1.0.6" + "@dhis2/d2-ui-core" "7.4.3" + "@dhis2/ui" "6.15.2" + "@material-ui/pickers" "3.2.10" + classnames "2.2.6" + downshift "5.4.2" + lodash "4.17.21" + moment "2.29.4" + nano-memoize "1.2.1" + react-linkify "1.0.0-alpha" + rxjs-compat "6.6.3" + throttle-debounce "2.1.0" + +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -clsx@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.0.4.tgz#0c0171f6d5cb2fe83848463c15fcc26b4df8c2ec" - integrity sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg== +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - q "^1.1.2" + jest-get-type "^29.6.3" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" -color-convert@^1.3.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - color-name "^1.1.1" + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: - color-name "1.1.3" + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -color-name@^1.0.0, color-name@^1.1.1: +"@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: - color-name "^1.0.0" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" +"@material-ui/core@4.12.4": + version "4.12.4" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" + integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" + "@babel/runtime" "^7.4.4" + "@material-ui/styles" "^4.11.5" + "@material-ui/system" "^4.12.2" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.3" + "@types/react-transition-group" "^4.2.0" + clsx "^1.0.4" + hoist-non-react-statics "^3.3.2" + popper.js "1.16.1-lts" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + react-transition-group "^4.4.0" -colors@^1.0.3, colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" +"@material-ui/icons@4.11.3": + version "4.11.3" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" + integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== + dependencies: + "@babel/runtime" "^7.4.4" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +"@material-ui/lab@4.0.0-alpha.60": + version "4.0.0-alpha.60" + resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.60.tgz#5ad203aed5a8569b0f1753945a21a05efa2234d2" + integrity sha512-fadlYsPJF+0fx2lRuyqAuJj7hAS1tLDdIEEdov5jlrpb5pp4b+mRDUqQTUxi4inRZHS1bEXpU8QWUhO6xX88aA== dependencies: - delayed-stream "~1.0.0" + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.11.2" + clsx "^1.0.4" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== +"@material-ui/pickers@3.2.10": + version "3.2.10" + resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae" + integrity sha512-B8G6Obn5S3RCl7hwahkQj9sKUapwXWFjiaz/Bsw1fhYFdNMnDUolRiWQSoKPb1/oKe37Dtfszoywi1Ynbo3y8w== dependencies: - delayed-stream "~1.0.0" + "@babel/runtime" "^7.6.0" + "@date-io/core" "1.x" + "@types/styled-jsx" "^2.2.8" + clsx "^1.0.2" + react-transition-group "^4.0.0" + rifm "^0.7.0" -commander@2.9.0, commander@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" +"@material-ui/styles@4.11.5", "@material-ui/styles@^4.11.5": + version "4.11.5" + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" + integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== dependencies: - graceful-readlink ">= 1.0.0" + "@babel/runtime" "^7.4.4" + "@emotion/hash" "^0.8.0" + "@material-ui/types" "5.1.0" + "@material-ui/utils" "^4.11.3" + clsx "^1.0.4" + csstype "^2.5.2" + hoist-non-react-statics "^3.3.2" + jss "^10.5.1" + jss-plugin-camel-case "^10.5.1" + jss-plugin-default-unit "^10.5.1" + jss-plugin-global "^10.5.1" + jss-plugin-nested "^10.5.1" + jss-plugin-props-sort "^10.5.1" + jss-plugin-rule-value-function "^10.5.1" + jss-plugin-vendor-prefixer "^10.5.1" + prop-types "^15.7.2" -commander@^2.11.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +"@material-ui/system@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" + integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== + dependencies: + "@babel/runtime" "^7.4.4" + "@material-ui/utils" "^4.11.3" + csstype "^2.5.2" + prop-types "^15.7.2" -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +"@material-ui/types@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== -commoner@^0.10.1: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" +"@material-ui/utils@^4.11.2", "@material-ui/utils@^4.11.3": + version "4.11.3" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" + integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" + "@babel/runtime" "^7.4.4" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" -component-clone@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/component-clone/-/component-clone-0.2.2.tgz#c7f5979822880fad8cfb0962ba29186d061ee04f" +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: - component-type "*" + eslint-scope "5.1.1" -component-emitter@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -component-raf@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/component-raf/-/component-raf-1.2.0.tgz#b2bc72d43f1b014fde7a4b3c447c764bc73ccbaa" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -component-tween@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/component-tween/-/component-tween-1.2.0.tgz#cc39ce5dbab05b52825f41d1947638a0b01b2b8a" +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - component-clone "0.2.2" - component-emitter "1.2.0" - component-type "1.1.0" - ease-component "1.0.0" + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" -component-type@*, component-type@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.1.0.tgz#95b666aad53e5c8d1f2be135c45b5d499197c0c5" +"@popperjs/core@^2.6.0": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -compressible@~2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" +"@rollup/plugin-inject@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" + integrity sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA== dependencies: - mime-db ">= 1.24.0 < 2" + "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.27.0" -compression@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" +"@rollup/pluginutils@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== dependencies: - accepts "~1.3.3" - bytes "2.3.0" - compressible "~2.0.8" - debug "~2.2.0" - on-headers "~1.0.1" - vary "~1.1.0" + estree-walker "^2.0.1" + picomatch "^2.2.2" -compute-scroll-into-view@^1.0.9: - version "1.0.11" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz#7ff0a57f9aeda6314132d8994cce7aeca794fecf" - integrity sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A== +"@rollup/pluginutils@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" + integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +"@rushstack/eslint-patch@^1.1.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz#77e948b9760bd22736a5d26e335a690f76fda37b" + integrity sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg== -confusing-browser-globals@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.6.tgz#5918188e8244492cdd46d6be1cab60edef3063ce" - integrity sha512-GzyX86c2TvaagAOR+lHL2Yq4T4EnoBcnojZBcNbxVKSunxmGTnioXHR5Mo2ha/XnCoQw8eurvj6Ta+SwPEPkKg== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -connect-history-api-fallback@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@testing-library/dom@^9.0.0": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" + integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.16.5": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" + integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== + dependencies: + "@adobe/css-tools" "^4.0.1" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" + integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@ts-morph/common@~0.12.3": + version "0.12.3" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.12.3.tgz#a96e250217cd30e480ab22ec6a0ebbe65fd784ff" + integrity sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w== dependencies: - date-now "^0.1.4" + fast-glob "^3.2.7" + minimatch "^3.0.4" + mkdirp "^1.0.4" + path-browserify "^1.0.1" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" +"@types/aria-query@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" + integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== -content-type@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" -convert-css-length@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/convert-css-length/-/convert-css-length-2.0.1.tgz#90a76bde5bfd24d72881a5b45d02249b2c1d257c" - integrity sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg== +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== -convert-source-map@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" +"@types/classnames@2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" + integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A== + dependencies: + classnames "*" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +"@types/eslint@^8.4.5": + version "8.44.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" + integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== -core-js@^2.5.3: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +"@types/hoist-non-react-statics@*": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a" + integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/i18next@^11.9.0": + version "11.9.3" + resolved "https://registry.yarnpkg.com/@types/i18next/-/i18next-11.9.3.tgz#04d84c6539908ad69665d26d8967f942d1638550" + integrity sha512-snM7bMKy6gt7UYdpjsxycqSCAy0fr2JVPY0B8tJ2vp9bN58cE7C880k20PWFM4KXxQ3KsstKM8DLCawGCIH0tg== + +"@types/isomorphic-fetch@^0.0.36": + version "0.0.36" + resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz#3a6d8f63974baf26b10fd1314db910633108a769" + integrity sha512-ulw4d+vW1HKn4oErSmNN2HYEcHGq0N1C5exlrMM0CRqX1UUpFhGb5lwiom5j9KN3LBJJDLRmYIZz1ghm7FIzZw== -create-react-class@^15.5.1: - version "15.6.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" - integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" + "@types/istanbul-lib-coverage" "*" -cross-spawn@^3.0.0: +"@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + "@types/istanbul-lib-report" "*" -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +"@types/jest@*": + version "29.5.5" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.5.tgz#727204e06228fe24373df9bae76b90f3e8236a2a" + integrity sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg== dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" + expect "^29.0.0" + pretty-format "^29.0.0" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" +"@types/json-schema@*", "@types/json-schema@^7.0.9": + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== -crypto-browserify@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" - dependencies: - browserify-aes "0.4.0" - pbkdf2-compat "2.0.1" - ripemd160 "0.2.0" - sha.js "2.2.6" +"@types/json-schema@7.0.9": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -css-in-js-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== +"@types/material-ui@^0.21.12": + version "0.21.12" + resolved "https://registry.yarnpkg.com/@types/material-ui/-/material-ui-0.21.12.tgz#208e8b7e49a545bb704fa7e865986afde1b33384" + integrity sha512-rBY3iOr5LISKDLAYo3229R79xIPPKSOL2c7FzAFn5dUj38Oe7rQldYedHWsYmkJUeboE9Ipad7ppyJwBzXxrMw== dependencies: - hyphenate-style-name "^1.0.2" - isobject "^3.0.1" + "@types/react" "*" + "@types/react-addons-linked-state-mixin" "*" -css-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.23.1.tgz#9fa23f2b5c0965235910ad5ecef3b8a36390fe50" - dependencies: - css-selector-tokenizer "^0.5.1" - cssnano ">=2.6.1 <4" - loader-utils "~0.2.2" - lodash.camelcase "^3.0.1" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - source-list-map "^0.1.4" - -css-selector-tokenizer@^0.5.1: +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node-localstorage@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/node-localstorage/-/node-localstorage-1.3.0.tgz#8341b89abd8ad00afcd3fa9242ed956b8f5ad32c" + integrity sha512-9+s5CWGhkYitklhLgnbf4s5ncCEx0An2jhBuhvw/sh9WNQ+/WvNFkPLyLjXGy+Oeo8CjPl69oz6M2FzZH+KwWA== + dependencies: + "@types/events" "*" + +"@types/node@*": + version "20.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" + integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== + +"@types/node@18": + version "18.17.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.17.tgz#53cc07ce582c9d7c5850702a3c2cb0af0d7b0ca1" + integrity sha512-cOxcXsQ2sxiwkykdJqvyFS+MLQPLvIdwh5l6gNg8qF6s+C7XSkEWOZjK+XhUZd+mYvHV/180g2cnCcIl4l06Pw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^1.18.3": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== + +"@types/prettier@^2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/prop-types@*": + version "15.7.6" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.6.tgz#bbf819813d6be21011b8f5801058498bec555572" + integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg== + +"@types/qs@^6.5.3": + version "6.9.16" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" + integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + +"@types/react-addons-linked-state-mixin@*": + version "0.14.22" + resolved "https://registry.yarnpkg.com/@types/react-addons-linked-state-mixin/-/react-addons-linked-state-mixin-0.14.22.tgz#a8fe5929bbfa10947f3bf62d4a878706ec6b7718" + integrity sha512-DF9utM6VjuIaY388R6XWWDs7CIDTH7on1k1yR+hqaL/T4/OqSCW5uij28APq9KI82CZf0/qtBJI+pjvXcOh0kQ== + dependencies: + "@types/react" "*" + +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.7": + version "18.2.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" + integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== + dependencies: + "@types/react" "*" + +"@types/react-router-dom@5.3.3": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react-transition-group@^4.2.0": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" + integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^18.2.21": + version "18.2.22" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.22.tgz#abe778a1c95a07fa70df40a52d7300a40b949ccb" + integrity sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/semver@^7.3.12": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" + integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/styled-components@5.1.24": + version "5.1.24" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.24.tgz#b52ae677f03ea8a6018aa34c6c96b7018b7a3571" + integrity sha512-mz0fzq2nez+Lq5IuYammYwWgyLUE6OMAJTQL9D8hFLP4Pkh7gVYJii/VQWxq8/TK34g/OrkehXaFNdcEKcItug== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + +"@types/styled-jsx@^2.2.8": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/styled-jsx/-/styled-jsx-2.2.9.tgz#e50b3f868c055bcbf9bc353eca6c10fdad32a53f" + integrity sha512-W/iTlIkGEyTBGTEvZCey8EgQlQ5l0DwMqi3iOXlLs2kyBwYTXHKEiU6IZ5EwoRwngL8/dGYuzezSup89ttVHLw== + dependencies: + "@types/react" "*" + +"@types/stylis@4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" + integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" + integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== + dependencies: + "@types/jest" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.5.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz#14559bf73383a308026b427a4a6129bae2146741" + integrity sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw== + dependencies: + "@typescript-eslint/utils" "5.62.0" + +"@typescript-eslint/parser@^5.5.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.58.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@vitejs/plugin-react@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz#d1091f535eab8b83d6e74034d01e27d73c773240" + integrity sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g== + dependencies: + "@babel/core" "^7.20.12" + "@babel/plugin-transform-react-jsx-self" "^7.18.6" + "@babel/plugin-transform-react-jsx-source" "^7.19.6" + magic-string "^0.27.0" + react-refresh "^0.14.0" + +"@vitest/coverage-v8@^0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-0.32.4.tgz#b11c182f52898f34f7cc5cf3aaa05e71528f7b7e" + integrity sha512-itiCYY3TmWEK+5wnFBoNr0ZA+adACp7Op1r2TeX5dPOgU2See7+Gx2NlK2lVMHVxfPsu5z9jszKa3i//eR+hqg== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.1.5" + magic-string "^0.30.0" + picocolors "^1.0.0" + std-env "^3.3.3" + test-exclude "^6.0.0" + v8-to-istanbul "^9.1.0" + +"@vitest/expect@0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.32.4.tgz#4aa4eec78112cdbe299834b965420d4fb3afa91d" + integrity sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A== + dependencies: + "@vitest/spy" "0.32.4" + "@vitest/utils" "0.32.4" + chai "^4.3.7" + +"@vitest/runner@0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.32.4.tgz#2872c697994745f1b70e2bd6568236ad2d9eade6" + integrity sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw== + dependencies: + "@vitest/utils" "0.32.4" + p-limit "^4.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.32.4.tgz#75166b1c772d018278a7f0e79f43f3eae813f5ae" + integrity sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA== + dependencies: + magic-string "^0.30.0" + pathe "^1.1.1" + pretty-format "^29.5.0" + +"@vitest/spy@0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.32.4.tgz#c3212bc60c1430c3b5c39d6a384a75458b8f1e80" + integrity sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ== + dependencies: + tinyspy "^2.1.1" + +"@vitest/utils@0.32.4": + version "0.32.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.32.4.tgz#36283e3aa3f3b1a378e19493c7b3b9107dc4ea71" + integrity sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^29.5.0" + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abort-controller@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-bigint@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/acorn-bigint/-/acorn-bigint-0.4.0.tgz#af3245ed8a7c3747387fca4680ae1960f617c4cd" + integrity sha512-W9iaqWzqFo7ZBLmI9dMjHYGrN0Nm/ZgToqhvd3RELJux7RsX6k1/80h+bD9TtTpeKky/kYNbr3+vHWqI3hdyfA== + +acorn-class-fields@^0.3.1: + version "0.3.7" + resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720" + integrity sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ== + dependencies: + acorn-private-class-elements "^0.2.7" + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-export-ns-from@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/acorn-export-ns-from/-/acorn-export-ns-from-0.1.0.tgz#192687869bba3bcb2ef1a1ba196486ea7e100e5c" + integrity sha512-QDQJBe2DfxNBIMxs+19XY2i/XXilJn+kPgX30HWNYK4IXoNj3ACNSWPU7szL0SzqjFyOG4zoZxG9P7JfNw5g7A== + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-import-meta@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/acorn-import-meta/-/acorn-import-meta-1.1.0.tgz#c384423462ee7d4721d4de83231021a36cb09def" + integrity sha512-pshgiVR5mhpjFVdizKTN+kAGRqjJFUOEB3TvpQ6kiAutb1lvHrIVVcGoe5xzMpJkVNifCeymMG7/tsDkWn8CdQ== + +acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-logical-assignment@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/acorn-logical-assignment/-/acorn-logical-assignment-0.1.4.tgz#1a143a21f022e1707b2bc82f587ae2943f0a570e" + integrity sha512-SeqO1iRtc/NeXo4bTkyK0hN0CIoKi/FQMN1NqhTr5UxqEn4p2wKNTZl+xzvU7i2u/k0f66YR7pNPi2ckPwYubg== + +acorn-numeric-separator@^0.3.0: + version "0.3.6" + resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz#af7f0abaf8e74bd9ca1117602954d0a3b75804f3" + integrity sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw== + +acorn-private-class-elements@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz#b14902c705bcff267adede1c9f61c1a317ef95d2" + integrity sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA== + +acorn-private-methods@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz#724414ce5b2fec733089d73a5cbba8f7beff75b1" + integrity sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w== + dependencies: + acorn-private-class-elements "^0.2.7" + +acorn-stage3@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/acorn-stage3/-/acorn-stage3-2.1.0.tgz#63ffe0f00b8ac7ccdce34ce82b3b9a6777af390a" + integrity sha512-6R3IWwmMl1MBYf6JtaquuE8OqtCArA1zaDlY7QUeUNDcUzNJoZJm1nFQrv0SzdjkRv1khADbMfucFsF661LGow== + dependencies: + acorn-bigint "^0.4.0" + acorn-class-fields "^0.3.1" + acorn-dynamic-import "^4.0.0" + acorn-export-ns-from "^0.1.0" + acorn-import-meta "^1.0.0" + acorn-logical-assignment "^0.1.0" + acorn-numeric-separator "^0.3.0" + acorn-private-methods "^0.3.0" + acorn-static-class-features "^0.2.0" + +acorn-static-class-features@^0.2.0: + version "0.2.4" + resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz#a0f5261dd483f25196716854f2d7652a1deb39ee" + integrity sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA== + dependencies: + acorn-private-class-elements "^0.2.7" + +acorn-walk@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn-walk@^8.0.2, acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^6.0.0: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^8.1.0, acorn@^8.10.0, acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== + dependencies: + buffer-equal "^1.0.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +aria-query@^5.0.0, aria-query@^5.1.3: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.6: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" + integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +async@^2.5.0, async@^2.6.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +author-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-0.2.1.tgz#8bdefaac6065a931799bec07eeef51b940e08f3c" + integrity sha512-LicvLyjpPZ8s58Xy628qUmwgQnN3P7o0pWygc3EZILfkYzLauo/hoPPc7iPNi2pceMmXaeHlk4VHPLp9v2DjeQ== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.8.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.1.tgz#6948854183ee7e7eae336b9877c5bafa027998ea" + integrity sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ== + +axios-debug-log@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/axios-debug-log/-/axios-debug-log-0.6.2.tgz#c7761ced8f1990e6d48c556b517af8e00edcef31" + integrity sha512-aavexsFWw+T09e9JkbsNe/zLjdG4r2vwhnKUtCNC/0wpogI/i+bQWJ0jJIuXof734dQ43uiOiFPgbRu8EVa64Q== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + +axios-mock-adapter@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.18.2.tgz#01fa9e88e692e8f1bbc1ad1200dde672486e03c7" + integrity sha512-e5aTsPy2Viov22zNpFTlid76W1Scz82pXeEwwCXdtO85LROhHAF8pHF2qDhiyMONLxKyY3lQ+S4UCsKgrlx8Hw== + dependencies: + fast-deep-equal "^3.1.1" + is-buffer "^2.0.3" + +axios@0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-react-app@10.1.0-next.14+9802941f: + version "10.1.0-next.14" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.1.0-next.14.tgz#a4c6a92e6e0e8d51075894beafa1d3eeaa8e14ed" + integrity sha512-/xYDXmFaTFqny9vVvsaNigvt0zzFRjjgi/3oTCeg3UzPKcWW1O6WG9JyeAV3d47Sewyr7i5B57nL5or32Vnn6A== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-decorators" "^7.16.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-runtime" "^7.16.4" + "@babel/preset-env" "^7.16.4" + "@babel/preset-react" "^7.16.0" + "@babel/preset-typescript" "^7.16.0" + "@babel/runtime" "^7.16.3" + babel-plugin-macros "^3.1.0" + babel-plugin-transform-react-remove-prop-types "^0.4.24" + +babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bluebird@^3.5.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bowser@^1.7.3: + version "1.9.4" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" + integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.21.10, browserslist@^4.21.9: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +bundle-phobia-cli@^0.14.14: + version "0.14.14" + resolved "https://registry.yarnpkg.com/bundle-phobia-cli/-/bundle-phobia-cli-0.14.14.tgz#29345de5b571f011cf501d9823527c47e649a147" + integrity sha512-odOT7QfLqLoFBz5fioUxhM386w9JQ1XJ4gMf5TtJ4zPt3yivC+bjh2vsqvx6W9nyfUltlemuoXXhaGrSV+KEdQ== + dependencies: + bytes "^3.1.0" + chalk "^4.1.1" + inquirer "^7.3.3" + lodash "^4.17.21" + node-fetch "^2.6.7" + ora "^4.1.1" + p-map "^4.0.0" + read-pkg-up "^7.0.1" + resolve-package-json "^1.4.0" + update-notifier "^4.1.3" + yargs "^15.4.1" + +bytes@3.1.2, bytes@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + +caniuse-lite@^1.0.30001517: + version "1.0.30001535" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz#908a5b7ef11172f51f0b88f3d850aef1c6a3cf7b" + integrity sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg== + +chai@^4.3.7: + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chain-function@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.1.tgz#c63045e5b4b663fb86f1c6e186adaf1de402a1cc" + integrity sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg== + +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +classnames@*, classnames@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +classnames@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +classnames@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +client-request@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/client-request/-/client-request-2.3.0.tgz#c4604f71f81c94b280659579a17bbc0446fec212" + integrity sha512-cHFF3C3XZ6ED7f22wAgvjnnVj5A+sXEYf7D5GCRmDUaH6D0QNnu3ZclUhSd1AoMyzgSN3IlyhI75q85onuIq3g== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== + +clone-deep@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +clsx@^1.0.2, clsx@^1.0.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +cmd-ts@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/cmd-ts/-/cmd-ts-0.12.1.tgz#5ddf69f27887e7380ce6d50a07a3850cb82ea3f7" + integrity sha512-k93f6LgFEzx7/vBy5qV+tu1VI8YuH0DZmwNXPvRaDR4Qp7Fl9+pUSylX/CKHrWoKqHMJjNOLb1NeYTvHOjQ2Kw== + dependencies: + chalk "^4.0.0" + debug "^4.3.4" + didyoumean "^1.2.2" + strip-ansi "^6.0.0" + +code-block-writer@^11.0.0: + version "11.0.3" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" + integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@^1.0.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.15.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compute-scroll-into-view@^1.0.13: + version "1.0.20" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +confusing-browser-globals@1.1.0-next.14+9802941f: + version "1.1.0-next.14" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.1.0-next.14.tgz#475adc3dc94ac67c5caa30e37c7892b983963f77" + integrity sha512-shpUugMlZFU47qCZ4BuoAoAlUKOjiO7Nhn1aVFx1RADeAbKdgJ1iFc18b9KPY5GRr4EnU22boZrMSlo/NfQzwQ== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== + +content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz#139bafd34a35fd0c1428487049e0699e6f6a2c21" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -css-selector-tokenizer@^0.6.0: +cookie@0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +core-js-compat@^3.31.0: + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" + integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + browserslist "^4.21.10" -css-vendor@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda" - integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg== +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: - "@babel/runtime" "^7.6.2" - is-in-browser "^1.0.2" + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -"cssnano@>=2.6.1 <4": - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: - clap "^1.0.9" - source-map "^0.5.3" + bn.js "^4.1.0" + elliptic "^6.5.3" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: - cssom "0.3.x" + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" - integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== +create-require@^1.1.0, create-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" +cron-parser@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== dependencies: - array-find-index "^1.0.1" + is-nan "^1.3.0" + moment-timezone "^0.5.31" + +cronstrue@^1.81.0: + version "1.125.0" + resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.125.0.tgz#8030816d033d00caade9b2a9f9b71e69175bcf42" + integrity sha512-qkC5mVbVGuuyBVXmam5anaRtbLcgfBUKajoyZqCdf/XBdgF43PsLSEm8eEi2dsI3YbqDPbLSH2mWNzM1dVqHgQ== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +cryptr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cryptr/-/cryptr-4.0.2.tgz#8a93b5ca7667d1a6131e396bab23a134ff1f5dc6" + integrity sha512-gLTcYjmLGe0Kk1yyacvjNKvSdkWBNNgG2tDnbRQP7yE559x/RJLo/I3WAmwCXNXf/fzMHCNp9vDv3PCopZDpXw== -d2-manifest@^1.0.0: +css-color-keywords@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/d2-manifest/-/d2-manifest-1.0.0.tgz#19d4a4c4e8151442ab730e932c9c2170be9ebcc9" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + +css-in-js-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== dependencies: - author-regex "^0.2.1" - colors "^1.0.3" - lodash.isplainobject "^4.0.3" - loglevel "^1.4.0" - minimist "^1.1.0" - readline-sync "^1.4.1" + hyphenate-style-name "^1.0.2" + isobject "^3.0.1" -"d2-ui@github:EyeSeeTea/d2-ui#dataset-configuration": - version "26.1.7" - resolved "https://codeload.github.com/EyeSeeTea/d2-ui/tar.gz/37495e0043e97f82207e4b66b2491ce5c0170afc" +css-to-react-native@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" -d2-utilizr@^0.2.9: - version "0.2.13" - resolved "https://registry.yarnpkg.com/d2-utilizr/-/d2-utilizr-0.2.13.tgz#aff6dfb054f92e2c974cf69f38f4fdc13699a6d3" +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== dependencies: - lodash.isboolean "^3.0.3" - lodash.isfunction "^3.0.8" - lodash.ismap "^4.3.0" - lodash.isnumber "^3.0.3" - lodash.isobject "^3.0.2" - lodash.isset "^4.3.0" - lodash.isstring "^4.0.1" + "@babel/runtime" "^7.8.3" + is-in-browser "^1.0.2" + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -d2@26.2.2: - version "26.2.2" - resolved "https://registry.yarnpkg.com/d2/-/d2-26.2.2.tgz#c1ba68b25c89e7f00b2483de354c7458a7ed5a28" +cssstyle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== dependencies: - whatwg-fetch "^2.0.1" + rrweb-cssom "^0.6.0" -d3-color@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.2.tgz#83cb4b3a9474e40795f009d97e97a15649830bbc" +csstype@3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -d3@^3.5.6: - version "3.5.17" - resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" +csstype@^2.5.2: + version "2.6.21" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== -damerau-levenshtein@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" +d2-manifest@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d2-manifest/-/d2-manifest-1.0.0.tgz#19d4a4c4e8151442ab730e932c9c2170be9ebcc9" + integrity sha512-iITqq403wLHHe/B3jodoDH+Hv509NxYyMHY1AGDjQ/rXj1TAWuS0CNTr8SAyQFRrITkk6ZXwYp4eLu8MfgW3qA== dependencies: - assert-plus "^1.0.0" + author-regex "^0.2.1" + colors "^1.0.3" + lodash.isplainobject "^4.0.3" + loglevel "^1.4.0" + minimist "^1.1.0" + readline-sync "^1.4.1" -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" +d2@31.10.2, d2@^31.8.1: + version "31.10.2" + resolved "https://registry.yarnpkg.com/d2/-/d2-31.10.2.tgz#93023171a703ad37dedf273b07e9643155e42466" + integrity sha512-kW/2DKv567foH9JNEBtebfOW6gdmHzNd5dsvA7m8aVK0IZAXYd++lKKqmTUPzpjSRHuM7oUAnTw29/a5JIdfWQ== + dependencies: + isomorphic-fetch "^2.2.1" -debug@2.2.0, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +d2@~31.7: + version "31.7.0" + resolved "https://registry.yarnpkg.com/d2/-/d2-31.7.0.tgz#3a843240fecaafdf213da78b55aed9b8611ee22e" + integrity sha512-+ubKyPWKxUz90g5RHCYIt4KxKPzcCOBvDS7X0076XSycecfx4qvtkGBcKyFmXdz27iwTLUpNtruL9pUK9aTi/A== dependencies: - ms "0.7.1" + isomorphic-fetch "^2.2.1" -debug@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== dependencies: - ms "0.7.2" + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.0" -debug@2.6.3, debug@^2.1.1, debug@^2.2.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" +date-fns@^2.14.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== dependencies: - ms "0.7.2" + "@babel/runtime" "^7.21.0" -debug@^2.6.8, debug@^2.6.9: +date-format@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.1, debug@^3.2.6, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +debug@^4.0.0: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -deep-eql@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: - type-detect "0.1.1" + mimic-response "^1.0.0" -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +deep-equal@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" + integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.1" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.0.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + clone "^1.0.2" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -depd@1.1.0, depd@~1.1.0: +des.js@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -detective@^4.3.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" - dependencies: - acorn "^4.0.3" - defined "^1.0.0" +diff-sequences@^29.4.3, diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: - esutils "^2.0.2" - isarray "^1.0.0" + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" @@ -2055,6 +5050,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + dom-helpers@^3.2.0: version "3.4.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" @@ -2063,498 +5063,748 @@ dom-helpers@^3.2.0: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" - integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: - "@babel/runtime" "^7.6.3" - csstype "^2.6.7" + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" +domain-browser@^4.22.0: + version "4.22.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" + integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== -domain-browser@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" -downshift@^3.3.4: - version "3.4.3" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-3.4.3.tgz#fbbf88711eaf7029faa7de8a54c16c1b835bf45c" - integrity sha512-lk0Q1VF4eTDe4EMzYtdVCPdu58ZRFyK3wxEAGUeKqPRDoHDgoS9/TaxW2w+hEbeh9yBMU2IKX8lQkNn6YTfZ4w== +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^8.0.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +downshift@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-5.4.2.tgz#3f6b7bf4ad7e0ff5503414efe3a398421763ebae" + integrity sha512-IVwIc4iw5OF5Bi/MbITarW2E8/5akm++5b6UL7aXyPoZmuVe4ilFGaQaktdFW/IwuzHieIwaWj4AQgI0lQNslQ== dependencies: - "@babel/runtime" "^7.4.5" - compute-scroll-into-view "^1.0.9" + "@babel/runtime" "^7.9.1" + compute-scroll-into-view "^1.0.13" prop-types "^15.7.2" - react-is "^16.9.0" + react-is "^16.13.1" -ease-component@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ease-component/-/ease-component-1.0.0.tgz#b375726db0b5b04595b77440396fec7daa5d77c9" +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: - jsbn "~0.1.0" + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +editions@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/editions/-/editions-2.3.1.tgz#3bc9962f1978e801312fbd0aebfed63b49bfe698" + integrity sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA== + dependencies: + errlop "^2.0.0" + semver "^6.3.0" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -electron-to-chromium@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" - -emoji-regex@^7.0.1, emoji-regex@^7.0.2: + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.5: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.477: + version "1.4.523" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz#f82f99243c827df05c26776d49712cb284972df6" + integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -envify@^3.0.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" +encoding@^0.1.11, encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: - jstransform "^11.0.3" - through "~2.3.4" + iconv-lite "^0.6.2" -errno@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - prr "~0.0.0" + once "^1.4.0" -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" +ensure-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ensure-array/-/ensure-array-1.0.0.tgz#317e9fc632c656bb849eb649133528e205b23abc" + integrity sha512-A+3Ntl5WS+GjDnHtC67dKIjw+IoGoeFdNvjn3ZfKEmZgWUz0nxBPE4W52QMCbGZsat0VwWskD5T6AEpe3T2d1g== + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +eol@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" + integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== + +errlop@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/errlop/-/errlop-2.2.0.tgz#1ff383f8f917ae328bebb802d6ca69666a42d21b" + integrity sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.11.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" +es-abstract@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" + integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + 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.6" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" + 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.12" + 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.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + 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.11" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" -es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-iterator-helpers@^1.0.12: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" + has "^1.0.3" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-html@~1.0.3: +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escodegen@1.8.x, escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -eslint-config-prettier@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217" - integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ== - dependencies: - get-stdin "^6.0.0" - -eslint-config-react-app@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz#6f606828ba30bafee7d744c41cd07a3fea8f3035" - integrity sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA== - dependencies: - confusing-browser-globals "^1.0.6" - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" - integrity sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -eslint-plugin-flowtype@2.x: - version "2.50.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" - integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ== - dependencies: - lodash "^4.17.10" +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-plugin-import@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" - integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.3.0" + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-react-app@7.1.0-next.14: + version "7.1.0-next.14" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.1.0-next.14.tgz#a3e5c98c59651100f1067063ac02a35269947573" + integrity sha512-E7nP1tWYDe2y3bS6MVIt/Iw3R3fYqhRqcQXGeMf066ohUaYoIZMbPpi69MjCxwjaqQOJUoYTKNO5oPwwc5Wpkg== + dependencies: + "@babel/core" "^7.16.0" + "@babel/eslint-parser" "^7.16.3" + "@rushstack/eslint-patch" "^1.1.0" + "@typescript-eslint/eslint-plugin" "^5.5.0" + "@typescript-eslint/parser" "^5.5.0" + babel-preset-react-app "10.1.0-next.14+9802941f" + confusing-browser-globals "1.1.0-next.14+9802941f" + eslint-plugin-flowtype "^8.0.3" + eslint-plugin-import "^2.25.3" + eslint-plugin-jest "^25.3.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.27.1" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-testing-library "^5.0.1" + +eslint-import-resolver-node@^0.3.7: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-flowtype@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz#e1557e37118f24734aa3122e7536a038d34a4912" + integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.25.3: + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + dependencies: + array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.8.0" has "^1.0.3" - lodash "^4.17.11" - minimatch "^3.0.4" - read-pkg-up "^2.0.0" - resolve "^1.9.0" - -eslint-plugin-jsx-a11y@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" - integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== - dependencies: - aria-query "^3.0.0" - array-includes "^3.0.3" + is-core-module "^2.13.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" + object.values "^1.1.6" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-jest@^25.3.0: + version "25.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz#ff4ac97520b53a96187bad9c9814e7d00de09a6a" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^2.0.1" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-no-relative-import-paths@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.5.4.tgz#dd83666b13d43dd22156e4cc660f73700843791a" + integrity sha512-2smViH7R3682NR6dwgYr8Vm7emqNP1gEjBku6DbvUy3Ef/2Fz+mhwsFjZGSixzWzazMCj4MAgIWTsHELCCDJKA== + +eslint-plugin-react-hooks@^4.3.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.12.4: - version "7.12.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" - integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== +eslint-plugin-react@^7.27.1: + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - object.fromentries "^2.0.0" - prop-types "^15.6.2" - resolve "^1.9.0" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + es-iterator-helpers "^1.0.12" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.1" + string.prototype.matchall "^4.0.8" + +eslint-plugin-testing-library@^5.0.1, eslint-plugin-testing-library@^5.11.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz#5b46cdae96d4a78918711c0b4792f90088e62d20" + integrity sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw== + dependencies: + "@typescript-eslint/utils" "^5.58.0" + +eslint-plugin-unused-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" + integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + eslint-rule-composer "^0.3.0" -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-rule-composer@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" -eslint@^5.12.1: - version "5.15.3" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.3.tgz#c79c3909dc8a7fa3714fb340c11e30fd2526b8b5" - integrity sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.37.0: + version "8.49.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.49.0.tgz#09d80a89bdb4edee2efcf6964623af1054bf6d42" + integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.49.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.12.0" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - -esprima@2.7.x, esprima@^2.1.0, esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" -esprima@^3.1.1, esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + estraverse "^5.2.0" -estraverse@^4.0.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -esutils@^2.0.0, esutils@^2.0.2: +estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -etag@~1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -express@^4.13.3: - version "4.15.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" - dependencies: - accepts "~1.3.3" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +expect-type@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-0.15.0.tgz#89f75e22c88554844ea2b2faf4ef5fc2e579d3b5" + integrity sha512-yWnriYB4e8G54M5/fAFj7rCIBiKs1HAACaY13kCz6Ku0dezjS9aMcfcdVK2X8Tv2tEV1BPz/wKfQ7WA4S/d8aA== + +expect@^29.0.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +express@^4.17.1: + version "4.21.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" + integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== + dependencies: + accepts "~1.3.8" array-flatten "1.1.1" - content-disposition "0.5.2" - content-type "~1.0.2" - cookie "0.3.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" cookie-signature "1.0.6" - debug "2.6.1" - depd "~1.1.0" - encodeurl "~1.0.1" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" escape-html "~1.0.3" - etag "~1.8.0" - finalhandler "~1.0.0" - fresh "0.5.0" - merge-descriptors "1.0.1" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.1" - path-to-regexp "0.1.7" - proxy-addr "~1.1.3" - qs "6.4.0" - range-parser "~1.2.0" - send "0.15.1" - serve-static "1.12.1" - setprototypeof "1.0.3" - statuses "~1.3.1" - type-is "~1.6.14" - utils-merge "1.0.0" - vary "~1.1.0" - -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - -extend@~3.0.2: + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.10" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" - integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@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" fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -fbemitter@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" - integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= - dependencies: - fbjs "^0.8.4" - -fbjs@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: - core-js "^1.0.0" - loose-envify "^1.0.0" - promise "^7.0.3" - ua-parser-js "^0.7.9" - whatwg-fetch "^0.9.0" + reusify "^1.0.4" -fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.9: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= +fbjs@^0.8.1: + version "0.8.18" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a" + integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA== dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2562,412 +5812,469 @@ fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.9: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.18" + ua-parser-js "^0.7.30" -fbjs@^0.8.1, fbjs@^0.8.4: - version "0.8.11" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" + escape-string-regexp "^1.0.5" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - escape-string-regexp "^1.0.5" + flat-cache "^3.0.4" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: - flat-cache "^2.0.1" + minimatch "^5.0.1" -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" +final-form@^4.20.2: + version "4.20.10" + resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.10.tgz#1a484be6e9a91989121c054dcbd6f48bad051ecc" + integrity sha512-TL48Pi1oNHeMOHrKv1bCJUrWZDcD3DIG6AGYVNOnyZPr7Bd/pStN0pL+lfzF5BNoj/FclaoiaLenk4XUIFVYng== dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" + "@babel/runtime" "^7.10.0" -finalhandler@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: - debug "2.6.3" - encodeurl "~1.0.1" + debug "2.6.9" + encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.1" - statuses "~1.3.1" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" + locate-path "^3.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^2.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.2.7" + keyv "^4.5.3" + rimraf "^3.0.2" flatted@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" - integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +flatted@^3.2.7: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -flux@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" - integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io= +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - fbemitter "^2.0.0" - fbjs "^0.8.0" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + inherits "^2.0.3" + readable-stream "^2.3.6" -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + debug "=3.1.0" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" +font-awesome@4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" + integrity sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg== -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + is-callable "^1.1.3" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" -formatio@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" - dependencies: - samsam "~1.1" - -forwarded@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" - -fresh@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" + jsonfile "^4.0.0" + universalify "^0.1.0" -fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" + graceful-fs "^4.1.11" + through2 "^2.0.3" -function-bind@^1.0.2, function-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gauge@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: - assert-plus "^1.0.0" + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" +get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: - is-glob "^2.0.0" + pump "^3.0.0" -glob@7.0.5, glob@^7.0.0, glob@^7.0.3: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" + pump "^3.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.1" -glob@^7.0.5, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +gettext-parser@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.4.0.tgz#f8baf34a292f03d5e42f02df099d301f167a7ace" + integrity sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" + encoding "^0.1.12" + safe-buffer "^5.1.1" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" -glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^11.1.0, globals@^11.7.0: - version "11.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" - integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + ini "1.3.7" -globals@^9.0.0: - version "9.16.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globule@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: - glob "~7.1.1" - lodash "~4.16.4" - minimatch "~3.0.2" - -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + type-fest "^0.20.2" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" -handlebars@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" + 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" -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -har-schema@^2.0.0: +gulp-sort@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" + integrity sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g== dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" + through2 "^2.0.1" -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" + duplexer "^0.1.2" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" +handlebars@^4.0.11: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: - ansi-regex "^2.0.0" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: +has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" -has@^1.0.1: +has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: - function-bind "^1.0.2" + has-symbols "^1.0.2" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.3: version "1.0.3" @@ -2976,24 +6283,29 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" -history@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" - integrity sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw= +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: - invariant "^2.2.1" - loose-envify "^1.2.0" - query-string "^4.2.2" - warning "^3.0.0" + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" history@^4.9.0: version "4.10.1" @@ -3007,531 +6319,788 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" hoist-non-react-statics@^2.3.1: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" - integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" - dependencies: - whatwg-encoding "^1.0.1" +hosted-git-info@^2.1.4, hosted-git-info@^2.4.2: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -htmlencode@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/htmlencode/-/htmlencode-0.0.4.tgz#f7e2d6afbe18a87a78e63ba3308e753766740e3f" - -http-errors@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: - inherits "2.0.3" - setprototypeof "1.0.2" - statuses ">= 1.3.1 < 2" + whatwg-encoding "^2.0.0" -http-errors@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" - dependencies: - depd "1.1.0" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-proxy-middleware@~0.17.1: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" -"http-proxy@git+https://github.com/nicolayr/node-http-proxy.git": - version "1.13.3" - resolved "git+https://github.com/nicolayr/node-http-proxy.git#98b0fbd683dbddb41b8bf876a39d234671c83846" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" + "@tootallnate/once" "2" + agent-base "6" + debug "4" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + agent-base "6" + debug "4" -https-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" +husky@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" - integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + +i18next-conv@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/i18next-conv/-/i18next-conv-6.1.1.tgz#b3f9b0a76a20a67e2902c9e3273642a882a2442d" + integrity sha512-vtFjlOS1/3mDq/sXfDcwHuBj0jMi6xTZehTNhls6ndelaEUn9brHUaE0wuChmoLHOcsqchZZQWWH8gSv41qoZA== + dependencies: + bluebird "^3.5.1" + chalk "^2.4.1" + commander "^2.15.1" + gettext-parser "^1.3.1" + mkdirp "^0.5.1" + node-gettext "^2.0.0" + +i18next-scanner@^2.4.4: + version "2.11.0" + resolved "https://registry.yarnpkg.com/i18next-scanner/-/i18next-scanner-2.11.0.tgz#58c7ffadd5192cdb2b1b2a6c743b1314050ccb4c" + integrity sha512-/QqbSnUj9v6EwndaWeHp8NkHqLKAIHSlI1HXSyLdIPKWYM+Fnpk2tjnyjP8qn7L0rLT7HLH4bvyiw61wOIxf0A== + dependencies: + acorn "^6.0.0" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.2.0" + acorn-stage3 "^2.0.0" + acorn-walk "^6.0.0" + chalk "^2.4.1" + clone-deep "^4.0.0" + commander "^3.0.1" + deepmerge "^4.0.0" + ensure-array "^1.0.0" + eol "^0.9.1" + esprima "^4.0.0" + gulp-sort "^2.0.0" + i18next "*" + lodash "^4.0.0" + parse5 "^5.0.0" + sortobject "^1.1.1" + through2 "^3.0.1" + vinyl "^2.2.0" + vinyl-fs "^3.0.1" -iconv-lite@0.4.13, iconv-lite@^0.4.5, iconv-lite@~0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +i18next@*: + version "23.5.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.5.1.tgz#7f7c35ffaa907618d9489f106d5006b09fbca3d3" + integrity sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg== + dependencies: + "@babel/runtime" "^7.22.5" + +i18next@^10.3: + version "10.6.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-10.6.0.tgz#90ffd9f9bc617f34b9a12e037260f524445f7684" + integrity sha512-ycRlN145kQf8EsyDAzMfjqv1ZT1Jwp7P2H/07bP8JLWm+7cSLD4XqlJOvq4mKVS2y2mMIy10lX9ZeYUdQ0qSRw== -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -icss-replace-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" +iconv-lite@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +iconv-lite@0.6.3, iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -immutability-helper@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.1.2.tgz#734506440d7209b74664dcadaa8ba14e73f2185b" - dependencies: - invariant "^2.2.0" +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" - integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inline-style-prefixer@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" - integrity sha1-hVG45bTVcyROZqNLBPfTIHaitTQ= + integrity sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ== dependencies: bowser "^1.7.3" css-in-js-utils "^2.0.0" -inquirer@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" - integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== +inquirer@^7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.0.0" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" through "^2.3.6" -interpret@^0.6.4: - version "0.6.6" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" - -invariant@^2.2.0, invariant@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" +internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - loose-envify "^1.0.0" + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -invert-kv@^1.0.0: +is-absolute@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" -ipaddr.js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" +is-arguments@^1.0.4, is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== dependencies: - binary-extensions "^1.0.0" + has-tostringtag "^1.0.0" -is-buffer@^1.0.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - builtin-modules "^1.0.0" + binary-extensions "^2.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-buffer@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - is-primitive "^2.0.0" + ci-info "^2.0.0" -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-core-module@^2.13.0, is-core-module@^2.9.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extglob@^2.1.0: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finite@^1.0.0: +is-finalizationregistry@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" + call-bind "^1.0.2" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: - is-extglob "^1.0.0" + has-tostringtag "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= + integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: - kind-of "^3.0.2" + global-dirs "^2.0.1" + is-path-inside "^3.0.1" -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-nan@^1.3.0, is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== -is-primitive@^2.0.0: +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-path-inside@^3.0.1, is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-regex@^1.0.3, is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: - has "^1.0.1" + call-bind "^1.0.2" is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: - html-comment-regex "^1.1.0" + has-tostringtag "^1.0.0" -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== dependencies: - has-symbols "^1.0.0" + which-typed-array "^1.1.11" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" -is-utf8@^0.2.0: +is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== + +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-fetch@^2.1.1: +isomorphic-fetch@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + +isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA== dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isparta@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isparta/-/isparta-4.0.0.tgz#1de91996f480b22dcb1aca8510255bae1574446e" - dependencies: - babel-core "^6.1.4" - escodegen "^1.6.1" - esprima "^2.1.0" - istanbul "^0.4.0" - mkdirp "^0.5.0" - nomnomnomnom "^2.0.0" - object-assign "^4.0.1" - source-map "^0.5.0" - which "^1.0.9" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +isomorphic-timers-promises@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" + integrity sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== -istanbul@^0.4.0: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: - jsbn "~0.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" -jquery@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" -js-base64@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" +istanbul-reports@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.x: - version "3.8.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" - dependencies: - argparse "^1.0.7" - esprima "^3.1.1" - -js-yaml@^3.12.0: - version "3.12.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" - integrity sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^9.0.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^21.1.1: + version "21.1.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-21.1.2.tgz#6433f751b8718248d646af1cdf6662dc8a1ca7f9" + integrity sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.2" + acorn-globals "^7.0.0" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.4" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" jsesc@^2.5.1: version "2.5.2" @@ -3541,435 +7110,400 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-loader@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + minimist "^1.2.0" -json3@3.3.2, json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" +json5@^2.1.3, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" -jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - assert-plus "1.0.0" - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" -jss-plugin-camel-case@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz#d601bae2e8e2041cc526add289dcd7062db0a248" - integrity sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA== +jss-plugin-camel-case@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz#27ea159bab67eb4837fa0260204eb7925d4daa1c" + integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.0.0" + jss "10.10.0" -jss-plugin-default-unit@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz#601caf5f576fc0c66986fbe8a9aa37307a3a3ea3" - integrity sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ== +jss-plugin-default-unit@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz#db3925cf6a07f8e1dd459549d9c8aadff9804293" + integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.0.0" + jss "10.10.0" -jss-plugin-global@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz#0fed1b6461e0d57d6e394f877529009bc1cb3cb6" - integrity sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q== +jss-plugin-global@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz#1c55d3c35821fab67a538a38918292fc9c567efd" + integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== dependencies: "@babel/runtime" "^7.3.1" - jss "10.0.0" + jss "10.10.0" -jss-plugin-nested@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz#d37ecc013c3b0d0e4acc2b48f6b62da6ae53948b" - integrity sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA== +jss-plugin-nested@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz#db872ed8925688806e77f1fc87f6e62264513219" + integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.0.0" + jss "10.10.0" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz#38a13407384c2a4a7c026659488350669b953b18" - integrity sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g== +jss-plugin-props-sort@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz#67f4dd4c70830c126f4ec49b4b37ccddb680a5d7" + integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.0.0" + jss "10.10.0" -jss-plugin-rule-value-function@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz#3ec1b781b7c86080136dbef6c36e91f20244b72e" - integrity sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ== +jss-plugin-rule-value-function@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz#7d99e3229e78a3712f78ba50ab342e881d26a24b" + integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.0.0" + jss "10.10.0" + tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz#400280535b0f483a9c78105afe4eee61b70018eb" - integrity sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw== +jss-plugin-vendor-prefixer@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz#c01428ef5a89f2b128ec0af87a314d0c767931c7" + integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== dependencies: "@babel/runtime" "^7.3.1" - css-vendor "^2.0.6" - jss "10.0.0" + css-vendor "^2.0.8" + jss "10.10.0" -jss@10.0.0, jss@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0.tgz#998d5026c02accae15708de83bd6ba57bac977d2" - integrity sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ== +jss@10.10.0, jss@^10.5.1: + version "10.10.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.10.0.tgz#a75cc85b0108c7ac8c7b7d296c520a3e4fbc6ccc" + integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== dependencies: "@babel/runtime" "^7.3.1" - csstype "^2.6.5" + csstype "^3.0.2" is-in-browser "^1.1.3" tiny-warning "^1.0.2" -jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" keycode@^2.1.8: - version "2.2.0" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" - integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ= + version "2.2.1" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" + integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== -kind-of@^3.0.2: +keyv@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.5, loader-utils@~0.2.2: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + json-buffer "3.0.0" -lodash._createcompounder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== dependencies: - lodash.deburr "^3.0.0" - lodash.words "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + json-buffer "3.0.1" -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -lodash.camelcase@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: - lodash._createcompounder "^3.0.0" + language-subtag-registry "~0.3.2" -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" + readable-stream "^2.0.5" -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== + dependencies: + flush-write-stream "^1.0.2" -lodash.deburr@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - lodash._root "^3.0.0" + prelude-ls "^1.2.1" + type-check "~0.4.0" -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" +linkify-it@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== + dependencies: + uc.micro "^1.0.1" -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" -lodash.isfunction@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz#4db709fc81bc4a8fd7127a458a5346c5cdce2c6b" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" -lodash.ismap@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.ismap/-/lodash.ismap-4.4.2.tgz#836bf06dee57fd3d2aa357bf6946e61d1e77e279" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.isobject@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.isplainobject@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash.isset@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.isset/-/lodash.isset-4.4.2.tgz#d5eecc56b7a97ab588509e4795b3541b1cdb67bb" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.memoize@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - -lodash.merge@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" +lodash.merge@^4.6.0, lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.mergewith@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== -lodash.uniq@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" +lodash@4.17.21, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lodash.words@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: - lodash._root "^3.0.0" - -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.2, lodash@^4.2.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.17.10, lodash@^4.17.11: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + chalk "^2.4.2" -lodash@~4.16.4: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" +log4js@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.4" + streamroller "^1.0.6" loglevel@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.4.1.tgz#95b383f91a3c2756fd4ab093667e4309161f2bcd" - -lolex@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + version "1.8.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" + integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" +long-timeout@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" + integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== -loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" + get-func-name "^2.0.0" -lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" + yallist "^4.0.0" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -material-ui-scrollable-tabs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/material-ui-scrollable-tabs/-/material-ui-scrollable-tabs-2.0.0.tgz#4b812f30c1a24fef01c34c75cf0f36fd2a9478a3" - integrity sha512-H/zjvoXsnyaGIGc8L1SVHW7FW+jPJkmqrVFIhigJHIWiiWUYPNnlBM8AZO/zFg36J83UEJPbzDMmxuyb0aHZVw== +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== dependencies: - babel-runtime "^6.26.0" - prop-types "^15.6.0" - react-event-listener "^0.5.1" - react-scrollbar-size "^2.0.2" - scroll "^2.0.1" - simple-assign "^0.1.0" - warning "^3.0.0" + "@jridgewell/sourcemap-codec" "^1.4.13" + +magic-string@^0.30.0: + version "0.30.3" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" + integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -material-ui@^0.20.2: +material-ui@^0.20.0: version "0.20.2" resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.20.2.tgz#5fc9b4b62b691d3b16c89d8e54597a0412b52c7d" integrity sha512-VeqgQkdvtK193w+FFvXDEwlVxI4rWk83eWbpYLeOIHDPWr3rbB9B075JRnJt/8IsI2X8q5Aia5W3+7m4KkleDg== @@ -3986,1082 +7520,986 @@ material-ui@^0.20.2: simple-assign "^0.1.0" warning "^3.0.0" -math-expression-evaluator@^1.2.14: - version "1.2.16" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memory-fs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - -memory-fs@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -mime-db@1.42.0: - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== - -"mime-db@>= 1.24.0 < 2", mime-db@~1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" - -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" - dependencies: - mime-db "~1.26.0" - -mime-types@~2.1.19: - version "2.1.25" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" - integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== - dependencies: - mime-db "1.42.0" - -mime@1.3.4, mime@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - dependencies: - dom-walk "^0.1.0" - -mini-create-react-context@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" - integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== - dependencies: - "@babel/runtime" "^7.4.0" - gud "^1.0.0" - tiny-warning "^1.0.2" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - brace-expansion "^1.0.0" + braces "^3.0.2" + picomatch "^2.3.1" -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: - brace-expansion "^1.1.7" + bn.js "^4.0.0" + brorand "^1.0.1" -minimist@0.0.8, minimist@~0.0.1: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - minimist "0.0.8" - -mocha@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.5" - glob "7.0.5" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -moment@^2.18.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nan@^2.3.0, nan@^2.3.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + mime-db "1.52.0" -nano-memoize@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/nano-memoize/-/nano-memoize-1.1.3.tgz#3ce885f76898384ac78d39fe185b6419f71f8e12" - integrity sha512-+0yGTtwV70h7GourgGsy/AlxrQxqIvJdJjMCuBln+v9lc+u+STuEAscPc4YLgT7uVc+Su/osREG1Do9C/L5OVA== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" -node-gyp@^3.3.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.1.4" - buffer "^4.9.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "3.3.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "0.0.1" - os-browserify "^0.2.0" - path-browserify "0.0.0" - process "^0.11.0" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.0.5" - stream-browserify "^2.0.1" - stream-http "^2.3.1" - string_decoder "^0.10.25" - timers-browserify "^2.0.2" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" - dependencies: - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "^2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node-sass@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "^2.79.0" - sass-graph "^2.1.1" - stdout-stream "^1.4.0" - -nomnomnomnom@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nomnomnomnom/-/nomnomnomnom-2.0.1.tgz#b2239f031c8d04da67e32836e1e3199e12f7a8e2" - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -"nopt@2 || 3", nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - abbrev "1" + brace-expansion "^1.1.7" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: - abbrev "1" - osenv "^0.1.4" + brace-expansion "^2.0.1" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.6" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" +minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-scroll-left@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz#9445d74275f303cc661e113329aefa492f58114c" - integrity sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA== + brace-expansion "^2.0.1" -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + minimist "^1.2.6" -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== +mlly@^1.2.0, mlly@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" +moment-timezone@^0.5.31: + version "0.5.45" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + moment "^2.29.4" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" +moment@2.29.4, moment@^2.22.1, moment@^2.24.0: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" +moment@^2.29.4: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -once@1.x, once@^1.3.0, once@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -open@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" +nano-memoize@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/nano-memoize/-/nano-memoize-1.2.1.tgz#21091318021c81374a525349a8cd0ad712122077" + integrity sha512-ANfJ0QFhLzv9BZV8tHxwaDClqr+U8yY65hZA+slbgJrx+ePnHtlY92F2ZJInkkQWUUR71NzCEHBshKCHJnNyaQ== -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" - dependencies: - url-parse "1.0.x" +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -os-browserify@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== -os-locale@^1.4.0: +natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -osenv@0, osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: - p-try "^1.0.0" + encoding "^0.1.11" + is-stream "^1.0.1" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= +node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: - p-limit "^1.1.0" + whatwg-url "^5.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= +node-gettext@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-gettext/-/node-gettext-2.1.0.tgz#94d63e9cc0bcabd1e67de0680a44c812721a9023" + integrity sha512-vsHImHl+Py0vB7M2UXcFEJ5NJ3950gcja45YclBFtYxYeZiqdfQdcu+G9s4L7jpRFSh/J/7VoS3upR4JM1nS+g== + dependencies: + lodash.get "^4.4.2" -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -parent-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" - integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA== +node-schedule@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-1.3.3.tgz#f8e01c5fb9597f09ecf9c4c25d6938e5e7a06f48" + integrity sha512-uF9Ubn6luOPrcAYKfsXWimcJ1tPFtQ8I85wb4T3NgJQrXazEzojcFZVk46ZlLHby3eEJChgkV/0T689IsXh2Gw== dependencies: - callsites "^3.0.0" + cron-parser "^2.18.0" + long-timeout "0.1.1" + sorted-array-functions "^1.3.0" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" +node-stdlib-browser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz#5ddcfdf4063b88fb282979a1aa6ddab9728d5e4c" + integrity sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg== dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" + assert "^2.0.0" + browser-resolve "^2.0.0" + browserify-zlib "^0.2.0" + buffer "^5.7.1" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + create-require "^1.1.1" + crypto-browserify "^3.11.0" + domain-browser "^4.22.0" + events "^3.0.0" + https-browserify "^1.0.0" + isomorphic-timers-promises "^1.0.1" + os-browserify "^0.3.0" + path-browserify "^1.0.1" + pkg-dir "^5.0.0" + process "^0.11.10" + punycode "^1.4.1" + querystring-es3 "^0.2.1" + readable-stream "^3.6.0" + stream-browserify "^3.0.0" + stream-http "^3.2.0" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.1" + url "^0.11.0" + util "^0.12.4" + vm-browserify "^1.0.1" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: - error-ex "^1.2.0" - -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - -parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: - pinkie-promise "^2.0.0" + remove-trailing-separator "^1.0.1" -path-exists@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -path-key@^2.0.1: +now-and-later@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== dependencies: - isarray "0.0.1" + once "^1.3.2" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" +npm-package-arg@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" + integrity sha512-wJBsrf0qpypPT7A0LART18hCdyhpCMxeTtcb0X4IZO2jsP6Om7EHN1d9KSKiqD+KVH030RVNpWS9thk+pb7wzA== dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" + hosted-git-info "^2.4.2" + osenv "^0.1.4" + semver "^5.1.0" + validate-npm-package-name "^3.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - pify "^2.0.0" + path-key "^3.0.0" -pbkdf2-compat@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" +nwsapi@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: - pinkie "^2.0.0" + call-bind "^1.0.2" + define-properties "^1.1.3" -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" +object.assign@^4.0.4, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - find-up "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= +object.entries@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: - find-up "^2.1.0" - -popper.js@^1.14.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" - integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" +object.fromentries@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" +object.hasown@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" +object.values@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: - postcss "^5.0.14" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: - postcss "^5.0.4" + ee-first "1.1.1" -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: - postcss "^5.0.14" + wrappy "1" -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - postcss "^5.0.16" + mimic-fn "^2.1.0" -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" +open@^7.3.1: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" + is-docker "^2.0.0" + is-wsl "^2.1.1" -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" +ora@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" + integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== dependencies: - postcss "^5.0.4" + readable-stream "^2.0.1" -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + p-try "^2.0.0" -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" + yocto-queue "^0.1.0" -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" + yocto-queue "^1.0.0" -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" + p-limit "^2.0.0" -postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: - postcss "^5.0.4" + p-limit "^2.2.0" -postcss-modules-local-by-default@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" + p-limit "^3.0.2" -postcss-modules-scope@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" + aggregate-error "^3.0.0" -postcss-modules-values@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: - icss-replace-symbols "^1.0.2" - postcss "^5.0.14" + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: - postcss "^5.0.5" + callsites "^3.0.0" -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" +parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + entities "^4.4.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -postcss-reduce-initial@^1.0.0: +path-browserify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - dependencies: - postcss "^5.0.4" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" + isarray "0.0.1" -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" + find-up "^5.0.0" -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +popper.js@1.16.1-lts: + version "1.16.1-lts" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" +postcss-value-parser@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +postcss@8.4.38: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" -prettier@^1.16.4: - version "1.16.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" - integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== +postcss@^8.4.27: + version "8.4.29" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" + integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" -private@^0.1.6, private@~0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== -process@^0.11.0: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +prettier@^2.8.7: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +pretty-format@^29.0.0, pretty-format@^29.5.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -promise@^7.0.3, promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" -prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.1, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prop-types@^15, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" -proxy-addr@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.0" - ipaddr.js "1.2.0" + forwarded "0.2.0" + ipaddr.js "1.9.1" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" -psl@^1.1.24: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -q@^1.1.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" -qs@6.4.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +purify-ts-extra-codec@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/purify-ts-extra-codec/-/purify-ts-extra-codec-0.6.0.tgz#4d06756cbf4d9def5a44bb192f18178726400547" + integrity sha512-wEIIhBJ9+OfTsGEXPq2SA96NbdRPWNTtjbZB4HSy8VNlfF7cxeDrQ3UBpNGSXTI8AskY4IcUtCgX/V5SwJzKkw== + dependencies: + date-fns "^2.14.0" + warning "^4.0.3" -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +purify-ts@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/purify-ts/-/purify-ts-1.2.0.tgz#103f088798c55b78b0ba49d82714f912c5d35b4c" + integrity sha512-CTiMFDCaJ9vKXOnl13sRktbb6KMYB0NuQD0LPUYfEZO5YIKcN7uxIb7maSe0Ywzcm9O8LDcz7dQK1p6ZWDCvaQ== + dependencies: + "@types/json-schema" "7.0.9" -query-string@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" +qs@6.13.0, qs@^6.9.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" + side-channel "^1.0.6" -query-string@^4.2.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= +qs@^6.11.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" + side-channel "^1.0.4" -querystring-es3@^0.2.0: +querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -rafl@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: - global "~4.3.0" + safe-buffer "^5.1.0" -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + randombytes "^2.0.5" + safe-buffer "^5.1.0" -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-loader@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" -rc@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - -react-dom@^0.14.0: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" - -react-dom@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.18.0" - -react-event-listener@^0.5.1: - version "0.5.10" - resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.10.tgz#378403c555fe616f312891507a742ecbbe2c90de" - integrity sha512-YZklRszh9hq3WP3bdNLjFwJcTCVe7qyTf5+LWNaHfZQaZrptsefDK2B5HHpOsEEaMHvjllUPr0+qIFVTSsurow== - dependencies: - "@babel/runtime" "7.0.0-beta.42" - fbjs "^0.8.16" - prop-types "^15.6.0" - warning "^3.0.0" + scheduler "^0.23.0" react-event-listener@^0.6.2: version "0.6.6" @@ -5072,100 +8510,82 @@ react-event-listener@^0.6.2: prop-types "^15.6.0" warning "^4.0.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6, react-is@^16.9.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" - integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== +react-fast-compare@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== -react-is@^16.8.1: - version "16.8.4" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" - integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== +react-final-form@^6.5.3: + version "6.5.9" + resolved "https://registry.yarnpkg.com/react-final-form/-/react-final-form-6.5.9.tgz#644797d4c122801b37b58a76c87761547411190b" + integrity sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA== + dependencies: + "@babel/runtime" "^7.15.4" -react-json-view@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c" - integrity sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg== +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-linkify@1.0.0-alpha: + version "1.0.0-alpha" + resolved "https://registry.yarnpkg.com/react-linkify/-/react-linkify-1.0.0-alpha.tgz#b391c7b88e3443752fafe76a95ca4434e82e70d5" + integrity sha512-7gcIUvJkAXXttt1fmBK9cwn+1jTa4hbKLGCZ9J1U6EOkyb2/+LKL1Z28d9rtDLMnpvImlNlLPdTPooorl5cpmg== dependencies: - flux "^3.1.3" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^6.1.0" + linkify-it "^2.0.3" + tlds "^1.199.0" -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-popper@^2.2.5: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" + integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== + dependencies: + react-fast-compare "^3.0.1" + warning "^4.0.2" -react-router-dom@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" - integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew== +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react-router-dom@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.1.2" + react-router "5.2.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418" - integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A== +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== dependencies: "@babel/runtime" "^7.1.2" history "^4.9.0" hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.3.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.2.5.tgz#6f5ce8f4f0b4ff6a6b2fc6106d7619e342fb57be" - integrity sha512-0/edMhPfOLRZ5IT3y6UkCpW7a13WrnGMR75ayAh2ZLynujEJOSptJt856GKnoCMW+7rk0/WYGUp/QaZNS9dTKg== - dependencies: - create-react-class "^15.5.1" - history "^3.0.0" - hoist-non-react-statics "^2.3.1" - invariant "^2.2.1" - loose-envify "^1.2.0" - prop-types "^15.7.2" - react-is "^16.8.6" - warning "^3.0.0" - -react-scroll-to-component@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/react-scroll-to-component/-/react-scroll-to-component-1.0.2.tgz#f260dc936c62a53e772786d7832fe0884e195354" - dependencies: - scroll-to "0.0.2" - -react-scrollbar-size@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754" - integrity sha512-9dDUJvk7S48r0TRKjlKJ9e/LkLLYgc9LdQR6W21I8ZqtSrEsedPOoMji4nU3DHy7fx2l8YMScJS/N7qiloYzXQ== - dependencies: - babel-runtime "^6.26.0" - prop-types "^15.6.0" - react-event-listener "^0.5.1" - stifle "^1.0.2" - -react-steps@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/react-steps/-/react-steps-0.0.5.tgz#b927e53fed58ae91bcb6501024078439f26ea291" - -react-textarea-autosize@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" - integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A== - dependencies: - prop-types "^15.6.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" react-transition-group@^1.2.1: version "1.2.1" @@ -5178,97 +8598,89 @@ react-transition-group@^1.2.1: prop-types "^15.5.6" warning "^3.0.0" -react-transition-group@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" - integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== +react-transition-group@^4.0.0, react-transition-group@^4.4.0: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== +react@^16.12.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" -react@^0.14.0: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" - dependencies: - envify "^3.0.0" - fbjs "^0.6.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + loose-envify "^1.1.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= +"readable-stream@2 || 3", readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: - buffer-shims "^1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" + picomatch "^2.2.1" readline-sync@^1.4.1: - version "1.4.7" - resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.7.tgz#001bfdd4c06110c3c084c63bf7c6a56022213f30" + version "1.4.10" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" + integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== -recast@^0.11.17: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" +real-cancellable-promise@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/real-cancellable-promise/-/real-cancellable-promise-1.2.0.tgz#f365e78b29c6a2303584f2c308959b415401056a" + integrity sha512-FYhmx1FVSgoPRjneoTjh+EKZcNb8ijl/dyatTzase5eujYhVrLNDOiIY6AgQq7GU1kOoLgEd9jLVbhFg8k8dOQ== recompose@^0.26.0: version "0.26.0" @@ -5280,589 +8692,687 @@ recompose@^0.26.0: hoist-non-react-statics "^2.3.1" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + indent-string "^4.0.0" + strip-indent "^3.0.0" -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" +reflect.getprototypeof@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: - balanced-match "^0.4.2" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + regenerate "^1.4.2" -regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: +regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== - -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + "@babel/runtime" "^7.8.4" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + rc "1.2.8" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + rc "^1.2.8" -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== dependencies: - is-finite "^1.0.0" + is-buffer "^1.1.5" + is-utf8 "^0.2.1" -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== dependencies: - lodash "^4.13.1" + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" -request-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.2.tgz#d1ea46d654a6ee4f8ee6a4fea1018c22911904b4" - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@2, request@^2.79.0, request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@^2.34: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@1.0.x, requires-port@1.x.x: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== + dependencies: + value-or-function "^3.0.0" + +resolve-package-json@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-package-json/-/resolve-package-json-1.4.0.tgz#3f3373c5b7fb61fa078ba3cc936cf3e70bd23c7d" + integrity sha512-9UJjpAS+zjRP3C0NJuW5YqHxvd5bIZ+EKnxrhlVvVdEh2p6hQQ23Hg+O5Qqir2uEWAfealWE+ODIYoJF25CuRg== + dependencies: + async "^2.5.0" + client-request "^2.2.0" + debug "^3.0.1" + npm-package-arg "^5.1.2" + semver "^5.4.1" + which "^1.3.0" + resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.4: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.5.0, resolve@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.1.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rifm@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" + integrity sha512-DSOJTWHD67860I5ojetXdEQRIBvF6YcpNe53j0vn1vp9EUb9N80EiZTxgP+FkDKorWC8PZw052kTF4C1GOivCQ== + dependencies: + "@babel/runtime" "^7.3.1" + +rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: - align-text "^0.1.1" + glob "^7.1.3" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: - glob "^7.0.5" + glob "^7.1.3" -rimraf@2.6.3: +rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -ripemd160@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= +rollup-plugin-visualizer@^5.9.0: + version "5.9.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz#f1aa2d9b1be8ebd6869223c742324897464d8891" + integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== dependencies: - is-promise "^2.1.0" + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" -rx@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" +rollup@^2.77.2: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^3.27.1: + version "3.29.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" + integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== + optionalDependencies: + fsevents "~2.3.2" + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== -rxjs-compat@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.5.3.tgz#18440949b2678bf87a78a754009676b2c49183dc" - integrity sha512-BIJX2yovz3TBpjJoAZyls2QYuU6ZiCaZ+U96SmxQpuSP/qDUfiXPKOVLbThBB2WZijNHkdTTJXKRwvv5Y48H7g== +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" -rxjs@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" - integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== +rxjs-compat@6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.6.3.tgz#141405fcee11f48718d428b99c8f01826f594e5c" + integrity sha512-y+wUqq7bS2dG+7rH2fNMoxsDiJ32RQzFxZQE/JdtpnmEZmwLQrb1tCiItyHxdXJHXjmHnnzFscn3b6PEmORGKw== + +rxjs@^5.5.7: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + +rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" -safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -samsam@1.1.2, samsam@~1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" - -sass-graph@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: - glob "^7.0.0" - lodash "^4.0.0" - yargs "^4.7.1" + truncate-utf8-bytes "^1.0.0" -sass-loader@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-3.2.3.tgz#742e81fd8170a8771a979e18622501674a88e355" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: - async "^1.4.0" - loader-utils "^0.2.5" - object-assign "^4.0.1" - -sax@^1.2.1, sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + xmlchars "^2.2.0" -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - -scroll-to@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/scroll-to/-/scroll-to-0.0.2.tgz#936d398a9133660a2492145c2c0081dfcb0728f3" - dependencies: - component-raf "1.2.0" - component-tween "1.2.0" -scroll@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" - integrity sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ== +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: - rafl "~1.2.1" + semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^5.5.0, semver@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" - integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -send@0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" +semver@^7.3.4, semver@^7.3.7, semver@^7.5.0, semver@^7.5.3: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: - debug "2.6.1" - depd "~1.1.0" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" - http-errors "~1.6.1" - mime "1.3.4" - ms "0.7.2" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serve-index@^1.7.2: - version "1.8.0" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" + lru-cache "^6.0.0" + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: - accepts "~1.3.3" - batch "0.5.3" - debug "~2.2.0" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" escape-html "~1.0.3" - http-errors "~1.5.0" - mime-types "~2.1.11" - parseurl "~1.3.1" - -serve-static@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.1" + encodeurl "~2.0.0" escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.15.1" + parseurl "~1.3.3" + send "0.19.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -sha.js@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" - -shebang-command@^1.2.0: +setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-assign@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sinon-chai@^2.8.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.9.0.tgz#34d820042bc9661a14527130d401eb462c49bb84" +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" -sinon@^1.17.3: - version "1.17.7" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - formatio "1.1.1" - lolex "1.3.2" - samsam "1.1.2" - util ">=0.10.3 <1" + kind-of "^6.0.2" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +shallowequal@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + shebang-regex "^3.0.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -sockjs-client@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.2.tgz#f0212a8550e4c9468c8cceaeefd2e3493c033ad5" +shiki@^0.14.1: + version "0.14.4" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.4.tgz#2454969b466a5f75067d0f2fa0d7426d32881b20" + integrity sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ== dependencies: - debug "^2.2.0" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.1" + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" -sockjs@^0.3.15: - version "0.3.18" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: - faye-websocket "^0.10.0" - uuid "^2.0.2" + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - is-plain-obj "^1.0.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" -source-list-map@^0.1.4, source-list-map@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -source-map-support@^0.4.2: - version "0.4.14" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" - dependencies: - source-map "^0.5.6" +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" +simple-assign@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa" + integrity sha512-otdSSQzuVsmDoe5MnSm4ZgHd5sl0ak6A1CTjW1R/DUHQ8xoZuU1NUzf9x6n9Dvp3nxpvW51WNMQ/7rQ9432xDg== -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +sorted-array-functions@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" + integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== -spdx-correct@~1.0.0: +sortobject@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sortobject/-/sortobject-1.3.0.tgz#bc8ce57014c567bdbf78e89ae6c484e64d51e9dc" + integrity sha512-rr0RrgE3ZoWaREnHiidnywzXLaeqmxDKfB4Htdbzu4WBzsVeZEJrhz7AR4ZF+gzHgbog/lQoNXxCWHaXeLc1Dg== + dependencies: + editions "^2.2.0" + +source-map-explorer@^2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/source-map-explorer/-/source-map-explorer-2.5.3.tgz#33551b51e33b70f56d15e79083cdd4c43e583b69" + integrity sha512-qfUGs7UHsOBE5p/lGfQdaAj/5U/GWYBw2imEpD6UQNkqElYonkow8t+HBL1qqIl3CuGZx7n8/CQo4x1HwSHhsg== + dependencies: + btoa "^1.2.1" + chalk "^4.1.0" + convert-source-map "^1.7.0" + ejs "^3.1.5" + escape-html "^1.0.3" + glob "^7.1.6" + gzip-size "^6.0.0" + lodash "^4.17.20" + open "^7.3.1" + source-map "^0.7.4" + temp "^0.9.4" + yargs "^16.2.0" + +source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + escape-string-regexp "^2.0.0" -stdout-stream@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" - dependencies: - readable-stream "^2.0.1" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stifle@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.1.1.tgz#4e4c565f19dcf9a6efa3a7379a70c42179edb8d6" - integrity sha512-INvON4DXLAWxpor+f0ZHnYQYXBqDXQRW1znLpf5/C/AWzJ0eQQAThfdqHQ5BDkiyywD67rQGvbE4LC+Aig6K/Q== +std-env@^3.3.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.4.3.tgz#326f11db518db751c83fd58574f449b7c3060910" + integrity sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q== -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" + internal-slot "^1.0.4" -stream-cache@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" -stream-http@^2.3.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" +stream-http@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" + integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== dependencies: builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.1.0" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" + async "^2.6.2" + date-format "^2.0.0" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -5871,80 +9381,140 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string_decoder@^0.10.25, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - ansi-regex "^2.0.0" + safe-buffer "~5.2.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: - ansi-regex "^3.0.0" + safe-buffer "~5.1.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - is-utf8 "^0.2.0" + ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: - get-stdin "^4.0.1" + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-loader@^0.13.0: - version "0.13.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" - dependencies: - loader-utils "^1.0.2" - -supports-color@3.1.2, supports-color@^3.1.0, supports-color@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" +strip-literal@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +styled-components@6.1.11: + version "6.1.11" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.11.tgz#01948e5195bf1d39e57e0a85b41958c80e40cfb8" + integrity sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA== + dependencies: + "@emotion/is-prop-valid" "1.2.2" + "@emotion/unitless" "0.8.1" + "@types/stylis" "4.2.5" + css-to-react-native "3.2.0" + csstype "3.1.3" + postcss "8.4.38" + shallowequal "1.1.0" + stylis "4.3.2" + tslib "2.6.2" + +styled-jsx@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" + integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA== + dependencies: + client-only "0.0.1" + +stylis@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" + integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== supports-color@^5.3.0: version "5.5.0" @@ -5953,99 +9523,131 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -susy@^2.2.12: - version "2.2.12" - resolved "https://registry.yarnpkg.com/susy/-/susy-2.2.12.tgz#644c2441ed00d293287e8d49a016dbf919215953" - -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" + has-flag "^4.0.0" -symbol-observable@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw== -table@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" - integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== - dependencies: - ajv "^6.9.1" - lodash "^4.17.11" - slice-ansi "^2.1.0" - string-width "^3.0.0" +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -tapable@^0.1.8, tapable@~0.1.8: - version "0.1.10" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.0.0, tar@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== +temp@^0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" + mkdirp "^0.5.1" + rimraf "~2.6.2" -tar@^2.2.1: +term-size@^2.1.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throttle-debounce@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" + integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" -through@^2.3.6, through@~2.3.4: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timers-browserify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" -tiny-invariant@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== +tiny-invariant@^1.0.2, tiny-invariant@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-warning@^1.0.0, tiny-warning@^1.0.2: +tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinybench@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" + integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + +tinypool@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e" + integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== + +tinyspy@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== + +tlds@^1.199.0: + version "1.242.0" + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.242.0.tgz#da136a9c95b0efa1a4cd57dca8ef240c08ada4b7" + integrity sha512-aP3dXawgmbfU94mA32CJGHmJUE1E58HCB1KmlKRhBNtqBL27mSQcAEmcaMaQ1Za9kIVvOdbxJD3U5ycDy7nJ3w== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -6053,458 +9655,1047 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -tough-cookie@>=2.3.3, tough-cookie@~2.3.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - punycode "^1.4.1" + is-number "^7.0.0" -tough-cookie@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== dependencies: - punycode "^1.4.1" + through2 "^2.0.3" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== +tough-cookie@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: - psl "^1.1.24" - punycode "^1.4.1" + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" +"true-myth@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/true-myth/-/true-myth-4.1.1.tgz#ff4ac9d5130276e34aa338757e2416ec19248ba2" + integrity sha512-rqy30BSpxPznbbTcAcci90oZ1YR4DqvKcNXNerG5gQBU2v4jk0cygheiul5J6ExIMrgDVuanv/MkGfqZbKrNNg== -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +ts-morph@^13.0.1: + version "13.0.3" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-13.0.3.tgz#c0c51d1273ae2edb46d76f65161eb9d763444c1d" + integrity sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw== + dependencies: + "@ts-morph/common" "~0.12.3" + code-block-writer "^11.0.0" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-prune@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-prune/-/ts-prune-0.10.3.tgz#b6c71a525543b38dcf947a7d3adfb7f9e8b91f38" + integrity sha512-iS47YTbdIcvN8Nh/1BFyziyUqmjXz7GVzWu02RaZXqb+e/3Qe1B7IQ4860krOeCGUeJmterAlaM2FRH0Ue0hjw== + dependencies: + commander "^6.2.1" + cosmiconfig "^7.0.1" + json5 "^2.1.3" + lodash "^4.17.21" + "true-myth" "^4.1.0" + ts-morph "^13.0.1" + +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" -tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: - safe-buffer "^5.0.1" + tslib "^1.8.1" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-detect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.14: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.13" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" -ua-parser-js@^0.7.18: - version "0.7.20" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" - integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + 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@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typed-immutable-map@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/typed-immutable-map/-/typed-immutable-map-0.1.1.tgz#4f7d67c6afa3daa2eaa09c0afa1b9d8ef35a6045" + integrity sha512-kqdpR/oGRyHHjnwRnRfLXu6YUDO9/spIljcbzmMyzgOfNJ5XH436TEWQXkmjhM/CdoclOuVMYgWM1ymrwnY9ng== -ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" -uglify-js@^2.6, uglify-js@~2.7.3: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +typedoc@^0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.1.tgz#50de2d8fb93623fbfb59e2fa6407ff40e3d3f438" + integrity sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA== dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.1" -uglify-to-browserify@~1.0.0: +typescript@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +ua-parser-js@^0.7.30: + version "0.7.36" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.36.tgz#382c5d6fc09141b6541be2cae446ecfcec284db2" + integrity sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q== + +uc.micro@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +ufo@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.0.tgz#c92f8ac209daff607c57bbd75029e190930a0019" + integrity sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - macaddress "^0.2.8" + crypto-random-string "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -uniqs@^2.0.0: +universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: - querystringify "0.0.x" - requires-port "1.0.x" + prepend-http "^2.0.0" -url-parse@^1.1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: - querystringify "0.0.x" - requires-port "1.0.x" + querystringify "^2.1.1" + requires-port "^1.0.0" url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + version "0.11.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" + integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== dependencies: - punycode "1.3.2" - querystring "0.2.0" + punycode "^1.4.1" + qs "^6.11.2" + +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" +util@^0.12.4, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: - inherits "2.0.1" - -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.0.0: +v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -uuid@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== +v8-to-istanbul@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + builtins "^1.0.3" value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== -vary@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== -velocityjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/velocityjs/-/velocityjs-1.0.0.tgz#0c0ceb8725e870e2c50f4b9ab33beff70d3566d7" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" +vinyl-fs@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0, vinyl@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" + integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +vite-bundle-visualizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/vite-bundle-visualizer/-/vite-bundle-visualizer-0.6.0.tgz#c8d1d0e846d57dcec3909abfd07524cd7492d5c9" + integrity sha512-FubYa69t5SHD0sT2naUGpRaOlKMlDqlJkWcqxR+1NJVwt8zYBdBg/mKI1dG4xelnd6c7TLC9BXOAB1nM6rD0XA== + dependencies: + cac "^6.7.14" + rollup-plugin-visualizer "^5.9.0" + +vite-node@0.32.4: + version "0.32.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.32.4.tgz#7b3f94af5a87c631fbc380ba662914bafbd04d80" + integrity sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.4.0" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +vite-plugin-checker@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz#3790381734440033e6cb3cee9d92fcfdd69a4d71" + integrity sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + ansi-escapes "^4.3.0" + chalk "^4.1.1" + chokidar "^3.5.1" + commander "^8.0.0" + fast-glob "^3.2.7" + fs-extra "^11.1.0" + lodash.debounce "^4.0.8" + lodash.pick "^4.4.0" + npm-run-path "^4.0.1" + semver "^7.5.0" + strip-ansi "^6.0.0" + tiny-invariant "^1.1.0" + vscode-languageclient "^7.0.0" + vscode-languageserver "^7.0.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-uri "^3.0.2" + +vite-plugin-eslint@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz#0381b8272e7f0fd8b663311b64f7608d55d8b04c" + integrity sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang== + dependencies: + "@rollup/pluginutils" "^4.2.1" + "@types/eslint" "^8.4.5" + rollup "^2.77.2" + +vite-plugin-node-stdlib-browser@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vite-plugin-node-stdlib-browser/-/vite-plugin-node-stdlib-browser-0.2.1.tgz#6a598b3e1fecde6cdabe9c80a29adaeebc53463b" + integrity sha512-6u2i613Dkqj5KaTNIrnZvE6y3/awWAp0S5TjucTvGxdhetftB1Mgvblc+nwYzlw6sntPlac8UOC7ttXNh+LZKA== + dependencies: + "@rollup/plugin-inject" "^5.0.3" + +"vite@^3.0.0 || ^4.0.0", vite@^4.2.0: + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.32.2: + version "0.32.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.32.4.tgz#a0558ae44c2ccdc254eece0365f16c4ffc5231bb" + integrity sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.32.4" + "@vitest/runner" "0.32.4" + "@vitest/snapshot" "0.32.4" + "@vitest/spy" "0.32.4" + "@vitest/utils" "0.32.4" + acorn "^8.9.0" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.0" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.3.3" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.5.0" + vite "^3.0.0 || ^4.0.0" + vite-node "0.32.4" + why-is-node-running "^2.2.2" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vscode-jsonrpc@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" + integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== + +vscode-languageclient@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== dependencies: - extsprintf "1.0.2" + minimatch "^3.0.4" + semver "^7.3.4" + vscode-languageserver-protocol "3.16.0" + +vscode-languageserver-protocol@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" + integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A== + dependencies: + vscode-jsonrpc "6.0.0" + vscode-languageserver-types "3.16.0" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== + +vscode-languageserver-types@3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0" + integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw== + dependencies: + vscode-languageserver-protocol "3.16.0" + +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== + +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" +vscode-uri@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: - indexof "0.0.1" + xml-name-validator "^4.0.0" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ== dependencies: loose-envify "^1.0.0" -warning@^4.0.1: +warning@^4.0.1, warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -watchpack@^0.2.1: - version "0.2.9" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: - async "^0.9.0" - chokidar "^1.0.0" - graceful-fs "^4.1.2" + defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" - -webpack-core@~0.6.9: - version "0.6.9" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-dev-middleware@^1.4.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: - memory-fs "~0.4.1" - mime "^1.3.4" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - -webpack-dev-server@^1.14.1: - version "1.16.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.3.tgz#cbb6a0d3e7c8eb5453b3e9befcbe843219f62661" - dependencies: - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - express "^4.13.3" - http-proxy-middleware "~0.17.1" - open "0.0.5" - optimist "~0.6.1" - serve-index "^1.7.2" - sockjs "^0.3.15" - sockjs-client "^1.0.3" - stream-cache "~0.0.1" - strip-ansi "^3.0.0" - supports-color "^3.1.1" - webpack-dev-middleware "^1.4.0" - -webpack-visualizer-plugin@^0.1.5: - version "0.1.11" - resolved "https://registry.yarnpkg.com/webpack-visualizer-plugin/-/webpack-visualizer-plugin-0.1.11.tgz#b8770ad86b4f652612c68b1b782253faf9f8a34e" - dependencies: - d3 "^3.5.6" - mkdirp "^0.5.1" - react "^0.14.0" - react-dom "^0.14.0" + iconv-lite "0.6.3" -webpack@^1.12.14: - version "1.14.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823" - dependencies: - acorn "^3.0.0" - async "^1.3.0" - clone "^1.0.2" - enhanced-resolve "~0.9.0" - interpret "^0.6.4" - loader-utils "^0.2.11" - memory-fs "~0.3.0" - mkdirp "~0.5.0" - node-libs-browser "^0.7.0" - optimist "~0.6.0" - supports-color "^3.1.0" - tapable "~0.1.8" - uglify-js "~2.7.3" - watchpack "^0.2.1" - webpack-core "~0.6.9" - -websocket-driver@>=0.5.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - dependencies: - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" +whatwg-fetch@>=0.10.0: + version "3.6.19" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" + integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" - dependencies: - iconv-lite "0.4.13" +whatwg-fetch@^3.4.1: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== -whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" +whatwg-url@^12.0.0, whatwg-url@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" -whatwg-url@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.6.0.tgz#ef98da442273be04cf9632e176f257d2395a1ae4" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which@1, which@^1.0.9, which@^1.1.1, which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" +which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: - isexe "^1.1.1" + 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" -wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" +which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: - string-width "^1.0.1" + isexe "^2.0.0" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" -wordwrap@^1.0.0, wordwrap@~1.0.0: +wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - mkdirp "^0.5.1" + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +ws@^8.13.0: + version "8.14.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" + integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -yallist@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" +xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^15.0.1: + version "15.0.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.3.tgz#316e263d5febe8b38eef61ac092b33dfcc9b1115" + integrity sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^14.0.0: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== + dependencies: + cliui "^5.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^15.0.1" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zustand@^4.3.7: + version "4.4.1" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" + integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== + dependencies: + use-sync-external-store "1.2.0" From a1f2e3e70b7b52cf80e9177c9118cd93c32cbd3f Mon Sep 17 00:00:00 2001 From: Eduardo Peredo Rivero Date: Wed, 9 Oct 2024 10:52:54 -0500 Subject: [PATCH 3/4] delete unnecessary script --- delete-identifier.js | 48 -------------------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 delete-identifier.js diff --git a/delete-identifier.js b/delete-identifier.js deleted file mode 100644 index 841915db9..000000000 --- a/delete-identifier.js +++ /dev/null @@ -1,48 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -// Función que elimina archivos con extensión .Identifier -function deleteIdentifierFiles(dir) { - // Leer el contenido del directorio actual - fs.readdir(dir, (err, files) => { - if (err) { - console.error(`Error al leer el directorio: ${dir}`, err); - return; - } - - // Iterar sobre cada archivo o subcarpeta - files.forEach((file) => { - const filePath = path.join(dir, file); - - // Obtener información del archivo - fs.stat(filePath, (err, stats) => { - if (err) { - console.error(`Error al obtener información del archivo: ${filePath}`, err); - return; - } - - // Si es un directorio, llamar a la función recursivamente - if (stats.isDirectory()) { - deleteIdentifierFiles(filePath); - } else { - // Si es un archivo con extensión .Identifier, eliminarlo - if (path.extname(file) === '.Identifier') { - fs.unlink(filePath, (err) => { - if (err) { - console.error(`Error al eliminar archivo: ${filePath}`, err); - } else { - console.log(`Archivo eliminado: ${filePath}`); - } - }); - } - } - }); - }); - }); -} - -// Ruta del directorio base -const directoryPath = '/home/eduardo/eyeseetea/projects/dataset-configuration'; - -// Llamada a la función para eliminar los archivos .Identifier -deleteIdentifierFiles(directoryPath); From b20ac1bf863c188c7987f23ef1e9d039e15f561d Mon Sep 17 00:00:00 2001 From: Miquel Adell Date: Tue, 15 Oct 2024 09:20:00 +0200 Subject: [PATCH 4/4] change colours --- src/webapp/pages/app/themes/dhis2.theme.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/webapp/pages/app/themes/dhis2.theme.ts b/src/webapp/pages/app/themes/dhis2.theme.ts index 32be95daf..b8468475e 100644 --- a/src/webapp/pages/app/themes/dhis2.theme.ts +++ b/src/webapp/pages/app/themes/dhis2.theme.ts @@ -4,8 +4,8 @@ import { createTheme } from "@material-ui/core/styles"; const colors = { accentPrimary: "#fd5a00", accentPrimaryDark: "#d14b00", - accentPrimaryLight: "#63A4FF", - accentPrimaryLightest: "#EAF4FF", + accentPrimaryLight: "#ff9b63", + accentPrimaryLightest: "#fff2ea", accentSecondary: "#fb8c00", accentSecondaryLight: "#f57c00", @@ -21,7 +21,7 @@ const colors = { white: "#FFFFFF", // Not included in palette! negative: "#E53935", - warning: "#F19C02", + warning: "#f1c902", positive: "#3D9305", info: "#EAF4FF", };