From 4a21a18dd0431a9a06118ddda4fae3ab57caaf76 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Sun, 6 Aug 2023 16:33:29 -0400 Subject: [PATCH 1/5] chore: run prettier across repo - ran `npx prettier -w .` to autofix everything - upgrade Prettier/ESLint prettier plugins to the latest versions - wire `lint` target to run prettier and across all files - add `fix` target to autofix ESLint/Prettier - expand ESlint glob and fix issues in test files - wire in ESLint prettier plugin that wasn't running - update lint-staged targets to autofix if possible - run lint on CI to prevent future issues --- .eslintrc.json | 12 +- .github/workflows/pr.yml | 9 +- .github/workflows/push.yml | 2 +- .vscode/settings.json | 4 +- README.md | 2 +- jsconfig.json | 6 +- package-lock.json | 789 +- package.json | 27 +- public/index.html | 13 +- src/PolicyEngine.jsx | 91 +- src/PolicyEngineCountry.jsx | 7 +- src/__tests__/BaselineAndReformChart.test.js | 59 +- src/__tests__/HouseholdOutput.test.js | 96 +- src/__tests__/InputField.test.js | 45 +- src/__tests__/PolicyEngine.test.js | 4 +- src/api/call.js | 8 +- src/api/parameters.js | 6 +- src/api/variables.js | 24 +- src/controls/InputField.jsx | 7 +- src/controls/NavigationButton.jsx | 50 +- src/layout/BlogPostHolder.jsx | 22 +- src/layout/BottomCarousel.jsx | 2 +- src/layout/CountrySelector.jsx | 4 +- src/layout/FolderPage.jsx | 79 +- src/layout/Footer.jsx | 10 +- src/layout/Header.jsx | 13 +- src/layout/HoverCard.jsx | 17 +- src/layout/Menu.jsx | 8 +- src/layout/Responsive.jsx | 4 +- src/layout/ResultsPanel.jsx | 28 +- src/layout/Screenshottable.jsx | 6 +- src/pages/AboutPage.jsx | 4 +- src/pages/BlogPage.jsx | 10 +- src/pages/CountryPackageDocs.jsx | 17 +- src/pages/HomePage.jsx | 234 +- src/pages/HouseholdPage.jsx | 19 +- src/pages/PolicyPage.jsx | 12 +- src/pages/PrivacyPage.jsx | 64 +- src/pages/ResearchPage.jsx | 60 +- src/pages/StatusPage.jsx | 14 +- src/pages/home/GitHubActivity.jsx | 18 +- src/pages/household/HouseholdRightSidebar.jsx | 12 +- src/pages/household/MobileHouseholdPage.jsx | 4 +- src/pages/household/input/CountChildren.jsx | 16 +- src/pages/household/input/MaritalStatus.jsx | 4 +- src/pages/household/input/VariableEditor.jsx | 18 +- .../household/output/EarningsVariation.jsx | 20 +- .../BaselineAndReformChart.jsx | 345 +- .../EarningsVariation/BaselineOnlyChart.jsx | 204 +- .../household/output/HouseholdOutput.jsx | 92 +- .../output/HouseholdReproducibility.jsx | 20 +- .../household/output/MarginalTaxRates.jsx | 232 +- .../household/output/NetIncomeBreakdown.jsx | 20 +- .../output/PoliciesModelledPopup.jsx | 6 +- .../household/output/PolicyImpactPopup.jsx | 5 +- src/pages/model/ModelDocumentation.jsx | 294 +- src/pages/policy/PolicyRightSidebar.jsx | 18 +- src/pages/policy/PolicySearch.jsx | 2 +- src/pages/policy/input/ParameterEditor.jsx | 4 +- src/pages/policy/input/ParameterOverTime.jsx | 8 +- src/pages/policy/output/Analysis.jsx | 72 +- .../policy/output/AverageImpactByDecile.jsx | 74 +- .../output/AverageImpactByWealthDecile.jsx | 82 +- src/pages/policy/output/BudgetaryImpact.jsx | 28 +- src/pages/policy/output/CliffImpact.jsx | 28 +- src/pages/policy/output/DeepPovertyImpact.jsx | 48 +- .../output/DeepPovertyImpactByGender.jsx | 64 +- .../policy/output/DetailedBudgetaryImpact.jsx | 96 +- src/pages/policy/output/DownloadCsvButton.jsx | 59 +- .../output/DownloadableScreenshottable.jsx | 18 +- src/pages/policy/output/InequalityImpact.jsx | 84 +- src/pages/policy/output/IntraDecileImpact.jsx | 68 +- .../policy/output/IntraWealthDecileImpact.jsx | 72 +- src/pages/policy/output/PolicyOutput.jsx | 40 +- .../policy/output/PolicyReproducibility.jsx | 6 +- .../policy/output/PovertyChangeContext.jsx | 29 +- src/pages/policy/output/PovertyImpact.jsx | 65 +- .../policy/output/PovertyImpactByGender.jsx | 81 +- .../policy/output/PovertyImpactByRace.jsx | 107 +- .../policy/output/RelativeImpactByDecile.jsx | 84 +- .../output/RelativeImpactByWealthDecile.jsx | 87 +- src/pages/statusPageDefaults.js | 7029 ++++++++--------- ...-guaranteed-income-for-the-21st-century.md | 14 +- src/posts/authors.json | 2 +- ...lding-the-roots-of-policyengine-nigeria.md | 6 +- src/posts/california-income-tax.md | 16 +- ...cial-support-for-families-with-children.md | 4 +- ...s-policyengine-as-a-digital-public-good.md | 8 +- src/posts/district-child-tax-credit.md | 12 +- src/posts/gpt-analysis.md | 6 +- ...ate-income-tax-analysis-on-policyengine.md | 69 +- src/posts/kansas-flat-income-tax-sb-169.md | 18 +- src/posts/kansas-income-tax.md | 14 +- ...akis-steel-working-families-tax-cut-act.md | 8 +- src/posts/medlock-wins.md | 2 +- src/posts/new-mexico-income-tax-launch.md | 26 +- src/posts/new-york-tanf.md | 2 +- src/posts/posts.json | 556 +- src/posts/poverty-race-ethnicity.md | 8 +- src/posts/winship-individualized-eitc.md | 44 +- src/serviceWorker.js | 4 +- src/serviceWorkerRegistration.js | 10 +- 102 files changed, 6449 insertions(+), 5931 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 14c40881d..c27f1b6d6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -5,7 +5,11 @@ "es2021": true, "jest/globals": true }, - "extends": ["eslint:recommended", "plugin:react/recommended"], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:prettier/recommended" + ], "globals": { "process": true }, @@ -13,7 +17,11 @@ { "files": ["test/**"], "plugins": ["jest"], - "extends": ["plugin:jest/recommended"], + "extends": [ + "eslint:recommended", + "plugin:jest/recommended", + "plugin:prettier/recommended" + ], "rules": { "jest/prefer-expect-assertions": "off" } } ], diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4fbbe2d59..9087f06a5 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: Pull request on: pull_request: - branches: [ master ] + branches: [master] jobs: lint: @@ -25,7 +25,7 @@ jobs: # Hopefully this allows us to catch problems # with differing versions ahead of time. node-version: [19.x] - + steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} @@ -33,6 +33,7 @@ jobs: with: node-version: ${{ matrix.node-version }} # https://docs.npmjs.com/cli/v9/commands/npm-ci - - run: npm install --force + - run: npm ci --legacy-peer-deps + - run: npm run lint - run: npm run build - - run: npm test \ No newline at end of file + - run: npm test diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 251bf8acf..ed5884889 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,6 +1,6 @@ name: Push -on: +on: push: branches: - master diff --git a/.vscode/settings.json b/.vscode/settings.json index 972944bd8..15a15fff8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "search.useIgnoreFiles": true -} \ No newline at end of file + "search.useIgnoreFiles": true +} diff --git a/README.md b/README.md index 8da855610..90408c55b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Welcome :wave: ! - + This is the official web app of the PolicyEngine project.

