diff --git a/package-lock.json b/package-lock.json index 973d81f..f88848f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,11 +16,9 @@ "@graphql-tools/utils": "^8.6.5", "@next/bundle-analyzer": "^12.0.3", "@radix-ui/react-dialog": "^1.0.2", + "@radix-ui/react-dropdown-menu": "^2.0.4", "@radix-ui/react-select": "^1.2.0", "@radix-ui/react-switch": "^1.0.1", - "@reach/listbox": "^0.17.0", - "@reach/menu-button": "^0.17.0", - "apollo-server-micro": "^3.10.3", "axios": "^1.2.2", "common-tags": "^1.8.0", "framer-motion": "^6.5.1", @@ -32,11 +30,11 @@ "hast-util-to-string": "^2.0.0", "lodash-es": "^4.17.21", "md5": "^2.3.0", - "next": "^12.3.0", + "next": "^13.3.0", "next-mdx-remote": "^4.3.0", "p-limit": "^3.1.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-query": "^3.29.0", "rehype-pretty-code": "^0.9.4", "rehype-slug": "^5.1.0", @@ -46,8 +44,8 @@ "styled-components": "^5.3.3", "swr": "^2.0.0", "unist-util-visit": "^4.1.2", - "use-local-storage-state": "^17.2.0", - "use-session-storage-state": "^17.2.0" + "use-local-storage-state": "^18.3.0", + "use-session-storage-state": "^18.1.1" }, "devDependencies": { "@graphql-codegen/cli": "^2.9.1", @@ -62,7 +60,7 @@ "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", "eslint": "7.32.0", - "eslint-config-next": "^12.0.8", + "eslint-config-next": "^13.3.0", "ts-node": "^10.8.1", "typescript": "^4.7.3" } @@ -93,157 +91,6 @@ "node": ">=6.0.0" } }, - "node_modules/@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" - }, - "bin": { - "apollo-pbjs": "bin/pbjs", - "apollo-pbts": "bin/pbts" - } - }, - "node_modules/@apollo/usage-reporting-protobuf": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.0.2.tgz", - "integrity": "sha512-GfE8aDqi/lAFut95pjH9IRvH0zGsQ5G/2lYL0ZLZfML7ArX+A4UVHFANQcPCcUYGE6bI6OPhLekg4Vsjf6B1cw==", - "dependencies": { - "@apollo/protobufjs": "1.2.7" - } - }, - "node_modules/@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.keyvaluecache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", - "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", - "dependencies": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "7.10.1 - 7.13.1" - } - }, - "node_modules/@apollo/utils.keyvaluecache/node_modules/lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@apollo/utils.logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", - "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==" - }, - "node_modules/@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "dependencies": { - "lodash.sortby": "^4.7.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollo/utils.usagereporting": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", - "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", - "dependencies": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "graphql": "14.x || 15.x || 16.x" - } - }, - "node_modules/@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "engines": { - "node": ">=8", - "npm": ">=6" - }, - "peerDependencies": { - "graphql": "^14.2.1 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "dependencies": { - "xss": "^1.0.8" - } - }, "node_modules/@ardatan/relay-compiler": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", @@ -2238,45 +2085,6 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/mock": { - "version": "8.7.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.12.tgz", - "integrity": "sha512-bEjj52T5idjzqFXfDZPFfPZDPFEjVmayYA6RYqMxM3Qdv5JJ8pSMEGDBcXhinbQudPKdRkLmR17usNmRMpUQEg==", - "dependencies": { - "@graphql-tools/schema": "9.0.10", - "@graphql-tools/utils": "9.1.1", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/schema": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.10.tgz", - "integrity": "sha512-lV0o4df9SpPiaeeDAzgdCJ2o2N9Wvsp0SMHlF2qDbh9aFCFQRsXuksgiDm2yTgT3TG5OtUes/t0D6uPjPZFUbQ==", - "dependencies": { - "@graphql-tools/merge": "8.3.12", - "@graphql-tools/utils": "9.1.1", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/mock/node_modules/@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "dependencies": { - "tslib": "^2.4.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, "node_modules/@graphql-tools/optimize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.3.1.tgz", @@ -2530,28 +2338,6 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@hapi/accept": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", - "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", - "dependencies": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "dependencies": { - "@hapi/hoek": "9.x.x" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -2578,11 +2364,6 @@ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", "dev": true }, - "node_modules/@josephg/resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", - "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==" - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -2737,14 +2518,14 @@ } }, "node_modules/@next/env": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.4.tgz", - "integrity": "sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==" + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.3.0.tgz", + "integrity": "sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz", - "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.3.0.tgz", + "integrity": "sha512-wuGN5qSEjSgcq9fVkH0Y/qIPFjnZtW3ZPwfjJOn7l/rrf6y8J24h/lo61kwqunTyzZJm/ETGfGVU9PUs8cnzEA==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -2770,40 +2551,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.4.tgz", - "integrity": "sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.4.tgz", - "integrity": "sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-darwin-arm64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz", - "integrity": "sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz", + "integrity": "sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w==", "cpu": [ "arm64" ], @@ -2816,9 +2567,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz", - "integrity": "sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz", + "integrity": "sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==", "cpu": [ "x64" ], @@ -2830,40 +2581,10 @@ "node": ">= 10" } }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.4.tgz", - "integrity": "sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.4.tgz", - "integrity": "sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz", - "integrity": "sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz", + "integrity": "sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==", "cpu": [ "arm64" ], @@ -2876,9 +2597,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz", - "integrity": "sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz", + "integrity": "sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==", "cpu": [ "arm64" ], @@ -2891,9 +2612,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz", - "integrity": "sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz", + "integrity": "sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==", "cpu": [ "x64" ], @@ -2906,9 +2627,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz", - "integrity": "sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz", + "integrity": "sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==", "cpu": [ "x64" ], @@ -2921,9 +2642,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz", - "integrity": "sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz", + "integrity": "sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==", "cpu": [ "arm64" ], @@ -2936,9 +2657,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz", - "integrity": "sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz", + "integrity": "sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==", "cpu": [ "ia32" ], @@ -2951,9 +2672,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz", - "integrity": "sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz", + "integrity": "sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==", "cpu": [ "x64" ], @@ -3039,65 +2760,31 @@ "node": ">=10.12.0" } }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "node_modules/@radix-ui/number": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", @@ -3115,12 +2802,25 @@ } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", - "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", + "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", "dependencies": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0", @@ -3128,14 +2828,27 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", - "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", + "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.0", "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", "@radix-ui/react-slot": "1.0.1" }, "peerDependencies": { @@ -3219,6 +2932,38 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", + "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.4", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-focus-guards": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", @@ -3257,17 +3002,105 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", + "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", + "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", + "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", + "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-popper": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", - "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", + "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", "dependencies": { "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-arrow": "1.0.2", "@radix-ui/react-compose-refs": "1.0.0", "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.2", "@radix-ui/react-use-callback-ref": "1.0.0", "@radix-ui/react-use-layout-effect": "1.0.0", "@radix-ui/react-use-rect": "1.0.0", @@ -3279,6 +3112,19 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-portal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.1.tgz", @@ -3319,6 +3165,40 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", + "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.0.tgz", @@ -3352,6 +3232,57 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", + "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", + "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", @@ -3485,161 +3416,6 @@ "@babel/runtime": "^7.13.10" } }, - "node_modules/@reach/auto-id": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.17.0.tgz", - "integrity": "sha512-ud8iPwF52RVzEmkHq1twuqGuPA+moreumUHdtgvU3sr3/15BNhwp3KyDLrKKSz0LP1r3V4pSdyF9MbYM8BoSjA==", - "dependencies": { - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/descendants": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.17.0.tgz", - "integrity": "sha512-c7lUaBfjgcmKFZiAWqhG+VnXDMEhPkI4kAav/82XKZD6NVvFjsQOTH+v3tUkskrAPV44Yuch0mFW/u5Ntifr7Q==", - "dependencies": { - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/dropdown": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/dropdown/-/dropdown-0.17.0.tgz", - "integrity": "sha512-qBTIGInhxtPHtdj4Pl2XZgZMz3e37liydh0xR3qc48syu7g71sL4nqyKjOzThykyfhA3Pb3/wFgsFJKGTSdaig==", - "dependencies": { - "@reach/auto-id": "0.17.0", - "@reach/descendants": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/listbox": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.17.0.tgz", - "integrity": "sha512-AMnH1P6/3VKy2V/nPb4Es441arYR+t4YRdh9jdcFVrCOD6y7CQrlmxsYjeg9Ocdz08XpdoEBHM3PKLJqNAUr7A==", - "dependencies": { - "@reach/auto-id": "0.17.0", - "@reach/descendants": "0.17.0", - "@reach/machine": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/machine": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.17.0.tgz", - "integrity": "sha512-9EHnuPgXzkbRENvRUzJvVvYt+C2jp7PGN0xon7ffmKoK8rTO6eA/bb7P0xgloyDDQtu88TBUXKzW0uASqhTXGA==", - "dependencies": { - "@reach/utils": "0.17.0", - "@xstate/fsm": "1.4.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/menu-button": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.17.0.tgz", - "integrity": "sha512-YyuYVyMZKamPtivoEI6D0UEILYH3qZtg4kJzEAuzPmoR/aHN66NZO75Fx0gtjG1S6fZfbiARaCOZJC0VEiDOtQ==", - "dependencies": { - "@reach/dropdown": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x", - "react-is": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" - }, - "node_modules/@reach/popover": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.17.0.tgz", - "integrity": "sha512-yYbBF4fMz4Ml4LB3agobZjcZ/oPtPsNv70ZAd7lEC2h7cvhF453pA+zOBGYTPGupKaeBvgAnrMjj7RnxDU5hoQ==", - "dependencies": { - "@reach/portal": "0.17.0", - "@reach/rect": "0.17.0", - "@reach/utils": "0.17.0", - "tabbable": "^4.0.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/portal": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.17.0.tgz", - "integrity": "sha512-+IxsgVycOj+WOeNPL2NdgooUdHPSY285wCtj/iWID6akyr4FgGUK7sMhRM9aGFyrGpx2vzr+eggbUmAVZwOz+A==", - "dependencies": { - "@reach/utils": "0.17.0", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/rect": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.17.0.tgz", - "integrity": "sha512-3YB7KA5cLjbLc20bmPkJ06DIfXSK06Cb5BbD2dHgKXjUkT9WjZaLYIbYCO8dVjwcyO3GCNfOmPxy62VsPmZwYA==", - "dependencies": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/utils": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.17.0.tgz", - "integrity": "sha512-M5y8fCBbrWeIsxedgcSw6oDlAMQDkl5uv3VnMVJ7guwpf4E48Xlh1v66z/1BgN/WYe2y8mB/ilFD2nysEfdGeA==", - "dependencies": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, "node_modules/@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -3653,9 +3429,9 @@ "dev": true }, "node_modules/@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", "dependencies": { "tslib": "^2.4.0" } @@ -3784,11 +3560,6 @@ "@types/lodash": "*" } }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, "node_modules/@types/md5": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", @@ -4144,11 +3915,6 @@ "tslib": "^2.3.1" } }, - "node_modules/@xstate/fsm": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.4.0.tgz", - "integrity": "sha512-uTHDeu2xI5E1IFwf37JFQM31RrH7mY7877RqPBS4ZqSNUwoLDuct8AhBWaXGnVizBAYyimVwgCyGa9z/NiRhXA==" - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -4293,171 +4059,11 @@ "node": ">= 8" } }, - "node_modules/apollo-datasource": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", - "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "deprecated": "The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "apollo-server-env": "^4.2.1" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/apollo-reporting-protobuf": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.3.tgz", - "integrity": "sha512-L3+DdClhLMaRZWVmMbBcwl4Ic77CnEBPXLW53F7hkYhkaZD88ivbCVB1w/x5gunO6ZHrdzhjq0FHmTsBvPo7aQ==", - "deprecated": "The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "@apollo/protobufjs": "1.2.6" - } - }, - "node_modules/apollo-reporting-protobuf/node_modules/@apollo/protobufjs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.6.tgz", - "integrity": "sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - }, - "bin": { - "apollo-pbjs": "bin/pbjs", - "apollo-pbts": "bin/pbts" - } - }, - "node_modules/apollo-reporting-protobuf/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/apollo-server-core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.11.1.tgz", - "integrity": "sha512-t/eCKrRFK1lYZlc5pHD99iG7Np7CEm3SmbDiONA7fckR3EaB/pdsEdIkIwQ5QBBpT5JLp/nwvrZRVwhaWmaRvw==", - "deprecated": "The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "@apollo/utils.usagereporting": "^1.0.0", - "@apollographql/apollo-tools": "^0.5.3", - "@apollographql/graphql-playground-html": "1.6.29", - "@graphql-tools/mock": "^8.1.2", - "@graphql-tools/schema": "^8.0.0", - "@josephg/resolvable": "^1.0.0", - "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.3.3", - "apollo-server-env": "^4.2.1", - "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.1", - "apollo-server-types": "^3.7.1", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.1.0", - "graphql-tag": "^2.11.0", - "loglevel": "^1.6.8", - "lru-cache": "^6.0.0", - "node-abort-controller": "^3.0.1", - "sha.js": "^2.4.11", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-env": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", - "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "deprecated": "The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/apollo-server-errors": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", - "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "deprecated": "The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-micro": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-micro/-/apollo-server-micro-3.11.1.tgz", - "integrity": "sha512-4bETccnRotMQIg3ah4/NAWPppB05i5ePrTOuLBGBBQaV8bz1E4Md3snxSB8JkANND7sXmH9OCiKKeLFK8q8JaA==", - "deprecated": "The `apollo-server-micro` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "@hapi/accept": "^5.0.2", - "apollo-server-core": "^3.11.1", - "apollo-server-types": "^3.7.1", - "type-is": "^1.6.18" - }, - "peerDependencies": { - "micro": "^9.3.4" - } - }, - "node_modules/apollo-server-plugin-base": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.1.tgz", - "integrity": "sha512-g3vJStmQtQvjGI289UkLMfThmOEOddpVgHLHT2bNj0sCD/bbisj4xKbBHETqaURokteqSWyyd4RDTUe0wAUDNQ==", - "deprecated": "The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "apollo-server-types": "^3.7.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/apollo-server-types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.7.1.tgz", - "integrity": "sha512-aE9RDVplmkaOj/OduNmGa+0a1B5RIWI0o3zC1zLvBTVWMKTpo0ifVf11TyMkLCY+T7cnZqVqwyShziOyC3FyUw==", - "deprecated": "The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.", - "dependencies": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.3.3", - "apollo-server-env": "^4.2.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "graphql": "^15.3.0 || ^16.0.0" - } - }, "node_modules/arg": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==" + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", @@ -4617,14 +4223,6 @@ "astring": "bin/astring" } }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dependencies": { - "retry": "0.13.1" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4681,14 +4279,14 @@ "dev": true }, "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz", + "integrity": "sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-module-imports": "^7.16.0", "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", + "lodash": "^4.17.21", "picomatch": "^2.3.0" }, "peerDependencies": { @@ -4905,7 +4503,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, "dependencies": { "streamsearch": "^1.1.0" }, @@ -4913,15 +4510,6 @@ "node": ">=10.16.0" } }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -5193,6 +4781,11 @@ "node": ">= 10" } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5290,15 +4883,6 @@ "upper-case": "^2.0.2" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -5412,11 +4996,6 @@ "postcss-value-parser": "^4.0.2" } }, - "node_modules/cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" - }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -5495,6 +5074,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -5519,15 +5107,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -5642,6 +5221,19 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -5806,16 +5398,16 @@ } }, "node_modules/eslint-config-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz", - "integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.3.0.tgz", + "integrity": "sha512-6YEwmFBX0VjBd3ODGW9df0Is0FLaRFdMN8eAahQG9CN6LjQ28J8AFr19ngxqMSg7Qv6Uca/3VeeBosJh1bzu0w==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "12.3.4", + "@next/eslint-plugin-next": "13.3.0", "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", + "@typescript-eslint/parser": "^5.42.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.31.7", @@ -5832,13 +5424,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -5851,25 +5444,62 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", + "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", "dev": true, "dependencies": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "get-tsconfig": "^4.5.0", + "globby": "^13.1.3", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.5" }, "engines": { - "node": ">=4" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -5897,23 +5527,25 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -5924,12 +5556,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -5944,12 +5576,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", @@ -6445,7 +6071,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -6797,6 +6424,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", + "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -6840,6 +6476,12 @@ "node": ">=4" } }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6860,6 +6502,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -7215,22 +6869,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "peer": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -7262,6 +6900,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7579,6 +7218,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7812,6 +7466,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -8057,11 +7723,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -8133,23 +7794,6 @@ "node": ">=8" } }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -8192,6 +7836,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8540,14 +8185,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -8574,23 +8211,6 @@ } } }, - "node_modules/micro": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/micro/-/micro-9.4.1.tgz", - "integrity": "sha512-Lpjcbp6Y9GJIfewxDfTmu9eW0rt0MGo+Gs1d3yJLFa7mhErtKkCngGhDbA/O1gqUjEwsHh+jWPg8BJ0Bx4AgFA==", - "peer": true, - "dependencies": { - "arg": "4.1.0", - "content-type": "1.0.4", - "raw-body": "2.4.1" - }, - "bin": { - "micro": "bin/micro.js" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/micromark": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", @@ -9340,9 +8960,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9407,46 +9027,46 @@ "dev": true }, "node_modules/next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/next/-/next-12.3.4.tgz", - "integrity": "sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/next/-/next-13.3.0.tgz", + "integrity": "sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA==", "dependencies": { - "@next/env": "12.3.4", - "@swc/helpers": "0.4.11", + "@next/env": "13.3.0", + "@swc/helpers": "0.4.14", + "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=12.22.0" + "node": ">=14.6.0" }, "optionalDependencies": { - "@next/swc-android-arm-eabi": "12.3.4", - "@next/swc-android-arm64": "12.3.4", - "@next/swc-darwin-arm64": "12.3.4", - "@next/swc-darwin-x64": "12.3.4", - "@next/swc-freebsd-x64": "12.3.4", - "@next/swc-linux-arm-gnueabihf": "12.3.4", - "@next/swc-linux-arm64-gnu": "12.3.4", - "@next/swc-linux-arm64-musl": "12.3.4", - "@next/swc-linux-x64-gnu": "12.3.4", - "@next/swc-linux-x64-musl": "12.3.4", - "@next/swc-win32-arm64-msvc": "12.3.4", - "@next/swc-win32-ia32-msvc": "12.3.4", - "@next/swc-win32-x64-msvc": "12.3.4" + "@next/swc-darwin-arm64": "13.3.0", + "@next/swc-darwin-x64": "13.3.0", + "@next/swc-linux-arm64-gnu": "13.3.0", + "@next/swc-linux-arm64-musl": "13.3.0", + "@next/swc-linux-x64-gnu": "13.3.0", + "@next/swc-linux-x64-musl": "13.3.0", + "@next/swc-win32-arm64-msvc": "13.3.0", + "@next/swc-win32-ia32-msvc": "13.3.0", + "@next/swc-win32-x64-msvc": "13.3.0" }, "peerDependencies": { + "@opentelemetry/api": "^1.1.0", "fibers": ">= 3.1.0", "node-sass": "^6.0.0 || ^7.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, "fibers": { "optional": true }, @@ -9487,11 +9107,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==" - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -9515,6 +9130,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -9560,6 +9176,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9689,6 +9306,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -10067,6 +9701,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -10076,7 +9711,8 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/property-information": { "version": "6.2.0", @@ -10139,44 +9775,27 @@ } ] }, - "node_modules/raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "peer": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-is": { @@ -10488,12 +10107,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10526,14 +10145,6 @@ "node": ">=8" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -10620,6 +10231,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -10652,7 +10264,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sass": { "version": "1.56.1", @@ -10676,12 +10289,11 @@ "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/scuid": { @@ -10722,24 +10334,6 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "peer": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -10912,20 +10506,10 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, "engines": { "node": ">=10.0.0" } @@ -11130,9 +10714,12 @@ } }, "node_modules/styled-jsx": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, "engines": { "node": ">= 12.0.0" }, @@ -11194,10 +10781,27 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/tabbable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", - "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true }, "node_modules/table": { "version": "6.8.1", @@ -11254,6 +10858,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -11266,10 +10879,15 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } }, "node_modules/title-case": { "version": "3.0.3", @@ -11311,15 +10929,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "peer": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", @@ -11331,7 +10940,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/trim-lines": { "version": "3.0.1", @@ -11413,13 +11023,13 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -11486,18 +11096,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", @@ -11711,15 +11309,6 @@ "detect-node": "^2.0.4" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -11816,9 +11405,9 @@ } }, "node_modules/use-local-storage-state": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/use-local-storage-state/-/use-local-storage-state-17.2.0.tgz", - "integrity": "sha512-CcnSJ3oaCbb4aXPRpctXNoAOfJ1V4+OWLHrvA2s2hOYCE7HG0QEyKd324XAs7FsyXv/uzYcu7sPxn+KwvJIwlw==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/use-local-storage-state/-/use-local-storage-state-18.3.0.tgz", + "integrity": "sha512-SWInjtfTuptkw1S7ZmVxcXLpcNUlUIG3mvZahnXPWbltF4Kz/mOhnQ8cac681UxDHOEFqKdivxHMmeScMTeKZg==", "engines": { "node": ">=12" }, @@ -11826,14 +11415,14 @@ "url": "https://github.com/sponsors/astoilkov" }, "peerDependencies": { - "react": ">=16.8.0 < 18", - "react-dom": ">=16.8.0 < 18" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/use-session-storage-state": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-17.2.0.tgz", - "integrity": "sha512-oewLfAftpVm6d8HTuvtUD7jUGM1WB1noFQtBM8obgJhwT8wNZKpA8T5rZ44f3arAwYzsVOeJOgJL+FduPYDH2Q==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-18.1.1.tgz", + "integrity": "sha512-smeznwdz+7ClDng/9eDLt4Dh8Af8jRR1BqW0Ps6E998S/GZ8INoL73Qf0vb6UbvAAIs60FGstnyLmGz2AKEeWQ==", "engines": { "node": ">=12" }, @@ -11841,8 +11430,8 @@ "url": "https://github.com/sponsors/astoilkov" }, "peerDependencies": { - "react": ">=16.8.0 < 18", - "react-dom": ">=16.8.0 < 18" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/use-sidecar": { @@ -11880,14 +11469,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/uvu": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", @@ -12032,7 +11613,8 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/webpack-bundle-analyzer": { "version": "4.3.0", @@ -12093,18 +11675,11 @@ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", "dev": true }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "engines": { - "node": ">=12" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -12199,26 +11774,6 @@ } } }, - "node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "bin": { - "xss": "bin/xss" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/xss/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -12231,7 +11786,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -12328,113 +11884,6 @@ } } }, - "@apollo/protobufjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", - "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "long": "^4.0.0" - } - }, - "@apollo/usage-reporting-protobuf": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.0.2.tgz", - "integrity": "sha512-GfE8aDqi/lAFut95pjH9IRvH0zGsQ5G/2lYL0ZLZfML7ArX+A4UVHFANQcPCcUYGE6bI6OPhLekg4Vsjf6B1cw==", - "requires": { - "@apollo/protobufjs": "1.2.7" - } - }, - "@apollo/utils.dropunuseddefinitions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz", - "integrity": "sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==", - "requires": {} - }, - "@apollo/utils.keyvaluecache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz", - "integrity": "sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==", - "requires": { - "@apollo/utils.logger": "^1.0.0", - "lru-cache": "7.10.1 - 7.13.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==" - } - } - }, - "@apollo/utils.logger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-1.0.1.tgz", - "integrity": "sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==" - }, - "@apollo/utils.printwithreducedwhitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz", - "integrity": "sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==", - "requires": {} - }, - "@apollo/utils.removealiases": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz", - "integrity": "sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==", - "requires": {} - }, - "@apollo/utils.sortast": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz", - "integrity": "sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==", - "requires": { - "lodash.sortby": "^4.7.0" - } - }, - "@apollo/utils.stripsensitiveliterals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz", - "integrity": "sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==", - "requires": {} - }, - "@apollo/utils.usagereporting": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz", - "integrity": "sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==", - "requires": { - "@apollo/usage-reporting-protobuf": "^4.0.0", - "@apollo/utils.dropunuseddefinitions": "^1.1.0", - "@apollo/utils.printwithreducedwhitespace": "^1.1.0", - "@apollo/utils.removealiases": "1.0.0", - "@apollo/utils.sortast": "^1.1.0", - "@apollo/utils.stripsensitiveliterals": "^1.2.0" - } - }, - "@apollographql/apollo-tools": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz", - "integrity": "sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==", - "requires": {} - }, - "@apollographql/graphql-playground-html": { - "version": "1.6.29", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", - "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", - "requires": { - "xss": "^1.0.8" - } - }, "@ardatan/relay-compiler": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", @@ -13958,38 +13407,6 @@ } } }, - "@graphql-tools/mock": { - "version": "8.7.12", - "resolved": "https://registry.npmjs.org/@graphql-tools/mock/-/mock-8.7.12.tgz", - "integrity": "sha512-bEjj52T5idjzqFXfDZPFfPZDPFEjVmayYA6RYqMxM3Qdv5JJ8pSMEGDBcXhinbQudPKdRkLmR17usNmRMpUQEg==", - "requires": { - "@graphql-tools/schema": "9.0.10", - "@graphql-tools/utils": "9.1.1", - "fast-json-stable-stringify": "^2.1.0", - "tslib": "^2.4.0" - }, - "dependencies": { - "@graphql-tools/schema": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.10.tgz", - "integrity": "sha512-lV0o4df9SpPiaeeDAzgdCJ2o2N9Wvsp0SMHlF2qDbh9aFCFQRsXuksgiDm2yTgT3TG5OtUes/t0D6uPjPZFUbQ==", - "requires": { - "@graphql-tools/merge": "8.3.12", - "@graphql-tools/utils": "9.1.1", - "tslib": "^2.4.0", - "value-or-promise": "1.0.11" - } - }, - "@graphql-tools/utils": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.1.1.tgz", - "integrity": "sha512-DXKLIEDbihK24fktR2hwp/BNIVwULIHaSTNTNhXS+19vgT50eX9wndx1bPxGwHnVBOONcwjXy0roQac49vdt/w==", - "requires": { - "tslib": "^2.4.0" - } - } - } - }, "@graphql-tools/optimize": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.3.1.tgz", @@ -14203,28 +13620,6 @@ "dev": true, "requires": {} }, - "@hapi/accept": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz", - "integrity": "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==", - "requires": { - "@hapi/boom": "9.x.x", - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/boom": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", - "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", - "requires": { - "@hapi/hoek": "9.x.x" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -14248,11 +13643,6 @@ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", "dev": true }, - "@josephg/resolvable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz", - "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==" - }, "@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -14387,14 +13777,14 @@ } }, "@next/env": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.4.tgz", - "integrity": "sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==" + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.3.0.tgz", + "integrity": "sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==" }, "@next/eslint-plugin-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz", - "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.3.0.tgz", + "integrity": "sha512-wuGN5qSEjSgcq9fVkH0Y/qIPFjnZtW3ZPwfjJOn7l/rrf6y8J24h/lo61kwqunTyzZJm/ETGfGVU9PUs8cnzEA==", "dev": true, "requires": { "glob": "7.1.7" @@ -14416,82 +13806,58 @@ } } }, - "@next/swc-android-arm-eabi": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.4.tgz", - "integrity": "sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.4.tgz", - "integrity": "sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==", - "optional": true - }, "@next/swc-darwin-arm64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.4.tgz", - "integrity": "sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz", + "integrity": "sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w==", "optional": true }, "@next/swc-darwin-x64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.4.tgz", - "integrity": "sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.4.tgz", - "integrity": "sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.4.tgz", - "integrity": "sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz", + "integrity": "sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.4.tgz", - "integrity": "sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz", + "integrity": "sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.4.tgz", - "integrity": "sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz", + "integrity": "sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.4.tgz", - "integrity": "sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz", + "integrity": "sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.4.tgz", - "integrity": "sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz", + "integrity": "sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.4.tgz", - "integrity": "sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz", + "integrity": "sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.4.tgz", - "integrity": "sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz", + "integrity": "sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.4.tgz", - "integrity": "sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz", + "integrity": "sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==", "optional": true }, "@nodelib/fs.scandir": { @@ -14553,65 +13919,25 @@ "webcrypto-core": "^1.7.4" } }, + "@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + } + }, "@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, "@radix-ui/number": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", @@ -14629,24 +13955,46 @@ } }, "@radix-ui/react-arrow": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", - "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.2.tgz", + "integrity": "sha512-fqYwhhI9IarZ0ll2cUSfKuXHlJK0qE4AfnRrPBbRwEH/4mGQn04/QFGomLi8TXWIdv9WJk//KgGm+aDxVIr1wA==", "requires": { "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.1" + "@radix-ui/react-primitive": "1.0.2" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } } }, "@radix-ui/react-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", - "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.2.tgz", + "integrity": "sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==", "requires": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.0", "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.2", "@radix-ui/react-slot": "1.0.1" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } } }, "@radix-ui/react-compose-refs": { @@ -14708,6 +14056,32 @@ "@radix-ui/react-use-escape-keydown": "1.0.2" } }, + "@radix-ui/react-dropdown-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.4.tgz", + "integrity": "sha512-y6AT9+MydyXcByivdK1+QpjWoKaC7MLjkS/cH1Q3keEyMvDkiY85m8o2Bi6+Z1PPUlCsMULopxagQOSfN0wahg==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.4", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, "@radix-ui/react-focus-guards": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", @@ -14736,22 +14110,103 @@ "@radix-ui/react-use-layout-effect": "1.0.0" } }, + "@radix-ui/react-menu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", + "integrity": "sha512-mzKR47tZ1t193trEqlQoJvzY4u9vYfVH16ryBrVrCAGZzkgyWnMQYEZdUkM7y8ak9mrkKtJiqB47TlEnubeOFQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-roving-focus": "1.0.3", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "dependencies": { + "@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.3.tgz", + "integrity": "sha512-nXZOvFjOuHS1ovumntGV7NNoLaEp9JEvTht3MBjP44NSW5hUKj/8OnfN3+8WmB+CEhN44XaGhpHoSsUIEl5P7Q==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.2.tgz", + "integrity": "sha512-spwXlNTfeIprt+kaEWE/qYuYT3ZAqJiAGjN/JgdvgVDTu8yc+HuX+WOWXrKliKnLnwck0F6JDkqIERncnih+4A==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.2.tgz", + "integrity": "sha512-swu32idoCW7KA2VEiUZGBSu9nB6qwGdV6k6HYhUoOo3M1FFpD+VgLzUqtt3mwL1ssz7r2x8MggpLSQach2Xy/Q==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, "@radix-ui/react-popper": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", - "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.1.tgz", + "integrity": "sha512-keYDcdMPNMjSC8zTsZ8wezUMiWM9Yj14wtF3s0PTIs9srnEPC9Kt2Gny1T3T81mmSeyDjZxsD9N5WCwNNb712w==", "requires": { "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "0.7.2", - "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-arrow": "1.0.2", "@radix-ui/react-compose-refs": "1.0.0", "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.2", "@radix-ui/react-use-callback-ref": "1.0.0", "@radix-ui/react-use-layout-effect": "1.0.0", "@radix-ui/react-use-rect": "1.0.0", "@radix-ui/react-use-size": "1.0.0", "@radix-ui/rect": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } } }, "@radix-ui/react-portal": { @@ -14782,6 +14237,34 @@ "@radix-ui/react-slot": "1.0.1" } }, + "@radix-ui/react-roving-focus": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.3.tgz", + "integrity": "sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.2.tgz", + "integrity": "sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, "@radix-ui/react-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.0.tgz", @@ -14809,6 +14292,47 @@ "@radix-ui/react-visually-hidden": "1.0.1", "aria-hidden": "^1.1.1", "react-remove-scroll": "2.5.5" + }, + "dependencies": { + "@radix-ui/react-arrow": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.1.tgz", + "integrity": "sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.1.tgz", + "integrity": "sha512-uuiFbs+YCKjn3X1DTSx9G7BHApu4GHbi3kgiwsnFUbOKCrwejAJv4eE4Vc8C0Oaxt9T0aV4ox0WCOdx+39Xo+g==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-popper": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.0.tgz", + "integrity": "sha512-07U7jpI0dZcLRAxT7L9qs6HecSoPhDSJybF7mEGHJDBDv+ZoGCvIlva0s+WxMXwJEav+ckX3hAlXBtnHmuvlCQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + } } }, "@radix-ui/react-slot": { @@ -14912,120 +14436,6 @@ "@babel/runtime": "^7.13.10" } }, - "@reach/auto-id": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.17.0.tgz", - "integrity": "sha512-ud8iPwF52RVzEmkHq1twuqGuPA+moreumUHdtgvU3sr3/15BNhwp3KyDLrKKSz0LP1r3V4pSdyF9MbYM8BoSjA==", - "requires": { - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - } - }, - "@reach/descendants": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.17.0.tgz", - "integrity": "sha512-c7lUaBfjgcmKFZiAWqhG+VnXDMEhPkI4kAav/82XKZD6NVvFjsQOTH+v3tUkskrAPV44Yuch0mFW/u5Ntifr7Q==", - "requires": { - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - } - }, - "@reach/dropdown": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/dropdown/-/dropdown-0.17.0.tgz", - "integrity": "sha512-qBTIGInhxtPHtdj4Pl2XZgZMz3e37liydh0xR3qc48syu7g71sL4nqyKjOzThykyfhA3Pb3/wFgsFJKGTSdaig==", - "requires": { - "@reach/auto-id": "0.17.0", - "@reach/descendants": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "tslib": "^2.3.0" - } - }, - "@reach/listbox": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.17.0.tgz", - "integrity": "sha512-AMnH1P6/3VKy2V/nPb4Es441arYR+t4YRdh9jdcFVrCOD6y7CQrlmxsYjeg9Ocdz08XpdoEBHM3PKLJqNAUr7A==", - "requires": { - "@reach/auto-id": "0.17.0", - "@reach/descendants": "0.17.0", - "@reach/machine": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2" - } - }, - "@reach/machine": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.17.0.tgz", - "integrity": "sha512-9EHnuPgXzkbRENvRUzJvVvYt+C2jp7PGN0xon7ffmKoK8rTO6eA/bb7P0xgloyDDQtu88TBUXKzW0uASqhTXGA==", - "requires": { - "@reach/utils": "0.17.0", - "@xstate/fsm": "1.4.0", - "tslib": "^2.3.0" - } - }, - "@reach/menu-button": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.17.0.tgz", - "integrity": "sha512-YyuYVyMZKamPtivoEI6D0UEILYH3qZtg4kJzEAuzPmoR/aHN66NZO75Fx0gtjG1S6fZfbiARaCOZJC0VEiDOtQ==", - "requires": { - "@reach/dropdown": "0.17.0", - "@reach/popover": "0.17.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - }, - "@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" - }, - "@reach/popover": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.17.0.tgz", - "integrity": "sha512-yYbBF4fMz4Ml4LB3agobZjcZ/oPtPsNv70ZAd7lEC2h7cvhF453pA+zOBGYTPGupKaeBvgAnrMjj7RnxDU5hoQ==", - "requires": { - "@reach/portal": "0.17.0", - "@reach/rect": "0.17.0", - "@reach/utils": "0.17.0", - "tabbable": "^4.0.0", - "tslib": "^2.3.0" - } - }, - "@reach/portal": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.17.0.tgz", - "integrity": "sha512-+IxsgVycOj+WOeNPL2NdgooUdHPSY285wCtj/iWID6akyr4FgGUK7sMhRM9aGFyrGpx2vzr+eggbUmAVZwOz+A==", - "requires": { - "@reach/utils": "0.17.0", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - }, - "@reach/rect": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.17.0.tgz", - "integrity": "sha512-3YB7KA5cLjbLc20bmPkJ06DIfXSK06Cb5BbD2dHgKXjUkT9WjZaLYIbYCO8dVjwcyO3GCNfOmPxy62VsPmZwYA==", - "requires": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.17.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - }, - "@reach/utils": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.17.0.tgz", - "integrity": "sha512-M5y8fCBbrWeIsxedgcSw6oDlAMQDkl5uv3VnMVJ7guwpf4E48Xlh1v66z/1BgN/WYe2y8mB/ilFD2nysEfdGeA==", - "requires": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - }, "@repeaterjs/repeater": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", @@ -15039,9 +14449,9 @@ "dev": true }, "@swc/helpers": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", - "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", "requires": { "tslib": "^2.4.0" } @@ -15167,11 +14577,6 @@ "@types/lodash": "*" } }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, "@types/md5": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", @@ -15426,11 +14831,6 @@ "tslib": "^2.3.1" } }, - "@xstate/fsm": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.4.0.tgz", - "integrity": "sha512-uTHDeu2xI5E1IFwf37JFQM31RrH7mY7877RqPBS4ZqSNUwoLDuct8AhBWaXGnVizBAYyimVwgCyGa9z/NiRhXA==" - }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -15530,128 +14930,11 @@ "picomatch": "^2.0.4" } }, - "apollo-datasource": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-3.3.2.tgz", - "integrity": "sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==", - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "apollo-server-env": "^4.2.1" - } - }, - "apollo-reporting-protobuf": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.3.tgz", - "integrity": "sha512-L3+DdClhLMaRZWVmMbBcwl4Ic77CnEBPXLW53F7hkYhkaZD88ivbCVB1w/x5gunO6ZHrdzhjq0FHmTsBvPo7aQ==", - "requires": { - "@apollo/protobufjs": "1.2.6" - }, - "dependencies": { - "@apollo/protobufjs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.6.tgz", - "integrity": "sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - } - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - } - } - }, - "apollo-server-core": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.11.1.tgz", - "integrity": "sha512-t/eCKrRFK1lYZlc5pHD99iG7Np7CEm3SmbDiONA7fckR3EaB/pdsEdIkIwQ5QBBpT5JLp/nwvrZRVwhaWmaRvw==", - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "@apollo/utils.usagereporting": "^1.0.0", - "@apollographql/apollo-tools": "^0.5.3", - "@apollographql/graphql-playground-html": "1.6.29", - "@graphql-tools/mock": "^8.1.2", - "@graphql-tools/schema": "^8.0.0", - "@josephg/resolvable": "^1.0.0", - "apollo-datasource": "^3.3.2", - "apollo-reporting-protobuf": "^3.3.3", - "apollo-server-env": "^4.2.1", - "apollo-server-errors": "^3.3.1", - "apollo-server-plugin-base": "^3.7.1", - "apollo-server-types": "^3.7.1", - "async-retry": "^1.2.1", - "fast-json-stable-stringify": "^2.1.0", - "graphql-tag": "^2.11.0", - "loglevel": "^1.6.8", - "lru-cache": "^6.0.0", - "node-abort-controller": "^3.0.1", - "sha.js": "^2.4.11", - "uuid": "^9.0.0", - "whatwg-mimetype": "^3.0.0" - } - }, - "apollo-server-env": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-4.2.1.tgz", - "integrity": "sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==", - "requires": { - "node-fetch": "^2.6.7" - } - }, - "apollo-server-errors": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz", - "integrity": "sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==", - "requires": {} - }, - "apollo-server-micro": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/apollo-server-micro/-/apollo-server-micro-3.11.1.tgz", - "integrity": "sha512-4bETccnRotMQIg3ah4/NAWPppB05i5ePrTOuLBGBBQaV8bz1E4Md3snxSB8JkANND7sXmH9OCiKKeLFK8q8JaA==", - "requires": { - "@hapi/accept": "^5.0.2", - "apollo-server-core": "^3.11.1", - "apollo-server-types": "^3.7.1", - "type-is": "^1.6.18" - } - }, - "apollo-server-plugin-base": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.1.tgz", - "integrity": "sha512-g3vJStmQtQvjGI289UkLMfThmOEOddpVgHLHT2bNj0sCD/bbisj4xKbBHETqaURokteqSWyyd4RDTUe0wAUDNQ==", - "requires": { - "apollo-server-types": "^3.7.1" - } - }, - "apollo-server-types": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.7.1.tgz", - "integrity": "sha512-aE9RDVplmkaOj/OduNmGa+0a1B5RIWI0o3zC1zLvBTVWMKTpo0ifVf11TyMkLCY+T7cnZqVqwyShziOyC3FyUw==", - "requires": { - "@apollo/utils.keyvaluecache": "^1.0.1", - "@apollo/utils.logger": "^1.0.0", - "apollo-reporting-protobuf": "^3.3.3", - "apollo-server-env": "^4.2.1" - } - }, "arg": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==" + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true }, "argparse": { "version": "2.0.1", @@ -15766,14 +15049,6 @@ "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==" }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "requires": { - "retry": "0.13.1" - } - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -15820,14 +15095,14 @@ "dev": true }, "babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz", + "integrity": "sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-module-imports": "^7.16.0", "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", + "lodash": "^4.17.21", "picomatch": "^2.3.0" } }, @@ -15981,17 +15256,10 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, "requires": { "streamsearch": "^1.1.0" } }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "peer": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -16180,6 +15448,11 @@ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, + "client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -16255,12 +15528,6 @@ "upper-case": "^2.0.2" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "peer": true - }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -16348,11 +15615,6 @@ "postcss-value-parser": "^4.0.2" } }, - "cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" - }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -16413,6 +15675,12 @@ "clone": "^1.0.2" } }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -16428,12 +15696,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "peer": true - }, "dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", @@ -16524,6 +15786,16 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -16738,16 +16010,16 @@ } }, "eslint-config-next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz", - "integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.3.0.tgz", + "integrity": "sha512-6YEwmFBX0VjBd3ODGW9df0Is0FLaRFdMN8eAahQG9CN6LjQ28J8AFr19ngxqMSg7Qv6Uca/3VeeBosJh1bzu0w==", "dev": true, "requires": { - "@next/eslint-plugin-next": "12.3.4", + "@next/eslint-plugin-next": "13.3.0", "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", + "@typescript-eslint/parser": "^5.42.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", + "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.31.7", @@ -16755,13 +16027,14 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -16776,16 +16049,40 @@ } }, "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", + "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", "dev": true, "requires": { "debug": "^4.3.4", - "glob": "^7.2.0", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "get-tsconfig": "^4.5.0", + "globby": "^13.1.3", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "synckit": "^0.8.5" + }, + "dependencies": { + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } } }, "eslint-module-utils": { @@ -16809,33 +16106,35 @@ } }, "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -16846,12 +16145,6 @@ "requires": { "esutils": "^2.0.2" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true } } }, @@ -17136,7 +16429,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -17410,6 +16704,12 @@ "get-intrinsic": "^1.1.1" } }, + "get-tsconfig": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", + "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "dev": true + }, "github-slugger": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", @@ -17441,6 +16741,12 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -17455,6 +16761,18 @@ "slash": "^3.0.0" } }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -17711,19 +17029,6 @@ } } }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "peer": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, "http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -17749,6 +17054,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -17959,6 +17265,12 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -18116,6 +17428,15 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -18309,11 +17630,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -18366,16 +17682,6 @@ } } }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, "longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -18411,6 +17717,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18676,11 +17983,6 @@ "@types/mdast": "^3.0.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -18694,17 +17996,6 @@ "dev": true, "requires": {} }, - "micro": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/micro/-/micro-9.4.1.tgz", - "integrity": "sha512-Lpjcbp6Y9GJIfewxDfTmu9eW0rt0MGo+Gs1d3yJLFa7mhErtKkCngGhDbA/O1gqUjEwsHh+jWPg8BJ0Bx4AgFA==", - "peer": true, - "requires": { - "arg": "4.1.0", - "content-type": "1.0.4", - "raw-body": "2.4.1" - } - }, "micromark": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", @@ -19151,9 +18442,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mri": { @@ -19203,29 +18494,25 @@ "dev": true }, "next": { - "version": "12.3.4", - "resolved": "https://registry.npmjs.org/next/-/next-12.3.4.tgz", - "integrity": "sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/next/-/next-13.3.0.tgz", + "integrity": "sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA==", "requires": { - "@next/env": "12.3.4", - "@next/swc-android-arm-eabi": "12.3.4", - "@next/swc-android-arm64": "12.3.4", - "@next/swc-darwin-arm64": "12.3.4", - "@next/swc-darwin-x64": "12.3.4", - "@next/swc-freebsd-x64": "12.3.4", - "@next/swc-linux-arm-gnueabihf": "12.3.4", - "@next/swc-linux-arm64-gnu": "12.3.4", - "@next/swc-linux-arm64-musl": "12.3.4", - "@next/swc-linux-x64-gnu": "12.3.4", - "@next/swc-linux-x64-musl": "12.3.4", - "@next/swc-win32-arm64-msvc": "12.3.4", - "@next/swc-win32-ia32-msvc": "12.3.4", - "@next/swc-win32-x64-msvc": "12.3.4", - "@swc/helpers": "0.4.11", + "@next/env": "13.3.0", + "@next/swc-darwin-arm64": "13.3.0", + "@next/swc-darwin-x64": "13.3.0", + "@next/swc-linux-arm64-gnu": "13.3.0", + "@next/swc-linux-arm64-musl": "13.3.0", + "@next/swc-linux-x64-gnu": "13.3.0", + "@next/swc-linux-x64-musl": "13.3.0", + "@next/swc-win32-arm64-msvc": "13.3.0", + "@next/swc-win32-ia32-msvc": "13.3.0", + "@next/swc-win32-x64-msvc": "13.3.0", + "@swc/helpers": "0.4.14", + "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", "postcss": "8.4.14", - "styled-jsx": "5.0.7", - "use-sync-external-store": "1.2.0" + "styled-jsx": "5.1.1" } }, "next-mdx-remote": { @@ -19249,11 +18536,6 @@ "tslib": "^2.0.3" } }, - "node-abort-controller": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.0.1.tgz", - "integrity": "sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==" - }, "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -19264,6 +18546,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "requires": { "whatwg-url": "^5.0.0" } @@ -19294,7 +18577,8 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true }, "object-inspect": { "version": "1.12.2", @@ -19385,6 +18669,17 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -19667,6 +18962,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -19676,7 +18972,8 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true } } }, @@ -19717,35 +19014,21 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "peer": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-is": { @@ -19953,12 +19236,12 @@ "dev": true }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -19979,11 +19262,6 @@ "signal-exit": "^3.0.2" } }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -20039,7 +19317,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safe-regex-test": { "version": "1.0.0", @@ -20055,7 +19334,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sass": { "version": "1.56.1", @@ -20075,12 +19355,11 @@ } }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "scuid": { @@ -20118,21 +19397,6 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "peer": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -20268,17 +19532,10 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true - }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, "string_decoder": { "version": "1.3.0", @@ -20437,10 +19694,12 @@ } }, "styled-jsx": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", - "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", - "requires": {} + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "requires": { + "client-only": "0.0.1" + } }, "supports-color": { "version": "7.2.0", @@ -20473,10 +19732,23 @@ "use-sync-external-store": "^1.2.0" } }, - "tabbable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", - "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + } + } }, "table": { "version": "6.8.1", @@ -20522,6 +19794,12 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -20534,10 +19812,15 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } }, "title-case": { "version": "3.0.3", @@ -20570,12 +19853,6 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "peer": true - }, "totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", @@ -20584,7 +19861,8 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "trim-lines": { "version": "3.0.1", @@ -20632,13 +19910,13 @@ } }, "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "requires": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -20691,15 +19969,6 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typescript": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", @@ -20844,12 +20113,6 @@ "detect-node": "^2.0.4" } }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "peer": true - }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -20911,15 +20174,15 @@ "requires": {} }, "use-local-storage-state": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/use-local-storage-state/-/use-local-storage-state-17.2.0.tgz", - "integrity": "sha512-CcnSJ3oaCbb4aXPRpctXNoAOfJ1V4+OWLHrvA2s2hOYCE7HG0QEyKd324XAs7FsyXv/uzYcu7sPxn+KwvJIwlw==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/use-local-storage-state/-/use-local-storage-state-18.3.0.tgz", + "integrity": "sha512-SWInjtfTuptkw1S7ZmVxcXLpcNUlUIG3mvZahnXPWbltF4Kz/mOhnQ8cac681UxDHOEFqKdivxHMmeScMTeKZg==", "requires": {} }, "use-session-storage-state": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-17.2.0.tgz", - "integrity": "sha512-oewLfAftpVm6d8HTuvtUD7jUGM1WB1noFQtBM8obgJhwT8wNZKpA8T5rZ44f3arAwYzsVOeJOgJL+FduPYDH2Q==", + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-18.1.1.tgz", + "integrity": "sha512-smeznwdz+7ClDng/9eDLt4Dh8Af8jRR1BqW0Ps6E998S/GZ8INoL73Qf0vb6UbvAAIs60FGstnyLmGz2AKEeWQ==", "requires": {} }, "use-sidecar": { @@ -20943,11 +20206,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, "uvu": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", @@ -21063,7 +20321,8 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "webpack-bundle-analyzer": { "version": "4.3.0", @@ -21100,15 +20359,11 @@ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", "dev": true }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" - }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -21171,22 +20426,6 @@ "dev": true, "requires": {} }, - "xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", - "requires": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -21196,7 +20435,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index 2fb737f..4bcbaa0 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,9 @@ "@graphql-tools/utils": "^8.6.5", "@next/bundle-analyzer": "^12.0.3", "@radix-ui/react-dialog": "^1.0.2", + "@radix-ui/react-dropdown-menu": "^2.0.4", "@radix-ui/react-select": "^1.2.0", "@radix-ui/react-switch": "^1.0.1", - "@reach/listbox": "^0.17.0", - "@reach/menu-button": "^0.17.0", - "apollo-server-micro": "^3.10.3", "axios": "^1.2.2", "common-tags": "^1.8.0", "framer-motion": "^6.5.1", @@ -34,11 +32,11 @@ "hast-util-to-string": "^2.0.0", "lodash-es": "^4.17.21", "md5": "^2.3.0", - "next": "^12.3.0", + "next": "^13.3.0", "next-mdx-remote": "^4.3.0", "p-limit": "^3.1.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-query": "^3.29.0", "rehype-pretty-code": "^0.9.4", "rehype-slug": "^5.1.0", @@ -48,8 +46,8 @@ "styled-components": "^5.3.3", "swr": "^2.0.0", "unist-util-visit": "^4.1.2", - "use-local-storage-state": "^17.2.0", - "use-session-storage-state": "^17.2.0" + "use-local-storage-state": "^18.3.0", + "use-session-storage-state": "^18.1.1" }, "devDependencies": { "@graphql-codegen/cli": "^2.9.1", @@ -64,7 +62,7 @@ "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", "eslint": "7.32.0", - "eslint-config-next": "^12.0.8", + "eslint-config-next": "^13.3.0", "ts-node": "^10.8.1", "typescript": "^4.7.3" } diff --git a/src/components/button/VideoButton.tsx b/src/components/button/VideoButton.tsx index 8c40da2..6af67a1 100644 --- a/src/components/button/VideoButton.tsx +++ b/src/components/button/VideoButton.tsx @@ -25,7 +25,7 @@ interface VideoButtonProps extends ComponentPropsWithoutRef { export function VideoButton({ anime, theme, entry, video, ...props }: VideoButtonProps) { const { currentVideo } = useContext(PlayerContext); const videoSlug = createVideoSlug(theme, entry, video); - const isPlaying = currentVideo ? currentVideo.filename === video.filename : false; + const isPlaying = currentVideo ? currentVideo.id === video.id : false; return ( ` + width: 48px; + height: 64px; + object-fit: ${(props) => props.objectFit ?? "cover"}; + background: ${(props) => props.backgroundColor}; + + ${(props) => props.isPlaceholder ? css` + padding: 0.5rem; + object-fit: contain; + background-color: white; + ` : (props.isLoading ? loadingAnimation : null)} +`; + +const StyledBody = styled(Column)` + flex: 1; + justify-content: center; + gap: 0.25rem; + + word-break: break-all; +`; + +type SummaryCardProps = ComponentPropsWithoutRef & { + children?: ReactNode +}; + +export function SummaryCard({ children, ...props }: SummaryCardProps) { + return ( + + {children} + + ); +} + +SummaryCard.Body = StyledBody; + +interface SummaryCardTitleProps extends ComponentPropsWithoutRef { + children: ReactNode; +} + +SummaryCard.Title = function SummaryCardTitle({ children, ...props }: SummaryCardTitleProps) { + return ( + + {children} + + ); +}; + +interface SummaryCardDescriptionProps { + children: string | Array +} + +SummaryCard.Description = function SummaryCardDescription({ children }: SummaryCardDescriptionProps) { + return ( + + {typeof children === "string" ? children : children.filter((child) => child).map((child, index, { length }) => ( + <> + {child} + {index < length - 1 && ( + + )} + + ))} + + ); +}; + +interface SummaryCardCoverProps extends ComponentPropsWithoutRef { + src?: string; +} + +SummaryCard.Cover = function SummaryCardCover({ src, ...props }: SummaryCardCoverProps) { + const [ imageNotFound, setImageNotFound ] = useState(false); + const [ imageLoading, setImageLoading ] = useState(true); + + return ( + { + setImageLoading(false); + if (props?.onLoad) { + props.onLoad(event); + } + }} + onError={() => { + setImageNotFound(true); + setImageLoading(false); + if (props?.onError) { + props.onError(); + } + }} + /> + ); +}; diff --git a/src/components/card/VideoSummaryCard.tsx b/src/components/card/VideoSummaryCard.tsx index d412d25..8f97bed 100644 --- a/src/components/card/VideoSummaryCard.tsx +++ b/src/components/card/VideoSummaryCard.tsx @@ -1,13 +1,18 @@ -import { SongTitleWithArtists } from "components/utils"; +import { Performances, SongTitle, SongTitleWithArtists } from "components/utils"; import extractImages from "utils/extractImages"; import createVideoSlug from "utils/createVideoSlug"; -import { SummaryCard } from "components/card"; +import { SummaryCard } from "components/card/SummaryCard2"; import gql from "graphql-tag"; import styled from "styled-components"; import theme from "theme"; import type { VideoSummaryCardVideoFragment } from "generated/graphql"; import type { ReactNode } from "react"; import { TextLink } from "components/text/TextLink"; +import Link from "next/link"; +import { Icon } from "components/icon"; +import { faPlay } from "@fortawesome/pro-solid-svg-icons"; +import { useContext } from "react"; +import PlayerContext from "context/playerContext"; const StyledWrapper = styled.div` position: relative @@ -31,13 +36,30 @@ const StyledOverlayButtons = styled.div` } `; +const StyledCoverLink = styled(Link)` + position: relative; +`; + +const StyledCoverOverlay = styled.div` + position: absolute; + inset: 0; + + display: flex; + justify-content: center; + align-items: center; + + background-color: rgba(0, 0, 0, 0.5); +`; + interface VideoSummaryCardProps { video: VideoSummaryCardVideoFragment; - children?: ReactNode; menu?: ReactNode; + onPlay?(): void; } -export function VideoSummaryCard({ video, children, menu, ...props }: VideoSummaryCardProps) { +export function VideoSummaryCard({ video, menu, onPlay, ...props }: VideoSummaryCardProps) { + const { currentWatchListItem } = useContext(PlayerContext); + const entry = video.entries[0]; const theme = entry.theme; const anime = theme?.anime; @@ -48,26 +70,30 @@ export function VideoSummaryCard({ video, children, menu, ...props }: VideoSumma const { smallCover } = extractImages(anime); const videoSlug = createVideoSlug(theme, entry, video); - const to = `/anime/${anime.slug}/${videoSlug}`; - - const description = ( - - Video - {videoSlug}{theme.group && ` (${theme.group})`} - {anime.name} - - ); + const href = `/anime/${anime.slug}/${videoSlug}`; return ( - } - description={description} - image={smallCover} - to={to} - {...props} - > - {children} + + + + {currentWatchListItem === video ? ( + + + + ) : null} + + + + + + + + Video + {videoSlug}{theme.group && ` (${theme.group})`} + {anime.name} + + {menu ? ( event.stopPropagation()}> {menu} @@ -87,6 +113,7 @@ VideoSummaryCard.fragments = { ${createVideoSlug.fragments.video} fragment VideoSummaryCardVideo on Video { + id ...createVideoSlugVideo entries { ...createVideoSlugEntry diff --git a/src/components/dialog/PlaylistAddDialog.tsx b/src/components/dialog/PlaylistAddDialog.tsx index 600502d..697f3d0 100644 --- a/src/components/dialog/PlaylistAddDialog.tsx +++ b/src/components/dialog/PlaylistAddDialog.tsx @@ -7,7 +7,7 @@ import { SearchFilter } from "components/search-filter"; import { Input } from "components/form"; import type { FormEvent, ReactNode } from "react"; import { useState } from "react"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; import axios from "lib/client/axios"; import styled from "styled-components"; import { LoginGate } from "components/auth/LoginGate"; @@ -99,11 +99,11 @@ function PlaylistAddForm({ onSuccess, onCancel }: PlaylistAddFormProps) { Visibility - - Public - Unlisted - Private - + + Public + Unlisted + Private + diff --git a/src/components/dialog/PlaylistTrackRemoveDialog.tsx b/src/components/dialog/PlaylistTrackRemoveDialog.tsx index a38d6b5..b25f20a 100644 --- a/src/components/dialog/PlaylistTrackRemoveDialog.tsx +++ b/src/components/dialog/PlaylistTrackRemoveDialog.tsx @@ -20,7 +20,7 @@ import { Busy } from "components/utils/Busy"; interface PlaylistTrackRemoveDialogProps { playlist: PlaylistTrackRemoveDialogPlaylistFragment; - trackId: number; + trackId: string; video: PlaylistTrackRemoveDialogVideoFragment; trigger?: ReactNode; } @@ -76,7 +76,7 @@ PlaylistTrackRemoveDialog.fragments = { interface PlaylistTrackRemoveFormProps { playlist: PlaylistTrackRemoveDialogPlaylistFragment; - trackId: number; + trackId: string; video: PlaylistTrackRemoveDialogVideoFragment; onSuccess(): void; onCancel(): void; diff --git a/src/components/filter/AnimeThemeFilter.tsx b/src/components/filter/AnimeThemeFilter.tsx index 16b8d81..bbfb2df 100644 --- a/src/components/filter/AnimeThemeFilter.tsx +++ b/src/components/filter/AnimeThemeFilter.tsx @@ -5,7 +5,7 @@ import { HorizontalScroll } from "components/utils"; import { either, themeIndexComparator, themeTypeComparator } from "utils/comparators"; import gql from "graphql-tag"; import type { AnimeThemeFilterThemeFragment } from "generated/graphql"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface AnimeThemeFilterProps { themes: Array @@ -51,18 +51,18 @@ function AnimeThemeFilterInternal({ themes }: AnimeThemeFilterProps) { {groups.length > 1 && ( - + {groups.map((group) => ( - {group.name} + {group.name} ))} - + )} {hasMultipleTypes && ( - - - OP - ED - + + + OP + ED + )} diff --git a/src/components/listbox/Listbox.tsx b/src/components/listbox/Listbox.tsx index 0d9833e..225e568 100644 --- a/src/components/listbox/Listbox.tsx +++ b/src/components/listbox/Listbox.tsx @@ -1,84 +1,170 @@ -import { ListboxCustom, ListboxNative } from "components/listbox"; +import styled from "styled-components"; +import { faCheck, faSort, faTimes } from "@fortawesome/pro-solid-svg-icons"; +import { Button } from "components/button"; import theme from "theme"; -import type { ReactNode } from "react"; -import { createContext, useContext } from "react"; -import useMediaQuery from "hooks/useMediaQuery"; +import * as RadixSelect from "@radix-ui/react-select"; +import { flipDown } from "styles/animations"; +import { Icon } from "components/icon"; +import { forwardRef } from "react"; -const ListboxContext = createContext({ - isMobile: false -}); +// Radix' listbox can't handle null values, so we are giving it a fake null value. +const NULL_VALUE = "__NULL__"; -export interface ListboxProps { - children: ReactNode - value: T - onChange: (newValue: T) => void - resettable?: boolean - defaultValue?: T | null - highlightNonDefault?: boolean - disabled?: boolean +const StyledListboxButton = styled(Button)` + display: inline-flex; + align-items: center; + justify-content: space-between; + + white-space: nowrap; + gap: 8px; + + &:focus { + box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}; + } +`; +const StyledListboxReset = styled.span` + display: inline-block; + isolation: isolate; + margin: -8px; + padding: 8px; +`; +const StyledListboxPopover = styled(RadixSelect.Portal)` + z-index: ${theme.zIndices.menuPopover}; + + min-width: max-content; + padding: 0; + border-radius: 8px; + overflow: auto; + + background-color: ${theme.colors["solid"]}; + box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}, ${theme.shadows.high}; + + transform-origin: top; + animation: ${flipDown} 200ms ease-out; + + // Revert CSS rules set by Radix UI which hide the native scrollbar. + [data-radix-select-viewport] { + scrollbar-width: revert; + -ms-overflow-style: revert; + } + [data-radix-select-viewport]::-webkit-scrollbar { + display: revert; + } +`; +const StyledListboxList = styled(RadixSelect.Content)` + width: var(--radix-select-trigger-width); + max-height: calc(var(--radix-select-content-available-height) - 32px); + padding: 8px 0; +`; +const StyledListboxOption = styled(RadixSelect.Item)` + display: ${(props) => props.hidden ? "none" : "flex"}; + align-items: center; + justify-content: space-between; + + padding: 8px 16px; + gap: 8px; + + color: ${theme.colors["text-muted"]}; + cursor: pointer; + + &[data-highlighted] { + background-color: ${theme.colors["solid-on-card"]}; + color: ${theme.colors["text"]}; + outline: none; + } + + &[data-state="checked"] { + color: ${theme.colors["text-primary"]}; + } +`; + +type ListboxProps = + Omit + & (PropsNullable | PropsNotNullable) + & { + resettable?: boolean; + highlightNonDefault?: boolean; + }; + +interface PropsNullable { + nullable: true; + value: string | null; + onValueChange(newValue: string | null): void; + defaultValue?: string | null; } -export function Listbox({ - value, - onChange, +interface PropsNotNullable { + nullable?: false; + value: string; + onValueChange(newValue: string): void; + defaultValue?: string; +} - // Adds a reset button to the list box once a non-default value has been selected. - resettable = false, +export const Listbox = forwardRef( + function Listbox({ + value, + onValueChange, + defaultValue, + nullable, + resettable, + highlightNonDefault, + children, + ...props + }, ref) { + const radixValue = value === null ? NULL_VALUE : value; + const radixOnValueChange = (newValue: string) => { + if (nullable) { + onValueChange(newValue === NULL_VALUE ? null : newValue); + } else { + onValueChange(newValue); + } + }; + const radixDefaultValue = defaultValue === null ? NULL_VALUE : defaultValue; - // The value to return to after a reset. - defaultValue = null, - - // Highlights the listbox if an option other than defaultValue is selected. - highlightNonDefault = false, - - disabled = false, - ...props -}: ListboxProps) { - const isMobile = useMediaQuery(`(max-width: ${theme.breakpoints.mobileMax})`); - - if (isMobile) { return ( - - - + + + + + + {(resettable && radixDefaultValue && value !== defaultValue) ? ( + radixOnValueChange(radixDefaultValue)} + onPointerDown={(event) => event.stopPropagation()} + > + + + ) : ( + + )} + + + + + + {children} + + + ); } +); - return ( - - - - ); +export interface ListboxOptionProps extends Omit { + value: string | null; } -export interface ListboxOptionProps { - value?: string | null - children: string - hidden?: boolean -} +export const ListboxOption = forwardRef( + function ListboxOption({ value, children, ...props }, ref) { + const radixValue = value === null ? NULL_VALUE : value; -Listbox.Option = function ListboxOption(props: ListboxOptionProps) { - const { isMobile } = useContext(ListboxContext); - - if (isMobile) { - return ; + return ( + + {children} + + + + + ); } - - return ; -}; +); diff --git a/src/components/listbox/Listbox2.tsx b/src/components/listbox/Listbox2.tsx deleted file mode 100644 index 5dc9939..0000000 --- a/src/components/listbox/Listbox2.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import styled from "styled-components"; -import { faCheck, faSort, faTimes } from "@fortawesome/pro-solid-svg-icons"; -import { Button } from "components/button"; -import theme from "theme"; -import * as RadixSelect from "@radix-ui/react-select"; -import { flipDown } from "styles/animations"; -import { Icon } from "components/icon"; -import { forwardRef } from "react"; - -// Radix' listbox can't handle null values, so we are giving it a fake null value. -const NULL_VALUE = "__NULL__"; - -const StyledListboxButton = styled(Button)` - display: inline-flex; - align-items: center; - justify-content: space-between; - - white-space: nowrap; - gap: 8px; - - &:focus { - box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}; - } -`; -const StyledListboxReset = styled.span` - display: inline-block; - isolation: isolate; - margin: -8px; - padding: 8px; -`; -const StyledListboxPopover = styled(RadixSelect.Portal)` - z-index: ${theme.zIndices.menuPopover}; - - min-width: max-content; - padding: 0; - border-radius: 8px; - overflow: auto; - - background-color: ${theme.colors["solid"]}; - box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}, ${theme.shadows.high}; - - transform-origin: top; - animation: ${flipDown} 200ms ease-out; - - // Revert CSS rules set by Radix UI which hide the native scrollbar. - [data-radix-select-viewport] { - scrollbar-width: revert; - -ms-overflow-style: revert; - } - [data-radix-select-viewport]::-webkit-scrollbar { - display: revert; - } -`; -const StyledListboxList = styled(RadixSelect.Content)` - width: var(--radix-select-trigger-width); - max-height: calc(var(--radix-select-content-available-height) - 32px); - padding: 8px 0; -`; -const StyledListboxOption = styled(RadixSelect.Item)` - display: ${(props) => props.hidden ? "none" : "flex"}; - align-items: center; - justify-content: space-between; - - padding: 8px 16px; - gap: 8px; - - color: ${theme.colors["text-muted"]}; - cursor: pointer; - - &[data-highlighted] { - background-color: ${theme.colors["solid-on-card"]}; - color: ${theme.colors["text"]}; - outline: none; - } - - &[data-state="checked"] { - color: ${theme.colors["text-primary"]}; - } -`; - -type ListboxProps = - Omit - & (PropsNullable | PropsNotNullable) - & { - resettable?: boolean; - highlightNonDefault?: boolean; - }; - -interface PropsNullable { - nullable: true; - value: string | null; - onValueChange(newValue: string | null): void; - defaultValue?: string | null; -} - -interface PropsNotNullable { - nullable?: false; - value: string; - onValueChange(newValue: string): void; - defaultValue?: string; -} - -export const Listbox2 = forwardRef( - function Listbox({ - value, - onValueChange, - defaultValue, - nullable, - resettable, - highlightNonDefault, - children, - ...props - }, ref) { - const radixValue = value === null ? NULL_VALUE : value; - const radixOnValueChange = (newValue: string) => { - if (nullable) { - onValueChange(newValue === NULL_VALUE ? null : newValue); - } else { - onValueChange(newValue); - } - }; - const radixDefaultValue = defaultValue === null ? NULL_VALUE : defaultValue; - - return ( - - - - - - {(resettable && radixDefaultValue && value !== defaultValue) ? ( - radixOnValueChange(radixDefaultValue)} - onPointerDown={(event) => event.stopPropagation()} - > - - - ) : ( - - )} - - - - - - {children} - - - - ); - } -); - -export interface ListboxOptionProps extends Omit { - value: string | null; -} - -export const Listbox2Option = forwardRef( - function ListboxOption({ value, children, ...props }, ref) { - const radixValue = value === null ? NULL_VALUE : value; - - return ( - - {children} - - - - - ); - } -); diff --git a/src/components/listbox/ListboxCustom.tsx b/src/components/listbox/ListboxCustom.tsx deleted file mode 100644 index 7f31a0e..0000000 --- a/src/components/listbox/ListboxCustom.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import styled from "styled-components"; -import { faCheck, faSort, faTimes } from "@fortawesome/pro-solid-svg-icons"; -import { Button } from "components/button"; -import { Text } from "components/text"; -import theme from "theme"; -import { - ListboxButton, - ListboxInput, - ListboxList, - ListboxOption, - ListboxPopover, - useListboxContext, -} from "@reach/listbox"; -import { flipDown } from "styles/animations"; -import { Icon } from "components/icon"; -import type { ListboxOptionProps, ListboxProps } from "components/listbox/Listbox"; -import type { SyntheticEvent } from "react"; - -// ReachUI's listbox can't handle null values, so we are giving it a fake null value. -// The caveat is, that we can't use this value normally, thus it's obscure name. -const NULL_VALUE = "__NULL__"; - -const StyledListbox = styled(ListboxInput)` - display: inline-block; -`; -const StyledListboxButton = styled(Button)` - display: flex; - align-items: center; - justify-content: space-between; - - width: 100%; - white-space: nowrap; - gap: 8px; - - &[aria-expanded="true"] { - box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}; - } -`; -const StyledListboxReset = styled.span` - display: inline-block; - isolation: isolate; - margin: -8px; - padding: 8px; -`; -const StyledListboxPopover = styled(ListboxPopover)` - z-index: ${theme.zIndices.menuPopover}; - - min-width: max-content; - margin-top: 0.5rem; - padding: 0; - border-radius: 0.5rem; - overflow: hidden; - - background-color: ${theme.colors["solid"]}; - box-shadow: 0 0 0 2px ${theme.colors["text-primary"]}, ${theme.shadows.high}; - - transform-origin: top; - animation: ${flipDown} 200ms ease-out; -`; -const StyledListboxList = styled(ListboxList)` - max-height: 33vh; - margin: 0; - padding: 0.5rem 0; - list-style: none; - overflow: auto; -`; -const StyledListboxOption = styled(ListboxOption)` - display: ${(props) => props.hidden ? "none" : "flex"}; - align-items: center; - justify-content: space-between; - - padding: 0.5rem 1rem; - gap: 8px; - - color: ${theme.colors["text-muted"]}; - cursor: pointer; - - &[data-current-nav] { - background-color: ${theme.colors["solid-on-card"]}; - color: ${theme.colors["text"]}; - } - - &[data-current-selected] { - color: ${theme.colors["text-primary"]}; - } -`; - -export function ListboxCustom({ - children, - value, - onChange, - resettable, - defaultValue = null, - highlightNonDefault, - disabled, - ...props -}: ListboxProps) { - function handleChange(newValue: unknown) { - if (newValue === NULL_VALUE) { - onChange(null as T); - } else{ - onChange(newValue as T); - } - } - - function handleResetClick() { - if (!disabled) { - onChange(defaultValue as T); - } - } - - function stopPropagation(event: SyntheticEvent) { - event.stopPropagation(); - } - - return ( - - {({ valueLabel }) => ( - <> - - {valueLabel} - {(resettable && value !== defaultValue) ? ( - - - - ) : ( - - )} - - - - {children} - - - - )} - - ); -} - -ListboxCustom.Option = function ListboxCustomOption({ value, children, hidden = false }: ListboxOptionProps) { - const context = useListboxContext(); - - if (!context) { - return null; - } - - return ( - - ); -}; diff --git a/src/components/listbox/ListboxNative.tsx b/src/components/listbox/ListboxNative.tsx deleted file mode 100644 index 286c253..0000000 --- a/src/components/listbox/ListboxNative.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import styled from "styled-components"; -import { faSort, faTimes } from "@fortawesome/pro-solid-svg-icons"; -import { Button } from "components/button"; -import { Text } from "components/text"; -import theme from "theme"; -import type { SyntheticEvent } from "react"; -import { createContext, useCallback, useContext, useEffect, useState } from "react"; -import { Icon } from "components/icon"; -import type { ListboxOptionProps, ListboxProps } from "components/listbox/Listbox"; - -const NULL_VALUE = "__NULL__"; - -interface IListboxContext { - setLabel: (value: string | null, label: string) => void - removeLabel: (value: string | null) => void -} - -const ListboxContext = createContext({ - setLabel: () => { /* Do nothing. */ }, - removeLabel: () => { /* Do nothing. */ }, -}); - -const StyledListbox = styled.div` - display: inline-block; - position: relative; -`; -const StyledListboxButton = styled(Button)` - display: flex; - align-items: center; - justify-content: space-between; - - width: 100%; - white-space: nowrap; - gap: 8px; -`; -const StyledListboxReset = styled.span` - display: inline-block; - isolation: isolate; - margin: -8px; - padding: 8px; -`; -const StyledSelect = styled.select` - position: absolute; - opacity: 0; - - width: 100%; - height: 100%; - - background-color: ${theme.colors["solid"]}; - color: ${theme.colors["text-muted"]}; -`; - -export function ListboxNative({ - children, - value, - onChange, - resettable, - defaultValue = null, - highlightNonDefault, - disabled, - ...props -}: ListboxProps) { - const [valueLabels, setValueLabels] = useState(() => new Map()); - - const contextValue: IListboxContext = { - setLabel: useCallback((value, label) => { - setValueLabels((oldMap) => { - const newMap = new Map(oldMap); - newMap.set(value, label); - return newMap; - }); - }, []), - removeLabel: useCallback((value) => { - setValueLabels((oldMap) => { - const newMap = new Map(oldMap); - newMap.delete(value); - return newMap; - }); - }, []) - }; - - function handleChange(newValue: T) { - if (newValue === NULL_VALUE) { - onChange(null as T); - } else{ - onChange(newValue); - } - } - - function handleResetClick() { - if (!disabled) { - onChange(defaultValue as T); - } - } - - function stopPropagation(event: SyntheticEvent) { - event.stopPropagation(); - } - - return ( - - handleChange(event.target.value as T)} - > - - {children} - - - - {valueLabels.get(value)} - {(resettable && value !== defaultValue) ? ( - - - - ) : ( - - )} - - - ); -} - -ListboxNative.Option = function ListboxNativeOption({ value = null, children }: ListboxOptionProps) { - const { setLabel, removeLabel } = useContext(ListboxContext); - - useEffect(() => { - setLabel(value, children); - - return () => removeLabel(value); - }, [children, removeLabel, setLabel, value]); - - return ( - - ); -}; diff --git a/src/components/listbox/index.ts b/src/components/listbox/index.ts deleted file mode 100644 index 5df599b..0000000 --- a/src/components/listbox/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { Listbox } from "./Listbox"; -export { ListboxCustom } from "./ListboxCustom"; -export { ListboxNative } from "./ListboxNative"; diff --git a/src/components/menu/Menu.tsx b/src/components/menu/Menu.tsx index 6fc9ecf..1d5b934 100644 --- a/src/components/menu/Menu.tsx +++ b/src/components/menu/Menu.tsx @@ -1,20 +1,16 @@ import styled from "styled-components"; -import { Menu as ReachMenu, MenuButton, MenuItem, MenuItems, MenuPopover, } from "@reach/menu-button"; -import { Button } from "components/button"; import theme from "theme"; -import { withHover } from "styles/mixins"; -import { Icon } from "components/icon"; -import { faEllipsisV } from "@fortawesome/pro-solid-svg-icons"; -import { fadeIn, flipDown, slideIn } from "styles/animations"; -import type { ComponentPropsWithoutRef, PropsWithChildren, ReactNode } from "react"; +import { flipDown } from "styles/animations"; +import { forwardRef } from "react"; +import type { DropdownMenuContentProps } from "@radix-ui/react-dropdown-menu"; +import * as RadixMenu from "@radix-ui/react-dropdown-menu"; -const StyledMenuItems = styled(MenuItems)` +const StyledMenuContent = styled(RadixMenu.Content)` z-index: ${theme.zIndices.menuPopover}; width: max-content; - margin-top: 0.5rem; - padding: 0.5rem 0; - border-radius: 0.5rem; + padding: 8px 0; + border-radius: 8px; overflow: hidden; background-color: ${theme.colors["solid"]}; @@ -22,72 +18,36 @@ const StyledMenuItems = styled(MenuItems)` transform-origin: top; animation: ${flipDown} 200ms ease-out; - - @media (max-width: 720px) { - position: fixed; - left: 0; - right: 0; - bottom: 0; - width: 100%; - border-radius: 1rem 1rem 0 0; - z-index: ${theme.zIndices.toast}; - background-color: ${theme.colors["solid"]}; - box-shadow: ${theme.shadows.high}; - animation: ${slideIn()} 200ms both; - } `; -const StyledMenuItem = styled(MenuItem)` + +export const Menu = RadixMenu.Root; +export const MenuTrigger = RadixMenu.Trigger; + +export const MenuContent = forwardRef( + function MenuContent({ children, ...props }, forwardedRef) { + return ( + + + {children} + + + ); + } +); + +export const MenuItem = styled(RadixMenu.Item)` display: flex; align-items: center; gap: 8px; width: 100%; - padding: 0.5rem 1rem; + padding: 8px 16px; cursor: pointer; color: ${theme.colors["text-muted"]}; - - ${withHover` + + &[data-highlighted] { background-color: ${theme.colors["solid-on-card"]}; color: ${theme.colors["text"]}; - `} -`; -const StyledMenuOverlay = styled(MenuPopover)` - @media (max-width: 720px) { - position: fixed !important; - inset: 0 !important; - z-index: ${theme.zIndices.menuOverlay}; - background-color: rgba(0, 0, 0, 0.5); - animation: ${fadeIn} 200ms both; + outline: none; } `; - -interface MenuProps extends PropsWithChildren { - button?: (button: typeof MenuButton) => ReactNode -} - -export function Menu({ button, children }: MenuProps) { - return ( - - {button ? button(MenuButton) : ( - - )} - - - {children} - - - - ); -} - -interface MenuOptionProps extends PropsWithChildren, ComponentPropsWithoutRef {} - -Menu.Option = function MenuOption({ children, ...props }: MenuOptionProps) { - return ( - { /* do nothing */ }} {...props}> - {children} - - ); -}; diff --git a/src/components/menu/ThemeMenu.tsx b/src/components/menu/ThemeMenu.tsx index d7aa3a2..d17be70 100644 --- a/src/components/menu/ThemeMenu.tsx +++ b/src/components/menu/ThemeMenu.tsx @@ -1,13 +1,14 @@ import { Icon } from "components/icon"; -import { faListMusic } from "@fortawesome/pro-solid-svg-icons"; +import { faEllipsisV, faListMusic } from "@fortawesome/pro-solid-svg-icons"; import { Text } from "components/text"; -import { Menu } from "components/menu"; import type { ThemeMenuThemeFragment } from "generated/graphql"; import { PlaylistTrackAddDialog } from "components/dialog/PlaylistTrackAddDialog"; import gql from "graphql-tag"; import { SongTitleWithArtists } from "components/utils"; import extractImages from "utils/extractImages"; import createVideoSlug from "utils/createVideoSlug"; +import { Menu, MenuContent, MenuItem, MenuTrigger } from "components/menu/Menu"; +import { Button } from "components/button"; interface ThemeMenuProps { theme: ThemeMenuThemeFragment; @@ -22,24 +23,31 @@ export function ThemeMenu({ theme }: ThemeMenuProps) { } return ( - - - - Add to Playlist - - } - /> + + + + + + event.preventDefault()}> + + Add to Playlist + + } + /> + ); } diff --git a/src/components/menu/index.ts b/src/components/menu/index.ts deleted file mode 100644 index 434f6e3..0000000 --- a/src/components/menu/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Menu } from "components/menu/Menu"; diff --git a/src/components/search-filter/SearchFilterFirstLetter.tsx b/src/components/search-filter/SearchFilterFirstLetter.tsx index e700532..d588ef9 100644 --- a/src/components/search-filter/SearchFilterFirstLetter.tsx +++ b/src/components/search-filter/SearchFilterFirstLetter.tsx @@ -1,6 +1,6 @@ import { Text } from "components/text"; import { SearchFilter } from "components/search-filter"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; const letters = createLetters(); @@ -13,12 +13,12 @@ export function SearchFilterFirstLetter({ value, setValue }: SearchFilterFirstLe return ( First Letter - - + + {letters.map((letter) => ( - {letter} + {letter} ))} - + ); } diff --git a/src/components/search-filter/SearchFilterSeason.tsx b/src/components/search-filter/SearchFilterSeason.tsx index 89593f5..156b152 100644 --- a/src/components/search-filter/SearchFilterSeason.tsx +++ b/src/components/search-filter/SearchFilterSeason.tsx @@ -1,6 +1,6 @@ import { Text } from "components/text"; import { SearchFilter } from "components/search-filter"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface SearchFilterSeasonProps { value: string | null @@ -11,13 +11,13 @@ export function SearchFilterSeason({ value, setValue }: SearchFilterSeasonProps) return ( Season - - - Winter - Spring - Summer - Fall - + + + Winter + Spring + Summer + Fall + ); } diff --git a/src/components/search-filter/SearchFilterSortBy.tsx b/src/components/search-filter/SearchFilterSortBy.tsx index 2306c54..ef469dd 100644 --- a/src/components/search-filter/SearchFilterSortBy.tsx +++ b/src/components/search-filter/SearchFilterSortBy.tsx @@ -1,8 +1,8 @@ import { Text } from "components/text"; import { SearchFilter } from "components/search-filter"; import type { ReactNode } from "react"; -import type { ListboxOptionProps } from "components/listbox/Listbox2"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import type { ListboxOptionProps } from "components/listbox/Listbox"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface SearchFilterSortByProps { children: ReactNode @@ -14,13 +14,13 @@ export function SearchFilterSortBy({ children, value, s return ( Sort by - + {children} - + ); } SearchFilterSortBy.Option = function SearchFilterSortByOption(props: ListboxOptionProps) { - return ; + return ; }; diff --git a/src/components/search-filter/SearchFilterThemeType.tsx b/src/components/search-filter/SearchFilterThemeType.tsx index fda1612..4d8545c 100644 --- a/src/components/search-filter/SearchFilterThemeType.tsx +++ b/src/components/search-filter/SearchFilterThemeType.tsx @@ -1,6 +1,6 @@ import { Text } from "components/text"; import { SearchFilter } from "components/search-filter"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface SearchFilterThemeTypeProps { value: string | null @@ -11,11 +11,11 @@ export function SearchFilterThemeType({ value, setValue }: SearchFilterThemeType return ( Type - - - OP - ED - + + + OP + ED + ); } diff --git a/src/components/search-filter/SearchFilterYear.tsx b/src/components/search-filter/SearchFilterYear.tsx index aa36552..baf9ee7 100644 --- a/src/components/search-filter/SearchFilterYear.tsx +++ b/src/components/search-filter/SearchFilterYear.tsx @@ -1,7 +1,7 @@ import { Text } from "components/text"; import useYearList from "hooks/useYearList"; import { SearchFilter } from "components/search-filter"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface SearchFilterYearProps { value: string | null @@ -14,12 +14,12 @@ export function SearchFilterYear({ value, setValue }: SearchFilterYearProps) { return ( Year - - + + {yearList.map((year) => ( - {String(year)} + {String(year)} ))} - + ); } diff --git a/src/components/utils/SongTitle.tsx b/src/components/utils/SongTitle.tsx index 8b81968..d21ca36 100644 --- a/src/components/utils/SongTitle.tsx +++ b/src/components/utils/SongTitle.tsx @@ -2,25 +2,26 @@ import Link from "next/link"; import { Text } from "components/text"; import gql from "graphql-tag"; import type { SongTitleSongFragment } from "generated/graphql"; +import type { ComponentPropsWithoutRef } from "react"; -export interface SongTitleProps { +export interface SongTitleProps extends ComponentPropsWithoutRef { song: SongTitleSongFragment | null - songTitleLinkTo?: string + href?: string } -export function SongTitle({ song, songTitleLinkTo }: SongTitleProps) { +export function SongTitle({ song, href, ...props }: SongTitleProps) { const songTitle = song?.title || "T.B.A."; - if (songTitleLinkTo) { + if (href) { return ( - - {songTitle} + + {songTitle} ); } return ( - {songTitle} + {songTitle} ); } diff --git a/src/components/utils/SongTitleWithArtists.tsx b/src/components/utils/SongTitleWithArtists.tsx index 4fbbbce..20b8147 100644 --- a/src/components/utils/SongTitleWithArtists.tsx +++ b/src/components/utils/SongTitleWithArtists.tsx @@ -13,7 +13,7 @@ interface SongTitleWithArtistsProps { export function SongTitleWithArtists({ song, songTitleLinkTo, artist }: SongTitleWithArtistsProps) { return ( - + ); diff --git a/src/components/video-player-2/VideoPlayer2.style.ts b/src/components/video-player-2/VideoPlayer2.style.ts index c63c825..66189d5 100644 --- a/src/components/video-player-2/VideoPlayer2.style.ts +++ b/src/components/video-player-2/VideoPlayer2.style.ts @@ -1,16 +1,8 @@ -import styled, { keyframes } from "styled-components"; +import styled from "styled-components"; import theme from "theme"; import { Switcher } from "components/switcher"; import { Solid } from "components/box"; - -const slowPan = keyframes` - from, to { - object-position: top; - } - 50% { - object-position: bottom; - } -`; +import { IconTextButton } from "components/button"; export const StyledPlayer = styled.div` position: sticky; @@ -25,10 +17,10 @@ export const StyledPlayerContent = styled.div` flex: 1; display: grid; - grid-template-columns: 2fr 1fr; - grid-gap: 128px; + grid-template-columns: 3fr 1fr; + grid-gap: 5%; - padding: 0 128px; + padding: 0 5%; @media (max-width: ${theme.breakpoints.tabletMax}) { grid-template-columns: 1fr; @@ -40,15 +32,60 @@ export const StyledPlayerContent = styled.div` `; export const StyledPlaybackArea = styled.div` - align-self: center; - aspect-ratio: 16 / 9; - overflow: hidden; - + align-self: stretch; + justify-self: stretch; + + padding: 16px 0; + @media (max-width: ${theme.breakpoints.tabletMax}) { margin: 0 -16px; } `; +export const StyledVideoBackground = styled.div` + position: relative; + + display: flex; + + width: 100%; + height: 100%; +`; + +export const StyledVideo = styled.video` + position: absolute; + inset: 0; + margin: auto; + + max-height: 100%; + + outline: none; + + @media (max-width: ${theme.breakpoints.tabletMax}) { + position: static; + } +`; + +export const StyledAudioBackground = styled.div` + position: relative; + + display: flex; + + width: 100%; + height: 100%; +`; + +export const StyledAudio = styled.audio` + display: none; +`; + +export const StyledAudioCover = styled.img` + position: absolute; + inset: 0; + margin: auto; + + max-height: 100%; +`; + export const StyledAside = styled.aside` display: flex; flex-direction: column; @@ -61,41 +98,6 @@ export const StyledAside = styled.aside` } `; -export const StyledVideo = styled.video` - width: 100%; - height: 100%; - outline: none; - background-color: rgb(0, 0, 0); -`; - -export const StyledAudio = styled.audio` - position: absolute; - outline: none; -`; - -export const StyledAudioBackground = styled.div` - position: relative; - - display: flex; - justify-content: center; - align-items: center; - - width: 100%; - height: 100%; -`; - -export const StyledAudioCover = styled.img` - width: 100%; - height: 100%; - object-fit: cover; - filter: blur(5px); - transform: scale(1.1); - - @media (prefers-reduced-motion: no-preference) { - animation: ${slowPan} 120s ease-in-out infinite; - } -`; - export const StyledSwitcher = styled(Switcher)` display: grid; grid-template-columns: 1fr 1fr 1fr; @@ -131,9 +133,6 @@ export const StyledPlayerBarControls = styled.div` display: flex; gap: 16px; - font-size: 2.5rem; - color: ${theme.colors["text-disabled"]}; - @media (max-width: ${theme.breakpoints.tabletMax}) { & > :first-child, & > :last-child { display: none; @@ -141,6 +140,10 @@ export const StyledPlayerBarControls = styled.div` } `; +export const StyledPlayerBarControl = styled(IconTextButton)` + font-size: 2rem; +`; + export const StyledPlayerBarActions = styled.div` display: flex; gap: 16px; diff --git a/src/components/video-player-2/VideoPlayer2.tsx b/src/components/video-player-2/VideoPlayer2.tsx index e7e960b..d0b1e26 100644 --- a/src/components/video-player-2/VideoPlayer2.tsx +++ b/src/components/video-player-2/VideoPlayer2.tsx @@ -9,39 +9,40 @@ import { StyledPlayer, StyledPlayerBar, StyledPlayerBarActions, + StyledPlayerBarControl, StyledPlayerBarControls, StyledPlayerContent, StyledScrollArea, StyledSwitcher, - StyledVideo + StyledVideo, + StyledVideoBackground } from "./VideoPlayer2.style"; import PlayerContext from "context/playerContext"; import createVideoSlug from "utils/createVideoSlug"; import { useRouter } from "next/router"; -import useMediaQuery from "hooks/useMediaQuery"; -import styledTheme from "theme"; import useSetting from "hooks/useSetting"; import { AudioMode, GlobalVolume } from "utils/settings"; import { AUDIO_URL, VIDEO_URL } from "utils/config"; import extractImages from "utils/extractImages"; import { Text } from "components/text"; import { AnimeSummaryCard, ArtistSummaryCard, SummaryCard, ThemeSummaryCard } from "components/card"; -import { Column } from "components/box"; +import { Column, Row } from "components/box"; import type { VideoPageProps } from "pages/anime/[animeSlug]/[videoSlug]"; import { Switcher } from "components/switcher"; import { SwitcherOption } from "components/switcher/Switcher"; -import { Button } from "components/button"; +import { Button, VideoButton } from "components/button"; import { Icon } from "components/icon"; import { faBackwardStep, faForwardStep, faPause, faPlay, faShare } from "@fortawesome/pro-solid-svg-icons"; import { HorizontalScroll, Performances, SongTitle } from "components/utils"; import Link from "next/link"; import { PlaylistTrackAddDialog } from "components/dialog/PlaylistTrackAddDialog"; -import { Menu } from "components/menu"; +import { Menu, MenuItem, MenuTrigger, MenuContent } from "components/menu/Menu"; import { Toast } from "components/toast"; import { useToasts } from "context/toastContext"; import { VideoSummaryCard } from "components/card/VideoSummaryCard"; import useWatchHistory from "hooks/useWatchHistory"; import { ProgressBar } from "components/video-player-2/ProgressBar"; +import { ThemeEntryTags } from "components/tag/ThemeEntryTags"; interface VideoPlayerProps extends VideoPageProps { background: boolean; @@ -52,15 +53,20 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr const entry = theme.entries[entryIndex]; const video = entry.videos[videoIndex]; + const videoPath = `/anime/${anime.slug}/${createVideoSlug(theme, entry, video)}`; + + const videoUrl = `${VIDEO_URL}/${video.basename}`; + const audioUrl = `${AUDIO_URL}/${video.audio.basename}`; + const [isPlaying, setPlaying] = useState(false); const playerRef = useRef(null); const progressRef = useRef(null); - const { watchList } = useContext(PlayerContext); - const isMobile = useMediaQuery(`(max-width: ${styledTheme.breakpoints.mobileMax})`); + const currentTimeBeforeModeSwitch = useRef(null); + const { watchList, currentWatchListItem, setCurrentWatchListItem } = useContext(PlayerContext); const router = useRouter(); const [globalVolume, setGlobalVolume] = useSetting(GlobalVolume); const [canRenderPlayer, setCanRenderPlayer] = useState(false); - const { largeCover } = extractImages(anime); + const { smallCover, largeCover } = extractImages(anime); const [audioMode, setAudioMode] = useSetting(AudioMode, { storageSync: false }); const [selectedTab, setSelectedTab] = useState<"watch-list" | "info" | "related">("info"); const { dispatchToast } = useToasts(); @@ -73,11 +79,23 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr .map((entry) => entry.theme) .filter((otherTheme) => otherTheme?.anime && otherTheme.anime.slug !== anime.slug); - const videoUrl = `${VIDEO_URL}/${video.basename}`; - const audioUrl = `${AUDIO_URL}/${video.audio.basename}`; - const videoSlug = createVideoSlug(theme, entry, video); + const previousVideo = getWatchListVideo(-1); + const previousEntry = previousVideo?.entries[0]; + const previousTheme = previousEntry?.theme; + const previousAnime = previousTheme?.anime; - const nextTrackPath = getNextTrackPath(); + const previousVideoPath = (previousAnime && previousTheme && previousVideo) + ? `/anime/${previousAnime.slug}/${createVideoSlug(previousTheme, previousEntry, previousVideo)}` + : null; + + const nextVideo = getWatchListVideo(1); + const nextEntry = nextVideo?.entries[0]; + const nextTheme = nextEntry?.theme; + const nextAnime = nextTheme?.anime; + + const nextVideoPath = (nextAnime && nextTheme && nextVideo) + ? `/anime/${nextAnime.slug}/${createVideoSlug(nextTheme, nextEntry, nextVideo)}` + : null; useEffect(() => setCanRenderPlayer(true), []); @@ -87,21 +105,56 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr } }, [globalVolume]); - // We don't want to re-add the theme when the history changes, because it can cause - // various issues when multiple tabs are open. - // eslint-disable-next-line react-hooks/exhaustive-deps - useEffect(() => addToHistory(theme), [theme]); - useEffect(() => { - if (nextTrackPath) { - router.prefetch(nextTrackPath); + addToHistory(theme); + + // Reset the progress bar (otherwise we'd have to wait for the player to load). + if (progressRef.current) { + progressRef.current.style.width = "0%"; } - }, [nextTrackPath, router]); + + // We don't want to re-add the theme when the history changes, because it can cause + // various issues when multiple tabs are open. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [theme]); + + useEffect(() => { + if (theme && smallCover && navigator.mediaSession) { + navigator.mediaSession.metadata = new MediaMetadata({ + title: `${theme.slug} • ${theme.song?.title || "T.B.A."}`, + artist: theme.song?.performances + ? theme.song.performances.map((performance) => performance.as || performance.artist.name).join(", ") + : undefined, + album: anime.name, + artwork: [ + { src: smallCover, sizes: "512x512", type: "image/jpeg" } + ] + }); + } + }, [ anime, theme, smallCover ]); + + const otherEntries = theme.entries.map(otherEntry => { + const videos = otherEntry.videos.filter((otherVideo) => otherVideo.filename !== video.filename); + + if (!videos.length) { + return null; + } + + return { + ...otherEntry, + videos + }; + }).filter((otherEntry) => !!otherEntry); function onPlayerMount(player: HTMLVideoElement) { playerRef.current = player; if (playerRef.current) { + setPlaying(!playerRef.current.paused); playerRef.current.volume = globalVolume; + if (currentTimeBeforeModeSwitch.current) { + playerRef.current.currentTime = currentTimeBeforeModeSwitch.current; + currentTimeBeforeModeSwitch.current = null; + } } } @@ -113,10 +166,6 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr } } - function maximize() { - router.push(`/anime/${anime.slug}/${videoSlug}`); - } - function updateProgress(event: SyntheticEvent) { if (progressRef.current) { // Update the progress bar using a ref to prevent re-rendering. @@ -130,23 +179,31 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr .then(() => dispatchToast("clipboard", Copied to clipboard!)); } + function updateAudioMode(audioMode: string) { + currentTimeBeforeModeSwitch.current = playerRef.current?.currentTime ?? null; + setAudioMode(audioMode); + } + function playNextTrack() { - if (nextTrackPath) { - router.push(nextTrackPath); + if (nextVideoPath) { + router.push(nextVideoPath); + setCurrentWatchListItem(nextVideo); } } - function getNextTrackPath() { - const currentTrackIndex = watchList.findIndex((v) => video.id === v.id); - const nextTrackIndex = currentTrackIndex + 1; - - if (watchList[nextTrackIndex]) { - const nextVideo = watchList[nextTrackIndex]; - const nextEntry = nextVideo.entries[0]; - const nextTheme = nextEntry.theme; - const nextAnime = nextTheme.anime; - return `/anime/${nextAnime.slug}/${createVideoSlug(nextTheme, nextEntry, nextVideo)}`; + function getWatchListVideo(offset: 1 | -1) { + if (!currentWatchListItem) { + return null; } + + const currentTrackIndex = watchList.indexOf(currentWatchListItem); + const nextTrackIndex = currentTrackIndex + offset; + + if (!watchList[nextTrackIndex]) { + return null; + } + + return watchList[nextTrackIndex]; } return ( @@ -156,7 +213,7 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr {audioMode === AudioMode.ENABLED ? ( - + setPlaying(true)} onPause={() => setPlaying(false)} - onEnded={() => setPlaying(false)} + onEnded={() => { + setPlaying(false); + playNextTrack(); + }} onTimeUpdate={updateProgress} onVolumeChange={(event: SyntheticEvent) => setGlobalVolume(event.currentTarget.volume)} /> ) : ( - setPlaying(true)} - onPause={() => setPlaying(false)} - onEnded={() => { - setPlaying(false); - playNextTrack(); - }} - onClick={background && isMobile ? maximize : undefined} - onTimeUpdate={updateProgress} - onVolumeChange={(event: SyntheticEvent) => setGlobalVolume(event.currentTarget.volume)} - /> + + setPlaying(true)} + onPause={() => setPlaying(false)} + onEnded={() => { + setPlaying(false); + playNextTrack(); + }} + onClick={togglePlay} + onTimeUpdate={updateProgress} + onVolumeChange={(event: SyntheticEvent) => setGlobalVolume(event.currentTarget.volume)} + /> + )} - Watch List - Information + Next Up + Info Related @@ -199,7 +260,7 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr {watchList.map((video) => ( - + setCurrentWatchListItem(video)} /> ))} @@ -249,6 +310,34 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr ))} )} + {!!otherEntries.length && ( + <> + Other versions + + {otherEntries.map((otherEntry) => otherEntry ? ( + + + + Version {otherEntry.version || 1} + + + + + {otherEntry.videos.map((video, index) => ( + + ))} + + + ) : null)} + + + )} ) : null} @@ -257,7 +346,7 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr - + - {theme.type}{theme.sequence || null}{theme.group && ` (${theme.group})`} from @@ -273,9 +362,41 @@ export function VideoPlayer2({ anime, themeIndex, entryIndex, videoIndex, backgr )} - - - + {previousVideoPath ? ( + + setCurrentWatchListItem(previousVideo)} + /> + + ) : ( + + )} + } + isCircle + onClick={togglePlay} + /> + {nextVideoPath ? ( + + setCurrentWatchListItem(nextVideo)} + /> + + ) : ( + + )} - ( - - )}> - saveToClipboard(location.href)}>Copy URL to this Page - {audioMode === AudioMode.ENABLED ? ( - saveToClipboard(audioUrl)}>Copy URL to Embeddable Audio - ) : ( - saveToClipboard(videoUrl)}>Copy URL to Embeddable Video - )} + + + + + + saveToClipboard(location.href)}>Copy URL to this Page + {audioMode === AudioMode.ENABLED ? ( + saveToClipboard(audioUrl)}>Copy URL to Embeddable Audio + ) : ( + saveToClipboard(videoUrl)}>Copy URL to Embeddable Video + )} + {canRenderPlayer ? ( - + Video Audio diff --git a/src/context/playerContext.ts b/src/context/playerContext.ts index 577fa9a..d13e1d6 100644 --- a/src/context/playerContext.ts +++ b/src/context/playerContext.ts @@ -1,12 +1,15 @@ import { createContext } from "react"; +import type { VideoSummaryCardVideoFragment } from "generated/graphql"; interface PlayerContextInterface { - currentVideo: { - filename: string - } | null - clearCurrentVideo: () => void - watchList: any[]; - setWatchList: (watchList: any[]) => void; + currentVideo: VideoSummaryCardVideoFragment | null; + clearCurrentVideo: () => void; + watchList: VideoSummaryCardVideoFragment[]; + setWatchList: (watchList: VideoSummaryCardVideoFragment[]) => void; + currentWatchListItem: VideoSummaryCardVideoFragment | null; + setCurrentWatchListItem: (currentWatchListItem: VideoSummaryCardVideoFragment | null) => void; + addWatchListItem: (watchListItem: VideoSummaryCardVideoFragment) => void; + addWatchListItemNext: (watchListItem: VideoSummaryCardVideoFragment) => void; } const PlayerContext = createContext({ @@ -17,7 +20,17 @@ const PlayerContext = createContext({ watchList: [], setWatchList: () => { // Do nothing - } + }, + currentWatchListItem: null, + setCurrentWatchListItem: () => { + // Do nothing + }, + addWatchListItem: () => { + // Do nothing + }, + addWatchListItemNext: () => { + // Do nothing + }, }); export default PlayerContext; diff --git a/src/generated/graphql.ts b/src/generated/graphql.ts index 651cbb7..25bbd16 100644 --- a/src/generated/graphql.ts +++ b/src/generated/graphql.ts @@ -177,7 +177,7 @@ export type Performance = { export type Playlist = { forward: Array; - id: Scalars['Int']; + id: Scalars['String']; name: Scalars['String']; tracks: Array; tracks_count: Scalars['Int']; @@ -191,7 +191,7 @@ export type PlaylistSearchResult = EntitySearchResult & { }; export type PlaylistTrack = { - id: Scalars['Int']; + id: Scalars['String']; video: Video; }; @@ -285,7 +285,7 @@ export type QueryPageArgs = { export type QueryPlaylistArgs = { - id: Scalars['Int']; + id: Scalars['String']; }; @@ -563,7 +563,7 @@ export type VideoButtonThemeFragment = { slug: string }; export type VideoButtonEntryFragment = { version: number | null }; -export type VideoButtonVideoFragment = { filename: string, tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }; +export type VideoButtonVideoFragment = { id: number, tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }; export type AnimeSummaryCardAnimeFragment = { slug: string, name: string, year: number | null, season: string | null, themes: Array<{ group: string | null }>, images: Array<{ link: string, facet: string | null }> }; @@ -571,7 +571,7 @@ export type AnimeSummaryCardAnimeExpandableFragment = { themes: Array<{ group: s export type ArtistSummaryCardArtistFragment = { slug: string, name: string, images: Array<{ link: string, facet: string | null }> }; -export type PlaylistSummaryCardPlaylistFragment = { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number }; +export type PlaylistSummaryCardPlaylistFragment = { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number }; export type PlaylistSummaryCardShowOwnerFragment = { user: { name: string } }; @@ -590,9 +590,9 @@ export type ThemeSummaryCardQueryVariables = Exact<{ export type ThemeSummaryCardQuery = { theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null, entries: Array<{ version: number | null, videos: Array<{ id: number, tags: string }> }> } | null }; -export type VideoSummaryCardVideoFragment = { tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }; +export type VideoSummaryCardVideoFragment = { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }; -export type PlaylistRemoveDialogPlaylistFragment = { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number }; +export type PlaylistRemoveDialogPlaylistFragment = { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number }; export type PlaylistTrackAddDialogVideoFragment = { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }; @@ -601,11 +601,11 @@ export type PlaylistTrackAddFormPlaylistQueryVariables = Exact<{ }>; -export type PlaylistTrackAddFormPlaylistQuery = { me: { playlistAll: Array<{ id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, tracks: Array<{ id: number }> }> | null } }; +export type PlaylistTrackAddFormPlaylistQuery = { me: { playlistAll: Array<{ id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, tracks: Array<{ id: string }> }> | null } }; -export type PlaylistTrackRemoveDialogPlaylistFragment = { id: number, name: string }; +export type PlaylistTrackRemoveDialogPlaylistFragment = { id: string, name: string }; -export type PlaylistTrackRemoveDialogVideoFragment = { tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }; +export type PlaylistTrackRemoveDialogVideoFragment = { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }; export type FeaturedThemeThemeFragment = { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, entries: Array<{ version: number | null, videos: Array<{ basename: string, id: number, tags: string }> }>, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null }; @@ -652,14 +652,14 @@ export type SearchGlobalQueryVariables = Exact<{ }>; -export type SearchGlobalQuery = { search: { anime: Array<{ slug: string, name: string, year: number | null, season: string | null, themes: Array<{ group: string | null, type: string, sequence: number | null, slug: string, anime: { slug: string } | null, entries: Array<{ version: number | null, episodes: string | null, spoiler: boolean, nsfw: boolean, videos: Array<{ tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }> }>, song: { title: string | null } | null }>, images: Array<{ link: string, facet: string | null }> }>, themes: Array<{ slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null, entries: Array<{ version: number | null, episodes: string | null, spoiler: boolean, nsfw: boolean, videos: Array<{ id: number, tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }> }> }>, artists: Array<{ slug: string, name: string, images: Array<{ link: string, facet: string | null }> }>, series: Array<{ slug: string, name: string }>, studios: Array<{ slug: string, name: string }>, playlists: Array<{ id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, user: { name: string } }> } }; +export type SearchGlobalQuery = { search: { anime: Array<{ slug: string, name: string, year: number | null, season: string | null, themes: Array<{ group: string | null, type: string, sequence: number | null, slug: string, anime: { slug: string } | null, entries: Array<{ version: number | null, episodes: string | null, spoiler: boolean, nsfw: boolean, videos: Array<{ tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }> }>, song: { title: string | null } | null }>, images: Array<{ link: string, facet: string | null }> }>, themes: Array<{ slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null, entries: Array<{ version: number | null, episodes: string | null, spoiler: boolean, nsfw: boolean, videos: Array<{ id: number, tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }> }> }>, artists: Array<{ slug: string, name: string, images: Array<{ link: string, facet: string | null }> }>, series: Array<{ slug: string, name: string }>, studios: Array<{ slug: string, name: string }>, playlists: Array<{ id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, user: { name: string } }> } }; export type SearchPlaylistQueryVariables = Exact<{ args: SearchArgs; }>; -export type SearchPlaylistQuery = { searchPlaylist: { nextPage: number | null, data: Array<{ id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, user: { name: string } }> } }; +export type SearchPlaylistQuery = { searchPlaylist: { nextPage: number | null, data: Array<{ id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, user: { name: string } }> } }; export type SearchSeriesQueryVariables = Exact<{ args: SearchArgs; @@ -692,13 +692,13 @@ export type ThemeEntryTagsEntryFragment = { episodes: string | null, spoiler: bo export type VideoTagsVideoFragment = { resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }; -export type PlaylistRemoveToastPlaylistFragment = { id: number, name: string }; +export type PlaylistRemoveToastPlaylistFragment = { id: string, name: string }; -export type PlaylistTrackAddToastPlaylistFragment = { id: number, name: string }; +export type PlaylistTrackAddToastPlaylistFragment = { id: string, name: string }; export type PlaylistTrackAddToastVideoFragment = { entries: Array<{ theme: { song: { title: string | null } | null } | null }> }; -export type PlaylistTrackRemoveToastPlaylistFragment = { id: number, name: string }; +export type PlaylistTrackRemoveToastPlaylistFragment = { id: string, name: string }; export type PlaylistTrackRemoveToastVideoFragment = { entries: Array<{ theme: { song: { title: string | null } | null } | null }> }; @@ -848,12 +848,12 @@ export type EventPageQuery = { bracketAll: Array<{ slug: string, name: string }> export type HomePageRecentlyAddedQueryVariables = Exact<{ [key: string]: never; }>; -export type HomePageRecentlyAddedQuery = { videoAll: Array<{ tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }> }; +export type HomePageRecentlyAddedQuery = { videoAll: Array<{ id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }> }; export type HomePageMostViewedQueryVariables = Exact<{ [key: string]: never; }>; -export type HomePageMostViewedQuery = { videoAll: Array<{ tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }> }; +export type HomePageMostViewedQuery = { videoAll: Array<{ id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> }> }; export type HomePageQueryVariables = Exact<{ [key: string]: never; }>; @@ -861,18 +861,18 @@ export type HomePageQueryVariables = Exact<{ [key: string]: never; }>; export type HomePageQuery = { featuredTheme: { theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, entries: Array<{ version: number | null, videos: Array<{ basename: string, id: number, tags: string }> }>, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } } | null, announcementAll: Array<{ content: string }> }; export type PlaylistDetailPagePlaylistQueryVariables = Exact<{ - playlistId: Scalars['Int']; + playlistId: Scalars['String']; }>; -export type PlaylistDetailPagePlaylistQuery = { playlist: { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: number, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } } | null }; +export type PlaylistDetailPagePlaylistQuery = { playlist: { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: string, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } } | null }; export type PlaylistDetailPageMeQueryVariables = Exact<{ [key: string]: never; }>; export type PlaylistDetailPageMeQuery = { me: { user: { name: string } | null } }; -export type PlaylistDetailPagePlaylistFragment = { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: number, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } }; +export type PlaylistDetailPagePlaylistFragment = { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: string, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } }; type PlaylistDetailPageUser_UserAuth_Fragment = { name: string }; @@ -881,11 +881,11 @@ type PlaylistDetailPageUser_UserPublic_Fragment = { name: string }; export type PlaylistDetailPageUserFragment = PlaylistDetailPageUser_UserAuth_Fragment | PlaylistDetailPageUser_UserPublic_Fragment; export type PlaylistDetailPageQueryVariables = Exact<{ - playlistId: Scalars['Int']; + playlistId: Scalars['String']; }>; -export type PlaylistDetailPageQuery = { playlist: { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: number, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } } | null, me: { user: { name: string } | null } }; +export type PlaylistDetailPageQuery = { playlist: { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number, forward: Array<{ id: string, video: { id: number, tags: string, entries: Array<{ version: number | null, theme: { slug: string, type: string, sequence: number | null, group: string | null, anime: { year: number | null, season: string | null, slug: string, name: string, images: Array<{ link: string, facet: string | null }> } | null, song: { title: string | null, performances: Array<{ as: string | null, artist: { slug: string, name: string } }> } | null } | null }> } }>, user: { name: string } } | null, me: { user: { name: string } | null } }; export type GalleryPageQueryVariables = Exact<{ [key: string]: never; }>; @@ -895,16 +895,16 @@ export type GalleryPageQuery = { grills: Array<{ id: number, link: string }> }; export type ProfilePageMeQueryVariables = Exact<{ [key: string]: never; }>; -export type ProfilePageMeQuery = { me: { user: { name: string, email: string, email_verified_at: string | null, created_at: string, roles: Array<{ name: string, color: string | null, priority: number | null, default: boolean }> } | null, playlistAll: Array<{ id: number, name: string, visibility: PlaylistVisibility, tracks_count: number }> | null } }; +export type ProfilePageMeQuery = { me: { user: { name: string, email: string, email_verified_at: string | null, created_at: string, roles: Array<{ name: string, color: string | null, priority: number | null, default: boolean }> } | null, playlistAll: Array<{ id: string, name: string, visibility: PlaylistVisibility, tracks_count: number }> | null } }; -export type ProfilePagePlaylistFragment = { id: number, name: string, visibility: PlaylistVisibility, tracks_count: number }; +export type ProfilePagePlaylistFragment = { id: string, name: string, visibility: PlaylistVisibility, tracks_count: number }; export type ProfilePageUserFragment = { name: string, email: string, email_verified_at: string | null, created_at: string, roles: Array<{ name: string, color: string | null, priority: number | null, default: boolean }> }; export type ProfilePageQueryVariables = Exact<{ [key: string]: never; }>; -export type ProfilePageQuery = { me: { user: { name: string, email: string, email_verified_at: string | null, created_at: string, roles: Array<{ name: string, color: string | null, priority: number | null, default: boolean }> } | null, playlistAll: Array<{ id: number, name: string, visibility: PlaylistVisibility, tracks_count: number }> | null } }; +export type ProfilePageQuery = { me: { user: { name: string, email: string, email_verified_at: string | null, created_at: string, roles: Array<{ name: string, color: string | null, priority: number | null, default: boolean }> } | null, playlistAll: Array<{ id: string, name: string, visibility: PlaylistVisibility, tracks_count: number }> | null } }; export type SeriesDetailPageSeriesFragment = { slug: string, name: string, anime: Array<{ name: string, slug: string, year: number | null, season: string | null, themes: Array<{ slug: string, type: string, sequence: number | null, group: string | null, entries: Array<{ version: number | null, episodes: string | null, spoiler: boolean, nsfw: boolean, videos: Array<{ tags: string, resolution: number | null, nc: boolean, subbed: boolean, lyrics: boolean, uncen: boolean, source: VideoSource | null, overlap: VideoOverlap }> }>, anime: { slug: string } | null, song: { title: string | null } | null }>, images: Array<{ facet: string | null, link: string }> }> }; diff --git a/src/hooks/useColorTheme.ts b/src/hooks/useColorTheme.ts index 823e191..2d23be6 100644 --- a/src/hooks/useColorTheme.ts +++ b/src/hooks/useColorTheme.ts @@ -4,7 +4,7 @@ import type { ColorTheme } from "context/colorThemeContext"; import { isColorTheme } from "context/colorThemeContext"; export default function useColorTheme(): [ColorTheme, (colorTheme: ColorTheme) => void] { - const [ theme, setTheme ] = useLocalStorageState("theme", { ssr: true, defaultValue: "system" }); + const [ theme, setTheme ] = useLocalStorageState("theme", { defaultValue: "system" }); useEffect(() => { const injectedColorTheme = document.body.dataset.theme; diff --git a/src/hooks/useFilterStorage.ts b/src/hooks/useFilterStorage.ts index a943cdc..b34196e 100644 --- a/src/hooks/useFilterStorage.ts +++ b/src/hooks/useFilterStorage.ts @@ -5,10 +5,7 @@ export default function useFilterStorage(key: string, defaultValue: T): { updateFilter(key: keyof T, value: T[typeof key]): void bindUpdateFilter(key: keyof T): (value: T[typeof key]) => void } { - const [filter, setFilter] = useSessionStorageState(key, { - ssr: true, - defaultValue, - }); + const [filter, setFilter] = useSessionStorageState(key, { defaultValue }); return { filter, diff --git a/src/hooks/useLocalPlaylist.tsx b/src/hooks/useLocalPlaylist.tsx index ed285f6..5dc533a 100644 --- a/src/hooks/useLocalPlaylist.tsx +++ b/src/hooks/useLocalPlaylist.tsx @@ -11,7 +11,7 @@ interface LocalPlaylistTheme { type LocalPlaylist = Array & LocalPlaylistTheme>; export default function useLocalPlaylist() { - const [ localPlaylist, setLocalPlaylist ] = useLocalStorageState("local-playlist", { ssr: true, defaultValue: [] }); + const [ localPlaylist, setLocalPlaylist ] = useLocalStorageState("local-playlist", { defaultValue: [] }); const { dispatchToast } = useToasts(); function addToPlaylist(theme: LocalPlaylistTheme) { diff --git a/src/hooks/useSetting.ts b/src/hooks/useSetting.ts index 78b0190..9befb89 100644 --- a/src/hooks/useSetting.ts +++ b/src/hooks/useSetting.ts @@ -6,7 +6,7 @@ export default function useSetting( { __KEY__: key, __INITIAL_VALUE__: initialValue }: Setting, localStorageOptions: Pick, "storageSync"> = {} ) { - const [setting, setSetting] = useLocalStorageState(key, { ssr: true, defaultValue: initialValue, ...localStorageOptions }); + const [setting, setSetting] = useLocalStorageState(key, { defaultValue: initialValue, ...localStorageOptions }); return [setting, setSetting] as const; } diff --git a/src/hooks/useWatchHistory.ts b/src/hooks/useWatchHistory.ts index 23c9991..fb0995d 100644 --- a/src/hooks/useWatchHistory.ts +++ b/src/hooks/useWatchHistory.ts @@ -9,7 +9,7 @@ interface WatchHistoryTheme extends ThemeSummaryCardThemeFragment { export type WatchHistory = Array; export default function useWatchHistory() { - const [ history, setHistory ] = useLocalStorageState("history", { ssr: true, defaultValue: [] }); + const [ history, setHistory ] = useLocalStorageState("history", { defaultValue: [] }); const addToHistory = useCallback((theme: WatchHistoryTheme) => { diff --git a/src/lib/common/animethemes/type-defs.ts b/src/lib/common/animethemes/type-defs.ts index c3e9e18..3c87215 100644 --- a/src/lib/common/animethemes/type-defs.ts +++ b/src/lib/common/animethemes/type-defs.ts @@ -25,7 +25,7 @@ const typeDefs = ` balanceAll(month: String): [Balance!]! transactionAll(month: String): [Transaction!]! billingMonthAll: [String!]! - playlist(id: Int!): Playlist + playlist(id: String!): Playlist announcementAll: [Announcement!]! me: UserScopedQuery! } @@ -249,7 +249,7 @@ const typeDefs = ` } type Playlist { - id: Int! + id: String! name: String! visibility: PlaylistVisibility! tracks_count: Int! @@ -265,7 +265,7 @@ const typeDefs = ` } type PlaylistTrack { - id: Int! + id: String! video: Video! } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index fd1ac85..6f59959 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -28,6 +28,7 @@ import { ExternalLink } from "components/external-link"; import type { AppProps } from "next/app"; import { LazyMotion } from "framer-motion"; import { VideoPlayer2 } from "components/video-player-2/VideoPlayer2"; +import type { VideoSummaryCardVideoFragment } from "generated/graphql"; import "@fortawesome/fontawesome-svg-core/styles.css"; import "styles/prism.scss"; @@ -60,7 +61,8 @@ export default function MyApp({ Component, pageProps }: AppProps) { const [ lastVideoPageProps, setLastVideoPageProps ] = useState(() => { return isVideoPage ? pageProps : null; }); - const [watchList, setWatchList] = useState([]); + const [watchList, setWatchList] = useState([]); + const [currentWatchListItem, setCurrentWatchListItem] = useState(null); useEffect(() => { const hotkeyListener = (event: KeyboardEvent) => { @@ -102,6 +104,18 @@ export default function MyApp({ Component, pageProps }: AppProps) { clearCurrentVideo: () => setLastVideoPageProps(null), watchList, setWatchList, + currentWatchListItem, + setCurrentWatchListItem, + addWatchListItem: (watchListItem) => setWatchList((watchList) => [...watchList, watchListItem]), + addWatchListItemNext: (watchListItem) => { + const currentIndex = currentWatchListItem ? watchList.indexOf(currentWatchListItem) : 0; + + setWatchList((watchList) => [ + ...watchList.slice(0, currentIndex + 1), + watchListItem, + ...watchList.slice(currentIndex + 1) + ]); + }, } }), stackContext(QueryClientProvider, { client: queryClient }), stackContext(ToastProvider, {}), diff --git a/src/pages/about/transparency/[[...month]].tsx b/src/pages/about/transparency/[[...month]].tsx index a582790..fb8af55 100644 --- a/src/pages/about/transparency/[[...month]].tsx +++ b/src/pages/about/transparency/[[...month]].tsx @@ -15,7 +15,7 @@ import { HorizontalScroll } from "components/utils/HorizontalScroll"; import fetchStaticPaths from "utils/fetchStaticPaths"; import type { ParsedUrlQuery } from "querystring"; import { useRouter } from "next/router"; -import { Listbox2, Listbox2Option } from "components/listbox/Listbox2"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; interface TransparencyPageProps extends SharedPageProps, TransparencyPageQuery { month: string; @@ -58,11 +58,11 @@ export default function TransparencyPage({ month, months, balanceAll, transactio Transparency - router.push(`/about/transparency/${newMonth}`)}> + router.push(`/about/transparency/${newMonth}`)}> {months.map((month) => ( - {toFormattedString(new Date(month))} + {toFormattedString(new Date(month))} ))} - + Balances {balanceAll.length ? ( diff --git a/src/pages/anime/[animeSlug]/[videoSlug]/index.tsx b/src/pages/anime/[animeSlug]/[videoSlug]/index.tsx index c667562..c168533 100644 --- a/src/pages/anime/[animeSlug]/[videoSlug]/index.tsx +++ b/src/pages/anime/[animeSlug]/[videoSlug]/index.tsx @@ -1,98 +1,15 @@ -import { useEffect, useState } from "react"; -import Link from "next/link"; -import { Column, Row } from "components/box"; -import { Text } from "components/text"; -import { HorizontalScroll, Performances, SongTitle } from "components/utils"; -import { Button, VideoButton } from "components/button"; -import { AnimeSummaryCard, ArtistSummaryCard, SummaryCard, ThemeSummaryCard } from "components/card"; -import extractImages from "utils/extractImages"; -import { SEO } from "components/seo"; -import { faChevronDown, faShare } from "@fortawesome/pro-solid-svg-icons"; -import { Icon } from "components/icon"; -import useWatchHistory from "hooks/useWatchHistory"; -import styled from "styled-components"; -import theme from "theme"; +import { ArtistSummaryCard, ThemeSummaryCard } from "components/card"; import createVideoSlug from "utils/createVideoSlug"; import fetchStaticPaths from "utils/fetchStaticPaths"; import type { SharedPageProps } from "utils/getSharedPageProps"; import getSharedPageProps from "utils/getSharedPageProps"; -import { Menu } from "components/menu"; -import { useToasts } from "context/toastContext"; -import { Toast } from "components/toast"; -import { ThemeEntryTags } from "components/tag/ThemeEntryTags"; -import { VideoTags } from "components/tag/VideoTags"; -import { AUDIO_URL, VIDEO_URL } from "utils/config"; import type { VideoPageAllQuery, VideoPageQuery, VideoPageQueryVariables } from "generated/graphql"; import type { GetStaticPaths, GetStaticProps } from "next"; import { fetchData } from "lib/server"; import gql from "graphql-tag"; import type { RequiredNonNullable } from "utils/types"; -import { Switcher } from "components/switcher"; -import useSetting from "hooks/useSetting"; -import { AudioMode, DeveloperMode } from "utils/settings"; -import { SwitcherOption } from "components/switcher/Switcher"; import { VideoPlayer } from "components/video-player"; import VideoScript from "components/video-script/VideoScript"; -import { PlaylistTrackAddDialog } from "components/dialog/PlaylistTrackAddDialog"; - -const StyledVideoInfo = styled.div` - display: grid; - grid-template-columns: 1fr auto; - grid-gap: 16px; - align-items: baseline; - - @media (max-width: ${theme.breakpoints.mobileMax}) { - grid-template-columns: 1fr; - align-items: stretch; - } -`; - -const StyledVideoEntryInfo = styled(Row)` - align-items: baseline; - justify-content: flex-end; - gap: 16px; - - @media (max-width: ${theme.breakpoints.mobileMax}) { - justify-content: space-between; - } -`; - -const StyledVideoTagsInfo = styled(Row)` - align-items: baseline; - justify-content: flex-end; -`; - -const StyledRelatedGrid = styled.div` - display: grid; - grid-template-columns: 1fr 1fr 1fr; - grid-gap: 16px 32px; - - @media (max-width: ${theme.breakpoints.mobileMax}) { - grid-template-columns: 1fr; - } -`; - -const StyledRelatedEntries = styled.div` - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 16px; - - @media (max-width: ${theme.breakpoints.mobileMax}) { - align-items: flex-start; - } -`; - -const StyledVideoList = styled(Row)` - flex-wrap: wrap; - justify-content: flex-end; - - gap: 16px; - - @media (max-width: ${theme.breakpoints.mobileMax}) { - justify-content: flex-start; - } -`; export interface VideoPageProps extends SharedPageProps, RequiredNonNullable { themeIndex: number @@ -106,261 +23,267 @@ type VideoPageParams = { videoSlug: string }; -export default function VideoPage({ anime, themeIndex, entryIndex, videoIndex }: VideoPageProps) { - const theme = anime.themes[themeIndex]; - const entry = theme.entries[entryIndex]; - const video = entry.videos[videoIndex]; - - const songTitle = theme.song?.title || "T.B.A."; - const { smallCover, largeCover } = extractImages(anime); - const { addToHistory } = useWatchHistory(); - const [ showMoreRelatedThemes, setShowMoreRelatedThemes ] = useState(false); - const { dispatchToast } = useToasts(); - const [audioMode, setAudioMode] = useSetting(AudioMode, { storageSync: false }); - const [developerMode] = useSetting(DeveloperMode); - const [canRenderPlayer, setCanRenderPlayer] = useState(false); - - useEffect(() => setCanRenderPlayer(true), []); - - const relatedThemes = anime.themes - .filter((relatedTheme) => relatedTheme.slug !== theme.slug) - .slice(0, showMoreRelatedThemes ? undefined : 6); - - const usedAlsoAs = video.entries - .map((entry) => entry.theme) - .filter((otherTheme) => otherTheme?.anime && otherTheme.anime.slug !== anime.slug); - - // We don't want to re-add the theme when the history changes, because it can cause - // various issues when multiple tabs are open. - // eslint-disable-next-line react-hooks/exhaustive-deps - useEffect(() => addToHistory(theme), [ theme ]); - - useEffect(() => { - if (theme && smallCover && navigator.mediaSession) { - // eslint-disable-next-line no-undef - navigator.mediaSession.metadata = new MediaMetadata({ - title: `${theme.slug} • ${songTitle}`, - artist: theme.song?.performances ? theme.song.performances.map((performance) => performance.as || performance.artist.name).join(", ") : undefined, - album: anime.name, - artwork: [ - { src: smallCover, sizes: "512x512", type: "image/jpeg" } - ] - }); - } - }, [ anime, theme, smallCover, songTitle ]); - - const otherEntries = theme.entries.map(otherEntry => { - const videos = otherEntry.videos.filter((otherVideo) => otherVideo.filename !== video.filename); - - if (!videos.length) { - return null; - } - - return { - ...otherEntry, - videos - }; - }).filter((otherEntry) => !!otherEntry); - - const pageTitle = entry.version - ? `${songTitle} (${anime.name} ${theme.slug} v${entry.version})` - : `${songTitle} (${anime.name} ${theme.slug})`; - - const pageDesc = (() => { - // Generates and returns page description for SEO - const song = theme.song; - const version = entry.version ? ` Version ${entry.version}` : ""; - let artistStr = ""; - if (song?.performances?.length) { - artistStr = song.performances.reduce((str, performance, index, { length }) => { - str += performance.as || performance.artist.name; - if (index < length - 1) { - str += (index === length - 2 ? " & " : ", "); - } - return str; - }, " by "); - } - return `Watch ${anime.name} ${theme.slug}${version}: ${songTitle}${artistStr} on AnimeThemes.`; - })(); - - const saveToClipboard = (url: string) => { - navigator.clipboard.writeText(url) - .then(() => dispatchToast("clipboard", Copied to clipboard!)); - }; - - const videoUrl = `${VIDEO_URL}/${video.basename}`; - const audioUrl = `${AUDIO_URL}/${video.audio.basename}`; - - const videoHeight = video.resolution ?? 720; - const videoWidth = Math.floor(videoHeight / 9 * 16); - - return <> - - - - - - - - - {/* Twitter card support */} - {/* See: https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/player-card */} - - - - - - - - - - - - - - - - {theme.type}{theme.sequence || null}{theme.group && ` (${theme.group})`} - from - - {anime.name} - - - {!!theme.song?.performances?.length && ( - - Performed - - - )} - - - - - Version {entry.version || 1} - - - - - - - - - - - - ( - - )}> - saveToClipboard(location.href)}>Copy URL to this Page - {audioMode === AudioMode.ENABLED ? ( - saveToClipboard(audioUrl)}>Copy URL to Embeddable Audio - ) : ( - saveToClipboard(videoUrl)}>Copy URL to Embeddable Video - )} - - {canRenderPlayer ? ( - - Video - Audio - - ) : null} - - - - - Information - - {anime.series.map((series) => ( - - ))} - {anime.studios.map((studio) => ( - - ))} - {!!theme.song?.performances?.length && ( - <> - Artists - {theme.song.performances.sort((a, b) => a.artist.name.localeCompare(b.artist.name)).map((performance) => ( - - ))} - - )} - {!!usedAlsoAs.length && ( - <> - Also Used As - {usedAlsoAs.map((theme) => theme?.anime ? ( - - ) : null)} - - )} - - - {!!relatedThemes.length && ( - <> - Related themes - {relatedThemes.map((theme) => ( - - ))} - {!showMoreRelatedThemes && anime.themes.length > 7 && ( - - - - )} - - )} - - {!!otherEntries.length && ( - - Other versions - - {otherEntries.map((otherEntry) => otherEntry ? ( - - - - Version {otherEntry.version || 1} - - - - - {otherEntry.videos.map((video, index) => ( - - ))} - - - ) : null)} - - - )} - - {developerMode === DeveloperMode.ENABLED ? ( - - ) : null} - ; +export default function VideoPage() { + return null; } +// TODO: This page doesn't actually get rendered, it's just here for reference and can be removed later. +// TODO: The data fetching functions below are still needed though, see _app.tsx. +// export default function VideoPage({ anime, themeIndex, entryIndex, videoIndex }: VideoPageProps) { +// const theme = anime.themes[themeIndex]; +// const entry = theme.entries[entryIndex]; +// const video = entry.videos[videoIndex]; +// +// const songTitle = theme.song?.title || "T.B.A."; +// const { smallCover, largeCover } = extractImages(anime); +// const { addToHistory } = useWatchHistory(); +// const [ showMoreRelatedThemes, setShowMoreRelatedThemes ] = useState(false); +// const { dispatchToast } = useToasts(); +// const [audioMode, setAudioMode] = useSetting(AudioMode, { storageSync: false }); +// const [developerMode] = useSetting(DeveloperMode); +// const [canRenderPlayer, setCanRenderPlayer] = useState(false); +// +// useEffect(() => setCanRenderPlayer(true), []); +// +// const relatedThemes = anime.themes +// .filter((relatedTheme) => relatedTheme.slug !== theme.slug) +// .slice(0, showMoreRelatedThemes ? undefined : 6); +// +// const usedAlsoAs = video.entries +// .map((entry) => entry.theme) +// .filter((otherTheme) => otherTheme?.anime && otherTheme.anime.slug !== anime.slug); +// +// // We don't want to re-add the theme when the history changes, because it can cause +// // various issues when multiple tabs are open. +// // eslint-disable-next-line react-hooks/exhaustive-deps +// useEffect(() => addToHistory(theme), [ theme ]); +// +// useEffect(() => { +// if (theme && smallCover && navigator.mediaSession) { +// // eslint-disable-next-line no-undef +// navigator.mediaSession.metadata = new MediaMetadata({ +// title: `${theme.slug} • ${songTitle}`, +// artist: theme.song?.performances ? theme.song.performances.map((performance) => performance.as || performance.artist.name).join(", ") : undefined, +// album: anime.name, +// artwork: [ +// { src: smallCover, sizes: "512x512", type: "image/jpeg" } +// ] +// }); +// } +// }, [ anime, theme, smallCover, songTitle ]); +// +// const otherEntries = theme.entries.map(otherEntry => { +// const videos = otherEntry.videos.filter((otherVideo) => otherVideo.filename !== video.filename); +// +// if (!videos.length) { +// return null; +// } +// +// return { +// ...otherEntry, +// videos +// }; +// }).filter((otherEntry) => !!otherEntry); +// +// const pageTitle = entry.version +// ? `${songTitle} (${anime.name} ${theme.slug} v${entry.version})` +// : `${songTitle} (${anime.name} ${theme.slug})`; +// +// const pageDesc = (() => { +// // Generates and returns page description for SEO +// const song = theme.song; +// const version = entry.version ? ` Version ${entry.version}` : ""; +// let artistStr = ""; +// if (song?.performances?.length) { +// artistStr = song.performances.reduce((str, performance, index, { length }) => { +// str += performance.as || performance.artist.name; +// if (index < length - 1) { +// str += (index === length - 2 ? " & " : ", "); +// } +// return str; +// }, " by "); +// } +// return `Watch ${anime.name} ${theme.slug}${version}: ${songTitle}${artistStr} on AnimeThemes.`; +// })(); +// +// const saveToClipboard = (url: string) => { +// navigator.clipboard.writeText(url) +// .then(() => dispatchToast("clipboard", Copied to clipboard!)); +// }; +// +// const videoUrl = `${VIDEO_URL}/${video.basename}`; +// const audioUrl = `${AUDIO_URL}/${video.audio.basename}`; +// +// const videoHeight = video.resolution ?? 720; +// const videoWidth = Math.floor(videoHeight / 9 * 16); +// +// return <> +// +// +// +// +// +// +// +// +// {/* Twitter card support */} +// {/* See: https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/player-card */} +// +// +// +// +// +// +// +// +// +// +// +// +// +// - +// {theme.type}{theme.sequence || null}{theme.group && ` (${theme.group})`} +// from +// +// {anime.name} +// +// +// {!!theme.song?.performances?.length && ( +// +// Performed +// +// +// )} +// +// +// +// +// Version {entry.version || 1} +// +// +// +// +// +// +// +// +// +// +// +// ( +// +// )}> +// saveToClipboard(location.href)}>Copy URL to this Page +// {audioMode === AudioMode.ENABLED ? ( +// saveToClipboard(audioUrl)}>Copy URL to Embeddable Audio +// ) : ( +// saveToClipboard(videoUrl)}>Copy URL to Embeddable Video +// )} +// +// {canRenderPlayer ? ( +// +// Video +// Audio +// +// ) : null} +// +// +// +// +// Information +// +// {anime.series.map((series) => ( +// +// ))} +// {anime.studios.map((studio) => ( +// +// ))} +// {!!theme.song?.performances?.length && ( +// <> +// Artists +// {theme.song.performances.sort((a, b) => a.artist.name.localeCompare(b.artist.name)).map((performance) => ( +// +// ))} +// +// )} +// {!!usedAlsoAs.length && ( +// <> +// Also Used As +// {usedAlsoAs.map((theme) => theme?.anime ? ( +// +// ) : null)} +// +// )} +// +// +// {!!relatedThemes.length && ( +// <> +// Related themes +// {relatedThemes.map((theme) => ( +// +// ))} +// {!showMoreRelatedThemes && anime.themes.length > 7 && ( +// +// +// +// )} +// +// )} +// +// {!!otherEntries.length && ( +// +// Other versions +// +// {otherEntries.map((otherEntry) => otherEntry ? ( +// +// +// +// Version {otherEntry.version || 1} +// +// +// +// +// {otherEntry.videos.map((video, index) => ( +// +// ))} +// +// +// ) : null)} +// +// +// )} +// +// {developerMode === DeveloperMode.ENABLED ? ( +// +// ) : null} +// ; +// } + VideoPage.fragments = { anime: gql` ${ThemeSummaryCard.fragments.theme} diff --git a/src/pages/api/graphql.ts b/src/pages/api/graphql.ts deleted file mode 100644 index efd81e4..0000000 --- a/src/pages/api/graphql.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { NextApiRequest, NextApiResponse } from "next"; -import { ApolloServer } from "apollo-server-micro"; -import { mergeResolvers, mergeTypeDefs } from "@graphql-tools/merge"; -import { makeExecutableSchema } from "@graphql-tools/schema"; -import typeDefsAnimeThemes from "lib/common/animethemes/type-defs"; -import resolversAnimeThemes from "lib/common/animethemes/resolvers"; -import { searchResolvers, searchTypeDefs } from "lib/client/search"; - -const schema = makeExecutableSchema({ - typeDefs: mergeTypeDefs([ - typeDefsAnimeThemes, - searchTypeDefs, - ]), - resolvers: mergeResolvers([ - resolversAnimeThemes, - searchResolvers, - ]) -}); - -const apolloServer = new ApolloServer({ schema, introspection: true }); - -const startServer = apolloServer.start(); - -export default async function handler(req: NextApiRequest, res: NextApiResponse) { - res.setHeader("Access-Control-Allow-Credentials", "true"); - res.setHeader( - "Access-Control-Allow-Origin", - "https://studio.apollographql.com" - ); - res.setHeader( - "Access-Control-Allow-Headers", - "Origin, X-Requested-With, Content-Type, Accept" - ); - if (req.method === "OPTIONS") { - res.end(); - return false; - } - - await startServer; - await apolloServer.createHandler({ - path: "/api/graphql", - })(req, res); -} - -export const config = { - api: { - bodyParser: false, - }, -}; diff --git a/src/pages/artist/[artistSlug]/index.tsx b/src/pages/artist/[artistSlug]/index.tsx index 58a00f5..8970da2 100644 --- a/src/pages/artist/[artistSlug]/index.tsx +++ b/src/pages/artist/[artistSlug]/index.tsx @@ -12,7 +12,6 @@ import { memo, useMemo, useState } from "react"; import { FilterToggleButton } from "components/button"; import { SearchFilter, SearchFilterGroup, SearchFilterSortBy } from "components/search-filter"; import { Collapse } from "components/utils"; -import { Listbox } from "components/listbox"; import { either, getComparator, @@ -32,9 +31,14 @@ import gql from "graphql-tag"; import fetchStaticPaths from "utils/fetchStaticPaths"; import getSharedPageProps from "utils/getSharedPageProps"; import type { GetStaticPaths, GetStaticProps } from "next"; -import type { ArtistDetailPageAllQuery, ArtistDetailPageQuery, ArtistDetailPageQueryVariables } from "generated/graphql"; +import type { + ArtistDetailPageAllQuery, + ArtistDetailPageQuery, + ArtistDetailPageQueryVariables +} from "generated/graphql"; import type { ParsedUrlQuery } from "querystring"; import type { RequiredNonNullable } from "utils/types"; +import { Listbox, ListboxOption } from "components/listbox/Listbox"; const StyledList = styled.div` display: flex; @@ -51,9 +55,8 @@ const StyledHeader = styled.div` `; type Performance = ArtistDetailPageProps["artist"]["performances"][number]; -type PerformanceFilterKey = "SOLO" | "GROUP" | null; -function getPerformanceFilter(key: PerformanceFilterKey): (performance: Performance) => boolean { +function getPerformanceFilter(key: string | null): (performance: Performance) => boolean { switch (key) { case "SOLO": return (performance) => performance.song.performances.length === 1; @@ -84,7 +87,7 @@ export default function ArtistDetailPage({ artist }: ArtistDetailPageProps) { }, [ artist ]); const [ showFilter, toggleShowFilter ] = useToggle(); - const [ filterPerformance, setFilterPerformance ] = useState(null); + const [ filterPerformance, setFilterPerformance ] = useState(null); const [ filterAlias, setFilterAlias ] = useState(aliasFilterOptions[0]); const [ sortBy, setSortBy ] = useState(SONG_A_Z_ANIME); @@ -169,17 +172,17 @@ export default function ArtistDetailPage({ artist }: ArtistDetailPageProps) { Performed with - - - Solo - Group + + + Solo + Group Performed as - + {aliasFilterOptions.map((option) => ( - + ))} diff --git a/src/pages/playlist/[playlistId]/index.tsx b/src/pages/playlist/[playlistId]/index.tsx index 58ec893..76dbc5f 100644 --- a/src/pages/playlist/[playlistId]/index.tsx +++ b/src/pages/playlist/[playlistId]/index.tsx @@ -6,7 +6,7 @@ import type { PlaylistDetailPagePlaylistQuery, PlaylistDetailPagePlaylistQueryVariables, PlaylistDetailPageQuery, - PlaylistDetailPageQueryVariables + PlaylistDetailPageQueryVariables, VideoSummaryCardVideoFragment } from "generated/graphql"; import gql from "graphql-tag"; import { VideoSummaryCard } from "components/card/VideoSummaryCard"; @@ -37,14 +37,14 @@ import { SearchFilterGroup, SearchFilterSortBy } from "components/search-filter" import styled from "styled-components"; import theme from "theme"; import { DescriptionList } from "components/description-list"; -import { Menu } from "components/menu"; import { Icon } from "components/icon"; -import { faListMusic, faMinus } from "@fortawesome/pro-solid-svg-icons"; +import { faEllipsisV, faListMusic, faMinus, faPlus } from "@fortawesome/pro-solid-svg-icons"; import { PlaylistTrackAddDialog } from "components/dialog/PlaylistTrackAddDialog"; import { PlaylistTrackRemoveDialog } from "components/dialog/PlaylistTrackRemoveDialog"; import useSWR from "swr"; import { fetchDataClient } from "lib/client"; import PlayerContext from "context/playerContext"; +import { Menu, MenuContent, MenuItem, MenuTrigger } from "components/menu/Menu"; const StyledDesktopOnly = styled.div` gap: 24px; @@ -66,7 +66,7 @@ interface PlaylistDetailPageParams extends ParsedUrlQuery { } export default function PlaylistDetailPage({ playlist: initialPlaylist, me: initialMe }: PlaylistDetailPageProps) { - const { setWatchList } = useContext(PlayerContext); + const { setWatchList, setCurrentWatchListItem, addWatchListItem, addWatchListItemNext } = useContext(PlayerContext); const { data: playlist } = useSWR( ["PlaylistDetailPagePlaylist", `/api/playlist/${initialPlaylist.id}`], @@ -74,7 +74,7 @@ export default function PlaylistDetailPage({ playlist: initialPlaylist, me: init const { data } = await fetchDataClient(gql` ${PlaylistDetailPage.fragments.playlist} - query PlaylistDetailPagePlaylist($playlistId: Int!) { + query PlaylistDetailPagePlaylist($playlistId: String!) { playlist(id: $playlistId) { ...PlaylistDetailPagePlaylist } @@ -133,8 +133,9 @@ export default function PlaylistDetailPage({ playlist: initialPlaylist, me: init ) ); - function playAll() { + function playAll(initiatingVideo: VideoSummaryCardVideoFragment) { setWatchList(tracks.map((track) => track.video)); + setCurrentWatchListItem(initiatingVideo); } return ( @@ -180,36 +181,51 @@ export default function PlaylistDetailPage({ playlist: initialPlaylist, me: init - {tracks.map((track) => ( playAll(track.video)} menu={ - - - - Add to Playlist - - } - /> - {me.user?.name === playlist.user.name ? ( - + + + + + - - Remove from Playlist - + event.preventDefault()}> + + Add to Playlist + } /> - ) : null} + {me.user?.name === playlist.user.name ? ( + event.preventDefault()}> + + Remove from Playlist + + } + /> + ) : null} + addWatchListItem(track.video)}> + + Add to Watch List + + addWatchListItemNext(track.video)}> + + Play Next + + } /> @@ -266,7 +282,7 @@ export const getServerSideProps: GetServerSideProps - - - Delete Playlist - - } - /> + + + + + + event.preventDefault()}> + + Delete Playlist + + } + /> + } /> @@ -254,34 +261,34 @@ export default function ProfilePage({ me: initialMe }: ProfilePageProps) { Color Theme - - System - Dark - Light + + System + Dark + Light Show Announcements - - Enabled - Disabled + + Enabled + Disabled Featured Theme Preview - - Video - Cover - Disabled + + Video + Cover + Disabled Developer Mode - - Disabled - Enabled + + Disabled + Enabled {developerMode === DeveloperMode.ENABLED && ( diff --git a/src/styles/global.ts b/src/styles/global.ts index ded5c42..1a20aec 100644 --- a/src/styles/global.ts +++ b/src/styles/global.ts @@ -101,17 +101,19 @@ export default createGlobalStyle` scrollbar-width: thin; } - ::-webkit-scrollbar { - width: 6px; - height: 12px; - background-color: transparent; - } + @media (pointer: fine) { + ::-webkit-scrollbar { + width: 6px; + height: 12px; + background-color: transparent; + } - ::-webkit-scrollbar-thumb { - background-color: ${theme.colors["gray-700"]}; + ::-webkit-scrollbar-thumb { + background-color: ${theme.colors["gray-700"]}; - &:hover { - background-color: ${theme.colors["gray-500"]}; + &:hover { + background-color: ${theme.colors["gray-500"]}; + } } } `; diff --git a/src/theme/index.ts b/src/theme/index.ts index 37aa8a2..a56cc3e 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -40,11 +40,11 @@ const theme: Theme = { switcherText: 2, videoPlayer: 5, videoPlayerOverlay: 6, - toast: 35, + toast: 45, menuOverlay: 41, menuPopover: 40, - dialog: 30, - dialogBackdrop: 29, + dialog: 50, + dialogBackdrop: 49, }, scalars: { borderRadiusCard: "4px"