diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index dc7a394d..f86c8942 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,11 +38,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/init@9fdb3e49720b44c48891d036bb502feb25684276 # v3.25.6 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -53,7 +53,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/autobuild@9fdb3e49720b44c48891d036bb502feb25684276 # v3.25.6 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -67,4 +67,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@ccf74c947955fd1cf117aef6a0e4e66191ef6f61 # v3.25.4 + uses: github/codeql-action/analyze@9fdb3e49720b44c48891d036bb502feb25684276 # v3.25.6 diff --git a/.github/workflows/deploy-to-production.yml b/.github/workflows/deploy-to-production.yml index 14a4beb3..caf0d458 100644 --- a/.github/workflows/deploy-to-production.yml +++ b/.github/workflows/deploy-to-production.yml @@ -12,7 +12,7 @@ jobs: url: https://ads.brave.com steps: - - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Use Node.js uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: diff --git a/.github/workflows/deploy-to-staging.yml b/.github/workflows/deploy-to-staging.yml index 4dd30b44..a2e2e539 100644 --- a/.github/workflows/deploy-to-staging.yml +++ b/.github/workflows/deploy-to-staging.yml @@ -13,7 +13,7 @@ jobs: url: https://ads.bravesoftware.com steps: - - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Use Node.js uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: diff --git a/.github/workflows/sanity-check.yml b/.github/workflows/sanity-check.yml index ae88ed61..9a71c291 100644 --- a/.github/workflows/sanity-check.yml +++ b/.github/workflows/sanity-check.yml @@ -12,7 +12,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Use Node.js uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 with: diff --git a/.prettierignore b/.prettierignore index 0a34595e..143b4325 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ src/locales/*.js # these files are code generated src/graphql-client/*.ts +src/graphql/ads-serve.graphql.schema.json # npm and prettier fight over a EOF on these files, let npm win: package.json diff --git a/codegen.ts b/codegen.ts index dddc7545..fac611b6 100644 --- a/codegen.ts +++ b/codegen.ts @@ -12,6 +12,9 @@ const config: CodegenConfig = { fragmentMasking: false, }, }, + "src/graphql/ads-serve.graphql.schema.json": { + plugins: ["introspection"], + }, }, config: { strictScalars: true, diff --git a/eslint.config.js b/eslint.config.js index 22c85d34..e31408c2 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -5,10 +5,18 @@ import jsxRuntime from "eslint-plugin-react/configs/jsx-runtime.js"; import prettier from "eslint-config-prettier"; import reactHooks from "eslint-plugin-react-hooks"; import lingui from "eslint-plugin-lingui"; +import * as graphql from "@graphql-eslint/eslint-plugin"; export default tseslint.config( eslint.configs.recommended, ...tseslint.configs.recommended, + { + plugins: { + prettier, + "react-hooks": reactHooks, + lingui, + }, + }, { files: ["**/*.{js,cjs,jsx,mjsx,ts,tsx,mtsx}"], ...reactRecommended, @@ -18,10 +26,24 @@ export default tseslint.config( version: "detect", }, }, + }, + { + name: "apply graphql processor to all typescript files", + files: ["**/*.{ts,tsx}"], + processor: graphql.processors.graphql, + }, + { + name: "configure graphql linter", + files: ["**/*.graphql"], plugins: { - prettier, - "react-hooks": reactHooks, - lingui, + "@graphql-eslint": graphql, + }, + languageOptions: { + parser: graphql, + }, + rules: { + ...graphql.configs["operations-recommended"].rules, + "@graphql-eslint/no-deprecated": "warn", }, }, { @@ -91,6 +113,7 @@ export default tseslint.config( ignores: [ "**/*.test.ts", "src/components/TimeZonePicker/useTimeZoneList.ts", + "codegen.ts", ], }, { diff --git a/graphql.config.yml b/graphql.config.yml index 626c43a0..e338ad05 100644 --- a/graphql.config.yml +++ b/graphql.config.yml @@ -1,2 +1,2 @@ -schema: "../ads-serve/src/graphql/schema.graphql" +schema: "src/graphql/ads-serve.graphql.schema.json" documents: "src/**/*.{ts,tsx,graphql}" diff --git a/package-lock.json b/package-lock.json index 0c13bd95..9de03b42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,25 +11,24 @@ "@apollo/client": "3.8.10", "@emotion/react": "11.11.4", "@emotion/styled": "11.11.5", - "@eslint/js": "9.2.0", "@fontsource/inter": "5.0.18", "@fontsource/mulish": "5.0.18", "@fontsource/poppins": "5.0.14", "@jonkoops/matomo-tracker-react": "0.7.0", - "@lingui/core": "4.10.1", - "@lingui/detect-locale": "4.10.1", - "@lingui/macro": "4.10.1", - "@lingui/react": "4.10.1", - "@mui/icons-material": "5.15.17", + "@lingui/core": "4.11.0", + "@lingui/detect-locale": "4.11.0", + "@lingui/macro": "4.11.0", + "@lingui/react": "4.11.0", + "@mui/icons-material": "5.15.18", "@mui/lab": "5.0.0-alpha.170", - "@mui/material": "5.15.17", - "@mui/x-data-grid": "7.4.0", - "@mui/x-date-pickers": "7.4.0", + "@mui/material": "5.15.18", + "@mui/x-data-grid": "7.5.1", + "@mui/x-date-pickers": "7.5.1", "bignumber.js": "9.1.2", "dayjs": "1.11.11", "formik": "2.4.6", "graphql": "16.8.1", - "highcharts": "11.4.1", + "highcharts": "11.4.3", "highcharts-react-official": "3.2.1", "immer": "10.1.1", "lodash": "4.17.21", @@ -43,19 +42,22 @@ "yup": "1.4.0" }, "devDependencies": { + "@eslint/js": "8.57.0", "@graphql-codegen/cli": "5.0.2", "@graphql-codegen/client-preset": "4.2.6", - "@lingui/cli": "4.10.1", - "@lingui/vite-plugin": "4.10.1", + "@graphql-codegen/introspection": "4.0.3", + "@graphql-eslint/eslint-plugin": "3.20.1", + "@lingui/cli": "4.11.0", + "@lingui/vite-plugin": "4.11.0", "@parcel/watcher": "2.4.1", - "@types/lodash": "4.17.1", + "@types/lodash": "4.17.4", "@types/papaparse": "5.3.14", - "@types/react": "18.3.2", + "@types/react": "18.3.3", "@types/react-dom": "18.3.0", "@types/react-router-dom": "5.3.3", "@types/react-window": "1.8.8", "@vitejs/plugin-basic-ssl": "1.1.0", - "@vitejs/plugin-react": "4.2.1", + "@vitejs/plugin-react": "4.3.0", "babel-plugin-macros": "3.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", @@ -64,12 +66,12 @@ "eslint-plugin-react-hooks": "4.6.2", "husky": "9.0.11", "knip": "5.16.0", - "lint-staged": "15.2.2", + "lint-staged": "15.2.4", "npm-audit-resolver": "3.0.0-RC.0", - "npm-run-all2": "6.1.2", + "npm-run-all2": "6.2.0", "prettier": "3.2.5", "typescript": "5.4.5", - "typescript-eslint": "7.9.0", + "typescript-eslint": "7.10.0", "vite": "5.2.11", "vite-plugin-checker": "0.6.4", "vite-tsconfig-paths": "4.3.2", @@ -606,10 +608,11 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", + "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1113,12 +1116,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", - "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz", + "integrity": "sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1128,12 +1132,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", - "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.6.tgz", + "integrity": "sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.6" }, "engines": { "node": ">=6.9.0" @@ -1189,9 +1194,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1889,11 +1895,12 @@ } }, "node_modules/@eslint/js": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", - "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@floating-ui/core": { @@ -2141,6 +2148,20 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/@graphql-codegen/introspection": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/introspection/-/introspection-4.0.3.tgz", + "integrity": "sha512-4cHRG15Zu4MXMF4wTQmywNf4+fkDYv5lTbzraVfliDnB8rJKcaurQpRBi11KVuQUe24YTq/Cfk4uwewfNikWoA==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/visitor-plugin-common": "^5.0.0", + "tslib": "~2.6.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@graphql-codegen/plugin-helpers": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.4.tgz", @@ -2241,6 +2262,493 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/@graphql-eslint/eslint-plugin": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz", + "integrity": "sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@graphql-tools/code-file-loader": "^7.3.6", + "@graphql-tools/graphql-tag-pluck": "^7.3.6", + "@graphql-tools/utils": "^9.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "graphql-config": "^4.4.0", + "graphql-depth-limit": "^1.1.0", + "lodash.lowercase": "^4.3.0", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/batch-execute": { + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz", + "integrity": "sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/code-file-loader": { + "version": "7.3.23", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz", + "integrity": "sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.2", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/delegate": { + "version": "9.0.35", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.35.tgz", + "integrity": "sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA==", + "dev": true, + "dependencies": { + "@graphql-tools/batch-execute": "^8.5.22", + "@graphql-tools/executor": "^0.0.20", + "@graphql-tools/schema": "^9.0.19", + "@graphql-tools/utils": "^9.2.1", + "dataloader": "^2.2.2", + "tslib": "^2.5.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/executor": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.20.tgz", + "integrity": "sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/executor-graphql-ws": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz", + "integrity": "sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "3.0.4", + "@types/ws": "^8.0.0", + "graphql-ws": "5.12.1", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/executor-http": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz", + "integrity": "sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.8.1", + "dset": "^3.1.2", + "extract-files": "^11.0.0", + "meros": "^1.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/executor-legacy-ws": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz", + "integrity": "sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@types/ws": "^8.0.0", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.13.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-file-loader": { + "version": "7.5.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz", + "integrity": "sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw==", + "dev": true, + "dependencies": { + "@graphql-tools/import": "6.7.18", + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz", + "integrity": "sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/import": { + "version": "6.7.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.18.tgz", + "integrity": "sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "resolve-from": "5.0.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/json-file-loader": { + "version": "7.4.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz", + "integrity": "sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/load": { + "version": "7.8.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.14.tgz", + "integrity": "sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg==", + "dev": true, + "dependencies": { + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "p-limit": "3.1.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/url-loader": { + "version": "7.17.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz", + "integrity": "sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw==", + "dev": true, + "dependencies": { + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/executor-graphql-ws": "^0.0.14", + "@graphql-tools/executor-http": "^0.1.7", + "@graphql-tools/executor-legacy-ws": "^0.0.11", + "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/wrap": "^9.4.2", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.8.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@graphql-tools/wrap": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.4.2.tgz", + "integrity": "sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA==", + "dev": true, + "dependencies": { + "@graphql-tools/delegate": "^9.0.31", + "@graphql-tools/schema": "^9.0.18", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", + "dev": true + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/graphql-config": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.5.0.tgz", + "integrity": "sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-file-loader": "^7.3.7", + "@graphql-tools/json-file-loader": "^7.3.7", + "@graphql-tools/load": "^7.5.5", + "@graphql-tools/merge": "^8.2.6", + "@graphql-tools/url-loader": "^7.9.7", + "@graphql-tools/utils": "^9.0.0", + "cosmiconfig": "8.0.0", + "jiti": "1.17.1", + "minimatch": "4.2.3", + "string-env-interpolation": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "cosmiconfig-toml-loader": "^1.0.0", + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "cosmiconfig-toml-loader": { + "optional": true + } + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/graphql-ws": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.12.1.tgz", + "integrity": "sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/jiti": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.17.1.tgz", + "integrity": "sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/minimatch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", + "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@graphql-eslint/eslint-plugin/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@graphql-tools/apollo-engine-loader": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz", @@ -3231,30 +3739,32 @@ "optional": true }, "node_modules/@lingui/babel-plugin-extract-messages": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-4.10.1.tgz", - "integrity": "sha512-5Pkc8iw2NQUggI+z8JrSRvAsYQTeH5lmtF6giImxtdSgqME/h82ZJCXXk/70VVEHKnqayYwoWp4KJl77lbE45Q==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-4.11.0.tgz", + "integrity": "sha512-1grC11y4vuKUAvPdJv0kvtjC1zV0GVMF2d9+R+bTviuTHA87rW+BP1TlwbzAIofXPyDgemnp9iA8pEfNhoM7Mw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@lingui/cli": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-4.10.1.tgz", - "integrity": "sha512-cW3DlsZFTavZku6sTVkcXp+tFFfbdUz85kiIHz3muYfnIqG6TbLtNLDIaS+X8ugnLJhOl/6d+Xwb0/LUo1Vctw==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-4.11.0.tgz", + "integrity": "sha512-SBB2kRj0nMMGKIoVCMN5Nhy40EXShDyMyAB/kW5vwxn7M3Tj/bj5kaXti7aQzBwI1W+we4YslH4Cwi9SnhUKVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.21.0", "@babel/generator": "^7.21.1", "@babel/parser": "^7.21.2", "@babel/runtime": "^7.21.0", "@babel/types": "^7.21.2", - "@lingui/babel-plugin-extract-messages": "4.10.1", - "@lingui/conf": "4.10.1", - "@lingui/core": "4.10.1", - "@lingui/format-po": "4.10.1", - "@lingui/message-utils": "4.10.1", + "@lingui/babel-plugin-extract-messages": "4.11.0", + "@lingui/conf": "4.11.0", + "@lingui/core": "4.11.0", + "@lingui/format-po": "4.11.0", + "@lingui/message-utils": "4.11.0", "babel-plugin-macros": "^3.0.1", "chalk": "^4.1.0", "chokidar": "3.5.1", @@ -3287,6 +3797,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3302,6 +3813,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3318,6 +3830,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3329,13 +3842,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@lingui/cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3345,6 +3860,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -3369,6 +3885,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.1", "picomatch": "^2.0.5" @@ -3382,6 +3899,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3391,6 +3909,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -3403,6 +3922,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -3415,6 +3935,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3427,6 +3948,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } @@ -3435,19 +3957,22 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@lingui/cli/node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@lingui/cli/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -3455,9 +3980,10 @@ } }, "node_modules/@lingui/conf": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-4.10.1.tgz", - "integrity": "sha512-HnPeudox+Ubn8kopN2yhpJRVNO+UgHq/o+ZfraKya+AS3hfLr16gkDw1xAwxud0ncAkb7UH4j10PYuXpSJF6EQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-4.11.0.tgz", + "integrity": "sha512-ASUT4+Eqs36Ddo+1bPqyNJePqJz5IreZdVpzxvYbHvXBWgnrbEa24fUT/FeUEknp4DLO4ytk+engvxpTGEFZZg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", "chalk": "^4.1.0", @@ -3474,6 +4000,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3488,6 +4015,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3503,6 +4031,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3513,12 +4042,14 @@ "node_modules/@lingui/conf/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/@lingui/conf/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -3527,6 +4058,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3535,12 +4067,13 @@ } }, "node_modules/@lingui/core": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.10.1.tgz", - "integrity": "sha512-oHXZd9f0SlljH8CQNb8rTgvgzadq9P0Z7mFejyigOJssq65cvLYzHYvqbFLIIBHZb7gmoFMl0JbL8ewhp++E8g==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.11.0.tgz", + "integrity": "sha512-IUrORX5P8a1o6h7f6kHChPWmvPZP90A/rMvUg2xwJiOplGGr8lTr6xu2+V2cxx5oepreUmXr7yTi7BzROLrY1g==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/message-utils": "4.10.1", + "@lingui/message-utils": "4.11.0", "unraw": "^3.0.0" }, "engines": { @@ -3548,21 +4081,23 @@ } }, "node_modules/@lingui/detect-locale": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-4.10.1.tgz", - "integrity": "sha512-IwwAYoQAXC047vOrDbriGbU+94XvgiU/fBW0o5ap3222GSCzejmVsYz0E5yd/D++Uge9refEvpERnx+Xca6BJQ==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/detect-locale/-/detect-locale-4.11.0.tgz", + "integrity": "sha512-pgA4Cud+XGnJDpopAfBr1DGtEESF1du4pbO7b2ljGUUl0aeyaOedh/bmxe5dS7ZpWKSY23SvjxZAmhjde5iMeQ==", + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@lingui/format-po": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-4.10.1.tgz", - "integrity": "sha512-47witvfo5wpQw89ZNBWchBsrl8m5F0zFI39H95DJCOLos1SNLZHyFNivT1aisEYknWHKqUqYhvKZlX844cyE2A==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-4.11.0.tgz", + "integrity": "sha512-mEo0hqzzwnF5wDrmoeCAXGqKJoGI+Afqc7avU97FYEftGNg/wM/UZaUX+JdgaBwvsws25QbqHAhB4CZVIonZsw==", "dev": true, + "license": "MIT", "dependencies": { - "@lingui/conf": "4.10.1", - "@lingui/message-utils": "4.10.1", + "@lingui/conf": "4.11.0", + "@lingui/message-utils": "4.11.0", "date-fns": "^3.6.0", "pofile": "^1.1.4" }, @@ -3571,15 +4106,16 @@ } }, "node_modules/@lingui/macro": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-4.10.1.tgz", - "integrity": "sha512-U/UFKkoKfNGTThUcLMujh7y5+RJvgegpjwo2vnqtcTKHUiTizj+lVAM4fe6bHjbhgpcSHSl8Iv5H8g5QUqM3YA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-4.11.0.tgz", + "integrity": "sha512-If8UFI6h0UGjfkpN+YL6d+OuXyROP4ph6ytyJYxVLc4WlNJ+YljgWqNoKjg6RoI5jV27XdlZxDTMb960Q6e8QA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", "@babel/types": "^7.20.7", - "@lingui/conf": "4.10.1", - "@lingui/core": "4.10.1", - "@lingui/message-utils": "4.10.1" + "@lingui/conf": "4.11.0", + "@lingui/core": "4.11.0", + "@lingui/message-utils": "4.11.0" }, "engines": { "node": ">=16.0.0" @@ -3590,9 +4126,10 @@ } }, "node_modules/@lingui/message-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-4.10.1.tgz", - "integrity": "sha512-DRz41G8iB1Hvg22SvOZ8mHJer/pa9ijPNlEacb3gfsosZK+mK7CufEXM4mnTVs9Kf3FyHUJbRSvA/Ky/+F4kww==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-4.11.0.tgz", + "integrity": "sha512-tJfaFLOxJToZ3jCeIndUnlOjwz44OqQm2dQfrXCQACIA0vXylQ9/OY4Y69mBgpMFzA501Gpe6ItlWu9xOVNEoQ==", + "license": "MIT", "dependencies": { "@messageformat/parser": "^5.0.0", "js-sha256": "^0.10.1" @@ -3602,12 +4139,13 @@ } }, "node_modules/@lingui/react": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/react/-/react-4.10.1.tgz", - "integrity": "sha512-2PDyhvDV9A4UGOl88zPA6tLAFFPzOX+3fOAG2CtMQTgW+JSaMasW+NuO+lNuUtxZJUhx9Z0UHS2saD5w3RZrYw==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/react/-/react-4.11.0.tgz", + "integrity": "sha512-mLy3aVp+Z+ptO9PrhszsAwtLX0CdWYpGsyqOk4COCQJUbynB6FKBonv6rSZvDMnVyQVqHPNm6hwgC0vXKProSQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@lingui/core": "4.10.1" + "@lingui/core": "4.11.0" }, "engines": { "node": ">=16.0.0" @@ -3617,13 +4155,14 @@ } }, "node_modules/@lingui/vite-plugin": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-4.10.1.tgz", - "integrity": "sha512-gxBsy9ljClykLkHtxrMla2hVf972l8m6RRebPzHm/AEpJ2r+KN6wz+U8riz21ly5kVIMtlBoTIVd1mB+jI9AAA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@lingui/vite-plugin/-/vite-plugin-4.11.0.tgz", + "integrity": "sha512-8/W72fb0dlxOas1CVjKnaDYRn4w/ytrl+nRBFTaz6/ZFiEQ8QI3C6KvSTblw6I5Ii4JvBKF3CI6sqiYnzyhDpw==", "dev": true, + "license": "MIT", "dependencies": { - "@lingui/cli": "4.10.1", - "@lingui/conf": "4.10.1" + "@lingui/cli": "4.11.0", + "@lingui/conf": "4.11.0" }, "engines": { "node": ">=16.0.0" @@ -3636,6 +4175,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz", "integrity": "sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==", + "license": "MIT", "dependencies": { "moo": "^0.5.1" } @@ -3672,18 +4212,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.17", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.17.tgz", - "integrity": "sha512-DVAejDQkjNnIac7MfP8sLzuo7fyrBPxNdXe+6bYqOqg1z2OPTlfFAejSNzWe7UenRMuFu9/AyFXj/X2vN2w6dA==", + "version": "5.15.18", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.18.tgz", + "integrity": "sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.17", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.17.tgz", - "integrity": "sha512-xVzl2De7IY36s/keHX45YMiCpsIx3mNv2xwDgtBkRSnZQtVk+Gqufwj1ktUxEyjzEhBl0+PiNJqYC31C+n1n6A==", + "version": "5.15.18", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.18.tgz", + "integrity": "sha512-jGhyw02TSLM0NgW+MDQRLLRUD/K4eN9rlK2pTBTL1OtzyZmQ8nB060zK1wA0b7cVrIiG+zyrRmNAvGWXwm2N9Q==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -3746,13 +4288,14 @@ } }, "node_modules/@mui/material": { - "version": "5.15.17", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.17.tgz", - "integrity": "sha512-ru/MLvTkCh0AZXmqwIpqGTOoVBS/sX48zArXq/DvktxXZx4fskiRA2PEc7Rk5ZlFiZhKh4moL4an+l8zZwq49Q==", + "version": "5.15.18", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.18.tgz", + "integrity": "sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.17", + "@mui/core-downloads-tracker": "^5.15.18", "@mui/system": "^5.15.15", "@mui/types": "^7.2.14", "@mui/utils": "^5.15.14", @@ -3926,11 +4469,12 @@ } }, "node_modules/@mui/x-data-grid": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.4.0.tgz", - "integrity": "sha512-ILu0AVqqHQf4wN/nblsJ/k7PkvlB115vQ/FEiYk7neZlc/kOJOUyst3MWMVClAecZ8+JEs476q40xd4r1CtMfw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.5.1.tgz", + "integrity": "sha512-5GuHg95UcphQ3O4LftUEFkNPP00YKUDZoSxmsNJ2+o6pwhHH4f8XIuuXEZJCyEMUiVYQk6/iYZwxJL6CpvbNCw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.0", + "@babel/runtime": "^7.24.5", "@mui/system": "^5.15.14", "@mui/utils": "^5.15.14", "clsx": "^2.1.1", @@ -3951,11 +4495,12 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.4.0.tgz", - "integrity": "sha512-Xh0LD/PCYIWWSchvtnEHdUfIsnANA0QOppUkCJ+4b8mN7z+TMEBA/LHmzA2+edxo7eanyfJ7L52znxwPP4vX8Q==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.5.1.tgz", + "integrity": "sha512-O3K2pewxk5u9mK8PG0+xgIOAn+GSBRWHtU0ZbzaqCjS8ZbxNT2OhkI0aXqp/W2ECVwxYaGjwtjl3ypQIdqRvjw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.0", + "@babel/runtime": "^7.24.5", "@mui/base": "^5.0.0-beta.40", "@mui/system": "^5.15.14", "@mui/utils": "^5.15.14", @@ -4689,10 +5234,11 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", - "dev": true + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.11.17", @@ -4722,9 +5268,10 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { - "version": "18.3.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", - "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -4774,37 +5321,230 @@ "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", "dev": true, "dependencies": { - "@types/react": "*" + "@types/react": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz", + "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/type-utils": "7.10.0", + "@typescript-eslint/utils": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", + "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", + "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz", + "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", + "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", + "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "node_modules/@typescript-eslint/utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz", + "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", + "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@typescript-eslint/types": "7.10.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -4824,16 +5564,17 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", - "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz", + "integrity": "sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.23.5", - "@babel/plugin-transform-react-jsx-self": "^7.23.3", - "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.0" + "react-refresh": "^0.14.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -5311,6 +6052,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -5550,12 +6300,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -6974,15 +7725,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7437,10 +8179,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7891,6 +8634,21 @@ "node": ">=10" } }, + "node_modules/graphql-depth-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz", + "integrity": "sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "graphql": "*" + } + }, "node_modules/graphql-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", @@ -8026,9 +8784,10 @@ } }, "node_modules/highcharts": { - "version": "11.4.1", - "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.1.tgz", - "integrity": "sha512-t+BjB4hba5rNheczCrpyDz8BJrqGdgECHaaXQrgbf1mRdPMPemlOfo08/kTMgZ/Kp/Xfj015atdXpUFdwUU12Q==" + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.3.tgz", + "integrity": "sha512-rMmvYvcdwyUVfnRPfiZ0PnW6TgVhoS0FTBI8fc4Fp8l8ocoC9dMecvxS6E6tm7h7LrnSGoEo3b/0IRHuLatD2w==", + "license": "https://www.highcharts.com/license" }, "node_modules/highcharts-react-official": { "version": "3.2.1", @@ -8605,6 +9364,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -8978,7 +9738,8 @@ "node_modules/js-sha256": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz", - "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==" + "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==", + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -9284,12 +10045,16 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -9298,21 +10063,22 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.4.tgz", + "integrity": "sha512-3F9KRQIS2fVDGtCkBp4Bx0jswjX7zUcKx6OF0ZeY1prksUyKPRIIUqZhIUYAstJfvj6i48VFs4dwVIbCYwvTYQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "5.3.0", - "commander": "11.1.0", + "commander": "12.1.0", "debug": "4.3.4", "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", + "lilconfig": "3.1.1", + "listr2": "8.2.1", + "micromatch": "4.0.6", "pidtree": "0.6.0", "string-argv": "0.3.2", - "yaml": "2.3.4" + "yaml": "2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -9329,6 +10095,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -9341,6 +10108,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9353,6 +10121,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9365,6 +10134,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -9377,6 +10147,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -9392,6 +10163,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -9404,25 +10176,28 @@ } }, "node_modules/lint-staged/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/lint-staged/node_modules/emoji-regex": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9431,16 +10206,17 @@ } }, "node_modules/lint-staged/node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -9452,6 +10228,7 @@ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^6.2.0", "cli-cursor": "^4.0.0", @@ -9471,6 +10248,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -9486,6 +10264,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -9502,6 +10281,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -9518,6 +10298,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -9534,6 +10315,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -9551,6 +10333,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9566,6 +10349,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -9707,6 +10491,12 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, + "node_modules/lodash.lowercase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", + "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -10009,18 +10799,32 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.6.tgz", + "integrity": "sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "braces": "^3.0.3", + "picomatch": "^4.0.2" }, "engines": { "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -10069,7 +10873,8 @@ "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "license": "BSD-3-Clause" }, "node_modules/ms": { "version": "2.1.2", @@ -10269,10 +11074,11 @@ } }, "node_modules/npm-run-all2": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.1.2.tgz", - "integrity": "sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.2.0.tgz", + "integrity": "sha512-wA7yVIkthe6qJBfiJ2g6aweaaRlw72itsFGF6HuwCHKwtwAx/4BY1vVpk6bw6lS8RLMsexoasOkd0aYOmsFG7Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "cross-spawn": "^7.0.3", @@ -10298,6 +11104,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11196,10 +12003,11 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12295,6 +13103,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -12528,119 +13337,15 @@ } }, "node_modules/typescript-eslint": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.9.0.tgz", - "integrity": "sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "7.9.0", - "@typescript-eslint/parser": "7.9.0", - "@typescript-eslint/utils": "7.9.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", - "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", - "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.10.0.tgz", + "integrity": "sha512-thO8nyqptXdfWHQrMJJiJyftpW8aLmwRNs11xA8pSrXneoclFPstQZqXvDWuH1WNL4CHffqHvYUeCHTit6yfhQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/utils": "7.10.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -12658,86 +13363,6 @@ } } }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.9.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/ua-parser-js": { "version": "1.0.37", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", @@ -13981,10 +14606,14 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } diff --git a/package.json b/package.json index 58fad12e..641ec594 100644 --- a/package.json +++ b/package.json @@ -5,27 +5,26 @@ "type": "module", "dependencies": { "@apollo/client": "3.8.10", - "@eslint/js": "9.2.0", "@emotion/react": "11.11.4", "@emotion/styled": "11.11.5", "@fontsource/inter": "5.0.18", "@fontsource/mulish": "5.0.18", "@fontsource/poppins": "5.0.14", "@jonkoops/matomo-tracker-react": "0.7.0", - "@lingui/core": "4.10.1", - "@lingui/detect-locale": "4.10.1", - "@lingui/macro": "4.10.1", - "@lingui/react": "4.10.1", - "@mui/icons-material": "5.15.17", + "@lingui/core": "4.11.0", + "@lingui/detect-locale": "4.11.0", + "@lingui/macro": "4.11.0", + "@lingui/react": "4.11.0", + "@mui/icons-material": "5.15.18", "@mui/lab": "5.0.0-alpha.170", - "@mui/material": "5.15.17", - "@mui/x-data-grid": "7.4.0", - "@mui/x-date-pickers": "7.4.0", + "@mui/material": "5.15.18", + "@mui/x-data-grid": "7.5.1", + "@mui/x-date-pickers": "7.5.1", "bignumber.js": "9.1.2", "dayjs": "1.11.11", "formik": "2.4.6", "graphql": "16.8.1", - "highcharts": "11.4.1", + "highcharts": "11.4.3", "highcharts-react-official": "3.2.1", "immer": "10.1.1", "lodash": "4.17.21", @@ -58,19 +57,22 @@ "extract": "lingui extract" }, "devDependencies": { + "@eslint/js": "8.57.0", "@graphql-codegen/cli": "5.0.2", "@graphql-codegen/client-preset": "4.2.6", - "@lingui/cli": "4.10.1", - "@lingui/vite-plugin": "4.10.1", + "@graphql-codegen/introspection": "4.0.3", + "@graphql-eslint/eslint-plugin": "3.20.1", + "@lingui/cli": "4.11.0", + "@lingui/vite-plugin": "4.11.0", "@parcel/watcher": "2.4.1", - "@types/lodash": "4.17.1", + "@types/lodash": "4.17.4", "@types/papaparse": "5.3.14", - "@types/react": "18.3.2", + "@types/react": "18.3.3", "@types/react-dom": "18.3.0", "@types/react-router-dom": "5.3.3", "@types/react-window": "1.8.8", "@vitejs/plugin-basic-ssl": "1.1.0", - "@vitejs/plugin-react": "4.2.1", + "@vitejs/plugin-react": "4.3.0", "babel-plugin-macros": "3.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", @@ -79,16 +81,16 @@ "eslint-plugin-react-hooks": "4.6.2", "husky": "9.0.11", "knip": "5.16.0", - "lint-staged": "15.2.2", + "lint-staged": "15.2.4", "npm-audit-resolver": "3.0.0-RC.0", - "npm-run-all2": "6.1.2", + "npm-run-all2": "6.2.0", "prettier": "3.2.5", "typescript": "5.4.5", + "typescript-eslint": "7.10.0", "vite": "5.2.11", "vite-plugin-checker": "0.6.4", "vite-tsconfig-paths": "4.3.2", - "vitest": "1.6.0", - "typescript-eslint": "7.9.0" + "vitest": "1.6.0" }, "browserslist": [ ">0.2%", @@ -102,4 +104,4 @@ "eslint" ] } -} +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index bcdbabe4..59085e5e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -18,8 +18,8 @@ import { Register } from "@/auth/registration/Register"; import { LandingPage } from "@/auth/views/LandingPage"; import { BraveAdsContactFrame } from "@/auth/registration/BraveAdsContactFrame"; import { useMatomo } from "@jonkoops/matomo-tracker-react"; -import { BasicAttentionTokenLandingPage } from "@/basic-attention-token/BasicAttentionTokenLandingPage"; import { SearchLandingPage } from "@/search/SearchLandingPage"; +import { BasicAttentionTokenLandingPage } from "@/basic-attention-token/BasicAttentionTokenLandingPage"; export function App() { const { enableLinkTracking } = useMatomo(); diff --git a/src/assets/images/ad-formats-hero@1x.png b/src/assets/images/ad-formats-hero@1x.png new file mode 100644 index 00000000..d122d027 Binary files /dev/null and b/src/assets/images/ad-formats-hero@1x.png differ diff --git a/src/assets/images/bat-logo-white.svg b/src/assets/images/bat-logo-white.svg new file mode 100644 index 00000000..125c2b4e --- /dev/null +++ b/src/assets/images/bat-logo-white.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/bat.svg b/src/assets/images/bat.svg new file mode 100644 index 00000000..e335a54f --- /dev/null +++ b/src/assets/images/bat.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/full-brave-brand-black.svg b/src/assets/images/full-brave-brand-black.svg new file mode 100644 index 00000000..75ce5f27 --- /dev/null +++ b/src/assets/images/full-brave-brand-black.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/full-brave-brand.svg b/src/assets/images/full-brave-brand.svg new file mode 100644 index 00000000..28d618af --- /dev/null +++ b/src/assets/images/full-brave-brand.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/logo-white.svg b/src/assets/images/logo-white.svg new file mode 100644 index 00000000..ab0ee5af --- /dev/null +++ b/src/assets/images/logo-white.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/auth/lib/index.ts b/src/auth/lib/index.ts index dd72b5f0..761ce985 100644 --- a/src/auth/lib/index.ts +++ b/src/auth/lib/index.ts @@ -1,7 +1,7 @@ import { - AdvertiserFragment, PaymentType, UserFragment, + Advertiser as GraphqlAdvertiser, } from "@/graphql-client/graphql"; import { buildAdServerEndpoint, @@ -11,7 +11,7 @@ import { RegistrationForm } from "@/auth/registration/types"; import { t } from "@lingui/macro"; type Advertiser = Pick< - AdvertiserFragment, + GraphqlAdvertiser, | "selfServiceSetPrice" | "selfServiceManageCampaign" | "id" diff --git a/src/auth/registration/BraveAdsContactFrame.tsx b/src/auth/registration/BraveAdsContactFrame.tsx index b3b39fc8..baf041c5 100644 --- a/src/auth/registration/BraveAdsContactFrame.tsx +++ b/src/auth/registration/BraveAdsContactFrame.tsx @@ -16,6 +16,7 @@ export function BraveAdsContactFrame() { position="absolute" height="100%" width="100%" + bgcolor="#f8f8f8" > diff --git a/src/auth/registration/RegistrationContainer.tsx b/src/auth/registration/RegistrationContainer.tsx index 615079b1..29ec9e63 100644 --- a/src/auth/registration/RegistrationContainer.tsx +++ b/src/auth/registration/RegistrationContainer.tsx @@ -4,31 +4,29 @@ import logo from "@/assets/images/brave-icon-release-color.svg"; import Typography from "@mui/material/Typography"; import { Trans } from "@lingui/macro"; import { PrivacyPolicy } from "@/basic-attention-token/PrivacyPolicy"; -import { useIsMobile } from "@/hooks/useIsMobile"; import { LandingPageAppBar } from "@/components/AppBar/LandingPageAppBar"; import { Background } from "@/components/Background/Background"; -import { Toolbar } from "@mui/material"; +import { Box, Toolbar } from "@mui/material"; export function RegistrationContainer( props: PropsWithChildren & { isSearch?: boolean }, ) { - const isMobile = useIsMobile(); - return ( - - - {!isMobile &&
} - - Start your company profile - + + + + + Start your company profile + - {props.children} + {props.children} - - + + + ); } diff --git a/src/auth/views/GetStartedLandingPage.tsx b/src/auth/views/GetStartedLandingPage.tsx new file mode 100644 index 00000000..b0f48f4f --- /dev/null +++ b/src/auth/views/GetStartedLandingPage.tsx @@ -0,0 +1,68 @@ +import { Box, Button, Link, Stack, Typography } from "@mui/material"; +import { Trans } from "@lingui/macro"; +import { Link as RouterLink } from "react-router-dom"; +import { useIsAuthenticated } from "@/auth/hooks/queries/useIsAuthenticated"; +import adFormats from "@/assets/images/ad-formats-hero@1x.png"; + +export function GetStartedLandingPage() { + const isAuthenticated = useIsAuthenticated(); + + return ( + + + + + + Simple ads to reach digital trend-setters around the world + + + + + + Get to your first million users with powerful ad placements on the + world’s fastest-growing alternative browser & search engine. + + + + + + + + + {!isAuthenticated && ( + + + Log in + + + )} + + + ); +} diff --git a/src/auth/views/LandingPage.tsx b/src/auth/views/LandingPage.tsx index f78946b0..b3fbfa4e 100644 --- a/src/auth/views/LandingPage.tsx +++ b/src/auth/views/LandingPage.tsx @@ -1,97 +1,44 @@ import { Background } from "@/components/Background/Background"; import { LandingPageAppBar } from "@/components/AppBar/LandingPageAppBar"; -import { Box, Button, Link, Stack, Toolbar, Typography } from "@mui/material"; -import { useIsAuthenticated } from "@/auth/hooks/queries/useIsAuthenticated"; -import { Link as RouterLink } from "react-router-dom"; -import { useIsMobile } from "@/hooks/useIsMobile"; -import { MobileAdsBenefits } from "@/auth/views/MobileAdsBenefits"; -import { GradientText } from "@/components/Typography/GradientText"; +import { Box, Toolbar } from "@mui/material"; import { useTrackMatomoPageView } from "@/hooks/useTrackWithMatomo"; -import { msg, Trans } from "@lingui/macro"; -import { useLingui } from "@lingui/react"; -import { findLocale } from "@/i18n"; +import { GetStartedLandingPage } from "@/auth/views/GetStartedLandingPage"; +import { BottomSwoop } from "@/components/Assets/BottomSwoop"; +import { TopSwoop } from "@/components/Assets/TopSwoop"; +import { WhyUseBraveAds } from "@/auth/views/components/WhyUseBraveAds"; +import { WhatIsBrave } from "@/auth/views/components/WhatIsBrave"; +import { WhatIsBraveAds } from "@/auth/views/components/WhatIsBraveAds"; +import { Inquiries } from "@/auth/views/components/Inquiries"; +import { FooterCTA } from "@/auth/views/components/FooterCTA"; export function LandingPage() { useTrackMatomoPageView({ documentTitle: "Landing Page" }); - const isAuthenticated = useIsAuthenticated(); - const isMobile = useIsMobile(); - const { _ } = useLingui(); return ( - - - - - {" "} - {_(msg`advertising made simple`)} - - - - - Reach and convert new customers through premium advertising on the - Brave browser and search engine. - - - - {!isAuthenticated && ( - - - Get 50% your first campaign when you pay in Basic Attention - Token - - - )} - - - - {!isMobile && !isAuthenticated && ( - - Already have an account? - - Log in - - - )} - - - {isMobile && } - - {!isMobile && ( - - - - )} - + + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/src/auth/views/MobileAdsBenefits.tsx b/src/auth/views/MobileAdsBenefits.tsx deleted file mode 100644 index 947460eb..00000000 --- a/src/auth/views/MobileAdsBenefits.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Card, CardMedia, List, ListItem, Typography } from "@mui/material"; - -import allSizes from "@/assets/images/all_sizes_frame.svg"; -import powerfulFormats from "@/assets/images/powerful_format_frame.svg"; -import privacyFocused from "@/assets/images/privacy_focused_frame.svg"; -import { msg } from "@lingui/macro"; -import { MessageDescriptor } from "@lingui/core"; -import { Trans } from "@lingui/react"; - -export function MobileAdsBenefits() { - return ( - - - - - - - - - - - - ); -} - -const ItemCard = (props: { - primary: MessageDescriptor; - secondary: MessageDescriptor; - image: string; -}) => { - return ( - - - - - - - - - - ); -}; diff --git a/src/auth/views/components/AuthContainer.tsx b/src/auth/views/components/AuthContainer.tsx index 7b687ef8..f196ac22 100644 --- a/src/auth/views/components/AuthContainer.tsx +++ b/src/auth/views/components/AuthContainer.tsx @@ -17,8 +17,9 @@ export function AuthContainer({ children, belowCard, aboveCard }: Props) { {aboveCard} {children} diff --git a/src/auth/views/components/FooterCTA.tsx b/src/auth/views/components/FooterCTA.tsx new file mode 100644 index 00000000..5ba7ddcb --- /dev/null +++ b/src/auth/views/components/FooterCTA.tsx @@ -0,0 +1,47 @@ +import { Box, Button, Stack, Typography } from "@mui/material"; +import { Trans } from "@lingui/macro"; +import { Link as RouterLink } from "react-router-dom"; + +export function FooterCTA() { + return ( + + + + + Ready to reach your first million users? Start your first campaign + today. + + + + + + Brave’s 70+ million cord cutters, and tech savvy early adopters want + privacy and performance over tracking and lag. Hundreds of thousands + more make the switch every day. Want them to see your brand? Start + your first campaign in minutes, and with as little as $500. + + + + + + + ); +} diff --git a/src/auth/views/components/Inquiries.tsx b/src/auth/views/components/Inquiries.tsx new file mode 100644 index 00000000..4e1d8601 --- /dev/null +++ b/src/auth/views/components/Inquiries.tsx @@ -0,0 +1,76 @@ +import { Button, Stack, Typography } from "@mui/material"; +import { Trans } from "@lingui/macro"; +import { Link as RouterLink } from "react-router-dom"; +import SearchIcon from "@mui/icons-material/Search"; +import KeyboardArrowRightIcon from "@mui/icons-material/KeyboardArrowRight"; +import HelpOutlineOutlinedIcon from "@mui/icons-material/HelpOutlineOutlined"; +import AlternateEmailOutlinedIcon from "@mui/icons-material/AlternateEmailOutlined"; +import bat from "@/assets/images/bat.svg"; + +const button = { + border: "1px solid rgba(255, 255, 255, 0.8)", + padding: "24px", + borderRadius: "8px", + fontSize: "18px", +}; + +export function Inquiries() { + return ( + + + + + + + ); +} diff --git a/src/auth/views/components/WhatIsBrave.tsx b/src/auth/views/components/WhatIsBrave.tsx new file mode 100644 index 00000000..4e3da126 --- /dev/null +++ b/src/auth/views/components/WhatIsBrave.tsx @@ -0,0 +1,28 @@ +import { Box, Stack, Typography } from "@mui/material"; +import { Trans } from "@lingui/macro"; + +export function WhatIsBrave() { + return ( + + + + What’s Brave? + + + + + Brave is an independent company dedicated to building a user-first + Web. Our private, feature-rich browser and search engine are used by + 70+ million people worldwide, with hundreds of thousands more + downloading every day. + + + + + ); +} diff --git a/src/auth/views/components/WhatIsBraveAds.tsx b/src/auth/views/components/WhatIsBraveAds.tsx new file mode 100644 index 00000000..565e8ab9 --- /dev/null +++ b/src/auth/views/components/WhatIsBraveAds.tsx @@ -0,0 +1,31 @@ +import { Box, Stack, Typography } from "@mui/material"; +import { Trans } from "@lingui/macro"; + +export function WhatIsBraveAds() { + return ( + + + + What is Brave Ads? + + + + + It is a modern advertiser-first ad platform made to help + brands reach new users. Brave Ads are discrete, unobtrusive + first-party ads built directly into the browser and search engine, + with familiar formats like push notifications and news-feed ads. + Brave’s innovative on-device targeting respects a user’s desire for + privacy while still delivering personalized ads based on their + interests, which drives high ROI for advertisers. + + + + + ); +} diff --git a/src/auth/views/components/WhyUseBraveAds.tsx b/src/auth/views/components/WhyUseBraveAds.tsx new file mode 100644 index 00000000..5c1ce2c4 --- /dev/null +++ b/src/auth/views/components/WhyUseBraveAds.tsx @@ -0,0 +1,78 @@ +import { Stack, Typography } from "@mui/material"; +import { Trans, useLingui } from "@lingui/react"; +import { PropsWithChildren } from "react"; +import { MessageDescriptor } from "@lingui/core"; +import { msg } from "@lingui/macro"; + +export function WhyUseBraveAds() { + const { _ } = useLingui(); + + return ( + + + {_(msg`Why use Brave Ads?`)} + + + + + + + + + ); +} + +const NumberContainer = ( + props: PropsWithChildren & { + title: MessageDescriptor; + body: MessageDescriptor; + number: number; + }, +) => { + return ( + + + {props.number} + + + + + + + + + + + ); +}; diff --git a/src/basic-attention-token/BasicAttentionTokenLandingPage.tsx b/src/basic-attention-token/BasicAttentionTokenLandingPage.tsx index 605314a4..65af78fc 100644 --- a/src/basic-attention-token/BasicAttentionTokenLandingPage.tsx +++ b/src/basic-attention-token/BasicAttentionTokenLandingPage.tsx @@ -2,65 +2,60 @@ import { useTrackMatomoEvent, useTrackMatomoPageView, } from "@/hooks/useTrackWithMatomo"; -import { useIsMobile } from "@/hooks/useIsMobile"; -import { Background } from "@/components/Background/Background"; -import { LandingPageAppBar } from "@/components/AppBar/LandingPageAppBar"; -import { Box, Button, Link, Stack, Toolbar, Typography } from "@mui/material"; +import { Box, Button, Link, Stack, Typography } from "@mui/material"; import { Link as RouterLink } from "react-router-dom"; -import notification from "@/assets/images/newsfeed.png"; -import mobileAd from "@/assets/images/news-mobile.png"; -import bat from "@/assets/images/basic-attention-token.svg"; import { Trans } from "@lingui/macro"; +import basicattentiontoken from "@/assets/images/bat-logo-white.svg"; +import { LandingPageAppBar } from "@/components/AppBar/LandingPageAppBar"; +import { Background } from "@/components/Background/Background"; export function BasicAttentionTokenLandingPage() { - useTrackMatomoPageView({ documentTitle: "BAT Landing Page" }); - const isMobile = useIsMobile(); - + useTrackMatomoPageView({ + documentTitle: "Basic Attention Token Landing Page", + }); return ( - - - - + + + + + - - - Pay with BAT to get 50% off your first campaign - - - - - Brave is place where early adopters thrive. We’re celebrating - our crypto roots by offering new and returning customers half - off their first campaign when they check-out with BAT. - - - - - Limited time only. Available to new advertisers, and those who - ran campaigns before September 30, 2023. - - + + Pay with BAT to get 50% off your first + self-managed campaign. + + + + + + Brave is place where early adopters thrive. We’re celebrating our + crypto roots by offering new and returning customers half off + their first self-managed campaign when they check-out with BAT + *. + + - {isMobile && ( - - - - - )} + + + *Limited time only. Available to new advertisers, and those who + ran campaigns before September 30, 2023. Eligible for Push + Notification and Newsfeed ads only. + + - - - {!isMobile && } + @@ -71,22 +66,27 @@ function LaunchCampaignButton() { const { trackMatomoEvent } = useTrackMatomoEvent(); return ( - + { trackMatomoEvent("basic-attention-token", "learn-about-bat"); @@ -98,24 +98,3 @@ function LaunchCampaignButton() { ); } - -function AdImageContainer() { - return ( - - - - - ); -} diff --git a/src/components/AppBar/LandingPageAppBar.tsx b/src/components/AppBar/LandingPageAppBar.tsx index d3086249..2ff52dc2 100644 --- a/src/components/AppBar/LandingPageAppBar.tsx +++ b/src/components/AppBar/LandingPageAppBar.tsx @@ -10,7 +10,8 @@ import { Toolbar, Typography, } from "@mui/material"; -import ads from "@/assets/images/logo.svg"; +import brave from "@/assets/images/full-brave-brand.svg"; +import braveDark from "@/assets/images/full-brave-brand-black.svg"; import { Link as RouterLink, useRouteMatch } from "react-router-dom"; import { useIsAuthenticated } from "@/auth/hooks/queries/useIsAuthenticated"; import { useSignOut } from "@/auth/hooks/mutations/useSignOut"; @@ -20,50 +21,51 @@ import { useLingui } from "@lingui/react"; import { SupportMenu } from "@/components/Drawer/SupportMenu"; import MenuIcon from "@mui/icons-material/Menu"; import { useState } from "react"; +import { PageLink } from "@/components/AppBar/PageLink"; export function LandingPageAppBar() { const match = useRouteMatch(); const { _ } = useLingui(); const isAuthenticated = useIsAuthenticated(); const isMobile = useIsMobile(); - - const GetStarted = () => ( - - - Get started - - - ); + const isContact = match.path === "/contact"; + const textColor = isContact ? "text.primary" : "white"; const links = [ { - component: isAuthenticated ? null : , + component: ( + + ), }, { component: ( - - - Basic Attention Token - - + ), }, { component: ( - - - Brave Search Ads - - + + ), + }, + { + component: ( + ), }, ]; @@ -71,9 +73,9 @@ export function LandingPageAppBar() { return ( - - {_(msg`Ads`)} - + + {_(msg`Ads`)} + - + {!isMobile && ( <> {links.map((l, i) => (
{l.component}
))} - + )}
- {!isMobile && !match.url.includes("auth") && ( - - )} + {!isMobile && } {isMobile && ( - + )} @@ -118,7 +132,7 @@ function AuthedButton(props: { isAuthenticated?: boolean }) { return ( - + Or email{" "} @@ -98,7 +98,7 @@ function SearchImageCarousel() { }, []); return ( - + {talkingPoints.map((point, index) => ( - + - + diff --git a/src/theme.tsx b/src/theme.tsx index 5663ab54..667a49ce 100644 --- a/src/theme.tsx +++ b/src/theme.tsx @@ -5,9 +5,16 @@ const appTheme = createTheme( { typography: { fontFamily: "Poppins", - h2: { - fontSize: "14px", + h1: { + fontSize: "50px", + maxWidth: "800px", fontWeight: 600, + overflowWrap: "break-word", + }, + h2: { + fontSize: "18px", + maxWidth: "624px", + overflowWrap: "break-word", }, }, palette: { diff --git a/src/user/library/index.test.ts b/src/user/library/index.test.ts index 06b24376..528dbe22 100644 --- a/src/user/library/index.test.ts +++ b/src/user/library/index.test.ts @@ -11,7 +11,6 @@ import { CampaignPacingStrategies, CampaignSource, CampaignType, - ConfirmationType, CreativeFragment, PaymentType, } from "@/graphql-client/graphql"; @@ -96,8 +95,6 @@ const BASE_CPM_CAMPAIGN_FRAGMENT: Readonly = { { id: "13e4d556-cec4-4b2a-85e6-73fdf625c0cb", state: "active", - price: "0.006", - priceType: ConfirmationType.View, creative: { id: "3ee776b6-dd70-4dc5-ba5d-6147c10f2d3d", createdAt: "2023-07-11T16:13:19.322Z", diff --git a/src/user/views/user/search/CreateSearchCampaign.tsx b/src/user/views/user/search/CreateSearchCampaign.tsx index a2593177..7de8828b 100644 --- a/src/user/views/user/search/CreateSearchCampaign.tsx +++ b/src/user/views/user/search/CreateSearchCampaign.tsx @@ -14,8 +14,8 @@ import { SearchOptions, SearchOptionsSchema } from "./form"; import { Form, Formik } from "formik"; import { generateAndDownloadFile } from "./generate-file"; -const CreateSearchCampaign_LandingPageList = graphql(` - query CreateSearchCampaign_LandingPageList( +const CreateSearchCampaignLandingPageList = graphql(` + query CreateSearchCampaignLandingPageList( $domain: String! $country: String! $offset: Float! @@ -28,12 +28,12 @@ const CreateSearchCampaign_LandingPageList = graphql(` offset: $offset limit: $limit ) { - ...SearchProspects_LandingPageList + ...SearchProspectsLandingPageList } } } - fragment SearchProspects_LandingPageList on SearchLandingPageWithStats { + fragment SearchProspectsLandingPageList on SearchLandingPageWithStats { url rank lastSeen @@ -55,7 +55,7 @@ export function CreateSearchCampaign({ domain }: Props) { const basket = useBasket(); const [step, setStep] = useState(Steps.ADS); - const { data } = useQuery(CreateSearchCampaign_LandingPageList, { + const { data } = useQuery(CreateSearchCampaignLandingPageList, { variables: { country: domain.country, domain: domain.domain, diff --git a/src/user/views/user/search/LandingPageDetail.tsx b/src/user/views/user/search/LandingPageDetail.tsx index 5abe2032..3b217518 100644 --- a/src/user/views/user/search/LandingPageDetail.tsx +++ b/src/user/views/user/search/LandingPageDetail.tsx @@ -1,4 +1,4 @@ -import { SearchProspects_LandingPageDetailFragment } from "@/graphql-client/graphql"; +import { SearchProspectsLandingPageDetailFragment } from "@/graphql-client/graphql"; import SearchIcon from "@mui/icons-material/Search"; import { Box, @@ -17,19 +17,19 @@ import _ from "lodash"; import { Trans } from "@lingui/macro"; const SearchProspects_LandingPageDetail = graphql(` - query SearchProspects_LandingPageDetail( + query SearchProspectsLandingPageDetail( $domain: String! $country: String! $url: String! ) { searchProspects { landingPage(country: $country, domain: $domain, url: $url) { - ...SearchProspects_LandingPageDetail + ...SearchProspectsLandingPageDetail } } } - fragment SearchProspects_LandingPageDetail on SearchLandingPage { + fragment SearchProspectsLandingPageDetail on SearchLandingPage { url queries { query @@ -40,7 +40,7 @@ const SearchProspects_LandingPageDetail = graphql(` function QueryList({ queries, }: { - queries: SearchProspects_LandingPageDetailFragment["queries"]; + queries: SearchProspectsLandingPageDetailFragment["queries"]; }) { const [visibleQueryCount, setVisibleQueryCount] = useState(20); diff --git a/src/user/views/user/search/LandingPageList.tsx b/src/user/views/user/search/LandingPageList.tsx index e74019ab..d7e40976 100644 --- a/src/user/views/user/search/LandingPageList.tsx +++ b/src/user/views/user/search/LandingPageList.tsx @@ -1,4 +1,4 @@ -import { SearchProspects_LandingPageListFragment } from "@/graphql-client/graphql"; +import { SearchProspectsLandingPageListFragment } from "@/graphql-client/graphql"; import { LandingPageListEntry } from "./LandingPageListEntry"; import { Basket } from "./basket"; @@ -10,7 +10,7 @@ import { CountryDomain } from "./types"; interface Props { domain: CountryDomain; basket: Basket; - landingPages: SearchProspects_LandingPageListFragment[] | undefined; + landingPages: SearchProspectsLandingPageListFragment[] | undefined; } export function LandingPageList({ landingPages, basket, domain }: Props) { diff --git a/src/user/views/user/search/LandingPageListEntry.tsx b/src/user/views/user/search/LandingPageListEntry.tsx index e3eb14ed..fd7ff9e2 100644 --- a/src/user/views/user/search/LandingPageListEntry.tsx +++ b/src/user/views/user/search/LandingPageListEntry.tsx @@ -1,5 +1,5 @@ import { SearchPreview } from "@/components/Creatives/SearchPreview"; -import { SearchProspects_LandingPageListFragment } from "@/graphql-client/graphql"; +import { SearchProspectsLandingPageListFragment } from "@/graphql-client/graphql"; import { Box, Checkbox, @@ -13,7 +13,7 @@ import { LandingPageDetail } from "./LandingPageDetail"; import { CountryDomain } from "./types"; interface Props { - landingPage: SearchProspects_LandingPageListFragment; + landingPage: SearchProspectsLandingPageListFragment; selected: boolean; toggleSelection: DispatchWithoutAction; diff --git a/src/user/views/user/search/generate-file.ts b/src/user/views/user/search/generate-file.ts index f64b39f7..5520122b 100644 --- a/src/user/views/user/search/generate-file.ts +++ b/src/user/views/user/search/generate-file.ts @@ -1,4 +1,4 @@ -import { SearchProspects_LandingPageListFragment } from "@/graphql-client/graphql"; +import { SearchProspectsLandingPageListFragment } from "@/graphql-client/graphql"; import { Basket } from "./basket"; import { CountryDomain } from "./types"; import { SearchOptions } from "./form"; @@ -6,7 +6,7 @@ import { triggerBrowserDownload } from "@/util/download"; interface Params { domain: CountryDomain; - landingPages: SearchProspects_LandingPageListFragment[]; + landingPages: SearchProspectsLandingPageListFragment[]; basket: Basket; options: SearchOptions; }