![PolicyEngineWebApp](https://user-images.githubusercontent.com/117248915/221730075-b368a1df-d0d4-455c-8768-329e1eb9318e.png) diff --git a/jsconfig.json b/jsconfig.json index 053912feb..ec2332eb4 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,5 +1,5 @@ { - "compilerOptions": { - "baseUrl": "src" - } + "compilerOptions": { + "baseUrl": "src" + } } diff --git a/package-lock.json b/package-lock.json index 125ced50b..a49359be0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "antd": "^4.24.2", "axios": "^1.3.4", "bootstrap": "^5.2.2", - "eslint-config-prettier": "^8.6.0", "file-saver": "^2.0.5", "framer-motion": "^7.6.6", "html2canvas": "^1.4.1", @@ -52,14 +51,16 @@ "devDependencies": { "@testing-library/react": "^13.4.0", "eslint": "^8.35.0", + "eslint-config-prettier": "^9.0.0", "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "jest": "^27.5.1", "jest-environment-jsdom": "^29.4.3", "lint-staged": "^13.1.2", - "prettier": "2.8.4" + "prettier": "^3.0.1" }, "engines": { "node": ">=19.0.0" @@ -3295,6 +3296,62 @@ "node": ">= 8" } }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, "node_modules/@plotly/d3": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.1.tgz", @@ -5783,6 +5840,15 @@ "node": ">= 8.0.0" } }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -5944,6 +6010,18 @@ "@popperjs/core": "^2.11.6" } }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6020,6 +6098,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -7473,6 +7566,150 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -8273,9 +8510,10 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -8499,6 +8737,35 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-react": { "version": "7.32.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", @@ -9102,10 +9369,16 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -11096,6 +11369,39 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -18073,20 +18379,32 @@ } }, "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", + "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -19970,6 +20288,21 @@ "node": ">=8" } }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -21188,6 +21521,28 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, "node_modules/tailwindcss": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", @@ -21438,6 +21793,18 @@ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -21713,19 +22080,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -21932,6 +22286,15 @@ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -24652,14 +25015,12 @@ "@csstools/postcss-unset-value": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "requires": {} + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==" }, "@csstools/selector-specificity": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", - "requires": {} + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==" }, "@ctrl/tinycolor": { "version": "3.4.1", @@ -25328,8 +25689,7 @@ "@mapbox/mapbox-gl-supported": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", - "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", - "requires": {} + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==" }, "@mapbox/point-geometry": { "version": "0.1.0", @@ -25420,8 +25780,7 @@ "@n8tb1t/use-scroll-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@n8tb1t/use-scroll-position/-/use-scroll-position-2.0.3.tgz", - "integrity": "sha512-6GO4FHVJTMI4jbRHborzemuL6B319qh2cVLOLj8DApJhjyT71eLgANbQ4bNKSZ51zBm3uJ3WmqnyNF17eSsDyw==", - "requires": {} + "integrity": "sha512-6GO4FHVJTMI4jbRHborzemuL6B319qh2cVLOLj8DApJhjyT71eLgANbQ4bNKSZ51zBm3uJ3WmqnyNF17eSsDyw==" }, "@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", @@ -25470,6 +25829,46 @@ "fastq": "^1.6.0" } }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "dependencies": { + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + } + } + }, "@plotly/d3": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.1.tgz", @@ -26677,14 +27076,12 @@ "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "acorn-node": { "version": "1.8.2", @@ -26780,8 +27177,7 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" }, "almost-equal": { "version": "1.1.0", @@ -27200,8 +27596,7 @@ "babel-plugin-named-asset-import": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==" }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", @@ -27341,6 +27736,12 @@ "tryer": "^1.0.1" } }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -27475,8 +27876,16 @@ "bootstrap": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.2.tgz", - "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==", - "requires": {} + "integrity": "sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==" + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } }, "brace-expansion": { "version": "1.1.11", @@ -27529,6 +27938,15 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -28128,8 +28546,7 @@ "css-declaration-sorter": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" }, "css-font": { "version": "1.2.0", @@ -28261,8 +28678,7 @@ "css-prefers-color-scheme": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "requires": {} + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==" }, "css-select": { "version": "4.3.0", @@ -28381,8 +28797,7 @@ "cssnano-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" }, "csso": { "version": "4.2.0", @@ -28654,6 +29069,95 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -29370,10 +29874,10 @@ } }, "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", - "requires": {} + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true }, "eslint-config-react-app": { "version": "7.0.1", @@ -29531,6 +30035,16 @@ } } }, + "eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, "eslint-plugin-react": { "version": "7.32.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", @@ -29581,8 +30095,7 @@ "eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==" }, "eslint-plugin-testing-library": { "version": "5.9.1", @@ -29890,10 +30403,16 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -31135,8 +31654,7 @@ "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" }, "idb": { "version": "7.1.0", @@ -31399,6 +31917,23 @@ "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==" }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + } + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -32127,8 +32662,7 @@ "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" }, "xml-name-validator": { "version": "3.0.0", @@ -32719,8 +33253,7 @@ "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "requires": {} + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" }, "jest-regex-util": { "version": "27.5.1", @@ -33060,8 +33593,7 @@ "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" }, "xml-name-validator": { "version": "3.0.0", @@ -34263,8 +34795,7 @@ "markdown-to-jsx": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.7.tgz", - "integrity": "sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==", - "requires": {} + "integrity": "sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==" }, "math-log2": { "version": "1.0.1", @@ -35603,8 +36134,7 @@ "postcss-browser-comments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "requires": {} + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==" }, "postcss-calc": { "version": "8.2.4", @@ -35702,26 +36232,22 @@ "postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" }, "postcss-double-position-gradients": { "version": "3.1.2", @@ -35743,8 +36269,7 @@ "postcss-flexbugs-fixes": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "requires": {} + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" }, "postcss-focus-visible": { "version": "6.0.4", @@ -35765,14 +36290,12 @@ "postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "requires": {} + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==" }, "postcss-gap-properties": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "requires": {} + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==" }, "postcss-image-set-function": { "version": "4.0.7", @@ -35795,8 +36318,7 @@ "postcss-initial": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "requires": {} + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==" }, "postcss-js": { "version": "4.0.0", @@ -35837,14 +36359,12 @@ "postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "requires": {} + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==" }, "postcss-media-minmax": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "requires": {} + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==" }, "postcss-merge-longhand": { "version": "5.1.6", @@ -35905,8 +36425,7 @@ "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -35964,8 +36483,7 @@ "postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -36058,8 +36576,7 @@ "postcss-page-break": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "requires": {} + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==" }, "postcss-place": { "version": "7.0.5", @@ -36153,8 +36670,7 @@ "postcss-replace-overflow-wrap": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "requires": {} + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==" }, "postcss-selector-not": { "version": "6.0.1", @@ -36246,11 +36762,20 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", + "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -36945,8 +37470,7 @@ "react-detect-print": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/react-detect-print/-/react-detect-print-0.1.2.tgz", - "integrity": "sha512-xSA+jOAQ4e5VtQuaXjXLAagIVkV/GOAUf5I+/moB6lq15n0O9AlfhDmAg+w4igOTRM+bQd6yYHx/zjw8pth5vA==", - "requires": {} + "integrity": "sha512-xSA+jOAQ4e5VtQuaXjXLAagIVkV/GOAUf5I+/moB6lq15n0O9AlfhDmAg+w4igOTRM+bQd6yYHx/zjw8pth5vA==" }, "react-dev-utils": { "version": "12.0.1", @@ -37059,8 +37583,7 @@ "react-ga": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz", - "integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==", - "requires": {} + "integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==" }, "react-is": { "version": "17.0.2", @@ -37648,6 +38171,15 @@ } } }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -38365,8 +38897,7 @@ "style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "requires": {} + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" }, "style-to-object": { "version": "0.3.0", @@ -38595,6 +39126,24 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + } + } + }, "tailwindcss": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", @@ -38786,6 +39335,12 @@ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -39011,12 +39566,6 @@ "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true - }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -39160,6 +39709,12 @@ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -39199,8 +39754,7 @@ "use-react-screenshot": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/use-react-screenshot/-/use-react-screenshot-3.0.0.tgz", - "integrity": "sha512-82+zsJgNWEUsUR7lslLIXMw9BW+xic+epn5Dl2ziedgsP9bz0HM0hfx3E71Kkv1U7F6Hyi4E/jMxuxJPLdpHcg==", - "requires": {} + "integrity": "sha512-82+zsJgNWEUsUR7lslLIXMw9BW+xic+epn5Dl2ziedgsP9bz0HM0hfx3E71Kkv1U7F6Hyi4E/jMxuxJPLdpHcg==" }, "util-deprecate": { "version": "1.0.2", @@ -40136,8 +40690,7 @@ "ws": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", - "requires": {} + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==" }, "xml-name-validator": { "version": "4.0.0", diff --git a/package.json b/package.json index 4bcf83a41..0775ad63c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "antd": "^4.24.2", "axios": "^1.3.4", "bootstrap": "^5.2.2", - "eslint-config-prettier": "^8.6.0", "file-saver": "^2.0.5", "framer-motion": "^7.6.6", "html2canvas": "^1.4.1", @@ -53,7 +52,8 @@ "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", - "lint": "node_modules/.bin/eslint src/**/*.js src/**/*.jsx" + "fix": "eslint --fix --ext js,jsx . && prettier -w .", + "lint": "eslint --ext js,jsx . && prettier -c ." }, "eslintConfig": { "extends": [ @@ -74,34 +74,21 @@ ] }, "lint-staged": { - "*.js": [ - "eslint", - "prettier --write --ignore-unknown" - ], - "*.jsx": [ - "eslint", - "prettier --write --ignore-unknown" - ], - "*.json": [ - "prettier --write --ignore-unknown" - ], - "*.md": [ - "prettier --write --ignore-unknown" - ], - "*.yml": [ - "prettier --write --ignore-unknown" - ] + "*": "prettier --ignore-unknown --write", + "*.{js,jsx}": "eslint --fix" }, "devDependencies": { "@testing-library/react": "^13.4.0", "eslint": "^8.35.0", + "eslint-config-prettier": "^9.0.0", "eslint-plugin-jest": "^27.2.1", + "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "jest": "^27.5.1", "jest-environment-jsdom": "^29.4.3", "lint-staged": "^13.1.2", - "prettier": "2.8.4" + "prettier": "^3.0.1" } } diff --git a/public/index.html b/public/index.html index e64ead66c..49cd9eda0 100644 --- a/public/index.html +++ b/public/index.html @@ -1,4 +1,4 @@ - + @@ -20,9 +20,12 @@ PolicyEngine - - - + + + diff --git a/src/PolicyEngine.jsx b/src/PolicyEngine.jsx index 09cdb2535..c70f90ece 100644 --- a/src/PolicyEngine.jsx +++ b/src/PolicyEngine.jsx @@ -51,14 +51,13 @@ function CookieConsent() { document.cookie = "consent=granted;max-age=31536000;path=/"; }, 500); - - gtag('consent', 'default', { - 'ad_storage': 'denied', - 'analytics_storage': 'denied' + gtag("consent", "default", { + ad_storage: "denied", + analytics_storage: "denied", }); gtag("js", new Date()); gtag("config", "G-91M4529HE7"); - } + }; const noCookies = () => { // Give animation time to finish @@ -66,40 +65,56 @@ function CookieConsent() { setTimeout(() => { setShow(false); }, 500); - } + }; const mobile = useMobile(); searchParams; return ( <> - {show && !searchParams.get("embed") && - -

- This site uses cookies to improve your experience. -

-
-
-
- } + {show && !searchParams.get("embed") && ( + +

+ This site uses cookies to improve your experience. +

+
+
+
+ )} ); } @@ -136,10 +151,10 @@ clearCookies; export default function PolicyEngine() { return ( <> - - - - + + + + ); } diff --git a/src/PolicyEngineCountry.jsx b/src/PolicyEngineCountry.jsx index f84b38c57..fb9355af7 100644 --- a/src/PolicyEngineCountry.jsx +++ b/src/PolicyEngineCountry.jsx @@ -199,7 +199,12 @@ export default function PolicyEngineCountry(props) { /> } /> } /> - } /> + + } + /> } /> } /> } /> diff --git a/src/__tests__/BaselineAndReformChart.test.js b/src/__tests__/BaselineAndReformChart.test.js index 1b7196fe8..74df26116 100644 --- a/src/__tests__/BaselineAndReformChart.test.js +++ b/src/__tests__/BaselineAndReformChart.test.js @@ -1,46 +1,41 @@ -import { fireEvent, render, screen, within } from "@testing-library/react"; +import { fireEvent, render, screen } from "@testing-library/react"; import BaselineAndReformChart from "pages/household/output/EarningsVariation/BaselineAndReformChart"; -import { - formatVariableValue, - getValueFromHousehold, - } from "api/variables.js"; +import { getValueFromHousehold } from "api/variables.js"; jest.mock("react-plotly.js", () => jest.fn()); jest.mock("../api/variables.js", () => ({ - getValueFromHousehold: jest.fn(), - getPlotlyAxisFormat: jest.fn() + getValueFromHousehold: jest.fn(), + getPlotlyAxisFormat: jest.fn(), })); const metadata = { - variables: { - employment_income: { - unit: "currency-USD" - }, - household_net_income: { - unit: "currency-USD" - }, - "abc": { - unit: "currency-USD" - }, - } + variables: { + employment_income: { + unit: "currency-USD", + }, + household_net_income: { + unit: "currency-USD", + }, + abc: { + unit: "currency-USD", + }, + }, }; describe("Test Render Output", () => { - test("Should render toggle", () => { - getValueFromHousehold.mockImplementation(() => { - const testResult = [1,2,3]; - return testResult; - }); - render( - - ) + test("Should render toggle", () => { + getValueFromHousehold.mockImplementation(() => { + const testResult = [1, 2, 3]; + return testResult; + }); + render(); - fireEvent.click(screen.getByRole('radio', { name: /difference/i })); + fireEvent.click(screen.getByRole("radio", { name: /difference/i })); - const diffButton = screen.getByRole('radio', { name: /difference/i }); + const diffButton = screen.getByRole("radio", { name: /difference/i }); - expect(diffButton).toHaveProperty("checked", true); - }); + expect(diffButton).toHaveProperty("checked", true); + }); - //TODO: Add tests for actual plot components BaselineAndReformTogetherPlot & BaselineReformDeltaPlot -}); \ No newline at end of file + //TODO: Add tests for actual plot components BaselineAndReformTogetherPlot & BaselineReformDeltaPlot +}); diff --git a/src/__tests__/HouseholdOutput.test.js b/src/__tests__/HouseholdOutput.test.js index 58f464631..3be9a5a5a 100644 --- a/src/__tests__/HouseholdOutput.test.js +++ b/src/__tests__/HouseholdOutput.test.js @@ -2,61 +2,63 @@ import { render, screen } from "@testing-library/react"; import HousholdOutput from "../pages/household/output/HouseholdOutput.jsx"; import { BrowserRouter as Router } from "react-router-dom"; import { useSearchParams } from "react-router-dom"; -import { - formatVariableValue, - getValueFromHousehold, - } from "../api/variables.js"; const policy = { - reform: {label: "Reform Label"}, - baseline: {label: "Baseline Label"} -} -const metadata={variables: {"household_net_income": {label: "variableName"}}}; -const householdInput={}; -const householdBaseline={}; -const householdReform=true; + reform: { label: "Reform Label" }, + baseline: { label: "Baseline Label" }, +}; +const metadata = { + variables: { household_net_income: { label: "variableName" } }, +}; +const householdInput = {}; +const householdBaseline = {}; +const householdReform = true; jest.mock("../api/variables.js", () => ({ - formatVariableValue: jest.fn(), - getValueFromHousehold: jest.fn() + formatVariableValue: jest.fn(), + getValueFromHousehold: jest.fn(), })); jest.mock("react-plotly.js", () => jest.fn()); jest.mock("react-router-dom", () => { - const originalModule = jest.requireActual("react-router-dom"); - return { - __esModule: true, - ...originalModule, - useSearchParams: jest.fn() - } + const originalModule = jest.requireActual("react-router-dom"); + return { + __esModule: true, + ...originalModule, + useSearchParams: jest.fn(), + }; }); - describe("Test Render Output", () => { - test("Should render correct policy title", () => { - useSearchParams.mockImplementation(() => { - const get = (param) => { - if (param === "focus") { - return "householdOutput.netIncome" - } else if (param === "reform") { - return "13870" - } else if (param === "baseline") { - return "13867" - } - } - return [{get}]; - }); - - render( - - - - ); - expect(screen.getByText(policy.reform.label + ' (compared against ' + policy.baseline.label, {exact: false})).toBeTruthy(); + test("Should render correct policy title", () => { + useSearchParams.mockImplementation(() => { + const get = (param) => { + if (param === "focus") { + return "householdOutput.netIncome"; + } else if (param === "reform") { + return "13870"; + } else if (param === "baseline") { + return "13867"; + } + }; + return [{ get }]; }); -}); \ No newline at end of file + + render( + + + , + ); + expect( + screen.getByText( + policy.reform.label + " (compared against " + policy.baseline.label, + { exact: false }, + ), + ).toBeTruthy(); + }); +}); diff --git a/src/__tests__/InputField.test.js b/src/__tests__/InputField.test.js index c67251a5f..c2fbbe255 100644 --- a/src/__tests__/InputField.test.js +++ b/src/__tests__/InputField.test.js @@ -2,39 +2,38 @@ import { render, screen, fireEvent } from "@testing-library/react"; import InputField from "../controls/InputField"; const testProps = { - placeholder: "Test Placeholder", - onChange: jest.fn(), + placeholder: "Test Placeholder", + onChange: jest.fn(), }; -const patternProp = {pattern: "%"}; +const patternProp = { pattern: "%" }; const testInput = "Test Input"; const setup = (props) => { - const utils = render(); - const input = screen.getByPlaceholderText(testProps.placeholder); + const utils = render(); + const input = screen.getByPlaceholderText(testProps.placeholder); - return { - input, - ...utils - } + return { + input, + ...utils, + }; }; test("Should handle non-percent input & submit on blur", () => { - const { input } = setup(testProps); - fireEvent.change(input, {target: {value: testInput}}); - expect(input.value).toBe(testInput); - expect(testProps.onChange).not.toHaveBeenCalled(); + const { input } = setup(testProps); + fireEvent.change(input, { target: { value: testInput } }); + expect(input.value).toBe(testInput); + expect(testProps.onChange).not.toHaveBeenCalled(); - fireEvent.blur(input); - expect(testProps.onChange).toHaveBeenCalledWith(testInput); + fireEvent.blur(input); + expect(testProps.onChange).toHaveBeenCalledWith(testInput); }); test("Should append '%' for percent pattern & submit on blur", () => { - const { input } = setup({...testProps, ...patternProp}); - fireEvent.change(input, {target: {value: testInput}}); - expect(input.value).toBe(testInput + "%"); - expect(testProps.onChange).not.toHaveBeenCalled(); + const { input } = setup({ ...testProps, ...patternProp }); + fireEvent.change(input, { target: { value: testInput } }); + expect(input.value).toBe(testInput + "%"); + expect(testProps.onChange).not.toHaveBeenCalled(); - fireEvent.blur(input); - expect(testProps.onChange).toHaveBeenCalledWith(testInput + "%"); - -}); \ No newline at end of file + fireEvent.blur(input); + expect(testProps.onChange).toHaveBeenCalledWith(testInput + "%"); +}); diff --git a/src/__tests__/PolicyEngine.test.js b/src/__tests__/PolicyEngine.test.js index 5efb34845..3dc9ee0dc 100644 --- a/src/__tests__/PolicyEngine.test.js +++ b/src/__tests__/PolicyEngine.test.js @@ -8,7 +8,7 @@ describe("test routing", () => { render( - + , ); // Render the uk site. @@ -22,7 +22,7 @@ describe("test routing", () => { render( - + , ); expect(screen.getByText(/Sorry/).textContent).toMatchSnapshot(); diff --git a/src/api/call.js b/src/api/call.js index 7748761c1..03d3b988a 100644 --- a/src/api/call.js +++ b/src/api/call.js @@ -24,7 +24,7 @@ export function asyncApiCall( body, interval = 1000, firstInterval = 200, - computingCallback = () => {} + computingCallback = () => {}, ) { // Call an API endpoint which may respond with a {status: computing} response. // If so, poll until the response is ready. @@ -76,14 +76,14 @@ export function updateMetadata(countryId, setMetadata) { const variableTree = buildVariableTree( data.variables, data.variableModules, - data.basicInputs + data.basicInputs, ); // parameters = {p: {parameter: "x.y.z"}}. Filter out parameters with parameter containing "taxsim" data.parameters = Object.fromEntries( Object.entries(data.parameters).filter( // eslint-disable-next-line no-unused-vars - ([key, value]) => !value.parameter.includes("taxsim") - ) + ([key, value]) => !value.parameter.includes("taxsim"), + ), ); const parameterTree = buildParameterTree(data.parameters); const variablesInOrder = getTreeLeavesInOrder(variableTree); diff --git a/src/api/parameters.js b/src/api/parameters.js index a8458fbe5..3c62a7ddd 100644 --- a/src/api/parameters.js +++ b/src/api/parameters.js @@ -4,7 +4,7 @@ export function buildParameterTree(parameters) { let tree = {}; for (const parameter of Object.values(parameters).filter( - (parameter) => parameter.economy || parameter.household + (parameter) => parameter.economy || parameter.household, )) { const nodeToInsert = { name: parameter.parameter, @@ -35,7 +35,7 @@ export function buildParameterTree(parameters) { } if ( !currentNode.children.find( - (child) => child.name === fixedCumulativePath + (child) => child.name === fixedCumulativePath, ) ) { currentNode.children.push({ @@ -46,7 +46,7 @@ export function buildParameterTree(parameters) { }); } currentNode = currentNode.children.find( - (child) => child.name === fixedCumulativePath + (child) => child.name === fixedCumulativePath, ); // Re-add the delimiter to the cumulative path if (delimiters) { diff --git a/src/api/variables.js b/src/api/variables.js index 1d952ec11..6ac7d7190 100644 --- a/src/api/variables.js +++ b/src/api/variables.js @@ -204,7 +204,7 @@ export function buildVariableTree(variables, variableModules, basicInputs) { } if ( !currentNode.children.find( - (child) => child.name === fixedCumulativePath + (child) => child.name === fixedCumulativePath, ) ) { const moduleData = variableModules[cumulativePath] || {}; @@ -216,7 +216,7 @@ export function buildVariableTree(variables, variableModules, basicInputs) { }); } currentNode = currentNode.children.find( - (child) => child.name === fixedCumulativePath + (child) => child.name === fixedCumulativePath, ); cumulativePath += "."; } @@ -225,7 +225,7 @@ export function buildVariableTree(variables, variableModules, basicInputs) { parentNode.children.push(nodeToInsert); } const inputModule = tree.children.find( - (child) => child.name === "input" + (child) => child.name === "input", ).children; return { name: "input", @@ -342,7 +342,7 @@ export function getPlotlyAxisFormat( unit, values, precisionOverride, - valueType + valueType, ) { // Possible units: currency-GBP, currency-USD, /1 // If values (an array) is passed, we need to calculate the @@ -410,7 +410,7 @@ export function getValueFromHousehold( entityName, household, metadata, - valueFromFirstOnly = false + valueFromFirstOnly = false, ) { household = JSON.parse(JSON.stringify(household)); let entityPlural; @@ -433,7 +433,7 @@ export function getValueFromHousehold( timePeriod, possibleEntities[0], household, - metadata + metadata, ); } let total = 0; @@ -443,7 +443,7 @@ export function getValueFromHousehold( timePeriod, entity, household, - metadata + metadata, ); // If the entity data is an array, change total to an array and add each element. if (Array.isArray(entityData)) { @@ -478,7 +478,7 @@ export function getValueFromHousehold( timePeriod, entityName, household, - metadata + metadata, ); } return total; @@ -491,7 +491,7 @@ export function getNewHouseholdId(countryId, newHouseholdData) { countryId, "/household", { data: newHouseholdData }, - "POST" + "POST", ) .then((response) => response.json()) .then((data) => { @@ -504,13 +504,13 @@ export function getDefaultHouseholdId(metadata) { const defaultHousehold = createDefaultHousehold( metadata.countryId, metadata.variables, - metadata.entities + metadata.entities, ); return countryApiCall( metadata.countryId, "/household", { data: defaultHousehold }, - "POST" + "POST", ) .then((res) => res.json()) .then((dataHolder) => { @@ -529,7 +529,7 @@ export function optimiseHousehold(household, metadata, removeEmpty = false) { for (let entityName of Object.keys(household[entityPlural])) { for (let variable of Object.keys(household[entityPlural][entityName])) { for (let timePeriod of Object.keys( - household[entityPlural][entityName][variable] + household[entityPlural][entityName][variable], )) { let variableData = newHousehold[entityPlural][entityName][variable]; if ( diff --git a/src/controls/InputField.jsx b/src/controls/InputField.jsx index c92ef569a..f3b5b4265 100644 --- a/src/controls/InputField.jsx +++ b/src/controls/InputField.jsx @@ -4,8 +4,7 @@ import style from "../style"; import { useRef, useState } from "react"; export default function InputField(props) { - const { onChange, padding, width, type, inputmode, pattern, value } = - props; + const { onChange, padding, width, type, inputmode, pattern, value } = props; const [inputValue, setInputValue] = useState(value ? value : ""); const placeholder = useRef(props.placeholder); const mobile = useMobile(); @@ -58,7 +57,7 @@ export default function InputField(props) { } e.target.setSelectionRange( e.target.value.length - 1, - e.target.value.length - 1 + e.target.value.length - 1, ); } else if (pattern === "number") { if (value !== "" && !re.test(value)) { @@ -68,7 +67,7 @@ export default function InputField(props) { } setInputValue(e.target.value); }} - value = {inputValue} + value={inputValue} placeholder={placeholder.current} /> ); diff --git a/src/controls/NavigationButton.jsx b/src/controls/NavigationButton.jsx index 42128aedd..6f34623ad 100644 --- a/src/controls/NavigationButton.jsx +++ b/src/controls/NavigationButton.jsx @@ -4,35 +4,37 @@ import { copySearchParams } from "../api/call"; import Button from "./Button"; export default function NavigationButton(props) { - const { text, focus, target, style, primary, disabled, onClick} = props; + const { text, focus, target, style, primary, disabled, onClick } = props; const [searchParams, setSearchParams] = useSearchParams(); const navigate = useNavigate(); - const handleClick = onClick || (() => { - let newSearch = copySearchParams(searchParams); - newSearch.set("focus", focus); - if (target) { - navigate(target + "?" + newSearch); - gtag("event", "navigate", { - event_category: "link", - event_label: target, - }); - } else { - setSearchParams(newSearch); - gtag("event", "navigate", { - event_category: "focus", - event_label: focus, - }); - } - }); + const handleClick = + onClick || + (() => { + let newSearch = copySearchParams(searchParams); + newSearch.set("focus", focus); + if (target) { + navigate(target + "?" + newSearch); + gtag("event", "navigate", { + event_category: "link", + event_label: target, + }); + } else { + setSearchParams(newSearch); + gtag("event", "navigate", { + event_category: "focus", + event_label: focus, + }); + } + }); return (