From 687612897e85baa9da9017d8201d6dc48e5fe55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quentin=20G=C3=A9r=C3=B4me?= Date: Wed, 29 Jun 2022 16:21:38 +0200 Subject: [PATCH] Dataviz (#107) * Fix StackLayer when using "To acquired" datasets * Fix Leaflet map z-index * Remove console.log in DatasetFileInput * Use the web optimized raster or vector files for dataviz * file: 'download' attribute on link is not accepted by Safari * Datagrid: Wrap content in cell; add horizontal overflow * Dataviz: Add colors to raster * Dropzone: no need to have type="hidden" * Display preview raster & geojson * Tooltip: remove type:"button" in trigger --- leaflet.d.ts | 1 + package-lock.json | 1088 ++++++++--------- package.json | 1 - public/locales/en/messages.json | 7 + public/locales/fr/messages.json | 7 + schema.graphql | 20 + src/components/DataGrid.tsx | 101 +- src/components/Dropzone.tsx | 5 +- src/components/Tooltip/Tooltip.tsx | 6 +- src/components/map/BigGeoJsonLayer.tsx | 6 +- src/components/map/GeoRasterLayer.tsx | 6 +- src/components/map/Legend.tsx | 33 + src/components/map/MapEvents.tsx | 12 + src/features/dataset/DatasetMetadataBlock.tsx | 59 +- src/features/dataset/DatasetViewer.tsx | 2 +- .../ClientContinuousRasterMap.tsx | 66 + .../ClientDiscreteRasterMap.tsx | 64 + .../RasterDatasetMap/ClientRasterMap.tsx | 42 +- .../RasterDatasetMap/RasterDatasetMap.tsx | 98 +- src/features/dataset/TabularDatasetTable.tsx | 2 +- .../VectorDatasetMap/VectorDatasetMap.tsx | 54 +- src/libs/dataset.ts | 78 +- src/libs/file.ts | 1 - src/libs/graphql.ts | 98 +- src/libs/map/BigGeoJSON.js | 7 +- 25 files changed, 1115 insertions(+), 749 deletions(-) create mode 100644 src/components/map/Legend.tsx create mode 100644 src/components/map/MapEvents.tsx create mode 100644 src/features/dataset/RasterDatasetMap/ClientContinuousRasterMap.tsx create mode 100644 src/features/dataset/RasterDatasetMap/ClientDiscreteRasterMap.tsx diff --git a/leaflet.d.ts b/leaflet.d.ts index 90611dc..7c1a3bd 100644 --- a/leaflet.d.ts +++ b/leaflet.d.ts @@ -11,6 +11,7 @@ interface BigGeoJSONOptions extends GeoJSONOptions { promoteId?: string | null; // name of a feature property to be promoted to feature.id generateId?: boolean; // whether to generate feature ids. Cannot be used with promoteId debug?: number; + style?: ((feature: any) => object) | object; } declare module "leaflet" { diff --git a/package-lock.json b/package-lock.json index 03b7fea..a2cbf50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,6 @@ "clsx": "^1.1.1", "csv-parse": "^5.2.0", "deepmerge": "^4.2.2", - "dropzone": "^6.0.0-beta.2", "eslint": "^8.18.0", "eslint-config-next": "^12.1.6", "eslint-config-prettier": "^8.5.0", @@ -109,9 +108,9 @@ } }, "node_modules/@apollo/client": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.8.tgz", - "integrity": "sha512-p/J6KRHZZPGX0bZtMLvRFAIcReYsRYGg+Jz9MkgabWPy0L8rwgyolq9fvKsNqkH888Tj9Yvwrxz9V84KfcORJA==", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.9.tgz", + "integrity": "sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@wry/context": "^0.6.0", @@ -381,11 +380,11 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dependencies": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, @@ -1854,12 +1853,12 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader": { - "version": "7.2.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.2.19.tgz", - "integrity": "sha512-4wb32BZjSAsPYIXxqqhnF1lYrLxNIPx2M3gPWU9BSEJNGhe7noDxfXXoWoGC0vwpliX30eBdbGU4a6Ab9RSkwQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.0.tgz", + "integrity": "sha512-ItYIgnnsuhR7DBY2TjsDT0ryvdzHqHvT9T5pHoMz8iJM4liBbSyjpWVtjdTeZoVJ00+sqvKc5BudInN6Oml2Yw==", "dev": true, "dependencies": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "cross-undici-fetch": "^0.4.0", "sync-fetch": "0.4.1", "tslib": "^2.4.0" @@ -1869,12 +1868,12 @@ } }, "node_modules/@graphql-tools/batch-execute": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.4.10.tgz", - "integrity": "sha512-rugHElhKYZgb6w3mBuNdgjMIo0LW5QbwIwJ1bc9VKWh51dCQmNwJS1Nx8qFWUjhmjVJWbvKWqYb6Z7wTGnOc3g==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz", + "integrity": "sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw==", "dev": true, "dependencies": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "dataloader": "2.1.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" @@ -1884,13 +1883,13 @@ } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "7.2.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.2.18.tgz", - "integrity": "sha512-zHJ2SPuWqK2/rlyxsb4maQo2locqNsZX3Dp5QoiXhUEsrf5vHkEHlp68ldcoFSzveBhXvIAdNrQVgVhzBQ3q7Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.0.tgz", + "integrity": "sha512-mzevVv5JYyyRIbE6R0mxIniCAZWUGdoNYX97HdVgqChLOl2XRf9I8MarVPewHLmjLTZuWrdQx4ta4sPTLk4tUQ==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1900,17 +1899,16 @@ } }, "node_modules/@graphql-tools/delegate": { - "version": "8.7.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.7.11.tgz", - "integrity": "sha512-Rm9ThQHPOz/78OsoB8pZF+8YJm7cHsFMbGa67Q2hLmEAf2xLmNKvsfKfnxYuLnfmpdRxdSmab/ecHZ0qW/DS5w==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.0.tgz", + "integrity": "sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg==", "dev": true, "dependencies": { - "@graphql-tools/batch-execute": "8.4.10", - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/batch-execute": "8.5.0", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "dataloader": "2.1.0", - "graphql-executor": "0.0.23", - "tslib": "^2.4.0", + "tslib": "~2.4.0", "value-or-promise": "1.0.11" }, "peerDependencies": { @@ -1918,13 +1916,13 @@ } }, "node_modules/@graphql-tools/git-loader": { - "version": "7.1.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.1.17.tgz", - "integrity": "sha512-MTmH8kphIcXzNrsE4Y34tsk+mWrnq1l2zx6VbkssjcdJFLfLCU2/hU4Rxt7Rx96YCHHfdGzwsDJubQhs4RCf9w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.2.0.tgz", + "integrity": "sha512-aFJ5Py9sCIhiSyE+EK4zC+mQ4zRUNGGNwosqlCYNcmhtGFwlXArB13/rdj2b4p3RsmTe31Mso9VfsEZXQ6CGCw==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "is-glob": "4.0.3", "micromatch": "^4.0.4", "tslib": "^2.4.0", @@ -1935,13 +1933,13 @@ } }, "node_modules/@graphql-tools/github-loader": { - "version": "7.2.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.2.23.tgz", - "integrity": "sha512-725ovtuB+uTnNk7cvyItXt31T1GJpdzMN9zUj+NgK3FO9gLkx6mdJfW1Hzc27Fb8is39WaNI232Uf2FLLxuVlA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.3.0.tgz", + "integrity": "sha512-89SI6VuvyRQPN8eBThOqg1FM3+d6gVejbZqp09Af9RpZ9wPG8v3JPqMrdWic/CuwyaGLothNgF6Ydo7W/MK8ZA==", "dev": true, "dependencies": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "cross-undici-fetch": "^0.4.0", "sync-fetch": "0.4.1", "tslib": "^2.4.0" @@ -1951,13 +1949,13 @@ } }, "node_modules/@graphql-tools/graphql-file-loader": { - "version": "7.3.15", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.3.15.tgz", - "integrity": "sha512-Sw9XadW3bxH3ACNXE8Tsjh+BVedRCJTuRn3NfO//zOYQZiC3HDTzq9MvnW1a00SmPCXg47rxQpq9L3bdLX0Ohg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.4.0.tgz", + "integrity": "sha512-r1lslE5GlWO/nbDX82enHjvva7qQiZEIPm+LC9JSgKaYuVoYHuIuIAVYkpBHeaRK1Kbh/86pEhL7PuBZ/cIWSA==", "dev": true, "dependencies": { - "@graphql-tools/import": "6.6.17", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/import": "6.7.0", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1967,15 +1965,15 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.2.10.tgz", - "integrity": "sha512-j2f0Wzqy69XerNlTTTpSF1weLZN2z8NRrqP0lW/J3bKK9IgOy5eNDzcUUGujcn+MvjkpmjRaD4VFuxN75S2ozQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.3.0.tgz", + "integrity": "sha512-GxtgGTSOiQuFc/yNWXsPJ5QEgGlH+4qBf1paqUJtjFpm89dZA+VkdjoIDiFg8fyXGivjZ37+XAUbuu6UlsT+6Q==", "dev": true, "dependencies": { "@babel/parser": "^7.16.8", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -1983,12 +1981,12 @@ } }, "node_modules/@graphql-tools/import": { - "version": "6.6.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.6.17.tgz", - "integrity": "sha512-rnKT2ZaFM+IbSFE0iOGG5sqdaDDv/XHHH43VIpV4ozryKoK9re3qrhEgfDOHaW47zMLGKrHLPCC/QGf0IpJquw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.0.tgz", + "integrity": "sha512-u9JL4fClKKyBTQpgb4QFacYUwgBCs4lW1NaHX0hD2zBdahIYidokBY0QkOqOCEAnWeFqpEmAjB62ulLiAJWc2g==", "dev": true, "dependencies": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "resolve-from": "5.0.0", "tslib": "^2.4.0" }, @@ -1997,12 +1995,12 @@ } }, "node_modules/@graphql-tools/json-file-loader": { - "version": "7.3.15", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.3.15.tgz", - "integrity": "sha512-aPxIWBahYVPAVeGxzAsoEsLm+KVfxPcx/wIUZZX8+02YYmuICNT0TeSAk6Q6iuKMJCS7gtU5eYVdEM7qzC2EfA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.0.tgz", + "integrity": "sha512-6oR7Ulc5iZc5SM3g1Yj91DqSu3TNbfGK/0baE8KyUlvq6KiIuWFWDy13RGnNesftt4RSWvZqGzu/kzXcBHtt+A==", "dev": true, "dependencies": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -2012,13 +2010,13 @@ } }, "node_modules/@graphql-tools/load": { - "version": "7.5.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.5.14.tgz", - "integrity": "sha512-K7H4tKKGFliRyjbG92KCuv2fS2pHlRxkcNcDtuEQlA8dhthS9qGB14Ld4eHDuRq1RvHTS6mye5NE1alyY44K9g==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.7.0.tgz", + "integrity": "sha512-6KX7Z8BtlFScDr0pIac92QZWlPGbHcpNMesX/6Y3Vsp3FeFnAYfzZldXZQcJoW7Yl+gHdFwYVq683wSH64kNrw==", "dev": true, "dependencies": { - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "p-limit": "3.1.0", "tslib": "^2.4.0" }, @@ -2027,12 +2025,12 @@ } }, "node_modules/@graphql-tools/merge": { - "version": "8.2.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.2.14.tgz", - "integrity": "sha512-od6lTF732nwPX91G79eiJf+dyRBHxCaKe7QL4IYeH4d1k+NYqx/ihYpFJNjDaqxmpHH92Hr+TxsP9SYRK3/QKg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz", + "integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==", "dev": true, "dependencies": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -2040,9 +2038,9 @@ } }, "node_modules/@graphql-tools/optimize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.2.1.tgz", - "integrity": "sha512-OAg1TYtYfeQMYlfsxNaY0FbEG4xsjdOHZw7/KFT1BdoCDtvl2NlYKoxh97mgZk2XmjqZULw/PS2E1MOk6IQapw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.3.0.tgz", + "integrity": "sha512-30QOWJoMJEt1De7tAFtWJ6VPrP6SLq+tSQrA3x+WMvCW3q2exq5wPDpvAXOakVKu0y8L2E+YkipC0hcQPBQdLg==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -2052,13 +2050,13 @@ } }, "node_modules/@graphql-tools/prisma-loader": { - "version": "7.1.24", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.1.24.tgz", - "integrity": "sha512-bjezLITZ5far9RuPbDoE7MfU0F/kqZRo+y5mQIPzQXWaXIQSQvdXjBdh+tNWqSRGSbD1aMeZG2wpD96feqs/wA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.0.tgz", + "integrity": "sha512-SOh3Pk6zqmyHPh/279Ur9sa0pGIZi74O5QbSh8dbyuqn8roS5RlT8waWaLa+vm9wKglmCJzHRCwkmvJcNOOZCQ==", "dev": true, "dependencies": { - "@graphql-tools/url-loader": "7.9.25", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/url-loader": "7.11.0", + "@graphql-tools/utils": "8.8.0", "@types/js-yaml": "^4.0.0", "@types/json-stable-stringify": "^1.0.32", "@types/jsonwebtoken": "^8.5.0", @@ -2153,13 +2151,13 @@ } }, "node_modules/@graphql-tools/relay-operation-optimizer": { - "version": "6.4.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.4.14.tgz", - "integrity": "sha512-vqch2M/sIUfMmlRJ4eCupiHlVPXWOPVpHX9yCZwRrpNg0Eaokyc57NSjJuKVV3KcvcJKf03qfMK2PxFbfDvN9A==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.0.tgz", + "integrity": "sha512-snqmdPiM2eBex6pijRFx4H9MPumVd8ZWM3y+aaRwzc73VUNnjHE4NyVZEEIdlbmJ2HoQ9Zrm9aFlHVMK7B59zg==", "dev": true, "dependencies": { "@ardatan/relay-compiler": "12.0.0", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -2167,13 +2165,13 @@ } }, "node_modules/@graphql-tools/schema": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.14.tgz", - "integrity": "sha512-ntA4pKwyyPHFFKcIw17FfqGZAiTNZl0tHieQpPIkN5fPc4oHcXOfaj1vBjtIC/Qn6H7XBBu3l2kMA8FpobdxTQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz", + "integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==", "dev": true, "dependencies": { - "@graphql-tools/merge": "8.2.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/merge": "8.3.0", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" }, @@ -2182,18 +2180,18 @@ } }, "node_modules/@graphql-tools/url-loader": { - "version": "7.9.25", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.9.25.tgz", - "integrity": "sha512-l1C4xym79RbZk3Fe4P2JeNxDogQWPOETZrb+jCHniQ7GT7bjpM20ZcS9oqSNgMyPKQE4vGjV3zRph8vItRQgOg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.11.0.tgz", + "integrity": "sha512-c3L/NW9MRkYct4FoQQubTf/VeBhPm0lry2EsgDdcdKmV+lOh3RQ4DAYMH61cTX++MPeQiECYEwCCm68J52xlMg==", "dev": true, "dependencies": { - "@graphql-tools/delegate": "8.7.11", - "@graphql-tools/utils": "8.6.13", - "@graphql-tools/wrap": "8.4.20", + "@graphql-tools/delegate": "8.8.0", + "@graphql-tools/utils": "8.8.0", + "@graphql-tools/wrap": "8.5.0", "@n1ru4l/graphql-live-query": "^0.9.0", "@types/ws": "^8.0.0", "cross-undici-fetch": "^0.4.0", - "dset": "^3.1.0", + "dset": "^3.1.2", "extract-files": "^11.0.0", "graphql-ws": "^5.4.1", "isomorphic-ws": "^4.0.1", @@ -2208,9 +2206,9 @@ } }, "node_modules/@graphql-tools/utils": { - "version": "8.6.13", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.13.tgz", - "integrity": "sha512-FiVqrQzj4cgz0HcZ3CxUs8NtBGPZFpmsVyIgwmL6YCwIhjJQnT72h8G3/vk5zVfjfesht85YGp0inWWuoCKWzg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -2220,14 +2218,14 @@ } }, "node_modules/@graphql-tools/wrap": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.4.20.tgz", - "integrity": "sha512-qzlrOg9ddaA+30OdG8NU/zDPV2sbJ4Rvool+Zf0nLVRqkAUP/1uxXTQBLgEJKO1xxTlhJ+27FCJ42lG6JG9ZrA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.5.0.tgz", + "integrity": "sha512-I+x9dBNzC135WWPi04ejqurR/zDmhfeGbCftCaYKF4CvgWd+ZaJx4Uc74n1SBegQtrj+KDrOS4HgKwf9vAVR7A==", "dev": true, "dependencies": { - "@graphql-tools/delegate": "8.7.11", - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/delegate": "8.8.0", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" }, @@ -3125,30 +3123,30 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -3419,9 +3417,9 @@ } }, "node_modules/@petamoriken/float16": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.6.3.tgz", - "integrity": "sha512-Yx6Z93kmz3JVPYoPPRFJXnt2/G4kfaxRROcZVVHsE4zOClJXvkOVidv/JfvP6hWn16lykbKYKVzUsId6mqXdGg==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.6.5.tgz", + "integrity": "sha512-m5ox8pj4LfAoTO2GqrqCCD9hNX3I73+Dv2pvdGKFHkNHWQh9Z4q/5Du5+ZBYYotneqrliFWR8olMSdnPhmjU2w==" }, "node_modules/@popperjs/core": { "version": "2.11.5", @@ -3468,13 +3466,13 @@ } }, "node_modules/@sentry/browser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.2.0.tgz", - "integrity": "sha512-QMdRpK7MM8woFOeMTDh7/sXG4lXutgZ/K9SBBMvd5MVaaQnSSE5ZGJMaxMfsiYOISV0UqS7l0V0EaGnv9n3zrQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.3.0.tgz", + "integrity": "sha512-UJMTDbajKNRGrs4ZQNelrPDaATvSZ9uELpPOtPSG6JUvB1BCwGgsgzz55RS0Uqs7B8KhMnDQ0kIn3FMewM4FMg==", "dependencies": { - "@sentry/core": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/core": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "engines": { @@ -3519,13 +3517,13 @@ } }, "node_modules/@sentry/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.2.0.tgz", - "integrity": "sha512-9amsbB9/ePkJRgc0cVXCVW2hQUPImgTqBbnKu4frBXBza+9MBC5W3S8ZyZt2InCK22kuhNVo3z61a8mzCgXoCA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.3.0.tgz", + "integrity": "sha512-EvuWVlYm0F0+BtIEmQiCL31Fw0cfKSwUTmxc99wvouaabpHBr2zCJHRxaXOWzxS705bYBJEQiFDTIHfoOQZMzA==", "dependencies": { - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "engines": { @@ -3538,12 +3536,12 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/hub": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.2.0.tgz", - "integrity": "sha512-uzd+GzD++Z4QopRh3AyRc4jz4AzomMnrXTOmdXgud1BH/Du9AYutVlBc5ZYwqCuJH7QPuAW3ySU3P+16UCinIg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.3.0.tgz", + "integrity": "sha512-0GtTaWf/hoAMoIFY7Ke6eozIbG3FdIPM364sER4SxUQVSklp6AORrV6p82IgWPROK6aj83cPk9Bszgi6RiF/BA==", "dependencies": { - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "engines": { @@ -3556,12 +3554,12 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/integrations": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.2.0.tgz", - "integrity": "sha512-plOD3tTEUqLpu/VNo5bE4ojSm86sYPk6PPxIBQKfKUNOMpJGSqxsLOJesVz5v/jcIW/CYXuMTHqgculovr7t/Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.3.0.tgz", + "integrity": "sha512-FUlg+vN6fJrUWIlYPEg1Y4ZqvtamLVO7cNn3xt20TdGL6OVHdob9v1zDSAvjOKXOiVczew3COLnwUa6uS2+x3Q==", "dependencies": { - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "localforage": "^1.8.1", "tslib": "^1.9.3" }, @@ -3575,18 +3573,18 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/nextjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.2.0.tgz", - "integrity": "sha512-VBb8oN7SzDlWUCNKDMHGV93IhGTDOCvtNJurpo6YmrLb4bcwALPZwYwK8PfZkwaiQy5EDDefc/9TEVLBtQzkmw==", - "dependencies": { - "@sentry/core": "7.2.0", - "@sentry/hub": "7.2.0", - "@sentry/integrations": "7.2.0", - "@sentry/node": "7.2.0", - "@sentry/react": "7.2.0", - "@sentry/tracing": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.3.0.tgz", + "integrity": "sha512-DXoMODQrD0FHpa6sjrPxTFMuPd374IefvDszkCv2eWzO5MxebR8WrgFIwlMN33Tv72nmfogfHwdVDHoIFHQYuw==", + "dependencies": { + "@sentry/core": "7.3.0", + "@sentry/hub": "7.3.0", + "@sentry/integrations": "7.3.0", + "@sentry/node": "7.3.0", + "@sentry/react": "7.3.0", + "@sentry/tracing": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "@sentry/webpack-plugin": "1.18.9", "tslib": "^1.9.3" }, @@ -3610,14 +3608,14 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/node": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.2.0.tgz", - "integrity": "sha512-dSI+2DrT98+eqSAv3QG3jMrq4YefBaxRbSCR9Ok7oLQW2/eskbRWH4mgYssrDXEx319SBYHh90qq/EwCOEkHtw==", - "dependencies": { - "@sentry/core": "7.2.0", - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.3.0.tgz", + "integrity": "sha512-hPqLQMdpL9MeirtKDCgy0ekptWh58CCUhvcoQ2bYstVBsyMMTNTbiQqF/ClzanrScQ5CEuGWnCbKxrFN/S6cQg==", + "dependencies": { + "@sentry/core": "7.3.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -3633,13 +3631,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/react": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.2.0.tgz", - "integrity": "sha512-4QtOaxTWRomL4qwa5X5UR4cM3XnDNtumBu0Lua5d7xV93/1m44hWvdxB4sqf/ueL6dPqmg0YbtgDYzT3loE5vQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.3.0.tgz", + "integrity": "sha512-0CqJSdJfRoVKeku9rLOJlkKPZ4McEkYLmAuIDonx3DO2oOMLkcJqAAQUdPi+zFDPnOfMJWxdHC1EaTT/r66lig==", "dependencies": { - "@sentry/browser": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/browser": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "hoist-non-react-statics": "^3.3.2", "tslib": "^1.9.3" }, @@ -3656,13 +3654,13 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/tracing": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.2.0.tgz", - "integrity": "sha512-Lw5Y5H/kiesTviISFOtnAhjF7+cMX3MnkzdMl5ANwe5lNFPw/php5olzU9hGUqheKeGyYp3sM8BF4GwegGMWQw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.3.0.tgz", + "integrity": "sha512-A+mLEH8jtLkhfyw81EZA1XgI96jh9TIwH9EST3hdfSPgdZQf0A5sV8oVVh/d9Hw7NVb65Va5KhAZDNhcx5QxUA==", "dependencies": { - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "engines": { @@ -3675,19 +3673,19 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@sentry/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.2.0.tgz", - "integrity": "sha512-e6w62C2AmE5ULr9w/BuVaKTRpKUMGWyw4PhcBlSdDRoS47QgURGgDFIvr3VlaDwkUfCbASwSv49fDhKRX3aoew==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.3.0.tgz", + "integrity": "sha512-cGkHdh9+uvbFTj65TjWcXuhe6vQiMY+U+N2GE5xCfmZT9hwuouCASViNsbJMpZqvCg+Yi0fasQLZ71rujiRNOA==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-uUKIsIXyb6ZXBbl/L8UwG4gy8PBXZl5pGCUFRPbns+vi0U6vtmDRDYa1A/7E17VkBJNRPVNJQr9Pq5Yd0I0MRA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.3.0.tgz", + "integrity": "sha512-xUP8TBf2p/c6CN8eFQ7Y+xk0IFrJXsph5ScozqNl/2l/Xs8hd2EiYETqgUklphoYD4J2RxvPwMyqBL15QN6wNg==", "dependencies": { - "@sentry/types": "7.2.0", + "@sentry/types": "7.3.0", "tslib": "^1.9.3" }, "engines": { @@ -3740,11 +3738,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@swc/helpers": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", - "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==" - }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -4129,9 +4122,9 @@ } }, "node_modules/@types/jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.2.tgz", - "integrity": "sha512-5dNM7mMuIrCtNJsFfvUO/5xCrG8swuT2c7ND+sl3XwlwxJf3k7e7o+PRvcFN/iIm8XhCqHqxLOj9yutDDOJoRg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==", "dependencies": { "jest-matcher-utils": "^28.0.0", "pretty-format": "^28.0.0" @@ -4301,9 +4294,9 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", "dependencies": { "@types/react": "*" } @@ -4325,9 +4318,9 @@ "dev": true }, "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.4", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.4.tgz", - "integrity": "sha512-EUCs9PTBOEyfRtLKkKd31YrRCx/9Wxjy2Uqb6IH/KAOr7/vP0i8iClOyxQqjm/UxMGU5r5s2vOBM7vSPQVmabg==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", "dev": true, "dependencies": { "@types/jest": "*" @@ -5853,9 +5846,9 @@ "peer": true }, "node_modules/browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "funding": [ { "type": "opencollective", @@ -5867,11 +5860,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", "node-releases": "^2.0.5", - "picocolors": "^1.0.0" + "update-browserslist-db": "^1.0.0" }, "bin": { "browserslist": "cli.js" @@ -6113,9 +6105,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", "funding": [ { "type": "opencollective", @@ -6205,9 +6197,9 @@ "dev": true }, "node_modules/cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "dependencies": { "cheerio-select": "^2.1.0", @@ -6216,8 +6208,7 @@ "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { "node": ">= 6" @@ -6768,9 +6759,9 @@ } }, "node_modules/core-js": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.2.tgz", - "integrity": "sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ==", + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.3.tgz", + "integrity": "sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6778,9 +6769,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.2.tgz", - "integrity": "sha512-t6u7H4Ff/yZNk+zqTr74UjCcZ3k8ApBryeLLV4rYQd9aF3gqmjjGjjR44ENfeBMH8VVvSynIjAJ0mUuFhzQtrA==", + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6888,9 +6879,9 @@ } }, "node_modules/cross-undici-fetch": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/cross-undici-fetch/-/cross-undici-fetch-0.4.7.tgz", - "integrity": "sha512-e5KZdjHigxFECfw1B7cjmXLm3yT8eiffSJYUSyIWxy6c+f/MGiJsV1NHegZvG23ZgQ0o8rNaZxbtu5NdF5FmwQ==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/cross-undici-fetch/-/cross-undici-fetch-0.4.8.tgz", + "integrity": "sha512-qQbw1GHZaW56ETnNL7nWn5wdsjnZsmPkPImTM3+ymUPwREkzihxgwqESaVF+X2IZ2hkZCxVOTfEOp28xtL/+pw==", "dev": true, "dependencies": { "abort-controller": "^3.0.0", @@ -7453,15 +7444,6 @@ "node": ">=12" } }, - "node_modules/dropzone": { - "version": "6.0.0-beta.2", - "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-6.0.0-beta.2.tgz", - "integrity": "sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==", - "dependencies": { - "@swc/helpers": "^0.2.13", - "just-extend": "^5.0.0" - } - }, "node_modules/dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -7534,9 +7516,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.164", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.164.tgz", - "integrity": "sha512-K7iy5y6XyP9Pzh3uaDti0KC4JUNT6T1tLG5RTOmesqq2YgAJpYYYJ32m+anvZYjCV35llPTEh87kvEV/uSsiyQ==" + "version": "1.4.170", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", + "integrity": "sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==" }, "node_modules/elegant-spinner": { "version": "1.0.1", @@ -8099,22 +8081,23 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", + "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", "dependencies": { - "@babel/runtime": "^7.16.3", + "@babel/runtime": "^7.18.3", "aria-query": "^4.2.2", - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", + "axe-core": "^4.4.2", "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", + "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", + "jsx-ast-utils": "^3.3.1", "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "minimatch": "^3.1.2", + "semver": "^6.3.0" }, "engines": { "node": ">=4.0" @@ -8167,9 +8150,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", + "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", "dependencies": { "array-includes": "^3.1.5", "array.prototype.flatmap": "^1.3.0", @@ -9019,9 +9002,9 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -9890,18 +9873,6 @@ "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/graphql-executor": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/graphql-executor/-/graphql-executor-0.0.23.tgz", - "integrity": "sha512-3Ivlyfjaw3BWmGtUSnMpP/a4dcXCp0mJtj0PiPG14OKUizaMKlSEX+LX2Qed0LrxwniIwvU6B4w/koVjEPyWJg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.16.0 || >=16.0.0" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0" - } - }, "node_modules/graphql-request": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", @@ -10391,9 +10362,9 @@ } }, "node_modules/i18next": { - "version": "21.8.10", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.10.tgz", - "integrity": "sha512-7xRb6y4QlSqZRZ3uA5BIEsLuZpmxpzHLizQyKjDDThOcvdfgICOX7aFoBnh4BSWcLtJamTqSweaOuK22A2xqkA==", + "version": "21.8.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.11.tgz", + "integrity": "sha512-+s8N6kQShwNK+Ua/+VsS/Sji24NUJJLBk9QIucygj1f97f4hPNDWmLP9fQCI4d5+XLfXJ3JctX4g+zJla967Vw==", "funding": [ { "type": "individual", @@ -13385,22 +13356,17 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz", + "integrity": "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==", "dependencies": { - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "object.assign": "^4.1.2" }, "engines": { "node": ">=4.0" } }, - "node_modules/just-extend": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz", - "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==" - }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -13614,9 +13580,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/lint-staged": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.2.tgz", - "integrity": "sha512-qQLfLTh9z34eMzfEHENC+QBskZfxjomrf+snF3xJ4BzilORbD989NLqQ00ughsF/A+PT41e87+WsMFabf9++pQ==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -15768,9 +15734,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", + "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -17081,9 +17047,9 @@ "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "node_modules/react-i18next": { - "version": "11.17.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.17.2.tgz", - "integrity": "sha512-/HG4XSResWDY450cFmoUqLgCYDu8VYMFISGcMnZlxRSV05naj3+F7DoebwnPu6z/akA3Wd0Xe7KGTYdywL9z9g==", + "version": "11.17.3", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.17.3.tgz", + "integrity": "sha512-rIrLl5cLDoHdXFWdjKurRpatA3MPC9j3yTZidv0GmJEea5+XGXl42p7NupA1dmghoLGOXllShNUobgPYtgEcRA==", "dependencies": { "@babel/runtime": "^7.14.5", "html-escaper": "^2.0.2", @@ -17108,9 +17074,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-leaflet": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.0.0.tgz", - "integrity": "sha512-qJJvoCNe12XHSWVUwhXYmMObPoSYy8h/hn0aDNvcBuq3O8zmVI5S2RdabhaDg/iWMCJ2jbCWZWtIU5VtztO9sg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.0.1.tgz", + "integrity": "sha512-CpMQ99+52AklQofrGrVQHqHSyY41wqax1wT65XdyEkky/26V/j+Sv+fp0/wOaqPvdEMaSO/Ovj4dS7bGqtYpwQ==", "dependencies": { "@react-leaflet/core": "^2.0.0" }, @@ -17860,15 +17826,15 @@ } }, "node_modules/sharp": { - "version": "0.30.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.6.tgz", - "integrity": "sha512-lSdVxFxcndzcXggDrak6ozdGJgmIgES9YVZWtAFrwi+a/H5vModaf51TghBtMPw+71sLxUsTy2j+aB7qLIODQg==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", + "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", "hasInstallScript": true, "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.1", "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.0", + "prebuild-install": "^7.1.1", "semver": "^7.3.7", "simple-get": "^4.0.1", "tar-fs": "^2.1.1", @@ -18852,9 +18818,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.3.tgz", - "integrity": "sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", + "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -19940,6 +19906,31 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/upper-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", @@ -21389,9 +21380,9 @@ } }, "@apollo/client": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.8.tgz", - "integrity": "sha512-p/J6KRHZZPGX0bZtMLvRFAIcReYsRYGg+Jz9MkgabWPy0L8rwgyolq9fvKsNqkH888Tj9Yvwrxz9V84KfcORJA==", + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.6.9.tgz", + "integrity": "sha512-Y1yu8qa2YeaCUBVuw08x8NHenFi0sw2I3KCu7Kw9mDSu86HmmtHJkCAifKVrN2iPgDTW/BbP3EpSV8/EQCcxZA==", "requires": { "@graphql-typed-document-node/core": "^3.1.1", "@wry/context": "^0.6.0", @@ -21596,11 +21587,11 @@ }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "requires": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } @@ -22682,65 +22673,64 @@ } }, "@graphql-tools/apollo-engine-loader": { - "version": "7.2.19", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.2.19.tgz", - "integrity": "sha512-4wb32BZjSAsPYIXxqqhnF1lYrLxNIPx2M3gPWU9BSEJNGhe7noDxfXXoWoGC0vwpliX30eBdbGU4a6Ab9RSkwQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.0.tgz", + "integrity": "sha512-ItYIgnnsuhR7DBY2TjsDT0ryvdzHqHvT9T5pHoMz8iJM4liBbSyjpWVtjdTeZoVJ00+sqvKc5BudInN6Oml2Yw==", "dev": true, "requires": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "cross-undici-fetch": "^0.4.0", "sync-fetch": "0.4.1", "tslib": "^2.4.0" } }, "@graphql-tools/batch-execute": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.4.10.tgz", - "integrity": "sha512-rugHElhKYZgb6w3mBuNdgjMIo0LW5QbwIwJ1bc9VKWh51dCQmNwJS1Nx8qFWUjhmjVJWbvKWqYb6Z7wTGnOc3g==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.0.tgz", + "integrity": "sha512-S9/76X4uYIbVlJyRzXhCBbTJvVD0VvaWNqGiKgkITxlq4aBsTOHVuE84OSi3E1QKP3PTiJYrgMIn220iFOkyQw==", "dev": true, "requires": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "dataloader": "2.1.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" } }, "@graphql-tools/code-file-loader": { - "version": "7.2.18", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.2.18.tgz", - "integrity": "sha512-zHJ2SPuWqK2/rlyxsb4maQo2locqNsZX3Dp5QoiXhUEsrf5vHkEHlp68ldcoFSzveBhXvIAdNrQVgVhzBQ3q7Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.0.tgz", + "integrity": "sha512-mzevVv5JYyyRIbE6R0mxIniCAZWUGdoNYX97HdVgqChLOl2XRf9I8MarVPewHLmjLTZuWrdQx4ta4sPTLk4tUQ==", "dev": true, "requires": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" } }, "@graphql-tools/delegate": { - "version": "8.7.11", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.7.11.tgz", - "integrity": "sha512-Rm9ThQHPOz/78OsoB8pZF+8YJm7cHsFMbGa67Q2hLmEAf2xLmNKvsfKfnxYuLnfmpdRxdSmab/ecHZ0qW/DS5w==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-8.8.0.tgz", + "integrity": "sha512-dbhfOI8rQXPcowXrbwHLOBY9oGi7qxtlrXF4RuRXmjqGTs2AgogdOE3Ep1+6wFD7qYTuFmHXZ8Cl0PmhoZUgrg==", "dev": true, "requires": { - "@graphql-tools/batch-execute": "8.4.10", - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/batch-execute": "8.5.0", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "dataloader": "2.1.0", - "graphql-executor": "0.0.23", - "tslib": "^2.4.0", + "tslib": "~2.4.0", "value-or-promise": "1.0.11" } }, "@graphql-tools/git-loader": { - "version": "7.1.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.1.17.tgz", - "integrity": "sha512-MTmH8kphIcXzNrsE4Y34tsk+mWrnq1l2zx6VbkssjcdJFLfLCU2/hU4Rxt7Rx96YCHHfdGzwsDJubQhs4RCf9w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.2.0.tgz", + "integrity": "sha512-aFJ5Py9sCIhiSyE+EK4zC+mQ4zRUNGGNwosqlCYNcmhtGFwlXArB13/rdj2b4p3RsmTe31Mso9VfsEZXQ6CGCw==", "dev": true, "requires": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "is-glob": "4.0.3", "micromatch": "^4.0.4", "tslib": "^2.4.0", @@ -22748,106 +22738,106 @@ } }, "@graphql-tools/github-loader": { - "version": "7.2.23", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.2.23.tgz", - "integrity": "sha512-725ovtuB+uTnNk7cvyItXt31T1GJpdzMN9zUj+NgK3FO9gLkx6mdJfW1Hzc27Fb8is39WaNI232Uf2FLLxuVlA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.3.0.tgz", + "integrity": "sha512-89SI6VuvyRQPN8eBThOqg1FM3+d6gVejbZqp09Af9RpZ9wPG8v3JPqMrdWic/CuwyaGLothNgF6Ydo7W/MK8ZA==", "dev": true, "requires": { - "@graphql-tools/graphql-tag-pluck": "7.2.10", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/graphql-tag-pluck": "7.3.0", + "@graphql-tools/utils": "8.8.0", "cross-undici-fetch": "^0.4.0", "sync-fetch": "0.4.1", "tslib": "^2.4.0" } }, "@graphql-tools/graphql-file-loader": { - "version": "7.3.15", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.3.15.tgz", - "integrity": "sha512-Sw9XadW3bxH3ACNXE8Tsjh+BVedRCJTuRn3NfO//zOYQZiC3HDTzq9MvnW1a00SmPCXg47rxQpq9L3bdLX0Ohg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.4.0.tgz", + "integrity": "sha512-r1lslE5GlWO/nbDX82enHjvva7qQiZEIPm+LC9JSgKaYuVoYHuIuIAVYkpBHeaRK1Kbh/86pEhL7PuBZ/cIWSA==", "dev": true, "requires": { - "@graphql-tools/import": "6.6.17", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/import": "6.7.0", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" } }, "@graphql-tools/graphql-tag-pluck": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.2.10.tgz", - "integrity": "sha512-j2f0Wzqy69XerNlTTTpSF1weLZN2z8NRrqP0lW/J3bKK9IgOy5eNDzcUUGujcn+MvjkpmjRaD4VFuxN75S2ozQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.3.0.tgz", + "integrity": "sha512-GxtgGTSOiQuFc/yNWXsPJ5QEgGlH+4qBf1paqUJtjFpm89dZA+VkdjoIDiFg8fyXGivjZ37+XAUbuu6UlsT+6Q==", "dev": true, "requires": { "@babel/parser": "^7.16.8", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" } }, "@graphql-tools/import": { - "version": "6.6.17", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.6.17.tgz", - "integrity": "sha512-rnKT2ZaFM+IbSFE0iOGG5sqdaDDv/XHHH43VIpV4ozryKoK9re3qrhEgfDOHaW47zMLGKrHLPCC/QGf0IpJquw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.0.tgz", + "integrity": "sha512-u9JL4fClKKyBTQpgb4QFacYUwgBCs4lW1NaHX0hD2zBdahIYidokBY0QkOqOCEAnWeFqpEmAjB62ulLiAJWc2g==", "dev": true, "requires": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "resolve-from": "5.0.0", "tslib": "^2.4.0" } }, "@graphql-tools/json-file-loader": { - "version": "7.3.15", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.3.15.tgz", - "integrity": "sha512-aPxIWBahYVPAVeGxzAsoEsLm+KVfxPcx/wIUZZX8+02YYmuICNT0TeSAk6Q6iuKMJCS7gtU5eYVdEM7qzC2EfA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.0.tgz", + "integrity": "sha512-6oR7Ulc5iZc5SM3g1Yj91DqSu3TNbfGK/0baE8KyUlvq6KiIuWFWDy13RGnNesftt4RSWvZqGzu/kzXcBHtt+A==", "dev": true, "requires": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" } }, "@graphql-tools/load": { - "version": "7.5.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.5.14.tgz", - "integrity": "sha512-K7H4tKKGFliRyjbG92KCuv2fS2pHlRxkcNcDtuEQlA8dhthS9qGB14Ld4eHDuRq1RvHTS6mye5NE1alyY44K9g==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.7.0.tgz", + "integrity": "sha512-6KX7Z8BtlFScDr0pIac92QZWlPGbHcpNMesX/6Y3Vsp3FeFnAYfzZldXZQcJoW7Yl+gHdFwYVq683wSH64kNrw==", "dev": true, "requires": { - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "p-limit": "3.1.0", "tslib": "^2.4.0" } }, "@graphql-tools/merge": { - "version": "8.2.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.2.14.tgz", - "integrity": "sha512-od6lTF732nwPX91G79eiJf+dyRBHxCaKe7QL4IYeH4d1k+NYqx/ihYpFJNjDaqxmpHH92Hr+TxsP9SYRK3/QKg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz", + "integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==", "dev": true, "requires": { - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" } }, "@graphql-tools/optimize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.2.1.tgz", - "integrity": "sha512-OAg1TYtYfeQMYlfsxNaY0FbEG4xsjdOHZw7/KFT1BdoCDtvl2NlYKoxh97mgZk2XmjqZULw/PS2E1MOk6IQapw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.3.0.tgz", + "integrity": "sha512-30QOWJoMJEt1De7tAFtWJ6VPrP6SLq+tSQrA3x+WMvCW3q2exq5wPDpvAXOakVKu0y8L2E+YkipC0hcQPBQdLg==", "dev": true, "requires": { "tslib": "^2.4.0" } }, "@graphql-tools/prisma-loader": { - "version": "7.1.24", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.1.24.tgz", - "integrity": "sha512-bjezLITZ5far9RuPbDoE7MfU0F/kqZRo+y5mQIPzQXWaXIQSQvdXjBdh+tNWqSRGSbD1aMeZG2wpD96feqs/wA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.0.tgz", + "integrity": "sha512-SOh3Pk6zqmyHPh/279Ur9sa0pGIZi74O5QbSh8dbyuqn8roS5RlT8waWaLa+vm9wKglmCJzHRCwkmvJcNOOZCQ==", "dev": true, "requires": { - "@graphql-tools/url-loader": "7.9.25", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/url-loader": "7.11.0", + "@graphql-tools/utils": "8.8.0", "@types/js-yaml": "^4.0.0", "@types/json-stable-stringify": "^1.0.32", "@types/jsonwebtoken": "^8.5.0", @@ -22920,41 +22910,41 @@ } }, "@graphql-tools/relay-operation-optimizer": { - "version": "6.4.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.4.14.tgz", - "integrity": "sha512-vqch2M/sIUfMmlRJ4eCupiHlVPXWOPVpHX9yCZwRrpNg0Eaokyc57NSjJuKVV3KcvcJKf03qfMK2PxFbfDvN9A==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.0.tgz", + "integrity": "sha512-snqmdPiM2eBex6pijRFx4H9MPumVd8ZWM3y+aaRwzc73VUNnjHE4NyVZEEIdlbmJ2HoQ9Zrm9aFlHVMK7B59zg==", "dev": true, "requires": { "@ardatan/relay-compiler": "12.0.0", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0" } }, "@graphql-tools/schema": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.14.tgz", - "integrity": "sha512-ntA4pKwyyPHFFKcIw17FfqGZAiTNZl0tHieQpPIkN5fPc4oHcXOfaj1vBjtIC/Qn6H7XBBu3l2kMA8FpobdxTQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz", + "integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==", "dev": true, "requires": { - "@graphql-tools/merge": "8.2.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/merge": "8.3.0", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" } }, "@graphql-tools/url-loader": { - "version": "7.9.25", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.9.25.tgz", - "integrity": "sha512-l1C4xym79RbZk3Fe4P2JeNxDogQWPOETZrb+jCHniQ7GT7bjpM20ZcS9oqSNgMyPKQE4vGjV3zRph8vItRQgOg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.11.0.tgz", + "integrity": "sha512-c3L/NW9MRkYct4FoQQubTf/VeBhPm0lry2EsgDdcdKmV+lOh3RQ4DAYMH61cTX++MPeQiECYEwCCm68J52xlMg==", "dev": true, "requires": { - "@graphql-tools/delegate": "8.7.11", - "@graphql-tools/utils": "8.6.13", - "@graphql-tools/wrap": "8.4.20", + "@graphql-tools/delegate": "8.8.0", + "@graphql-tools/utils": "8.8.0", + "@graphql-tools/wrap": "8.5.0", "@n1ru4l/graphql-live-query": "^0.9.0", "@types/ws": "^8.0.0", "cross-undici-fetch": "^0.4.0", - "dset": "^3.1.0", + "dset": "^3.1.2", "extract-files": "^11.0.0", "graphql-ws": "^5.4.1", "isomorphic-ws": "^4.0.1", @@ -22966,23 +22956,23 @@ } }, "@graphql-tools/utils": { - "version": "8.6.13", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.13.tgz", - "integrity": "sha512-FiVqrQzj4cgz0HcZ3CxUs8NtBGPZFpmsVyIgwmL6YCwIhjJQnT72h8G3/vk5zVfjfesht85YGp0inWWuoCKWzg==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz", + "integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==", "dev": true, "requires": { "tslib": "^2.4.0" } }, "@graphql-tools/wrap": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.4.20.tgz", - "integrity": "sha512-qzlrOg9ddaA+30OdG8NU/zDPV2sbJ4Rvool+Zf0nLVRqkAUP/1uxXTQBLgEJKO1xxTlhJ+27FCJ42lG6JG9ZrA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-8.5.0.tgz", + "integrity": "sha512-I+x9dBNzC135WWPi04ejqurR/zDmhfeGbCftCaYKF4CvgWd+ZaJx4Uc74n1SBegQtrj+KDrOS4HgKwf9vAVR7A==", "dev": true, "requires": { - "@graphql-tools/delegate": "8.7.11", - "@graphql-tools/schema": "8.3.14", - "@graphql-tools/utils": "8.6.13", + "@graphql-tools/delegate": "8.8.0", + "@graphql-tools/schema": "8.5.0", + "@graphql-tools/utils": "8.8.0", "tslib": "^2.4.0", "value-or-promise": "1.0.11" } @@ -23653,24 +23643,24 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" }, "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -23815,9 +23805,9 @@ } }, "@petamoriken/float16": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.6.3.tgz", - "integrity": "sha512-Yx6Z93kmz3JVPYoPPRFJXnt2/G4kfaxRROcZVVHsE4zOClJXvkOVidv/JfvP6hWn16lykbKYKVzUsId6mqXdGg==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.6.5.tgz", + "integrity": "sha512-m5ox8pj4LfAoTO2GqrqCCD9hNX3I73+Dv2pvdGKFHkNHWQh9Z4q/5Du5+ZBYYotneqrliFWR8olMSdnPhmjU2w==" }, "@popperjs/core": { "version": "2.11.5", @@ -23845,13 +23835,13 @@ } }, "@sentry/browser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.2.0.tgz", - "integrity": "sha512-QMdRpK7MM8woFOeMTDh7/sXG4lXutgZ/K9SBBMvd5MVaaQnSSE5ZGJMaxMfsiYOISV0UqS7l0V0EaGnv9n3zrQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.3.0.tgz", + "integrity": "sha512-UJMTDbajKNRGrs4ZQNelrPDaATvSZ9uELpPOtPSG6JUvB1BCwGgsgzz55RS0Uqs7B8KhMnDQ0kIn3FMewM4FMg==", "requires": { - "@sentry/core": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/core": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "dependencies": { @@ -23887,13 +23877,13 @@ } }, "@sentry/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.2.0.tgz", - "integrity": "sha512-9amsbB9/ePkJRgc0cVXCVW2hQUPImgTqBbnKu4frBXBza+9MBC5W3S8ZyZt2InCK22kuhNVo3z61a8mzCgXoCA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.3.0.tgz", + "integrity": "sha512-EvuWVlYm0F0+BtIEmQiCL31Fw0cfKSwUTmxc99wvouaabpHBr2zCJHRxaXOWzxS705bYBJEQiFDTIHfoOQZMzA==", "requires": { - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "dependencies": { @@ -23905,12 +23895,12 @@ } }, "@sentry/hub": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.2.0.tgz", - "integrity": "sha512-uzd+GzD++Z4QopRh3AyRc4jz4AzomMnrXTOmdXgud1BH/Du9AYutVlBc5ZYwqCuJH7QPuAW3ySU3P+16UCinIg==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-7.3.0.tgz", + "integrity": "sha512-0GtTaWf/hoAMoIFY7Ke6eozIbG3FdIPM364sER4SxUQVSklp6AORrV6p82IgWPROK6aj83cPk9Bszgi6RiF/BA==", "requires": { - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "dependencies": { @@ -23922,12 +23912,12 @@ } }, "@sentry/integrations": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.2.0.tgz", - "integrity": "sha512-plOD3tTEUqLpu/VNo5bE4ojSm86sYPk6PPxIBQKfKUNOMpJGSqxsLOJesVz5v/jcIW/CYXuMTHqgculovr7t/Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.3.0.tgz", + "integrity": "sha512-FUlg+vN6fJrUWIlYPEg1Y4ZqvtamLVO7cNn3xt20TdGL6OVHdob9v1zDSAvjOKXOiVczew3COLnwUa6uS2+x3Q==", "requires": { - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "localforage": "^1.8.1", "tslib": "^1.9.3" }, @@ -23940,18 +23930,18 @@ } }, "@sentry/nextjs": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.2.0.tgz", - "integrity": "sha512-VBb8oN7SzDlWUCNKDMHGV93IhGTDOCvtNJurpo6YmrLb4bcwALPZwYwK8PfZkwaiQy5EDDefc/9TEVLBtQzkmw==", - "requires": { - "@sentry/core": "7.2.0", - "@sentry/hub": "7.2.0", - "@sentry/integrations": "7.2.0", - "@sentry/node": "7.2.0", - "@sentry/react": "7.2.0", - "@sentry/tracing": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.3.0.tgz", + "integrity": "sha512-DXoMODQrD0FHpa6sjrPxTFMuPd374IefvDszkCv2eWzO5MxebR8WrgFIwlMN33Tv72nmfogfHwdVDHoIFHQYuw==", + "requires": { + "@sentry/core": "7.3.0", + "@sentry/hub": "7.3.0", + "@sentry/integrations": "7.3.0", + "@sentry/node": "7.3.0", + "@sentry/react": "7.3.0", + "@sentry/tracing": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "@sentry/webpack-plugin": "1.18.9", "tslib": "^1.9.3" }, @@ -23964,14 +23954,14 @@ } }, "@sentry/node": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.2.0.tgz", - "integrity": "sha512-dSI+2DrT98+eqSAv3QG3jMrq4YefBaxRbSCR9Ok7oLQW2/eskbRWH4mgYssrDXEx319SBYHh90qq/EwCOEkHtw==", - "requires": { - "@sentry/core": "7.2.0", - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.3.0.tgz", + "integrity": "sha512-hPqLQMdpL9MeirtKDCgy0ekptWh58CCUhvcoQ2bYstVBsyMMTNTbiQqF/ClzanrScQ5CEuGWnCbKxrFN/S6cQg==", + "requires": { + "@sentry/core": "7.3.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -23986,13 +23976,13 @@ } }, "@sentry/react": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.2.0.tgz", - "integrity": "sha512-4QtOaxTWRomL4qwa5X5UR4cM3XnDNtumBu0Lua5d7xV93/1m44hWvdxB4sqf/ueL6dPqmg0YbtgDYzT3loE5vQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.3.0.tgz", + "integrity": "sha512-0CqJSdJfRoVKeku9rLOJlkKPZ4McEkYLmAuIDonx3DO2oOMLkcJqAAQUdPi+zFDPnOfMJWxdHC1EaTT/r66lig==", "requires": { - "@sentry/browser": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/browser": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "hoist-non-react-statics": "^3.3.2", "tslib": "^1.9.3" }, @@ -24005,13 +23995,13 @@ } }, "@sentry/tracing": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.2.0.tgz", - "integrity": "sha512-Lw5Y5H/kiesTviISFOtnAhjF7+cMX3MnkzdMl5ANwe5lNFPw/php5olzU9hGUqheKeGyYp3sM8BF4GwegGMWQw==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.3.0.tgz", + "integrity": "sha512-A+mLEH8jtLkhfyw81EZA1XgI96jh9TIwH9EST3hdfSPgdZQf0A5sV8oVVh/d9Hw7NVb65Va5KhAZDNhcx5QxUA==", "requires": { - "@sentry/hub": "7.2.0", - "@sentry/types": "7.2.0", - "@sentry/utils": "7.2.0", + "@sentry/hub": "7.3.0", + "@sentry/types": "7.3.0", + "@sentry/utils": "7.3.0", "tslib": "^1.9.3" }, "dependencies": { @@ -24023,16 +24013,16 @@ } }, "@sentry/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.2.0.tgz", - "integrity": "sha512-e6w62C2AmE5ULr9w/BuVaKTRpKUMGWyw4PhcBlSdDRoS47QgURGgDFIvr3VlaDwkUfCbASwSv49fDhKRX3aoew==" + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.3.0.tgz", + "integrity": "sha512-cGkHdh9+uvbFTj65TjWcXuhe6vQiMY+U+N2GE5xCfmZT9hwuouCASViNsbJMpZqvCg+Yi0fasQLZ71rujiRNOA==" }, "@sentry/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-uUKIsIXyb6ZXBbl/L8UwG4gy8PBXZl5pGCUFRPbns+vi0U6vtmDRDYa1A/7E17VkBJNRPVNJQr9Pq5Yd0I0MRA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.3.0.tgz", + "integrity": "sha512-xUP8TBf2p/c6CN8eFQ7Y+xk0IFrJXsph5ScozqNl/2l/Xs8hd2EiYETqgUklphoYD4J2RxvPwMyqBL15QN6wNg==", "requires": { - "@sentry/types": "7.2.0", + "@sentry/types": "7.3.0", "tslib": "^1.9.3" }, "dependencies": { @@ -24078,11 +24068,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@swc/helpers": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", - "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==" - }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -24398,9 +24383,9 @@ } }, "@types/jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.2.tgz", - "integrity": "sha512-5dNM7mMuIrCtNJsFfvUO/5xCrG8swuT2c7ND+sl3XwlwxJf3k7e7o+PRvcFN/iIm8XhCqHqxLOj9yutDDOJoRg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz", + "integrity": "sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==", "requires": { "jest-matcher-utils": "^28.0.0", "pretty-format": "^28.0.0" @@ -24563,9 +24548,9 @@ } }, "@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", "requires": { "@types/react": "*" } @@ -24587,9 +24572,9 @@ "dev": true }, "@types/testing-library__jest-dom": { - "version": "5.14.4", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.4.tgz", - "integrity": "sha512-EUCs9PTBOEyfRtLKkKd31YrRCx/9Wxjy2Uqb6IH/KAOr7/vP0i8iClOyxQqjm/UxMGU5r5s2vOBM7vSPQVmabg==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", "dev": true, "requires": { "@types/jest": "*" @@ -25814,15 +25799,14 @@ } }, "browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", + "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", "requires": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", + "caniuse-lite": "^1.0.30001358", + "electron-to-chromium": "^1.4.164", "node-releases": "^2.0.5", - "picocolors": "^1.0.0" + "update-browserslist-db": "^1.0.0" } }, "bser": { @@ -26009,9 +25993,9 @@ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" + "version": "1.0.30001359", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", + "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==" }, "capital-case": { "version": "1.0.4", @@ -26085,9 +26069,9 @@ "dev": true }, "cheerio": { - "version": "1.0.0-rc.11", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.11.tgz", - "integrity": "sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==", + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, "requires": { "cheerio-select": "^2.1.0", @@ -26096,8 +26080,7 @@ "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "tslib": "^2.4.0" + "parse5-htmlparser2-tree-adapter": "^7.0.0" } }, "cheerio-select": { @@ -26539,14 +26522,14 @@ "peer": true }, "core-js": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.2.tgz", - "integrity": "sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ==" + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.3.tgz", + "integrity": "sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q==" }, "core-js-pure": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.2.tgz", - "integrity": "sha512-t6u7H4Ff/yZNk+zqTr74UjCcZ3k8ApBryeLLV4rYQd9aF3gqmjjGjjR44ENfeBMH8VVvSynIjAJ0mUuFhzQtrA==" + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==" }, "core-util-is": { "version": "1.0.3", @@ -26645,9 +26628,9 @@ } }, "cross-undici-fetch": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/cross-undici-fetch/-/cross-undici-fetch-0.4.7.tgz", - "integrity": "sha512-e5KZdjHigxFECfw1B7cjmXLm3yT8eiffSJYUSyIWxy6c+f/MGiJsV1NHegZvG23ZgQ0o8rNaZxbtu5NdF5FmwQ==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/cross-undici-fetch/-/cross-undici-fetch-0.4.8.tgz", + "integrity": "sha512-qQbw1GHZaW56ETnNL7nWn5wdsjnZsmPkPImTM3+ymUPwREkzihxgwqESaVF+X2IZ2hkZCxVOTfEOp28xtL/+pw==", "dev": true, "requires": { "abort-controller": "^3.0.0", @@ -27095,15 +27078,6 @@ "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", "dev": true }, - "dropzone": { - "version": "6.0.0-beta.2", - "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-6.0.0-beta.2.tgz", - "integrity": "sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==", - "requires": { - "@swc/helpers": "^0.2.13", - "just-extend": "^5.0.0" - } - }, "dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -27175,9 +27149,9 @@ } }, "electron-to-chromium": { - "version": "1.4.164", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.164.tgz", - "integrity": "sha512-K7iy5y6XyP9Pzh3uaDti0KC4JUNT6T1tLG5RTOmesqq2YgAJpYYYJ32m+anvZYjCV35llPTEh87kvEV/uSsiyQ==" + "version": "1.4.170", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", + "integrity": "sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==" }, "elegant-spinner": { "version": "1.0.1", @@ -27704,22 +27678,23 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", + "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", "requires": { - "@babel/runtime": "^7.16.3", + "@babel/runtime": "^7.18.3", "aria-query": "^4.2.2", - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", + "axe-core": "^4.4.2", "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", + "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", + "jsx-ast-utils": "^3.3.1", "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "minimatch": "^3.1.2", + "semver": "^6.3.0" }, "dependencies": { "aria-query": { @@ -27750,9 +27725,9 @@ } }, "eslint-plugin-react": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", + "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", "requires": { "array-includes": "^3.1.5", "array.prototype.flatmap": "^1.3.0", @@ -28307,9 +28282,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" }, "flush-write-stream": { "version": "1.1.1", @@ -29047,13 +29022,6 @@ "string-env-interpolation": "1.0.1" } }, - "graphql-executor": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/graphql-executor/-/graphql-executor-0.0.23.tgz", - "integrity": "sha512-3Ivlyfjaw3BWmGtUSnMpP/a4dcXCp0mJtj0PiPG14OKUizaMKlSEX+LX2Qed0LrxwniIwvU6B4w/koVjEPyWJg==", - "dev": true, - "requires": {} - }, "graphql-request": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-4.3.0.tgz", @@ -29446,9 +29414,9 @@ "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==" }, "i18next": { - "version": "21.8.10", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.10.tgz", - "integrity": "sha512-7xRb6y4QlSqZRZ3uA5BIEsLuZpmxpzHLizQyKjDDThOcvdfgICOX7aFoBnh4BSWcLtJamTqSweaOuK22A2xqkA==", + "version": "21.8.11", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.8.11.tgz", + "integrity": "sha512-+s8N6kQShwNK+Ua/+VsS/Sji24NUJJLBk9QIucygj1f97f4hPNDWmLP9fQCI4d5+XLfXJ3JctX4g+zJla967Vw==", "requires": { "@babel/runtime": "^7.17.2" } @@ -31655,19 +31623,14 @@ } }, "jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz", + "integrity": "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==", "requires": { - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "object.assign": "^4.1.2" } }, - "just-extend": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz", - "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==" - }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -31855,9 +31818,9 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "lint-staged": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.2.tgz", - "integrity": "sha512-qQLfLTh9z34eMzfEHENC+QBskZfxjomrf+snF3xJ4BzilORbD989NLqQ00ughsF/A+PT41e87+WsMFabf9++pQ==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -33522,9 +33485,9 @@ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", + "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==" }, "object-assign": { "version": "4.1.1", @@ -34526,9 +34489,9 @@ "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "react-i18next": { - "version": "11.17.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.17.2.tgz", - "integrity": "sha512-/HG4XSResWDY450cFmoUqLgCYDu8VYMFISGcMnZlxRSV05naj3+F7DoebwnPu6z/akA3Wd0Xe7KGTYdywL9z9g==", + "version": "11.17.3", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.17.3.tgz", + "integrity": "sha512-rIrLl5cLDoHdXFWdjKurRpatA3MPC9j3yTZidv0GmJEea5+XGXl42p7NupA1dmghoLGOXllShNUobgPYtgEcRA==", "requires": { "@babel/runtime": "^7.14.5", "html-escaper": "^2.0.2", @@ -34541,9 +34504,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-leaflet": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.0.0.tgz", - "integrity": "sha512-qJJvoCNe12XHSWVUwhXYmMObPoSYy8h/hn0aDNvcBuq3O8zmVI5S2RdabhaDg/iWMCJ2jbCWZWtIU5VtztO9sg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.0.1.tgz", + "integrity": "sha512-CpMQ99+52AklQofrGrVQHqHSyY41wqax1wT65XdyEkky/26V/j+Sv+fp0/wOaqPvdEMaSO/Ovj4dS7bGqtYpwQ==", "requires": { "@react-leaflet/core": "^2.0.0" } @@ -35133,14 +35096,14 @@ } }, "sharp": { - "version": "0.30.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.6.tgz", - "integrity": "sha512-lSdVxFxcndzcXggDrak6ozdGJgmIgES9YVZWtAFrwi+a/H5vModaf51TghBtMPw+71sLxUsTy2j+aB7qLIODQg==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.7.tgz", + "integrity": "sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==", "requires": { "color": "^4.2.3", "detect-libc": "^2.0.1", "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.0", + "prebuild-install": "^7.1.1", "semver": "^7.3.7", "simple-get": "^4.0.1", "tar-fs": "^2.1.1", @@ -35911,9 +35874,9 @@ } }, "tailwindcss": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.3.tgz", - "integrity": "sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", + "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", "requires": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -36767,6 +36730,15 @@ "optional": true, "peer": true }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "upper-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", diff --git a/package.json b/package.json index d1410ff..a30f1c6 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "clsx": "^1.1.1", "csv-parse": "^5.2.0", "deepmerge": "^4.2.2", - "dropzone": "^6.0.0-beta.2", "eslint": "^8.18.0", "eslint-config-next": "^12.1.6", "eslint-config-prettier": "^8.5.0", diff --git a/public/locales/en/messages.json b/public/locales/en/messages.json index c1513be..4cc25ca 100644 --- a/public/locales/en/messages.json +++ b/public/locales/en/messages.json @@ -51,6 +51,7 @@ "Breadcrumb": "Breadcrumb", "Cancel": "Cancel", "Category column": "Category column", + "Category values": "Category values", "Change": "Change", "Change owner": "Change owner", "Change the owner of this project": "Change the owner of this project", @@ -159,12 +160,15 @@ "Parameters": "Parameters", "Password": "Password", "Pending": "Pending", + "Percentile": "Percentile", + "Percentiles": "Percentiles", "Population": "Population", "Previous": "Previous", "Project": "Project", "Project name": "Project name", "Projects": "Projects", "Queued": "Queued", + "Range": "Range", "Raster": "Raster", "Raster file": "Raster file", "Ready": "Ready", @@ -206,6 +210,7 @@ "Teams": "Teams", "The metadata of your dataset has not been extracted yet.": "The metadata of your dataset has not been extracted yet.", "The metadata of your dataset have not been extracted yet.": "The metadata of your dataset have not been extracted yet.", + "The preview of this dataset is not yet ready": "The preview of this dataset is not yet ready", "The spatial resolution refers to the linear spacing of a measurement.": "The spatial resolution refers to the linear spacing of a measurement.", "The user or team responsible for this project": "The user or team responsible for this project", "The user that created this project": "The user that created this project", @@ -235,6 +240,7 @@ "Travel Scenario": "Travel Scenario", "Travel Times": "Travel Times", "Type": "Type", + "Unique values": "Unique values", "Unknown": "Unknown", "Unknown error": "Unknown error", "Unknown project": "Unknown project", @@ -252,6 +258,7 @@ "Users": "Users", "Valid": "Valid", "Validating": "Validating", + "Value": "Value", "Vector": "Vector", "View all": "View all", "Viewer": "Viewer", diff --git a/public/locales/fr/messages.json b/public/locales/fr/messages.json index f3c2852..589b72b 100644 --- a/public/locales/fr/messages.json +++ b/public/locales/fr/messages.json @@ -54,6 +54,7 @@ "Breadcrumb": "", "Cancel": "", "Category column": "", + "Category values": "", "Change": "", "Change owner": "", "Change the owner of this project": "", @@ -162,12 +163,15 @@ "Parameters": "", "Password": "", "Pending": "", + "Percentile": "", + "Percentiles": "", "Population": "", "Previous": "", "Project": "", "Project name": "", "Projects": "", "Queued": "", + "Range": "", "Raster": "", "Raster file": "", "Ready": "", @@ -209,6 +213,7 @@ "Teams": "", "The metadata of your dataset has not been extracted yet.": "", "The metadata of your dataset have not been extracted yet.": "", + "The preview of this dataset is not yet ready": "", "The spatial resolution refers to the linear spacing of a measurement.": "", "The user or team responsible for this project": "", "The user that created this project": "", @@ -238,6 +243,7 @@ "Travel Scenario": "", "Travel Times": "", "Type": "", + "Unique values": "", "Unknown": "", "Unknown error": "", "Unknown project": "", @@ -255,6 +261,7 @@ "Users": "", "Valid": "", "Validating": "", + "Value": "", "Vector": "", "View all": "", "Viewer": "", diff --git a/schema.graphql b/schema.graphql index 33e0cbe..8398825 100644 --- a/schema.graphql +++ b/schema.graphql @@ -604,6 +604,7 @@ type Mutation { deleteAccessmodFileset(input: DeleteAccessmodFilesetInput!): DeleteAccessmodFilesetResult! prepareAccessmodFileUpload(input: PrepareAccessmodFileUploadInput!): PrepareAccessmodFileUploadResult! prepareAccessmodFileDownload(input: PrepareAccessmodFileDownloadInput!): PrepareAccessmodFileDownloadResult! + prepareAccessmodFilesetVisualizationDownload(input: PrepareAccessmodFilesetVisualizationDownloadInput!): PrepareAccessmodFilesetVisualizationDownloadResult! createAccessmodFile(input: CreateAccessmodFileInput!): CreateAccessmodFileResult! createAccessmodAccessibilityAnalysis(input: CreateAccessmodAccessibilityAnalysisInput): CreateAccessmodAccessibilityAnalysisResult! createAccessmodZonalStatistics(input: CreateAccessmodZonalStatisticsInput): CreateAccessmodZonalStatisticsResult! @@ -644,6 +645,15 @@ type PrepareAccessmodFileDownloadResult { downloadUrl: String } +input PrepareAccessmodFilesetVisualizationDownloadInput { + id: String! +} + +type PrepareAccessmodFilesetVisualizationDownloadResult { + success: Boolean! + url: String +} + input PrepareAccessmodFileUploadInput { filesetId: String! mimeType: String! @@ -669,6 +679,7 @@ type Query { accessmodAnalysis(id: String): AccessmodAnalysis accessmodAnalyses(projectId: String!, page: Int, perPage: Int): AccessmodAnalysisPage! country(code: String, alpha3: String): Country + boundaries(country_code: String!, level: String!): [WHOBoundary!]! countries: [Country!]! } @@ -874,6 +885,15 @@ type User { lastLogin: DateTime } +type WHOBoundary { + id: String! + name: String! + country: Country! + administrative_level: Int! + parent: String + extent: String! +} + type WHOInfo { region: WHORegion defaultCRS: Int! diff --git a/src/components/DataGrid.tsx b/src/components/DataGrid.tsx index 4021be1..cf3e9ad 100644 --- a/src/components/DataGrid.tsx +++ b/src/components/DataGrid.tsx @@ -68,7 +68,7 @@ export const DATA_GRID_DEFAULT_THEME = { thead: "", tbody: "", th: "text-xs font-medium text-gray-500 tracking-wider text-left uppercase items-end flex px-3 py-3", - td: "whitespace-nowrap text-sm font-medium text-gray-800 px-3 py-1 md:py-2 flex items-center", + td: "whitespace-wrap text-sm font-medium text-gray-800 px-3 py-1 md:py-2 flex items-center", tr: "hover:bg-gray-200", pagination: "px-3", }; @@ -203,54 +203,59 @@ const DataGrid = (props: DataGridProps) => { }, [onFetchData, pageIndex, pageSize, sortBy]); return (
- - - {headerGroups.map((headerGroup, i) => ( - - {headerGroup.headers.map((column) => ( - - ))} - - ))} - - - {page.map((row, i) => { - prepareRow(row); - return ( - - {row.cells.map((cell) => { - return ( - - ); - })} +
+
- {column.render("Header")} - {column.isSorted && i === headerGroups.length - 1 && ( - - {column.isSortedDesc ? ( - - )} -
- {cell.render("Cell")} -
+ + {headerGroups.map((headerGroup, i) => ( + + {headerGroup.headers.map((column) => ( + + ))} - ); - })} - -
+ {column.render("Header")} + {column.isSorted && i === headerGroups.length - 1 && ( + + {column.isSortedDesc ? ( + + )} +
+ ))} + + + {page.map((row, i) => { + prepareRow(row); + return ( + + {row.cells.map((cell) => { + return ( + + {cell.render("Cell")} + + ); + })} + + ); + })} + + +
{totalItems !== undefined && ( { accept, maxFiles, disabled, + useFsAccessApi: false, multiple: maxFiles !== 1, }); @@ -57,12 +58,12 @@ const Dropzone = (props: DropzoneProps) => { return (
- +
{(!fileRejections.length && children) ?? ( <> diff --git a/src/components/Tooltip/Tooltip.tsx b/src/components/Tooltip/Tooltip.tsx index 658b16f..6afb02b 100644 --- a/src/components/Tooltip/Tooltip.tsx +++ b/src/components/Tooltip/Tooltip.tsx @@ -28,11 +28,7 @@ const Tooltip = (props: Props) => { return ( <> {"children" in props - ? React.createElement( - as, - { type: "button", ref: setTriggerRef }, - props.children - ) + ? React.createElement(as, { ref: setTriggerRef }, props.children) : props.renderTrigger(setTriggerRef)} {typeof window !== "undefined" && ReactDOM.createPortal( diff --git a/src/components/map/BigGeoJsonLayer.tsx b/src/components/map/BigGeoJsonLayer.tsx index 4b49b00..c0ea1ba 100644 --- a/src/components/map/BigGeoJsonLayer.tsx +++ b/src/components/map/BigGeoJsonLayer.tsx @@ -6,23 +6,25 @@ import { GeoJSONProps } from "react-leaflet"; type BigGeoJsonLayerProps = { data: GeoJSONProps["data"]; + style?: object | Function; }; const BigGeoJsonLayer = (props: BigGeoJsonLayerProps) => { const context = useLeafletContext(); - const { data } = props; + const { data, style } = props; useEffect(() => { const container = context.layerContainer || context.map; const layer = L.bigGeoJson(data, { maxZoom: 16, tolerance: 3, debug: 0, + style: style, }); container.addLayer(layer); return () => { container.removeLayer(layer); }; - }, [data, context]); + }, [data, context, style]); return null; }; diff --git a/src/components/map/GeoRasterLayer.tsx b/src/components/map/GeoRasterLayer.tsx index 696c055..fb8ad7b 100644 --- a/src/components/map/GeoRasterLayer.tsx +++ b/src/components/map/GeoRasterLayer.tsx @@ -19,7 +19,7 @@ const useGeoraster = (path: string) => { const [georaster, setGeoraster] = React.useState(); React.useEffect(() => { - parseGeoraster(path, undefined, true) + parseGeoraster(path, undefined, false) .then((res: GeoRaster) => { setGeoraster(res); }) @@ -33,18 +33,16 @@ const useGeoraster = (path: string) => { type Props = { path: string; - colors?: string[]; } & Omit; function GeoRasterLayer({ path, - colors, ...options }: Props): React.ReactElement | null { const georaster = useGeoraster(path); return georaster ? ( - + ) : null; } diff --git a/src/components/map/Legend.tsx b/src/components/map/Legend.tsx new file mode 100644 index 0000000..a343a2b --- /dev/null +++ b/src/components/map/Legend.tsx @@ -0,0 +1,33 @@ +import clsx from "clsx"; +import { ReactNode } from "react"; + +const POSITION_CLASSES = { + bottomleft: "leaflet-bottom leaflet-left", + bottomright: "leaflet-bottom leaflet-right", + topleft: "leaflet-top leaflet-left", + topright: "leaflet-top leaflet-right", +}; + +type Props = { + children: ReactNode; + className?: string; + position?: "bottomleft" | "bottomright" | "topleft" | "topright"; +}; + +const Legend = (props: Props) => { + const { position = "bottomleft", children, className } = props; + return ( +
+
+ {children} +
+
+ ); +}; + +export default Legend; diff --git a/src/components/map/MapEvents.tsx b/src/components/map/MapEvents.tsx new file mode 100644 index 0000000..8b03e26 --- /dev/null +++ b/src/components/map/MapEvents.tsx @@ -0,0 +1,12 @@ +import { LeafletEventHandlerFnMap } from "leaflet"; +import { useMap, useMapEvents } from "react-leaflet"; + +type MapEventsProps = LeafletEventHandlerFnMap; + +const MapEvents = (props: MapEventsProps) => { + const map = useMap(); + useMapEvents(props); + return null; +}; + +export default MapEvents; diff --git a/src/features/dataset/DatasetMetadataBlock.tsx b/src/features/dataset/DatasetMetadataBlock.tsx index b8ae117..5047aee 100644 --- a/src/features/dataset/DatasetMetadataBlock.tsx +++ b/src/features/dataset/DatasetMetadataBlock.tsx @@ -7,6 +7,7 @@ import { AccessmodFilesetStatus, DatasetMetadataBlock_DatasetFragment, } from "libs/graphql"; +import { isTruthy } from "libs/types"; import { useTranslation } from "next-i18next"; import { useMemo } from "react"; import ClassLabelsGrid from "./ClassLabelsGrid"; @@ -27,23 +28,69 @@ const DatasetMetadataBlock = ({ dataset }: DatasetMetadataBlockProps) => { AccessmodFilesetRoleCode.LandCover, AccessmodFilesetRoleCode.Stack, ].includes(dataset.role.code) && ( - - <> - {metadata.labels ? : "-"} - + + {metadata.labels?.length ? ( + + ) : ( + "-" + )} ), dataset.role.code === AccessmodFilesetRoleCode.Boundaries && ( - + {dataset.metadata.name_column ?? "-"} ), dataset.role.code === AccessmodFilesetRoleCode.TransportNetwork && ( - + {dataset.metadata.category_column} ), + dataset.metadata.category_column && + dataset.metadata.values?.[dataset.metadata.category_column] && ( + + + {dataset.metadata.values[dataset.metadata.category_column].join( + ", " + )} + + + ), + + (isTruthy(metadata?.min) || isTruthy(metadata?.max)) && ( + + [{metadata.min ?? "-"}, {metadata.max ?? "-"}] + + ), + ["1p", "2p", "98p", "99p"].some((p) => p in metadata) && ( + + + + + + + + + + {["1p", "2p", "98p", "99p"].map((percentile) => ( + + + + + ))} + +
{t("Percentile")}{t("Value")}
{percentile}{percentile in metadata ? metadata[percentile] : "-"}
+
+ ), + isTruthy(metadata.unique_values) && ( + + [{metadata.unique_values.join(", ")}] + + ), ].filter(Boolean); if ( diff --git a/src/features/dataset/DatasetViewer.tsx b/src/features/dataset/DatasetViewer.tsx index c89c1c4..5ce80a5 100644 --- a/src/features/dataset/DatasetViewer.tsx +++ b/src/features/dataset/DatasetViewer.tsx @@ -15,7 +15,7 @@ type DatasetViewerProps = { }; const DatasetViewer = (props: DatasetViewerProps) => { - const { dataset, project } = props; + const { dataset } = props; const { t } = useTranslation(); if (dataset.role.format === AccessmodFilesetFormat.Tabular) { return ; diff --git a/src/features/dataset/RasterDatasetMap/ClientContinuousRasterMap.tsx b/src/features/dataset/RasterDatasetMap/ClientContinuousRasterMap.tsx new file mode 100644 index 0000000..1a8fe6a --- /dev/null +++ b/src/features/dataset/RasterDatasetMap/ClientContinuousRasterMap.tsx @@ -0,0 +1,66 @@ +import chroma, { Scale } from "chroma-js"; +import clsx from "clsx"; +import Legend from "components/map/Legend"; +import { MapProps } from "components/map/Map"; +import { PixelValuesToColorFn } from "georaster-layer-for-leaflet"; +import { useCallback, useMemo } from "react"; +import ClientRasterMap from "./ClientRasterMap"; + +type Props = MapProps & { + url?: string; + scale: string; + loading?: boolean; + min: number; + nodata: number; + max: number; +}; + +const ClientContinuousRasterMap = (props: Props) => { + const { url, loading, scale, nodata, min, max, ...delegated } = props; + + const brewer: Scale = useMemo( + () => chroma.scale(scale).domain([min, max]), + [scale, min, max] + ); + + const pixelValuesToColorFn: PixelValuesToColorFn = useCallback( + (vals) => { + const [value, ..._] = vals; + if (value === nodata) return ""; + + return brewer(value).hex(); + }, + [brewer, nodata] + ); + + const legendColors = useMemo(() => { + return brewer.colors(3, "hex"); + }, [brewer]); + + return ( + + +
+ +
+ {min} + {Math.round((max + min) / 2)} + {max} +
+
+
+
+ ); +}; + +export default ClientContinuousRasterMap; diff --git a/src/features/dataset/RasterDatasetMap/ClientDiscreteRasterMap.tsx b/src/features/dataset/RasterDatasetMap/ClientDiscreteRasterMap.tsx new file mode 100644 index 0000000..1a6e21a --- /dev/null +++ b/src/features/dataset/RasterDatasetMap/ClientDiscreteRasterMap.tsx @@ -0,0 +1,64 @@ +import chroma from "chroma-js"; +import Legend from "components/map/Legend"; +import { MapProps } from "components/map/Map"; +import { PixelValuesToColorFn } from "georaster-layer-for-leaflet"; +import { useCallback, useMemo } from "react"; +import ClientRasterMap from "./ClientRasterMap"; + +type Props = MapProps & { + url?: string; + loading?: boolean; + scale: string; + nodata: number; + values: number[]; + labels?: { [key: string]: string }; +}; + +const ClientContinuousRasterMap = (props: Props) => { + const { url, loading, scale, nodata, labels, ...delegated } = props; + + const uniqueValues = useMemo(() => { + return props.values.filter((v) => v !== nodata); + }, [props.values, nodata]); + + const colors = useMemo(() => { + return chroma.scale(scale).colors(uniqueValues.length); + }, [scale, uniqueValues]); + + const pixelValuesToColorFn: PixelValuesToColorFn = useCallback( + (vals) => { + const [value, ..._] = vals; + if (value === nodata) { + return ""; + } + + return colors[uniqueValues.indexOf(value)]; + }, + [colors, uniqueValues, nodata] + ); + + return ( + + + {uniqueValues.map((val) => ( +
+
+ + {labels?.[val] ? `${labels?.[val]} (${val})` : val} + +
+ ))} +
+
+ ); +}; + +export default ClientContinuousRasterMap; diff --git a/src/features/dataset/RasterDatasetMap/ClientRasterMap.tsx b/src/features/dataset/RasterDatasetMap/ClientRasterMap.tsx index 39ee2ac..e62846e 100644 --- a/src/features/dataset/RasterDatasetMap/ClientRasterMap.tsx +++ b/src/features/dataset/RasterDatasetMap/ClientRasterMap.tsx @@ -1,23 +1,47 @@ import chroma from "chroma-js"; import GeoRasterLayer from "components/map/GeoRasterLayer"; +import Legend from "components/map/Legend"; import Map, { MapProps } from "components/map/Map"; +import { PixelValuesToColorFn } from "georaster-layer-for-leaflet"; +import { FeatureGroup as LeafletFeatureGroup } from "leaflet"; +import { ReactNode, useCallback, useMemo, useRef } from "react"; +import { FeatureGroup } from "react-leaflet"; -type Props = { +type Props = MapProps & { url?: string; loading?: boolean; -} & MapProps; + children?: ReactNode; + pixelValuesToColorFn: PixelValuesToColorFn; +}; const ClientRasterMap = (props: Props) => { - const { url, loading, ...delegated } = props; + const { url, loading, pixelValuesToColorFn, children, ...delegated } = props; + const featureGroupRef = useRef(null); + + const onLayerAdd = useCallback( + ({ layer }: { layer: any }) => { + if (featureGroupRef.current) { + layer._map.fitBounds(featureGroupRef.current.getBounds()); + } + }, + [featureGroupRef] + ); + return ( {url && ( - + + + {children} + )} ); diff --git a/src/features/dataset/RasterDatasetMap/RasterDatasetMap.tsx b/src/features/dataset/RasterDatasetMap/RasterDatasetMap.tsx index 7a6e920..825a2d1 100644 --- a/src/features/dataset/RasterDatasetMap/RasterDatasetMap.tsx +++ b/src/features/dataset/RasterDatasetMap/RasterDatasetMap.tsx @@ -1,6 +1,10 @@ import { gql } from "@apollo/client"; -import { getFileDownloadUrl } from "libs/dataset"; -import { RasterDatasetMap_DatasetFragment } from "libs/graphql"; +import { getDatasetVisualizationUrl } from "libs/dataset"; +import { + AccessmodFilesetRoleCode, + RasterDatasetMap_DatasetFragment, +} from "libs/graphql"; +import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; import { useEffect, useMemo, useState } from "react"; @@ -8,46 +12,69 @@ type RasterDatasetMapProps = { dataset: RasterDatasetMap_DatasetFragment; }; -const DynamicClientRasterMap = dynamic(() => import("./ClientRasterMap"), { - ssr: false, -}); +const DynamicClientContinuousRasterMap = dynamic( + () => import("./ClientContinuousRasterMap"), + { + ssr: false, + } +); +const DynamicClientDiscreteRasterMap = dynamic( + () => import("./ClientDiscreteRasterMap"), + { + ssr: false, + } +); const RasterDatasetMap = ({ dataset }: RasterDatasetMapProps) => { const [url, setUrl] = useState(); - const [loading, setLoading] = useState(false); - const supportedFile = useMemo( - () => - dataset.files.find((file) => - ["image/geotiff", "image/tiff", "image/geo+tiff"].includes( - file.mimeType - ) - ), - [dataset] - ); + const { t } = useTranslation(); + const [loading, setLoading] = useState(true); useEffect(() => { - if (supportedFile) { - setLoading(true); - getFileDownloadUrl(supportedFile.id).then( - (url) => { - setUrl(url); - setLoading(false); - }, - () => setLoading(false) - ); - } else { - console.warn("No supported raster file"); - } - }, [supportedFile]); + setLoading(true); + getDatasetVisualizationUrl(dataset.id).then(async (url) => { + setLoading(false); + if (url) { + setUrl(url); + } + }); + }, [dataset]); + + const isContinuous = useMemo(() => { + return [ + AccessmodFilesetRoleCode.Dem, + AccessmodFilesetRoleCode.Population, + AccessmodFilesetRoleCode.ZonalStatistics, + AccessmodFilesetRoleCode.TravelTimes, + ].includes(dataset.role.code); + }, [dataset]); return (
- {!supportedFile ? ( + {!url && !loading && (
- We do not support this type of dataset. Only tiff files are supported. + {t("The preview of this dataset is not yet ready")}
- ) : ( - + )} + {url && isContinuous && ( + + )} + {url && !isContinuous && ( + )}
); @@ -57,14 +84,9 @@ RasterDatasetMap.fragments = { dataset: gql` fragment RasterDatasetMap_dataset on AccessmodFileset { id + metadata role { code - format - } - files { - id - name - mimeType } } `, diff --git a/src/features/dataset/TabularDatasetTable.tsx b/src/features/dataset/TabularDatasetTable.tsx index 710dcd4..3590a2b 100644 --- a/src/features/dataset/TabularDatasetTable.tsx +++ b/src/features/dataset/TabularDatasetTable.tsx @@ -39,7 +39,7 @@ const TabularDatasetTable = (props: TabularDatasetTableProps) => { const columns = useMemo[]>(() => { if (data?.length > 0) { return Object.keys(data[0]).map((key) => ({ - accessor: key, + accessor: (cell) => cell[key], Header: key, })); } else { diff --git a/src/features/dataset/VectorDatasetMap/VectorDatasetMap.tsx b/src/features/dataset/VectorDatasetMap/VectorDatasetMap.tsx index 206d3fd..abc54dd 100644 --- a/src/features/dataset/VectorDatasetMap/VectorDatasetMap.tsx +++ b/src/features/dataset/VectorDatasetMap/VectorDatasetMap.tsx @@ -1,6 +1,7 @@ import { gql } from "@apollo/client"; -import { getVectorFileContent } from "libs/dataset"; +import { getDatasetVisualizationUrl } from "libs/dataset"; import { VectorDatasetMap_DatasetFragment } from "libs/graphql"; +import { useTranslation } from "next-i18next"; import dynamic from "next/dynamic"; import { useEffect, useMemo, useState } from "react"; @@ -15,36 +16,32 @@ const DynamicClientVectorMap = dynamic(() => import("./ClientVectorMap"), { const VectorDatasetMap = ({ dataset }: VectorDatasetMapProps) => { const [geoJSON, setGeoJSON] = useState(null); const [loading, setLoading] = useState(false); - - const supportedFile = useMemo( - () => - dataset.files.find((file) => - ["application/geo+json"].includes(file.mimeType) - ), - [dataset] - ); + const [isReady, setReady] = useState(false); + const { t } = useTranslation(); useEffect(() => { - if (supportedFile) { - setLoading(true); - getVectorFileContent(supportedFile).then( - (data) => { - setGeoJSON(data); - setLoading(false); - }, - () => setLoading(false) - ); - } - }, [dataset, supportedFile]); + getDatasetVisualizationUrl(dataset.id).then(async (url) => { + setReady(true); + if (!url) { + return; + } + try { + setLoading(true); + setGeoJSON(await fetch(url).then((resp) => resp.json())); + } finally { + setLoading(false); + } + }); + }, [dataset]); return (
- {!supportedFile ? ( + {isReady && !loading && !geoJSON && (
- We do not support this type of dataset. Only geojson files are - supported. + {t("The preview of this dataset is not yet ready")}
- ) : ( + )} + {(loading || geoJSON) && ( { } } +export async function getDatasetVisualizationUrl( + datasetId: string +): Promise { + const client = getApolloClient(); + const { data } = await client.mutate< + GetDatasetVisualizationUrlMutation, + GetDatasetVisualizationUrlMutationVariables + >({ + mutation: gql` + mutation GetDatasetVisualizationUrl( + $input: PrepareAccessmodFilesetVisualizationDownloadInput! + ) { + prepareAccessmodFilesetVisualizationDownload(input: $input) { + success + url + } + } + `, + variables: { + input: { id: datasetId }, + }, + }); + + return data?.prepareAccessmodFilesetVisualizationDownload.url ?? null; +} + export function formatDatasetStatus(status: AccessmodFilesetStatus) { switch (status) { case AccessmodFilesetStatus.Invalid: @@ -237,26 +265,36 @@ export function formatDatasetStatus(status: AccessmodFilesetStatus) { } } +function detectDelimiter(text: string) { + const delimiters = [",", ";", "\t"]; + const rows = text.split("\n"); + if (rows.length >= 2) { + for (const delimiter of delimiters) { + if ( + rows[0].split(delimiter) === rows[1].split(delimiter) && + rows[0].split(delimiter).length > 0 + ) { + return delimiter; + } + } + } else { + const repeats = delimiters.map((delimiter) => ({ + delimiter, + times: rows[0].split(delimiter).length, + })); + repeats.sort((a, b) => b.times - a.times); + return repeats[0].delimiter; + } + return ","; +} + export async function getTabularFileContent( file: Pick ) { - let textContent; - try { - textContent = sessionStorage.getItem(file.id); - } catch (err) { - console.error(err); - } - if (!textContent) { - const downloadUrl = await getFileDownloadUrl(file.id); - textContent = await fetch(downloadUrl).then((resp) => resp.text()); - } - - try { - sessionStorage.setItem(file.id, textContent); - } catch (err) { - console.error(err); - } - return parse(textContent, { delimiter: ",", columns: true }); + const downloadUrl = await getFileDownloadUrl(file.id); + const textContent = await fetch(downloadUrl).then((resp) => resp.text()); + const delimiter = detectDelimiter(textContent); + return parse(textContent, { delimiter, columns: true }); } export async function getVectorFileContent( @@ -462,12 +500,16 @@ export function getDatasetDefaultMetadata(roleCode: AccessmodFilesetRoleCode) { } export type MetadataFormValues = { + [key: string]: any; category_column?: string | null; name_column?: string | null; columns?: string[]; validation_error?: string; values?: { [key: string]: string[] }; labels?: [string, string][]; + min?: number; + max?: number; + unique_values?: number[]; }; export function toMetadataFormValues( diff --git a/src/libs/file.ts b/src/libs/file.ts index 894779c..3adf6b5 100644 --- a/src/libs/file.ts +++ b/src/libs/file.ts @@ -219,7 +219,6 @@ export { uploader }; export async function downloadURL(url: string, name: string) { const anchor = document.createElement("a"); anchor.href = url; - anchor.download = name; document.body.appendChild(anchor); anchor.click(); document.body.removeChild(anchor); diff --git a/src/libs/graphql.ts b/src/libs/graphql.ts index d6e086c..3786ad5 100644 --- a/src/libs/graphql.ts +++ b/src/libs/graphql.ts @@ -647,6 +647,7 @@ export type Mutation = { logout: LogoutResult; prepareAccessmodFileDownload: PrepareAccessmodFileDownloadResult; prepareAccessmodFileUpload: PrepareAccessmodFileUploadResult; + prepareAccessmodFilesetVisualizationDownload: PrepareAccessmodFilesetVisualizationDownloadResult; resetPassword: ResetPasswordResult; setPassword: SetPasswordResult; updateAccessmodAccessibilityAnalysis: UpdateAccessmodAccessibilityAnalysisResult; @@ -749,6 +750,11 @@ export type MutationPrepareAccessmodFileUploadArgs = { }; +export type MutationPrepareAccessmodFilesetVisualizationDownloadArgs = { + input: PrepareAccessmodFilesetVisualizationDownloadInput; +}; + + export type MutationResetPasswordArgs = { input: ResetPasswordInput; }; @@ -838,6 +844,16 @@ export type PrepareAccessmodFileUploadResult = { uploadUrl?: Maybe; }; +export type PrepareAccessmodFilesetVisualizationDownloadInput = { + id: Scalars['String']; +}; + +export type PrepareAccessmodFilesetVisualizationDownloadResult = { + __typename?: 'PrepareAccessmodFilesetVisualizationDownloadResult'; + success: Scalars['Boolean']; + url?: Maybe; +}; + export type Query = { __typename?: 'Query'; accessmodAnalyses: AccessmodAnalysisPage; @@ -848,6 +864,7 @@ export type Query = { accessmodFilesets: AccessmodFilesetPage; accessmodProject?: Maybe; accessmodProjects: AccessmodProjectPage; + boundaries: Array; countries: Array; country?: Maybe; me: Me; @@ -904,6 +921,12 @@ export type QueryAccessmodProjectsArgs = { }; +export type QueryBoundariesArgs = { + country_code: Scalars['String']; + level: Scalars['String']; +}; + + export type QueryCountryArgs = { alpha3?: InputMaybe; code?: InputMaybe; @@ -1135,6 +1158,16 @@ export type User = { lastName?: Maybe; }; +export type WhoBoundary = { + __typename?: 'WHOBoundary'; + administrative_level: Scalars['Int']; + country: Country; + extent: Scalars['String']; + id: Scalars['String']; + name: Scalars['String']; + parent?: Maybe; +}; + export type WhoInfo = { __typename?: 'WHOInfo'; defaultCRS: Scalars['Int']; @@ -1323,7 +1356,7 @@ export type DatasetStatusIcon_DatasetFragment = { __typename?: 'AccessmodFileset export type DatasetViewer_ProjectFragment = { __typename?: 'AccessmodProject', id: string }; -export type DatasetViewer_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, role: { __typename?: 'AccessmodFilesetRole', id: string, code: AccessmodFilesetRoleCode, name: string, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', name: string, mimeType: string, id: string }> }; +export type DatasetViewer_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, metadata: any, role: { __typename?: 'AccessmodFilesetRole', id: string, code: AccessmodFilesetRoleCode, name: string, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', name: string, mimeType: string, id: string }> }; export type DeleteDatasetMutationVariables = Exact<{ input: DeleteAccessmodFilesetInput; @@ -1343,17 +1376,17 @@ export type PreviewDatasetDialogQueryVariables = Exact<{ }>; -export type PreviewDatasetDialogQuery = { __typename?: 'Query', dataset?: { __typename?: 'AccessmodFileset', id: string, name: string, role: { __typename?: 'AccessmodFilesetRole', id: string, code: AccessmodFilesetRoleCode, name: string, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', id: string, name: string, mimeType: string }> } | null }; +export type PreviewDatasetDialogQuery = { __typename?: 'Query', dataset?: { __typename?: 'AccessmodFileset', id: string, name: string, metadata: any, role: { __typename?: 'AccessmodFilesetRole', id: string, code: AccessmodFilesetRoleCode, name: string, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', id: string, name: string, mimeType: string }> } | null }; export type PreviewDatasetDialog_ProjectFragment = { __typename?: 'AccessmodProject', id: string }; export type PreviewDatasetDialog_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, name: string }; -export type RasterDatasetMap_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, role: { __typename?: 'AccessmodFilesetRole', code: AccessmodFilesetRoleCode, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', id: string, name: string, mimeType: string }> }; +export type RasterDatasetMap_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, metadata: any, role: { __typename?: 'AccessmodFilesetRole', code: AccessmodFilesetRoleCode } }; export type TabularDatasetTable_DatasetFragment = { __typename?: 'AccessmodFileset', role: { __typename?: 'AccessmodFilesetRole', format: AccessmodFilesetFormat, code: AccessmodFilesetRoleCode }, files: Array<{ __typename?: 'AccessmodFile', name: string, mimeType: string, id: string }> }; -export type VectorDatasetMap_DatasetFragment = { __typename?: 'AccessmodFileset', id: string, role: { __typename?: 'AccessmodFilesetRole', code: AccessmodFilesetRoleCode, format: AccessmodFilesetFormat }, files: Array<{ __typename?: 'AccessmodFile', id: string, name: string, mimeType: string }> }; +export type VectorDatasetMap_DatasetFragment = { __typename?: 'AccessmodFileset', id: string }; export type ChangeProjectOwnershipMutationVariables = Exact<{ input: CreateAccessmodProjectPermissionInput; @@ -1579,6 +1612,13 @@ export type GetFileDownloadUrlMutationVariables = Exact<{ export type GetFileDownloadUrlMutation = { __typename?: 'Mutation', prepareAccessmodFileDownload: { __typename?: 'PrepareAccessmodFileDownloadResult', success: boolean, downloadUrl?: string | null } }; +export type GetDatasetVisualizationUrlMutationVariables = Exact<{ + input: PrepareAccessmodFilesetVisualizationDownloadInput; +}>; + + +export type GetDatasetVisualizationUrlMutation = { __typename?: 'Mutation', prepareAccessmodFilesetVisualizationDownload: { __typename?: 'PrepareAccessmodFilesetVisualizationDownloadResult', success: boolean, url?: string | null } }; + export type CreateDatasetMutationVariables = Exact<{ input: CreateAccessmodFilesetInput; }>; @@ -2058,28 +2098,14 @@ export const TabularDatasetTable_DatasetFragmentDoc = gql` export const VectorDatasetMap_DatasetFragmentDoc = gql` fragment VectorDatasetMap_dataset on AccessmodFileset { id - role { - code - format - } - files { - id - name - mimeType - } } `; export const RasterDatasetMap_DatasetFragmentDoc = gql` fragment RasterDatasetMap_dataset on AccessmodFileset { id + metadata role { code - format - } - files { - id - name - mimeType } } `; @@ -3908,6 +3934,40 @@ export function useGetFileDownloadUrlMutation(baseOptions?: Apollo.MutationHookO export type GetFileDownloadUrlMutationHookResult = ReturnType; export type GetFileDownloadUrlMutationResult = Apollo.MutationResult; export type GetFileDownloadUrlMutationOptions = Apollo.BaseMutationOptions; +export const GetDatasetVisualizationUrlDocument = gql` + mutation GetDatasetVisualizationUrl($input: PrepareAccessmodFilesetVisualizationDownloadInput!) { + prepareAccessmodFilesetVisualizationDownload(input: $input) { + success + url + } +} + `; +export type GetDatasetVisualizationUrlMutationFn = Apollo.MutationFunction; + +/** + * __useGetDatasetVisualizationUrlMutation__ + * + * To run a mutation, you first call `useGetDatasetVisualizationUrlMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useGetDatasetVisualizationUrlMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [getDatasetVisualizationUrlMutation, { data, loading, error }] = useGetDatasetVisualizationUrlMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useGetDatasetVisualizationUrlMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(GetDatasetVisualizationUrlDocument, options); + } +export type GetDatasetVisualizationUrlMutationHookResult = ReturnType; +export type GetDatasetVisualizationUrlMutationResult = Apollo.MutationResult; +export type GetDatasetVisualizationUrlMutationOptions = Apollo.BaseMutationOptions; export const CreateDatasetDocument = gql` mutation CreateDataset($input: CreateAccessmodFilesetInput!) { createAccessmodFileset(input: $input) { diff --git a/src/libs/map/BigGeoJSON.js b/src/libs/map/BigGeoJSON.js index f131323..4de4c9f 100644 --- a/src/libs/map/BigGeoJSON.js +++ b/src/libs/map/BigGeoJSON.js @@ -1,6 +1,6 @@ // @ts-nocheck -import L from "leaflet"; import geojsonvt from "geojson-vt"; +import L from "leaflet"; L.BigGeoJSON = L.GridLayer.extend({ options: { @@ -34,10 +34,11 @@ L.BigGeoJSON = L.GridLayer.extend({ drawFeature: function (ctx, feature) { ctx.beginPath(); - if (this.options.style) + if (this.options.style) { this.options.style instanceof Function - ? this.setStyle(ctx, this.options.style(feature.tags)) + ? this.setStyle(ctx, this.options.style(feature)) : this.setStyle(ctx, this.options.style); + } if (feature.type === 2 || feature.type === 3) { for (var j = 0; j < feature.geometry.length; j++) { var ring = feature.geometry[j];