From 2520d8f739abfde608f3ef66a9fbe6b7b5c6647a Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Mon, 27 Feb 2023 23:36:28 -0500 Subject: [PATCH 01/49] feat: adds streaming services custom slider (#3361) * feat: adding streaming services as a slider is now an option * fix: truncated slider titles on mobile --- server/constants/discover.ts | 2 + .../Discover/CreateSlider/index.tsx | 74 +++++++++++++++++-- .../Discover/DiscoverSliderEdit/index.tsx | 8 +- src/components/Discover/constants.ts | 2 + src/components/Discover/index.tsx | 30 ++++++++ src/components/Selector/index.tsx | 12 +-- src/i18n/locale/en.json | 2 + src/styles/globals.css | 4 + 8 files changed, 123 insertions(+), 11 deletions(-) diff --git a/server/constants/discover.ts b/server/constants/discover.ts index a19f0742..fda06822 100644 --- a/server/constants/discover.ts +++ b/server/constants/discover.ts @@ -20,6 +20,8 @@ export enum DiscoverSliderType { TMDB_SEARCH, TMDB_STUDIO, TMDB_NETWORK, + TMDB_MOVIE_STREAMING_SERVICES, + TMDB_TV_STREAMING_SERVICES, } export const defaultSliders: Partial[] = [ diff --git a/src/components/Discover/CreateSlider/index.tsx b/src/components/Discover/CreateSlider/index.tsx index 24b9d3fd..40d26fff 100644 --- a/src/components/Discover/CreateSlider/index.tsx +++ b/src/components/Discover/CreateSlider/index.tsx @@ -2,6 +2,7 @@ import Button from '@app/components/Common/Button'; import Tooltip from '@app/components/Common/Tooltip'; import { sliderTitles } from '@app/components/Discover/constants'; import MediaSlider from '@app/components/MediaSlider'; +import { WatchProviderSelector } from '@app/components/Selector'; import { encodeURIExtraParams } from '@app/hooks/useDiscover'; import type { TmdbCompanySearchResponse, @@ -55,7 +56,7 @@ type CreateOption = { dataUrl: string; params?: string; titlePlaceholderText: string; - dataPlaceholderText: string; + dataPlaceholderText?: string; }; const CreateSlider = ({ onCreate, slider }: CreateSliderProps) => { @@ -276,6 +277,20 @@ const CreateSlider = ({ onCreate, slider }: CreateSliderProps) => { titlePlaceholderText: intl.formatMessage(messages.slidernameplaceholder), dataPlaceholderText: intl.formatMessage(messages.providetmdbsearch), }, + { + type: DiscoverSliderType.TMDB_MOVIE_STREAMING_SERVICES, + title: intl.formatMessage(sliderTitles.tmdbmoviestreamingservices), + dataUrl: '/api/v1/discover/movies', + params: 'watchRegion=$regionValue&watchProviders=$providersValue', + titlePlaceholderText: intl.formatMessage(messages.slidernameplaceholder), + }, + { + type: DiscoverSliderType.TMDB_TV_STREAMING_SERVICES, + title: intl.formatMessage(sliderTitles.tmdbtvstreamingservices), + dataUrl: '/api/v1/discover/tv', + params: 'watchRegion=$regionValue&watchProviders=$providersValue', + titlePlaceholderText: intl.formatMessage(messages.slidernameplaceholder), + }, ]; return ( @@ -417,6 +432,40 @@ const CreateSlider = ({ onCreate, slider }: CreateSliderProps) => { /> ); break; + case DiscoverSliderType.TMDB_MOVIE_STREAMING_SERVICES: + dataInput = ( + Number(v)) ?? [] + } + onChange={(region, providers) => { + setFieldValue('data', `${region},${providers.join('|')}`); + }} + /> + ); + break; + case DiscoverSliderType.TMDB_TV_STREAMING_SERVICES: + dataInput = ( + Number(v)) ?? [] + } + onChange={(region, providers) => { + setFieldValue('data', `${region},${providers.join('|')}`); + }} + /> + ); + break; default: dataInput = ( { '$value', encodeURIExtraParams(values.data) )} - extraParams={activeOption.params?.replace( - '$value', - encodeURIExtraParams(values.data) - )} + extraParams={ + activeOption.type === + DiscoverSliderType.TMDB_MOVIE_STREAMING_SERVICES || + activeOption.type === + DiscoverSliderType.TMDB_TV_STREAMING_SERVICES + ? activeOption.params + ?.replace( + '$regionValue', + encodeURIExtraParams(values?.data.split(',')[0]) + ) + .replace( + '$providersValue', + encodeURIExtraParams(values?.data.split(',')[1]) + ) + : activeOption.params?.replace( + '$value', + encodeURIExtraParams(values.data) + ) + } onNewTitles={updateResultCount} /> diff --git a/src/components/Discover/DiscoverSliderEdit/index.tsx b/src/components/Discover/DiscoverSliderEdit/index.tsx index 970a9887..9a0f3aa7 100644 --- a/src/components/Discover/DiscoverSliderEdit/index.tsx +++ b/src/components/Discover/DiscoverSliderEdit/index.tsx @@ -164,6 +164,10 @@ const DiscoverSliderEdit = ({ return intl.formatMessage(sliderTitles.tmdbnetwork); case DiscoverSliderType.TMDB_SEARCH: return intl.formatMessage(sliderTitles.tmdbsearch); + case DiscoverSliderType.TMDB_MOVIE_STREAMING_SERVICES: + return intl.formatMessage(sliderTitles.tmdbmoviestreamingservices); + case DiscoverSliderType.TMDB_TV_STREAMING_SERVICES: + return intl.formatMessage(sliderTitles.tmdbtvstreamingservices); default: return 'Unknown Slider'; } @@ -195,7 +199,9 @@ const DiscoverSliderEdit = ({ className={`${slider.data ? 'mb-4' : 'mb-0'} flex space-x-2 md:mb-0`} > -
{getSliderTitle(slider)}
+
+ {getSliderTitle(slider)} +
{ /> ); break; + case DiscoverSliderType.TMDB_MOVIE_STREAMING_SERVICES: + sliderComponent = ( + + ); + break; + case DiscoverSliderType.TMDB_TV_STREAMING_SERVICES: + sliderComponent = ( + + ); + break; } if (isEditing) { diff --git a/src/components/Selector/index.tsx b/src/components/Selector/index.tsx index 3b863fd7..8a21d3fb 100644 --- a/src/components/Selector/index.tsx +++ b/src/components/Selector/index.tsx @@ -305,7 +305,9 @@ export const WatchProviderSelector = ({ useEffect(() => { onChange(watchRegion, activeProvider); - }, [activeProvider, watchRegion, onChange]); + // removed onChange as a dependency as we only need to call it when the value(s) change + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [activeProvider, watchRegion]); const orderedData = useMemo(() => { if (!data) { @@ -344,7 +346,7 @@ export const WatchProviderSelector = ({ ) : (
-
+
{initialProviders.map((provider) => { const isActive = activeProvider.includes(provider.id); return ( @@ -353,7 +355,7 @@ export const WatchProviderSelector = ({ key={`prodiver-${provider.id}`} >
{showMore && otherProviders.length > 0 && ( -
+
{otherProviders.map((provider) => { const isActive = activeProvider.includes(provider.id); return ( @@ -395,7 +397,7 @@ export const WatchProviderSelector = ({ key={`prodiver-${provider.id}`} >
Date: Wed, 1 Mar 2023 11:59:06 -0500 Subject: [PATCH 02/49] fix(deps): update all non-major dependencies (#3223) * chore(deps): update all non-major dependencies * fix: resolve same express-session types for connect-typeorm --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: sct --- package.json | 93 +- yarn.lock | 3295 +++++++++++++++++++++++++++++--------------------- 2 files changed, 1932 insertions(+), 1456 deletions(-) diff --git a/package.json b/package.json index f210da45..5dff068e 100644 --- a/package.json +++ b/package.json @@ -29,17 +29,17 @@ }, "license": "MIT", "dependencies": { - "@formatjs/intl-displaynames": "6.2.3", - "@formatjs/intl-locale": "3.0.11", - "@formatjs/intl-pluralrules": "5.1.8", + "@formatjs/intl-displaynames": "6.2.6", + "@formatjs/intl-locale": "3.1.1", + "@formatjs/intl-pluralrules": "5.1.10", "@formatjs/intl-utils": "3.8.4", - "@headlessui/react": "1.7.7", - "@heroicons/react": "2.0.13", + "@headlessui/react": "1.7.12", + "@heroicons/react": "2.0.16", "@supercharge/request-ip": "1.2.0", "@svgr/webpack": "6.5.1", - "@tanem/react-nprogress": "5.0.22", - "ace-builds": "1.14.0", - "axios": "1.2.2", + "@tanem/react-nprogress": "5.0.30", + "ace-builds": "1.15.2", + "axios": "1.3.4", "axios-rate-limit": "1.3.0", "bcrypt": "5.1.0", "bowser": "2.11.0", @@ -47,7 +47,7 @@ "cookie-parser": "1.4.6", "copy-to-clipboard": "3.3.3", "country-flag-icons": "1.5.5", - "cronstrue": "2.21.0", + "cronstrue": "2.23.0", "csurf": "1.11.0", "date-fns": "2.29.3", "dayjs": "1.11.7", @@ -63,23 +63,23 @@ "next": "12.3.4", "node-cache": "5.1.2", "node-gyp": "9.3.1", - "node-schedule": "2.1.0", - "nodemailer": "6.8.0", - "openpgp": "5.5.0", + "node-schedule": "2.1.1", + "nodemailer": "6.9.1", + "openpgp": "5.7.0", "plex-api": "5.3.2", "pug": "3.0.2", "pulltorefreshjs": "0.1.22", "react": "18.2.0", "react-ace": "10.1.0", "react-animate-height": "2.1.2", - "react-aria": "3.22.0", + "react-aria": "3.23.0", "react-dom": "18.2.0", - "react-intersection-observer": "9.4.1", - "react-intl": "6.2.5", - "react-markdown": "8.0.4", + "react-intersection-observer": "9.4.3", + "react-intl": "6.2.10", + "react-markdown": "8.0.5", "react-popper-tooltip": "4.4.2", "react-select": "5.7.0", - "react-spring": "9.6.1", + "react-spring": "9.7.1", "react-tailwindcss-datepicker-sct": "1.3.4", "react-toast-notifications": "2.5.1", "react-truncate-markup": "5.1.2", @@ -88,42 +88,42 @@ "secure-random-password": "0.2.3", "semver": "7.3.8", "sqlite3": "5.1.4", - "swagger-ui-express": "4.6.0", - "swr": "2.0.0", - "typeorm": "0.3.11", + "swagger-ui-express": "4.6.2", + "swr": "2.0.4", + "typeorm": "0.3.12", "web-push": "3.5.0", "winston": "3.8.2", "winston-daily-rotate-file": "4.7.1", "xml2js": "0.4.23", "yamljs": "0.3.0", "yup": "0.32.11", - "zod": "3.20.2" + "zod": "3.20.6" }, "devDependencies": { - "@babel/cli": "7.20.7", - "@commitlint/cli": "17.4.0", - "@commitlint/config-conventional": "17.4.0", + "@babel/cli": "7.21.0", + "@commitlint/cli": "17.4.4", + "@commitlint/config-conventional": "17.4.4", "@semantic-release/changelog": "6.0.2", "@semantic-release/commit-analyzer": "9.0.2", "@semantic-release/exec": "6.0.3", "@semantic-release/git": "10.0.1", "@tailwindcss/aspect-ratio": "0.4.2", "@tailwindcss/forms": "0.5.3", - "@tailwindcss/typography": "0.5.8", + "@tailwindcss/typography": "0.5.9", "@types/bcrypt": "5.0.0", "@types/cookie-parser": "1.4.3", "@types/country-flag-icons": "1.2.0", "@types/csurf": "1.11.2", "@types/email-templates": "8.0.4", - "@types/express": "4.17.15", - "@types/express-session": "1.17.5", + "@types/express": "4.17.17", + "@types/express-session": "1.17.6", "@types/lodash": "4.14.191", "@types/node": "17.0.36", "@types/node-schedule": "2.1.0", "@types/nodemailer": "6.4.7", "@types/pulltorefreshjs": "0.1.5", - "@types/react": "18.0.26", - "@types/react-dom": "18.0.10", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", "@types/react-transition-group": "4.4.5", "@types/secure-random-password": "0.2.1", "@types/semver": "7.3.13", @@ -132,45 +132,46 @@ "@types/xml2js": "0.4.11", "@types/yamljs": "0.2.31", "@types/yup": "0.29.14", - "@typescript-eslint/eslint-plugin": "5.48.0", - "@typescript-eslint/parser": "5.48.0", + "@typescript-eslint/eslint-plugin": "5.54.0", + "@typescript-eslint/parser": "5.54.0", "autoprefixer": "10.4.13", "babel-plugin-react-intl": "8.2.25", "babel-plugin-react-intl-auto": "3.3.0", - "commitizen": "4.2.6", + "commitizen": "4.3.0", "copyfiles": "2.4.1", "cy-mobile-commands": "0.3.0", - "cypress": "12.3.0", + "cypress": "12.7.0", "cz-conventional-changelog": "3.3.0", - "eslint": "8.31.0", + "eslint": "8.35.0", "eslint-config-next": "12.3.4", "eslint-config-prettier": "8.6.0", - "eslint-plugin-formatjs": "4.3.9", - "eslint-plugin-jsx-a11y": "6.6.1", + "eslint-plugin-formatjs": "4.9.0", + "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-no-relative-import-paths": "1.5.2", "eslint-plugin-prettier": "4.2.1", - "eslint-plugin-react": "7.31.11", + "eslint-plugin-react": "7.32.2", "eslint-plugin-react-hooks": "4.6.0", "extract-react-intl-messages": "4.1.1", "husky": "8.0.3", - "lint-staged": "13.1.0", + "lint-staged": "13.1.2", "nodemon": "2.0.20", - "postcss": "8.4.20", - "prettier": "2.8.1", - "prettier-plugin-organize-imports": "3.2.1", - "prettier-plugin-tailwindcss": "0.2.1", + "postcss": "8.4.21", + "prettier": "2.8.4", + "prettier-plugin-organize-imports": "3.2.2", + "prettier-plugin-tailwindcss": "0.2.3", "semantic-release": "19.0.5", "semantic-release-docker-buildx": "1.0.1", - "tailwindcss": "3.2.4", + "tailwindcss": "3.2.7", "ts-node": "10.9.1", "tsc-alias": "1.8.2", "tsconfig-paths": "4.1.2", - "typescript": "4.9.4" + "typescript": "4.9.5" }, "resolutions": { "sqlite3/node-gyp": "8.4.1", - "@types/react": "18.0.26", - "@types/react-dom": "18.0.10" + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "@types/express-session": "1.17.6" }, "config": { "commitizen": { diff --git a/yarn.lock b/yarn.lock index 1da72e83..c95f591d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,12 +20,12 @@ call-me-maybe "^1.0.1" js-yaml "^4.1.0" -"@babel/cli@7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.20.7.tgz#8fc12e85c744a1a617680eacb488fab1fcd35b7c" - integrity sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ== +"@babel/cli@7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.21.0.tgz#1868eb70e9824b427fc607610cce8e9e7889e7e1" + integrity sha512-xi7CxyS8XjSyiwUGCfwf+brtJxjW1/ZTcBUkP10xawIEXLX5HzLn+3aXkgxozcP2UhRhtKTmQurw9Uaes7jZrA== dependencies: - "@jridgewell/trace-mapping" "^0.3.8" + "@jridgewell/trace-mapping" "^0.3.17" commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" @@ -980,13 +980,20 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1026,26 +1033,26 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@commitlint/cli@17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.4.0.tgz#14a5f9b713a5b60ff1a0cfce66b0bb207954c1ad" - integrity sha512-SEY4sYe8yVlgxPP7X0wJb96DBAGBPsCsy6QbqJt/UECbIAjDeDV5xXBV4jnS7T/qMC10sk6Ub9kDhEX0VWvblw== +"@commitlint/cli@17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.4.4.tgz#36df08bfa31dbb9a2b6b1d7187a31e578f001a06" + integrity sha512-HwKlD7CPVMVGTAeFZylVNy14Vm5POVY0WxPkZr7EXLC/os0LH/obs6z4HRvJtH/nHCMYBvUBQhGwnufKfTjd5g== dependencies: - "@commitlint/format" "^17.4.0" - "@commitlint/lint" "^17.4.0" - "@commitlint/load" "^17.4.0" - "@commitlint/read" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/format" "^17.4.4" + "@commitlint/lint" "^17.4.4" + "@commitlint/load" "^17.4.4" + "@commitlint/read" "^17.4.4" + "@commitlint/types" "^17.4.4" execa "^5.0.0" lodash.isfunction "^3.0.9" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" -"@commitlint/config-conventional@17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.4.0.tgz#9188d793886d8a1c633834602f06a642dd16ed64" - integrity sha512-G4XBf45J4ZMspO4NwBFzY3g/1Kb+B42BcIxeikF8wucQxcyxcmhRdjeQpRpS1XEcBq5pdtEEQFipuB9IuiNFhw== +"@commitlint/config-conventional@17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.4.4.tgz#f30b1e5b2e48ce5799a483c200c52f218a98efcc" + integrity sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ== dependencies: conventional-changelog-conventionalcommits "^5.0.0" @@ -1057,20 +1064,20 @@ "@commitlint/types" "^17.0.0" ajv "^8.11.0" -"@commitlint/config-validator@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.4.0.tgz#2cb229672a22476cf1f21bedbfcd788e5da5b54f" - integrity sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA== +"@commitlint/config-validator@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.4.4.tgz#d0742705719559a101d2ee49c0c514044af6d64d" + integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" ajv "^8.11.0" -"@commitlint/ensure@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.4.0.tgz#3de65768bfccb9956ec3a0ecd8a415421bf315e5" - integrity sha512-7oAxt25je0jeQ/E0O/M8L3ADb1Cvweu/5lc/kYF8g/kXatI0wxGE5La52onnAUAWeWlsuvBNar15WcrmDmr5Mw== +"@commitlint/ensure@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.4.4.tgz#a36e7719bdb9c2b86c8b8c2e852b463a7bfda5fa" + integrity sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" lodash.camelcase "^4.3.0" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" @@ -1087,31 +1094,31 @@ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== -"@commitlint/format@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.0.tgz#1c80cf3a6274ff9b3d3c0dd150a97882d557aa0f" - integrity sha512-Z2bWAU5+f1YZh9W76c84J8iLIWIvvm+mzqogTz0Nsc1x6EHW0Z2gI38g5HAjB0r0I3ZjR15IDEJKhsxyblcyhA== +"@commitlint/format@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.4.tgz#0f6e1b4d7a301c7b1dfd4b6334edd97fc050b9f5" + integrity sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" chalk "^4.1.0" -"@commitlint/is-ignored@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.4.0.tgz#7c1f35db20c409783935b9305ad695f378287b31" - integrity sha512-mkRuBlPUaBimvSvJyIHEHEW1/jP1SqEI7NOoaO9/eyJkMbsaiv5b1QgDYL4ZXlHdS64RMV7Y21MVVzuIceImDA== +"@commitlint/is-ignored@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.4.4.tgz#82e03f1abe2de2c0c8c162a250b8d466225e922b" + integrity sha512-Y3eo1SFJ2JQDik4rWkBC4tlRIxlXEFrRWxcyrzb1PUT2k3kZ/XGNuCDfk/u0bU2/yS0tOA/mTjFsV+C4qyACHw== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" semver "7.3.8" -"@commitlint/lint@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.4.0.tgz#ba3554692d8e156db04085caa75eab9d46908449" - integrity sha512-HG2YT4TUbQKs9v8QvpQjJ6OK+fhflsDB8M+D5tLrY79hbQOWA9mDKdRkABsW/AAhpNI9+zeGUWF3jj245jSHKw== +"@commitlint/lint@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.4.4.tgz#0ecd70b44ec5f4823c2e00e0c4b04ebd41d42856" + integrity sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw== dependencies: - "@commitlint/is-ignored" "^17.4.0" - "@commitlint/parse" "^17.4.0" - "@commitlint/rules" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/is-ignored" "^17.4.4" + "@commitlint/parse" "^17.4.4" + "@commitlint/rules" "^17.4.4" + "@commitlint/types" "^17.4.4" "@commitlint/load@>6.1.1": version "17.3.0" @@ -1133,15 +1140,16 @@ ts-node "^10.8.1" typescript "^4.6.4" -"@commitlint/load@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.4.0.tgz#d0136d38f3d533e706340efbccc2fb38ebb97538" - integrity sha512-wDKNvAJqukqZqKmhRlf3KNo/12QGo1AQcd80EbV01SxtGvyHOsJ/g+/IbrZpopZv8rvzmEVktcpfDYH6ITepFA== +"@commitlint/load@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.4.4.tgz#13fcb553572f265339801cde6dd10ee5eea07f5e" + integrity sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ== dependencies: - "@commitlint/config-validator" "^17.4.0" + "@commitlint/config-validator" "^17.4.4" "@commitlint/execute-rule" "^17.4.0" - "@commitlint/resolve-extends" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/resolve-extends" "^17.4.4" + "@commitlint/types" "^17.4.4" + "@types/node" "*" chalk "^4.1.0" cosmiconfig "^8.0.0" cosmiconfig-typescript-loader "^4.0.0" @@ -1152,27 +1160,27 @@ ts-node "^10.8.1" typescript "^4.6.4" -"@commitlint/message@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.0.tgz#40779163d1cd7946b081077e1ef7f831baa577e5" - integrity sha512-USGJDU9PPxcgQjKXCzvPUal65KAhxWq3hp+MrU1pNCN2itWM654CLIoY2LMIQ7rScTli9B5dTLH3vXhzbItmzA== +"@commitlint/message@^17.4.2": + version "17.4.2" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c" + integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q== -"@commitlint/parse@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.4.0.tgz#bb2a78dcad9abd12a53a9d50387a45c5b86afcff" - integrity sha512-x8opKc5p+Hgs+CrMbq3VAnW2L2foPAX6arW8u9c8nTzksldGgFsENT+XVyPmpSMLlVBswZ1tndcz1xyKiY9TJA== +"@commitlint/parse@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.4.4.tgz#8311b12f2b730de6ea0679ae2a37b386bcc5b04b" + integrity sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg== dependencies: - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.2.2" -"@commitlint/read@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.4.0.tgz#946def0be19a2af8fd1d09cd7ad7f33b3c30b610" - integrity sha512-pGDeZpbkyvhxK8ZoCDUacPPRpauKPWF3n2XpDBEnuGreqUF2clq2PVJpwMMaNN5cHW8iFKCbcoOjXhD01sln0A== +"@commitlint/read@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.4.4.tgz#de6ec00aad827764153009aa54517e3df2154555" + integrity sha512-B2TvUMJKK+Svzs6eji23WXsRJ8PAD+orI44lVuVNsm5zmI7O8RSGJMvdEZEikiA4Vohfb+HevaPoWZ7PiFZ3zA== dependencies: "@commitlint/top-level" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" fs-extra "^11.0.0" git-raw-commits "^2.0.0" minimist "^1.2.6" @@ -1189,27 +1197,27 @@ resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/resolve-extends@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.0.tgz#9023da6c70c4ebd173b4b0995fe29f27051da2d3" - integrity sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ== +"@commitlint/resolve-extends@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc" + integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A== dependencies: - "@commitlint/config-validator" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/config-validator" "^17.4.4" + "@commitlint/types" "^17.4.4" import-fresh "^3.0.0" lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.4.0.tgz#7814f9de38c10ba17b33dd16a05be8f181031538" - integrity sha512-lz3i1jet2NNjTWpAMwjjQjMZCPWBIHK1Kkja9o09UmUtMjRdALTb8uMLe8gCyeq3DiiZ5lLYOhbsoPK56xGQKA== +"@commitlint/rules@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.4.4.tgz#9b33f41e5eb529f916396bac7c62e61f0edd6791" + integrity sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ== dependencies: - "@commitlint/ensure" "^17.4.0" - "@commitlint/message" "^17.4.0" + "@commitlint/ensure" "^17.4.4" + "@commitlint/message" "^17.4.2" "@commitlint/to-lines" "^17.4.0" - "@commitlint/types" "^17.4.0" + "@commitlint/types" "^17.4.4" execa "^5.0.0" "@commitlint/to-lines@^17.4.0": @@ -1231,10 +1239,10 @@ dependencies: chalk "^4.1.0" -"@commitlint/types@^17.4.0": - version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.0.tgz#c7c2b97b959f6175c164632bf26208ce417b3f31" - integrity sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA== +"@commitlint/types@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== dependencies: chalk "^4.1.0" @@ -1452,10 +1460,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint/eslintrc@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff" + integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1467,6 +1475,11 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.35.0.tgz#b7569632b0b788a0ca0e438235154e45d42813a7" + integrity sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw== + "@floating-ui/core@^1.0.5": version "1.1.0" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.1.0.tgz#0a1dee4bbce87ff71602625d33f711cafd8afc08" @@ -1508,6 +1521,13 @@ dependencies: tslib "^2.4.0" +"@formatjs/fast-memoize@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.8.tgz#425a69f783005f69e11f9e38a7f87f8822d330c6" + integrity sha512-PemNUObyoIZcqdQ1ixTPugzAzhEj7j6AHIyrq/qR6x5BFTvOQeXHYsVZUqBEFduAIscUaDfou+U+xTqOiunJ3Q== + dependencies: + tslib "^2.4.0" + "@formatjs/icu-messageformat-parser@2.1.14": version "2.1.14" resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.14.tgz#d7bc8c82bfce1eb8e3232e6d7e3d6ea92ba390cc" @@ -1517,6 +1537,15 @@ "@formatjs/icu-skeleton-parser" "1.3.18" tslib "^2.4.0" +"@formatjs/icu-messageformat-parser@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.3.0.tgz#8e8fd577c3e39454ef14bba4963f2e1d5f2cc46c" + integrity sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/icu-skeleton-parser" "1.3.18" + tslib "^2.4.0" + "@formatjs/icu-skeleton-parser@1.3.18": version "1.3.18" resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz#7aed3d60e718c8ad6b0e64820be44daa1e29eeeb" @@ -1525,38 +1554,46 @@ "@formatjs/ecma402-abstract" "1.14.3" tslib "^2.4.0" -"@formatjs/intl-displaynames@6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.2.3.tgz#65bc954fe891fdfe197268602f4d2d3ccd631cce" - integrity sha512-teB0L68MDGM8jEKQg55w7nvFjzeLHE6e3eK/04s+iuEVYYmvjjiHJKHrthKENzcJ0F6mHf/AwXrbX+1mKxT6AQ== +"@formatjs/intl-displaynames@6.2.6": + version "6.2.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.2.6.tgz#6bc02fe0bf6571391aac0e01e74ecbf38542ff32" + integrity sha512-scf5AQTk9EjpvPhboo5sizVOvidTdMOnajv9z+0cejvl7JNl9bl/aMrNBgC72UH+bP3l45usPUKAGskV6sNIrA== dependencies: "@formatjs/ecma402-abstract" "1.14.3" "@formatjs/intl-localematcher" "0.2.32" tslib "^2.4.0" -"@formatjs/intl-getcanonicallocales@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.0.5.tgz#d405cf5221f49531e62ecfde50acdfb62fcc4854" - integrity sha512-YOk+Fa5gpPq5bdpm8JDAY5bkfCkR+NENZKQbLHeqhm8JchHcclPwZ9FU48gYGg3CW6Wi/cTCOvmOrzsIhlkr0w== +"@formatjs/intl-enumerator@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-enumerator/-/intl-enumerator-1.2.1.tgz#2bed9e59385105d8a234fe5b71f27cda7c093e61" + integrity sha512-hK54SSi3hwwWZd7zz9wjYo7AIOlovhHBoUYjQJ5sZXHSLdwAnxE2ck5VaTwWKr4X6Vryq5stmy+MQXA4nDT9jg== dependencies: tslib "^2.4.0" -"@formatjs/intl-listformat@7.1.7": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.1.7.tgz#b46fec1038ef9ca062d1e7b9b3412c2a14dca18f" - integrity sha512-Zzf5ruPpfJnrAA2hGgf/6pMgQ3tx9oJVhpqycFDavHl3eEzrwdHddGqGdSNwhd0bB4NAFttZNQdmKDldc5iDZw== +"@formatjs/intl-getcanonicallocales@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-2.1.0.tgz#57ef487ff2d90c12bbda9fba86f56b7c28cb80ba" + integrity sha512-gpPVLNSjNnwG4ctvSs7XiFQ/sIOyxcZrXukg1G226FUE+Cy6KMcAxo22zPZXhCTZt50b1FQZ/Zua5U/k9inb0Q== + dependencies: + tslib "^2.4.0" + +"@formatjs/intl-listformat@7.1.9": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.1.9.tgz#0c2ce67b610054f215dd2635a6da7da308cfbe3d" + integrity sha512-5YikxwRqRXTVWVujhswDOTCq6gs+m9IcNbNZLa6FLtyBStAjEsuE2vAU+lPsbz9ZTST57D5fodjIh2JXT6sMWQ== dependencies: "@formatjs/ecma402-abstract" "1.14.3" "@formatjs/intl-localematcher" "0.2.32" tslib "^2.4.0" -"@formatjs/intl-locale@3.0.11": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-3.0.11.tgz#6b3bee5692fab3c70a0ce9c642c2a2bec3700aa4" - integrity sha512-gLEX9kzebBjIVCkXMMN+VFMUV2aj0vhmrP+nke2muxUSJ3fLs/DJjlkv+s59rAL3nNaGdvphqKLhQsul0mmhAw== +"@formatjs/intl-locale@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-locale/-/intl-locale-3.1.1.tgz#8d2efe6d1cade0cda367b1aeee38909b880ae067" + integrity sha512-UshFvThVOloYsHagGe7m2mDifEbZaS9+a+x3Va8YKU3NxFDyNr8s5EQgYkZhZ2kTzWqBxeKB/qZE9VT6LR/lRg== dependencies: "@formatjs/ecma402-abstract" "1.14.3" - "@formatjs/intl-getcanonicallocales" "2.0.5" + "@formatjs/intl-enumerator" "1.2.1" + "@formatjs/intl-getcanonicallocales" "2.1.0" tslib "^2.4.0" "@formatjs/intl-localematcher@0.2.32": @@ -1574,10 +1611,10 @@ "@formatjs/ecma402-abstract" "1.4.0" tslib "^2.0.1" -"@formatjs/intl-pluralrules@5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.1.8.tgz#11eeca3cde088fd68d258a09b0791b327a8eb019" - integrity sha512-uevO916EWoeuueqeNzHjnUzpfWZzXFJibC/sEvPR/ZiZH5btWuOLeJLdb1To4nMH8ZJQlmAf8SDpFf+eWvz5lQ== +"@formatjs/intl-pluralrules@5.1.10": + version "5.1.10" + resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-5.1.10.tgz#46ad0680f013cdbcccab36891c4ccdd9e4069070" + integrity sha512-c8VZ0J0LalJ+4PHyYkwn/Vc9XX6TJPcY1HHyOixhEnr1x4zxk3ehvdQE8pB0/zuSE1RQTos/pKMF/8XmEsM/cA== dependencies: "@formatjs/ecma402-abstract" "1.14.3" "@formatjs/intl-localematcher" "0.2.32" @@ -1590,17 +1627,17 @@ dependencies: emojis-list "^3.0.0" -"@formatjs/intl@2.6.3": - version "2.6.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.6.3.tgz#7cedd184fb62d39174fbf62ee636b1b306524b7c" - integrity sha512-JaVZk14U/GypVfCZPevQ0KdruFkq16FXx7g398/Dm+YEx/W7sRiftbZeDy4wQ7WGryb45e763XycxD9o/vm9BA== +"@formatjs/intl@2.6.7": + version "2.6.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.6.7.tgz#a64cf37d01c3d09ce18cf9390982534655cae14b" + integrity sha512-9FvEJfUMzlmP5ZBK3EE0928kVsZmD5aeWXg+faP8+mKIvG3c0hkLEXQ2MiUrXQt4rsEzOPbYVtBdthzSM0e2fw== dependencies: "@formatjs/ecma402-abstract" "1.14.3" - "@formatjs/fast-memoize" "1.2.7" - "@formatjs/icu-messageformat-parser" "2.1.14" - "@formatjs/intl-displaynames" "6.2.3" - "@formatjs/intl-listformat" "7.1.7" - intl-messageformat "10.2.5" + "@formatjs/fast-memoize" "1.2.8" + "@formatjs/icu-messageformat-parser" "2.3.0" + "@formatjs/intl-displaynames" "6.2.6" + "@formatjs/intl-listformat" "7.1.9" + intl-messageformat "10.3.1" tslib "^2.4.0" "@formatjs/ts-transformer@2.13.0", "@formatjs/ts-transformer@^2.6.0": @@ -1612,12 +1649,12 @@ tslib "^2.0.1" typescript "^4.0" -"@formatjs/ts-transformer@3.11.5": - version "3.11.5" - resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-3.11.5.tgz#0502c0c38d4ad628efbef61f1c2e35b7ea37959e" - integrity sha512-cAmvKzgPqdetAr/RsxoXYhfNhMf5tERlXzJTsQw+j6tddPwIAbihACQx6KaajyJJ4aNssiziWNmcaHtjTqrrVw== +"@formatjs/ts-transformer@3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-3.12.0.tgz#7d6340c164db38202ece328ca37d1e9a0d5e62ed" + integrity sha512-/jEpXcqA6y/vdijgkxSoKGfkGR5VcClJeI8hnpJ2PBCHfrc4ywFMyoZqRAakKW3IJVttaDo7mGvBAIDxV1F4Qg== dependencies: - "@formatjs/icu-messageformat-parser" "2.1.14" + "@formatjs/icu-messageformat-parser" "2.3.0" "@types/json-stable-stringify" "^1.0.32" "@types/node" "14 || 16 || 17" chalk "^4.0.0" @@ -1642,17 +1679,17 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@headlessui/react@1.7.7": - version "1.7.7" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.7.tgz#d6f8708d8943ae8ebb1a6929108234e4515ac7e8" - integrity sha512-BqDOd/tB9u2tA0T3Z0fn18ktw+KbVwMnkxxsGPIH2hzssrQhKB5n/6StZOyvLYP/FsYtvuXfi9I0YowKPv2c1w== +"@headlessui/react@1.7.12": + version "1.7.12" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.12.tgz#9ab2baa3c4f632782631e00937f9531a34033619" + integrity sha512-FhSx5V+Qp0GvbTpaxyS+ymGDDNntCacClWsk/d8Upbr19g3AsPbjfPk4+m2CgJGcuCB5Dz7LpUIOAbvQTyjL2g== dependencies: client-only "^0.0.1" -"@heroicons/react@2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.13.tgz#9b1cc54ff77d6625c9565efdce0054a4bcd9074c" - integrity sha512-iSN5XwmagrnirWlYEWNPdCDj9aRYVD/lnK3JlsC9/+fqGF80k8C7rl+1HCvBX0dBoagKqOFBs6fMhJJ1hOg1EQ== +"@heroicons/react@2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.16.tgz#562883c19ba2690c83380b42a9a5cce39dcbdb4a" + integrity sha512-x89rFxH3SRdYaA+JCXwfe+RkE1SFTo9GcOkZettHer71Y3T7V+ogKmfw5CjTazgS3d0ClJ7p1NA+SP7VQLQcLw== "@humanwhocodes/config-array@^0.11.8": version "0.11.8" @@ -1673,32 +1710,32 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@internationalized/date@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.0.2.tgz#1566a0bcbd82dce4dd54a5b26456bb701068cb89" - integrity sha512-9V1IxesP6ASZj/hYyOXOC4yPJvidbbStyWQKLCQSqhhKACMOXoo+BddXZJy47ju9mqOMpWdrJ2rTx4yTxK9oag== +"@internationalized/date@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.1.0.tgz#da48aeaa971df6ad410cd32597c174d6cab9a3b4" + integrity sha512-wjeur7K4AecT+YwoBmBXQ/+n5lP69tuZc34hw09s44EozZK7FZHSyfPvRp5/xEb2D6abLboskDY4jG+Nt0TNUQ== dependencies: "@swc/helpers" "^0.4.14" -"@internationalized/message@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.0.10.tgz#340dcfd14ace37234e09419427c991a0c466b96e" - integrity sha512-vfLqEop/NH68IgqMcXJNSDqZ5Leg3EEgCxhuuSefU7vvdbptD3pwpUWXaK9igYPa+aZfUU0eqv86yqm76obtsw== +"@internationalized/message@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.1.0.tgz#b284014cd8bbb430a648b76c87c62bdca968b04c" + integrity sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ== dependencies: "@swc/helpers" "^0.4.14" intl-messageformat "^10.1.0" -"@internationalized/number@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.1.2.tgz#4482a6ac573acfb18efd354a42008af20da6c89c" - integrity sha512-Mbys8SGsn0ApXz3hJLNU+d95B8luoUbwnmCpBwl7d63UmYAlcT6TRDyvaS/vwdbElXLcsQJjQCu0gox2cv/Tig== +"@internationalized/number@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.2.0.tgz#dffb661cacd61a87b814c47b7d5240a286249066" + integrity sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w== dependencies: "@swc/helpers" "^0.4.14" -"@internationalized/string@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@internationalized/string/-/string-3.0.1.tgz#2c70a81ae5eb84f156f40330369c2469bad6d504" - integrity sha512-2+rHfXZ56YgsC6i3fKvBue/xatnSm0Jv+C/x4+n3wg5xAcLh4LPW3GvZ/9ifxNAz9+IWplgZHa1FRIbSuUvNWg== +"@internationalized/string@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@internationalized/string/-/string-3.1.0.tgz#0b365906a8c3f44800b0db52c2e990cff345abce" + integrity sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng== dependencies: "@swc/helpers" "^0.4.14" @@ -1734,7 +1771,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== @@ -1747,7 +1784,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -2234,1073 +2271,1073 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== -"@react-aria/breadcrumbs@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.4.1.tgz#f0fc1353bf402cac2d2312d7de60f545366e1413" - integrity sha512-3dotDXcXX5IbES9tS9gK5m/2inlZH1ZESi61aBUoD/kQbUcf4CJ3TniVqzBKjNqQN8yIBH/LjwkAoGmuvtPVRQ== +"@react-aria/breadcrumbs@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.0.tgz#e2ff9b39dd92f355c4059b70b13a639245d1dbb9" + integrity sha512-WiNMlk8COR+4zpJ8mFgTgWQqCxoFE6OMJ16anJzR8IgP1xMzUmIQ7l0s0Dv4D5qE+xVlgNF0ccDdw1x6A+WzPw== dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/link" "^3.3.6" - "@react-aria/utils" "^3.14.2" - "@react-types/breadcrumbs" "^3.4.6" - "@react-types/shared" "^3.16.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/link" "^3.4.0" + "@react-aria/utils" "^3.15.0" + "@react-types/breadcrumbs" "^3.5.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/button@^3.6.4": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.6.4.tgz#51927c9d968d0c1f741ee2081ca7f2e244abbc12" - integrity sha512-OEs5fNGiuZzyC5y0cNl96+6pRf/3ZhI1i2m6LlRYhJLsWXPhHt21UHEnlSchE/XGtgKojJEeTsXottoBFTBi5w== +"@react-aria/button@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.7.0.tgz#b00635c8be0e47e19733c96f3702b699f65242b7" + integrity sha512-4DSGXrAWflzT4cQe/x0KdrPzz7hv9vZgqYJuNXQkpmeIMs1EmUKuby2xC+W9GHuZ+8dMxjTWKy3XdwX2tCM42A== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/toggle" "^3.4.4" - "@react-types/button" "^3.7.0" - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/toggle" "^3.5.0" + "@react-types/button" "^3.7.1" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/calendar@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.0.5.tgz#78b4138688d325a3c3f8dc0be3e45291b3e8670b" - integrity sha512-RIOwGYIwMizN/MAF5RkTb2ic9OJ0rJyR2VqqgtV3c7ADHNejzyLYMQmaalEFDUHS+AbvaXM1LCXdFBhSB8nf5w== +"@react-aria/calendar@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.1.0.tgz#58565af2bca09ef72dddb246ff4a70157c008add" + integrity sha512-XWtoGMBTYpj5De2yfboAv60SMXa/T2BjPd0uSkiaPXAC0vPjdB0VPhGbSi6LKCYIiTAMs98mMP0P4WYhWyW4jA== dependencies: - "@internationalized/date" "^3.0.2" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/utils" "^3.14.2" - "@react-stately/calendar" "^3.0.5" - "@react-types/button" "^3.7.0" - "@react-types/calendar" "^3.0.5" - "@react-types/shared" "^3.16.0" + "@internationalized/date" "^3.1.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/calendar" "^3.1.0" + "@react-types/button" "^3.7.1" + "@react-types/calendar" "^3.1.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/checkbox@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.7.1.tgz#217ea3173ad37ae85cb39bcb9932eb5c1cde2e0b" - integrity sha512-3KRg/KrTRwQdw5Yg7gpbIKWWVt57PbGSEXAS/diQvRf9pTXbOuChTES8uVlcwF8q+3mKXc4ppzE3gsNQ5jOMqg== +"@react-aria/checkbox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.8.0.tgz#bded3e1238901c6cac109c8d1a0b2a66d452f8be" + integrity sha512-VjezmSfDx1/A+Yz5naZ9xCxkasmtsO7uK+Ur+Z6bKmHwvoazRK5cATdRG4mj++0JUBYn6bvBGBEXFZHTkkGahw== dependencies: - "@react-aria/label" "^3.4.4" - "@react-aria/toggle" "^3.4.2" - "@react-aria/utils" "^3.14.2" - "@react-stately/checkbox" "^3.3.2" - "@react-stately/toggle" "^3.4.4" - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" + "@react-aria/label" "^3.5.0" + "@react-aria/toggle" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/checkbox" "^3.4.0" + "@react-stately/toggle" "^3.5.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/combobox@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.4.4.tgz#0a968bfefedc9106e4b098ea84707f6da93dfc83" - integrity sha512-aviSDt4JkYZC1Ww83gvrNB4cHetXu73n5NuEfMNBC3B6fiL0MP5Av5+lMgf8FzpQks39QkZNxBtQ/h4I3D7SBA== +"@react-aria/combobox@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.5.0.tgz#ebb7d412a5b9b066da97cafc1e8da249629c6961" + integrity sha512-xbeZMxcWLDhyLqdy/0qltX5b6/YH4RV6JlBLFhRP20x0inPcnBSCdS2aarRghXAAzRagoLUtul2O8t4gfWwWxQ== dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/listbox" "^3.7.2" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/menu" "^3.7.1" - "@react-aria/overlays" "^3.12.1" - "@react-aria/selection" "^3.12.1" - "@react-aria/textfield" "^3.8.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/collections" "^3.5.1" - "@react-stately/combobox" "^3.3.1" - "@react-stately/layout" "^3.10.0" - "@react-types/button" "^3.7.0" - "@react-types/combobox" "^3.5.5" - "@react-types/shared" "^3.16.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/listbox" "^3.8.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/menu" "^3.8.0" + "@react-aria/overlays" "^3.13.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/textfield" "^3.9.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/collections" "^3.6.0" + "@react-stately/combobox" "^3.4.0" + "@react-stately/layout" "^3.11.0" + "@react-types/button" "^3.7.1" + "@react-types/combobox" "^3.6.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/datepicker@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.2.1.tgz#56a222c4b1c9c65b9b9371d3066611134f537ab7" - integrity sha512-NnW9VgX/YjxkgjcIaxmOhzpfiQmTQpCXjpPJ1+3nPhKzPKpcjtPxIYTDMkm/R+6i5FRukEGtjhg3QY9amLK6hQ== +"@react-aria/datepicker@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.3.0.tgz#15bc746d75f43c2d31c826fcc34c6859433b205a" + integrity sha512-76/5a2Dfe/SCcW0j4hqeSTnlh6SSW/AYPKPr5fNaiGnLFJ3oLsc9SAuUgTsOBglR/J3N/hqtH+UO2U8X1QC6Ng== dependencies: - "@internationalized/date" "^3.0.2" - "@internationalized/number" "^3.1.2" - "@internationalized/string" "^3.0.1" - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/spinbutton" "^3.2.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/datepicker" "^3.2.1" - "@react-types/button" "^3.7.0" - "@react-types/calendar" "^3.0.5" - "@react-types/datepicker" "^3.1.4" - "@react-types/dialog" "^3.4.5" - "@react-types/shared" "^3.16.0" + "@internationalized/date" "^3.1.0" + "@internationalized/number" "^3.2.0" + "@internationalized/string" "^3.1.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/spinbutton" "^3.3.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/datepicker" "^3.3.0" + "@react-types/button" "^3.7.1" + "@react-types/calendar" "^3.1.0" + "@react-types/datepicker" "^3.2.0" + "@react-types/dialog" "^3.5.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/dialog@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.4.2.tgz#b35f13e47d5d7d5363c7089d5d847069815bb5ea" - integrity sha512-Z6YZYXtwwmC5ZHjJldF3zuTjHnli7fXe/sM1ts3bw6jvU2L0kzhV/DRbPXYg8h695Oj9t+OIi4qxjEyKVH7SEA== +"@react-aria/dialog@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.0.tgz#678787127a0fcc66184e1fe7b2e23d9470f8cb7e" + integrity sha512-QcGwrNSn7hya6tcs0CTuYEMYBPk6YT1vaO6xMTfsSyRhJNCRvvtx/NJ3Bg26M7WvzbuC2aKaSDBw2c14ZeXr5g== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/overlays" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/overlays" "^3.4.4" - "@react-types/dialog" "^3.4.5" - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/overlays" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/overlays" "^3.5.0" + "@react-types/dialog" "^3.5.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/dnd@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.0.1.tgz#6e601873bde4173578ce63ba6bcfb78abf3bba59" - integrity sha512-z/T59Jc+6mj3OMcLjfA6MYd0zD6K3DYw+kB2CZ0EPte7BRN8wtU4+q/bx1iX+If97X6bTcHjMGX6nrQJ5vX/fw== +"@react-aria/dnd@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.1.0.tgz#42a08e436ad1a62ad802c015113791efb7a07081" + integrity sha512-SSkz9i7EcsoTrafDPpzlx+laYNfsUrCM7xX6yu68l9zO96kdoemZuv9OqbDBw2D1peqHT7kMoLreTLWsubb5bg== dependencies: - "@internationalized/string" "^3.0.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/overlays" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-aria/visually-hidden" "^3.6.1" - "@react-stately/dnd" "^3.0.1" - "@react-types/button" "^3.7.0" - "@react-types/shared" "^3.16.0" + "@internationalized/string" "^3.1.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/overlays" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-aria/visually-hidden" "^3.7.0" + "@react-stately/dnd" "^3.1.0" + "@react-types/button" "^3.7.1" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/focus@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.10.1.tgz#624d02d2565151030a4156aeb17685d87f18ad58" - integrity sha512-HjgFUC1CznuYC7CxtBIFML6bOBxW3M3cSNtvmXU9QWlrPSwwOLkXCnfY6+UkjCc5huP4v7co4PoRDX8Vbe/cVQ== +"@react-aria/focus@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.11.0.tgz#8124b2341e8d43af72f3da85b08567bda45421b7" + integrity sha512-yPuWs9bAR9CMfIwyOPm2oXLPF19gNkUqW+ozSPhWbLMTEa8Ma09eHW1br4xbN+4ONOm/dCJsIkxTNPUkiLdQoA== dependencies: - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" clsx "^1.1.1" -"@react-aria/grid@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.5.2.tgz#17454be19d4f53bde27fc4b676fa02dae4f3a85d" - integrity sha512-+cDtTvTT0YF4jgy1pv0omcweub6z1N+GdkpHC6L6/jtH2gFRVns3IC6pf5ihLDIpLloylthaMMR8C3lus7035g== +"@react-aria/grid@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.6.0.tgz#0a42f7423eddcb0c77384f71dcf00b3214de5732" + integrity sha512-O8MJdCfJ0weDbTOxYWN+nq6e9v00NGa9wXy35BdcmVnOOtk7WR8NHeH+/qPXwAm6/NBzl0ud9PZDjw2VKONALg== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/grid" "^3.4.2" - "@react-stately/selection" "^3.11.2" - "@react-stately/virtualizer" "^3.4.1" - "@react-types/checkbox" "^3.4.1" - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/grid" "^3.5.0" + "@react-stately/selection" "^3.12.0" + "@react-stately/virtualizer" "^3.5.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/gridlist@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.1.2.tgz#ffb7bc5e4e15e3bacdf036e4762f1eea0e6292f7" - integrity sha512-3HI/e8HzyBRWdEbDH+3Hvj9U5fD/1TYaqA0f4XnBdSEDd7LHPOzZyNzbZMdlMmaq2W0Dmm1YRCMELacFVUehUA== +"@react-aria/gridlist@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.2.0.tgz#1a1be6fe454bcc37aa5cefa9d79b072acd5291ce" + integrity sha512-DUlE2cnzNAyTM8oQ6DIm4FX634HPohtnfzqh+WyQ5rwxagrDLtdeQJBMo/bzWk5pDNKnM/oZCICyR+wPR43gag== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/grid" "^3.5.2" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/list" "^3.6.1" - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/grid" "^3.6.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/list" "^3.7.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/i18n@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.6.3.tgz#2b4d72d0baf07b514d2c35eb6ac356d0247ea84a" - integrity sha512-cDWl8FXJIXsw/raWcThywBueCJ5ncoogq81wYVS6hfZVmSyncONIB3bwUL12cojmjX1VEP31sN0ujT/83QP95Q== - dependencies: - "@internationalized/date" "^3.0.2" - "@internationalized/message" "^3.0.10" - "@internationalized/number" "^3.1.2" - "@internationalized/string" "^3.0.1" - "@react-aria/ssr" "^3.4.1" - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/interactions@^3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.13.1.tgz#75e102c50a5c1d002cad4ee8d59677aee226186b" - integrity sha512-WCvfZOi1hhussVTHxVq76OR48ry13Zvp9U5hmuQufyxIUlf4hOvDk4/cbK4o4JiCs8X7C7SRzcwFM34M4NHzmg== - dependencies: - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/label@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.4.4.tgz#b891d3cebeeffc7a1413a492d8a694083dc3253e" - integrity sha512-1fuYf2UctNhBy31uYN7OhdcrwzlB5GS0+C49gDkwWzccB7yr+CoOJ5UQUoVB7WBmzrc+CuzwWxSDd4OupSYIZQ== - dependencies: - "@react-aria/utils" "^3.14.2" - "@react-types/label" "^3.7.1" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/link@^3.3.6": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.3.6.tgz#e9e3203c41c4dd5c4113d0a06b7620b476f78345" - integrity sha512-UjbdBJ8EB+jCC3mPZD6cYykHqZKTy6/VvI5RGJoKtF8cg9639tRy6g102pd4ncFTdD4DfU5PPWtthC24nQRCyQ== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-types/link" "^3.3.6" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/listbox@^3.7.2": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.7.2.tgz#0cbbd4dc39712ac927542259bf4663e087353448" - integrity sha512-e3O/u2T3TccinmfS/UvHywxLbASmh28U4020WTpZnIrsaoriVCkGZvG1AYNNPDIESz2WO0oRF6vDrmGunglJ2A== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/collections" "^3.5.1" - "@react-stately/list" "^3.6.1" - "@react-types/listbox" "^3.3.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/live-announcer@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.1.2.tgz#a492c7ec1e664c8f41a572368cdbc53e22241a0c" - integrity sha512-BqtVLPWU10sZssoOJF1lJiRvZe5zqZ5BM39PsFyO7dWhVkR/9O9bZviqvKXnC1oXCnypfa+85gUshbK9unFcWA== - dependencies: - "@swc/helpers" "^0.4.14" - -"@react-aria/menu@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.7.1.tgz#74c60dcd33bba47faa79deb89523ad21d9855221" - integrity sha512-5KIUTs3xYSmERB8qzofFghznMVLcG3RWDnJcQjpRtrrYjm6Oc39TJeodDH874fiEr6o3i5WwMrEYVp7NSxz/TQ== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/overlays" "^3.12.1" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/collections" "^3.5.1" - "@react-stately/menu" "^3.4.4" - "@react-stately/tree" "^3.4.1" - "@react-types/button" "^3.7.0" - "@react-types/menu" "^3.7.3" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/meter@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.3.4.tgz#7361a663ff21bc14df48d9eedec288e21146fabf" - integrity sha512-RdVd5vlb6//HI8G1hhH4G+E0Y387GYFKjmewSUKK0Lzp9PFLili26s+xLvgigUX9ald7HiPmfPdAlXzotvo54Q== - dependencies: - "@react-aria/progress" "^3.3.4" - "@react-types/meter" "^3.2.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/numberfield@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.3.4.tgz#79fc2db5449a09efc20b83530aa2d69ae7140438" - integrity sha512-yoYeYaEW5v84Ff0x+oSN0h3uzqrSOBEgjtv8ZMaFVsZfm9yMjsVLu+QWGBYCEOPcASMkNZpNR3o91nBPK3XTDw== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/spinbutton" "^3.2.1" - "@react-aria/textfield" "^3.8.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/numberfield" "^3.3.1" - "@react-types/button" "^3.7.0" - "@react-types/numberfield" "^3.3.5" - "@react-types/shared" "^3.16.0" - "@react-types/textfield" "^3.6.2" - "@swc/helpers" "^0.4.14" - -"@react-aria/overlays@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.12.1.tgz#429fe33b0da7b920334f241c688d73dc9a750a28" - integrity sha512-OSgSopk2uQI5unvC3+fUyngbRFFe4GnF0iopCmrsI7qSQEusJUd4M2SuPVXUBBwWFt5TsiH7TnxmIPWeh5LSoA== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/ssr" "^3.4.1" - "@react-aria/utils" "^3.14.2" - "@react-aria/visually-hidden" "^3.6.1" - "@react-stately/overlays" "^3.4.4" - "@react-types/button" "^3.7.0" - "@react-types/overlays" "^3.6.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/progress@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.3.4.tgz#21138195532ae8807fb1dfc2f8162c6032d513dc" - integrity sha512-MVlWdH7L2e0u1SvkVk+C6/onS8opex9rIKUKHM08s++y80Xe3BIAh8jd5tgdlutDtcZ1kKgfb4bet9dvjymo4A== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/label" "^3.4.4" - "@react-aria/utils" "^3.14.2" - "@react-types/progress" "^3.2.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/radio@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.4.2.tgz#bcd2deb8326f934046545fee9b2568f9d3b0655b" - integrity sha512-PpEsQjwkYOkSfKfnqXpBzf0FM/V2GSC0g/NG2ZAI5atDIACeic+kHCcs8fm2QzXtUDaRltNurvYdDJ+XzZ8g1g== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/utils" "^3.14.2" - "@react-stately/radio" "^3.6.2" - "@react-types/radio" "^3.3.1" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/searchfield@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.4.4.tgz#f77f057fcd2582534bec60b5d65db5cf84490f27" - integrity sha512-Z3nZI2FXrWLPNUeJ3QV2ruTKBR9eHhPoHi+Iiuq4n+e02ib5s0Jlbam29FFiOxmf6vUMhScNcEYP9p2BNANmQA== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/textfield" "^3.8.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/searchfield" "^3.3.4" - "@react-types/button" "^3.7.0" - "@react-types/searchfield" "^3.3.6" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/select@^3.8.4": - version "3.8.4" - resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.8.4.tgz#cbb02f0cfca816e1f6b472212f0fb6aad9899fdb" - integrity sha512-d2JOe11lUoGLvsE32bZRMq32SzXuyLNczyTOLrWM0e9fsOr49A8p6L6bFm3symU/KpwjjnO+pf5IkvgEq+GoJg== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/listbox" "^3.7.2" - "@react-aria/menu" "^3.7.1" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-aria/visually-hidden" "^3.6.1" - "@react-stately/select" "^3.3.4" - "@react-types/button" "^3.7.0" - "@react-types/select" "^3.6.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/selection@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.12.1.tgz#a21ea85952c55b5a7ce8c846478226fe3d03f1f8" - integrity sha512-UX1vSY+iUdHe0itFZIOizX1BCI8SAeFnEh5VIQ1bYRt93+kAxeC914fsxFPPgrodJyqWRCX1dblPyRUIWAzQiw== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/collections" "^3.5.1" - "@react-stately/selection" "^3.11.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/separator@^3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.2.6.tgz#516fb27aa02862fc8e555042d9a8edde30214f40" - integrity sha512-QhYqoLfu+4T3ASCs5Q8ZWfBbRKBUmqquVdREWvHyvVyOBk9kRN9nxsoIxlkss1RJlJJx59AYF9T9CwgL80/bvw== - dependencies: - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/slider@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.2.4.tgz#b272c13b5651f7e76a5b9d4ef300226ae315a64d" - integrity sha512-+BDPFaCgm0gtGewO33ZDNZz1b3Fc1p5Y/HSuwCcru+jHetODJXy23IIVpWsDri1vG3fHECRnWcDZAjLZgkVnAw== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/utils" "^3.14.2" - "@react-stately/radio" "^3.6.2" - "@react-stately/slider" "^3.2.4" - "@react-types/radio" "^3.3.1" - "@react-types/shared" "^3.16.0" - "@react-types/slider" "^3.3.1" - "@swc/helpers" "^0.4.14" - -"@react-aria/spinbutton@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.2.1.tgz#8e9fff341deef3e14109c69f2b52fffa8a878a5b" - integrity sha512-y9QZ0VzWL7qzbWSPOCsAdvZhVlQrnHLRGc8bkRa2jmWrnCqS0iua/TRuLGgazIf2Rb7GmdbKBJJuPSScytVDUw== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/utils" "^3.14.2" - "@react-types/button" "^3.7.0" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-aria/ssr@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.4.1.tgz#79e8bb621487e8f52890c917d3c734f448ba95e7" - integrity sha512-NmhoilMDyIfQiOSdQgxpVH2tC2u85Y0mVijtBNbI9kcDYLEiW/r6vKYVKtkyU+C4qobXhGMPfZ70PTc0lysSVA== - dependencies: - "@swc/helpers" "^0.4.14" - -"@react-aria/switch@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.3.1.tgz#c0f92f417a78972a3a9d10592eb474698b827d5a" - integrity sha512-o9MvXiSK9c7rUZjA6oQ0PNlVCnHEctue6v6W8Vn4HNbQMfhJiWqiSSff4RFcgRgs8WsPsEqbT+vHi2kXykQzdA== - dependencies: - "@react-aria/toggle" "^3.4.2" - "@react-stately/toggle" "^3.4.4" - "@react-types/switch" "^3.2.5" - "@swc/helpers" "^0.4.14" - -"@react-aria/table@^3.7.0": +"@react-aria/i18n@^3.7.0": version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.7.0.tgz#234c905b6b2e2212bac6cc8ef93fe750bf606425" - integrity sha512-1YqOeb8r8pxIYyfa5qNdCoM3fNQELM4d+9DanoNJhgnehoq9QDI9A1pGC2pvK2PN2y9IuTJM+U/ITjSpPBoGjQ== + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.7.0.tgz#c1dfcd7a76a5161cbccbd6980ecf201c9b4d1826" + integrity sha512-PZCWmhO9mJvelwiYlsXLY6W4L2o+oza3xnDx0cZDVqp/Hf+OwMAPHWtZsFRTKdjk4TaOPB/ISc9HknWn6UpY4w== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/grid" "^3.5.2" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/live-announcer" "^3.1.2" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/table" "^3.7.0" - "@react-stately/virtualizer" "^3.4.1" - "@react-types/checkbox" "^3.4.1" - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" - "@react-types/table" "^3.4.0" + "@internationalized/date" "^3.1.0" + "@internationalized/message" "^3.1.0" + "@internationalized/number" "^3.2.0" + "@internationalized/string" "^3.1.0" + "@react-aria/ssr" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/tabs@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.3.4.tgz#0cbe65d4c99c9c9e5d8ebd5e1442da68964b9e14" - integrity sha512-SqlgfPvpRHlWelFk/lF9Ziu/8881NVErhKcpyyi+A9jASv5tvILWiwK8na82oI22UXXzyp0Y1EojLB25HnCB+w== +"@react-aria/interactions@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.14.0.tgz#d6480985048c009d58b8572428010dc61093cfcc" + integrity sha512-e1Tkr0UTuYFpV21PJrXy7jEY542Vl+C2Fo70oukZ1fN+wtfQkzodsTIzyepXb7kVMGmC34wDisMJUrksVkfY2w== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/selection" "^3.12.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/list" "^3.6.1" - "@react-stately/tabs" "^3.2.4" - "@react-types/shared" "^3.16.0" - "@react-types/tabs" "^3.1.5" + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/textfield@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.8.1.tgz#b6df2decc587824a3757ec33bd9b432fed1bacc5" - integrity sha512-jgun/B9ecuRCfBSJLX2xDuNwfuj1lL0oibMWoSv6Y++W+CSS8a7LjR1f9Kll5TDVkQiRRUm9qHwI0og9xTJrNw== +"@react-aria/label@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.5.0.tgz#817710d719bc95105e369f4993a3a60dbad73ba9" + integrity sha512-sNiPYiFg06s1zGuifEUeUqRiYje0lfHem+GIUh0Y5ZxfpqIyxEmyV9Aw+C7TTjjo8BAG4NZ4bR7iF9ujf9QvKQ== dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/label" "^3.4.4" - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@react-types/textfield" "^3.6.2" + "@react-aria/utils" "^3.15.0" + "@react-types/label" "^3.7.2" + "@react-types/shared" "^3.17.0" "@swc/helpers" "^0.4.14" -"@react-aria/toggle@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.4.2.tgz#1c57539a26722219979c80dcebfbd0701c518789" - integrity sha512-xokCGf0fn96mOMqQku5QW672iQoMsN9RMpFbKvvgg2seceh8ifblyAXElWf/6YmluOZSgUSZljDkFrbMMYlzVA== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/toggle" "^3.4.4" - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" - "@react-types/switch" "^3.2.5" - "@swc/helpers" "^0.4.14" - -"@react-aria/tooltip@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.3.4.tgz#e508a6f4092ee632ca69fd202268c8f4317f04d2" - integrity sha512-KPDkDu7fquuUOOnNh9S7KfhPMwB1w9K+yLIFrYaj4iYSOLk/HH5TDkyiUQ7j5+B963D1fWlQjYFEGQ9o2KwO/Q== - dependencies: - "@react-aria/focus" "^3.10.1" - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-stately/tooltip" "^3.2.4" - "@react-types/shared" "^3.16.0" - "@react-types/tooltip" "^3.2.5" - "@swc/helpers" "^0.4.14" - -"@react-aria/utils@^3.14.2": - version "3.14.2" - resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.14.2.tgz#3a8d0d14abab4bb1095e101ee44dc5e3e43e6217" - integrity sha512-3nr5gsAf/J/W+6Tu4NF3Q7m+1mXjfpXESh7TPa6UR6v3tVDTsJVMrITg2BkHN1jM8xELcl2ZxyUffOWqOXzWuA== - dependencies: - "@react-aria/ssr" "^3.4.1" - "@react-stately/utils" "^3.5.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - clsx "^1.1.1" - -"@react-aria/visually-hidden@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.6.1.tgz#b0a94b1531b9a8942d0d9a5cc6ed88109b8f5487" - integrity sha512-7rUbiaIiR1nok9HAHPn/WcyQlvuldUqxnvh81V4dlI3NtXOgMw7/QaNc5Xo5FFWlsSVpbyK3UVJgzIui0Ns0Xg== - dependencies: - "@react-aria/interactions" "^3.13.1" - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - clsx "^1.1.1" - -"@react-spring/animated@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.6.1.tgz#ccc626d847cbe346f5f8815d0928183c647eb425" - integrity sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ== - dependencies: - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/core@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.6.1.tgz#ebe07c20682b360b06af116ea24e2b609e778c10" - integrity sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/rafz" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/konva@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.6.1.tgz#66e63da0e9681e42395e995402a7e73ba6892461" - integrity sha512-MevnU+tnG1LPsmMRpfJfevfLtI0ObIvrwYc+Xg+kmYJe00vwMRSdulQOztKANKalFXBewwk72XrQCeRLXFaUIg== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/core" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/native@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.6.1.tgz#b66e237f2faaa4f88569d5a03b6fb0136bcdf2b9" - integrity sha512-ZIfSytxFGLw4gYOb8gsmwG0+JZYxuM/Y1XPCXCkhuoMn+RmOYrr0kQ4gLczbmf+TRxth7OT1c8vBYz0+SCGcIQ== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/core" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/rafz@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.6.1.tgz#d71aafb92b78b24e4ff84639f52745afc285c38d" - integrity sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ== - -"@react-spring/shared@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.6.1.tgz#4e2e4296910656c02bd9fd54c559702bc836ac4e" - integrity sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw== - dependencies: - "@react-spring/rafz" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/three@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.6.1.tgz#095fcd1dc6509127c33c14486d88289b89baeb9d" - integrity sha512-Tyw2YhZPKJAX3t2FcqvpLRb71CyTe1GvT3V+i+xJzfALgpk10uPGdGaQQ5Xrzmok1340DAeg2pR/MCfaW7b8AA== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/core" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/types@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.6.1.tgz#913d3a68c5cbc1124fdb18eff919432f7b6abdde" - integrity sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q== - -"@react-spring/web@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.6.1.tgz#3e4c03b724d2b545dc2fa2649eb6109318ab9178" - integrity sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/core" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-spring/zdog@~9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.6.1.tgz#5292c374e23e3846db3eb9d7557ed5a7bb40dada" - integrity sha512-0jSGm2OFW/+/+4dkRp46KzEkcLVfzV2k6DO1om0dLDtQ4q6FpX4dmDTlRc7Apzin6VtfQONMFIGITtbqoS28MQ== - dependencies: - "@react-spring/animated" "~9.6.1" - "@react-spring/core" "~9.6.1" - "@react-spring/shared" "~9.6.1" - "@react-spring/types" "~9.6.1" - -"@react-stately/calendar@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.0.5.tgz#78decc870ddf33ce1f7b7c8da57d2639e9a46c30" - integrity sha512-vu5hKsiA8edqNtsqBTGi8QR38qZ+uHDjuq3vp2m0f6TZSnp0kg8fkPNHEOuBTQ8ZXFFbGUZKhL/1B+ZWwLHwMQ== - dependencies: - "@internationalized/date" "^3.0.2" - "@react-stately/utils" "^3.5.2" - "@react-types/calendar" "^3.0.5" - "@react-types/datepicker" "^3.1.4" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/checkbox@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.3.2.tgz#fd81866a7624c79cab2ec2c32234f164205a85e8" - integrity sha512-eU3zvWgQrcqS8UK8ZVkb3fMP816PeuN9N0/dOJKuOXXhkoLPuxtuja1oEqKU3sFMa5+bx3czZhhNIRpr60NAdw== - dependencies: - "@react-stately/toggle" "^3.4.4" - "@react-stately/utils" "^3.5.2" - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/collections@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.5.1.tgz#502a56658e4859aa7d31bd4b9189879b5b5a0255" - integrity sha512-egzVrZC5eFc5RJBpqUkzxd2aJOHZ2T1o7horEi8tAWZkg4YI+AmKrqela4ijVrrB9l1GO9z06qPT1UoPkFrC1w== - dependencies: - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/combobox@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.3.1.tgz#5be13467dd64ddd09199b5e00e9f7d4a1aec5688" - integrity sha512-DgYn0MyfbDySf54o7ofXRd29TWznqtRRRbMG8TWgi/RaB0piDckT/TYWWSYOH3iMgnOEhReJhUUdMiQG4QLpIg== - dependencies: - "@react-stately/list" "^3.6.1" - "@react-stately/menu" "^3.4.4" - "@react-stately/select" "^3.3.4" - "@react-stately/utils" "^3.5.2" - "@react-types/combobox" "^3.5.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/datepicker@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.2.1.tgz#4c545981f73771bff76885e50014b4274fa4b554" - integrity sha512-nd6thX2Z+rOLDHduB3EgMKA0n5U83lrwn3IUfjRGrcE21zFaFmhTPsHyvol5jHy3eSyjWSN9kGpKFzOxES+uoA== - dependencies: - "@internationalized/date" "^3.0.2" - "@internationalized/string" "^3.0.1" - "@react-stately/overlays" "^3.4.4" - "@react-stately/utils" "^3.5.2" - "@react-types/datepicker" "^3.1.4" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/dnd@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.0.1.tgz#b8e8190c147dcaeac1a90eabce5bd20891f2c620" - integrity sha512-pwtyY/TR6Rdk33lFdF6dztQTV9gPujFmTqJG31NSSs6ei1FfUW9ZMq+311Zb8OhZ0TFiwZqAutVmmaaUrtl5+A== - dependencies: - "@react-stately/selection" "^3.11.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/grid@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.4.2.tgz#d7d1a4ed4b5bb431b5e5429f8f557cf7d88a7ae8" - integrity sha512-NeIUykQeA7Hen+dV4771ARW5SRrHYNn5VTOsQwn3KBUd2Z2gZ01OwUl3gETl5u0e3/tzMUdJ1LUoSPhDMwcmKw== - dependencies: - "@react-stately/selection" "^3.11.2" - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/layout@^3.10.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-3.10.0.tgz#86bcb9117a05df56f02d7b55d1d24c5593285c18" - integrity sha512-ThFgivQSD5ksLMX7tbu0HqIxbxac/E8a/0vA21wB9QF9IQnUKO796QAQqwfA5rwPvTT41LL2Xn00GkrwQ9g/zg== - dependencies: - "@react-stately/table" "^3.7.0" - "@react-stately/virtualizer" "^3.4.1" - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" - "@react-types/table" "^3.4.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/list@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.6.1.tgz#75d07a4e04111b804fb13c975df5a0c1265f3aa1" - integrity sha512-+/fVkK3UO+N2NoUGpe57k9gcnfIsyEgWP8SD6CXZUkJho7BTp6mwrH0Wm8tcOclT3uBk+fZaQrk8mR3uWsPZGw== - dependencies: - "@react-stately/collections" "^3.5.1" - "@react-stately/selection" "^3.11.2" - "@react-stately/utils" "^3.5.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/menu@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.4.4.tgz#222ffd283691f1c4137a85ff0484b98a4385b099" - integrity sha512-WKak1NSV9yDY0tDB4mzsbj0FboTtR06gekio0VmKb1+FmnrC07mef8eGKUn974F0WhTNUy5A1iI5eM0W2YNynA== - dependencies: - "@react-stately/overlays" "^3.4.4" - "@react-stately/utils" "^3.5.2" - "@react-types/menu" "^3.7.3" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/numberfield@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.3.1.tgz#ef411062ffdb3646eae2a320e07443b2bf78a76f" - integrity sha512-GOu6wE2L2eal4AOL+rJQ4wQnFRgRkwiS9xdAFPu9B4qfP0DVfEIUC3XV4jws9nBhANxEf5LyilUv400nG881wg== - dependencies: - "@internationalized/number" "^3.1.2" - "@react-stately/utils" "^3.5.2" - "@react-types/numberfield" "^3.3.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/overlays@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.4.4.tgz#a228a230f46f0d593ffb7bc8f836439bbc08e9ed" - integrity sha512-IIlx+VXtXS4snDXrocUOls8QZ5XBQ4SNonaz1ox8/5W7Nsvq4VtdKsIaXsUP4agOudswaimlpj3pTDO/KuF5tQ== - dependencies: - "@react-stately/utils" "^3.5.2" - "@react-types/overlays" "^3.6.5" - "@swc/helpers" "^0.4.14" - -"@react-stately/radio@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.6.2.tgz#6a13e3f97d130fccc1b404673cbe1414ac018621" - integrity sha512-qjbebR0YSkdEocLsPSzNnCsUYllWY938/5Z8mETxk4+74PJLxC3z0qjqVRq+aDO8hOgIfqSgrRRp3cJz9vIsBg== - dependencies: - "@react-stately/utils" "^3.5.2" - "@react-types/radio" "^3.3.1" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/searchfield@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.3.4.tgz#a2d885fd68a3e8936d60b9d56e15f785022b448e" - integrity sha512-H/1evv7lsJl6PlD7/Sv7VgbCe0Yd2E2eKFihD6/tXPWO6L/ngYp5siqqhdwazjWTK2Hgw4TL0eviHGOGXKItzQ== - dependencies: - "@react-stately/utils" "^3.5.2" - "@react-types/searchfield" "^3.3.6" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/select@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.3.4.tgz#61c3e739175e86babf0e585f8c68e30f3bf6363c" - integrity sha512-gD4JnF9/OIrQNdA4VqPIbifqpBC84BXHR5N7KmG7Ef06K9WGGVNB4FS538wno/znKg7lR6A45CPlaV53qfvWHg== - dependencies: - "@react-stately/collections" "^3.5.1" - "@react-stately/list" "^3.6.1" - "@react-stately/menu" "^3.4.4" - "@react-stately/selection" "^3.11.2" - "@react-stately/utils" "^3.5.2" - "@react-types/select" "^3.6.5" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/selection@^3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.11.2.tgz#15c35dfb386e5218b8106070137a8b3ecded5a8b" - integrity sha512-g21Y36xhYkXO3yzz0BYSBqnD38olvEwsJUqBXGZfx//bshMC2FNmI5sRYMAi36stxWbwzBvB01OytxfLLxCXCA== - dependencies: - "@react-stately/collections" "^3.5.1" - "@react-stately/utils" "^3.5.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/slider@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.2.4.tgz#4e9e22cd8c2c449497e8476f2bc8d1399a5b0f80" - integrity sha512-J97lTLqQKsrVSovYr4dTz7IJO/+j9OStT78N6bumDklnIKT7bsH3g857zITUFjs8yCcq0Jt3sfOvEU0ts6vyww== - dependencies: - "@react-aria/i18n" "^3.6.3" - "@react-aria/utils" "^3.14.2" - "@react-stately/utils" "^3.5.2" - "@react-types/shared" "^3.16.0" - "@react-types/slider" "^3.3.1" - "@swc/helpers" "^0.4.14" - -"@react-stately/table@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.7.0.tgz#fbb50081805c391d43de8ca4153bcd89edb82368" - integrity sha512-oPvMEabRUD4LSJ/NZsal3TT2YjoRmpEK8t2pqG20+Vapxy5tC6QKEZQvrDxJwF4Z8fqQnX/GvnqmfypvqWDUSA== - dependencies: - "@react-stately/collections" "^3.5.1" - "@react-stately/grid" "^3.4.2" - "@react-stately/selection" "^3.11.2" - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" - "@react-types/table" "^3.4.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/tabs@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.2.4.tgz#e596623de62731efc769ee0d58e54f9f1400551c" - integrity sha512-qSnkoxzbC21KXZYGtg6TEDaex34WSNmPN4sJzXc9Xe39L6+wXNCA2tqZxWCfpIcWQklFm+BmnnNNCO8/PDDrMA== - dependencies: - "@react-stately/list" "^3.6.1" - "@react-stately/utils" "^3.5.2" - "@react-types/tabs" "^3.1.5" - "@swc/helpers" "^0.4.14" - -"@react-stately/toggle@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.4.4.tgz#b7825bf900725dcee0444fe6132b06948be36b44" - integrity sha512-OwVJpd2M7P7fekTWpl3TUdD3Brq+Z/xElOCJYP5QuVytXCa5seKsk40YPld8JQnA5dRKojpbUxMDOJpb6hOOfw== - dependencies: - "@react-stately/utils" "^3.5.2" - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/tooltip@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.2.4.tgz#387bb53539c39b0f3a0807537e9d404e03dc5d3f" - integrity sha512-t7ksDRs9jKcOS25BVLM5cNCyzSCnzrin8OZ3AEmgeNxfiS58HhHbNxYk725hyGrbdpugQ03cRcJG70EZ6VgwDQ== - dependencies: - "@react-stately/overlays" "^3.4.4" - "@react-stately/utils" "^3.5.2" - "@react-types/tooltip" "^3.2.5" - "@swc/helpers" "^0.4.14" - -"@react-stately/tree@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.4.1.tgz#bb267784000b22c7c1aa6415103ad1b9f3566677" - integrity sha512-kIXeJOHgGGaUFnAD2wyRIiOwOw/+PN1OXo46n8+dPTFIYwR4+IWFNG8OMjVlIiSLPYWMCzzxZBE9a5grmbmNWQ== - dependencies: - "@react-stately/collections" "^3.5.1" - "@react-stately/selection" "^3.11.2" - "@react-stately/utils" "^3.5.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-stately/utils@^3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.5.2.tgz#9b5f3bb9ad500bf9c5b636a42988dba60a221669" - integrity sha512-639gSKqamPHIEPaApb9ahVJS0HgAqNdVF3tQRoh+Ky6759Mbk6i3HqG4zk4IGQ1tVlYSYZvCckwehF7b2zndMg== - dependencies: - "@swc/helpers" "^0.4.14" - -"@react-stately/virtualizer@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.4.1.tgz#00c7b36b989244cf985b9ad5fb13dc1ecbb81a0f" - integrity sha512-2S7GARkZl41X7fN0Xa94TkN8ELAUbA89zn1xH59d02NOvAKLAFXHkCe69AivvVvbhXo8/nONzO8NXqqgBS/XQw== - dependencies: - "@react-aria/utils" "^3.14.2" - "@react-types/shared" "^3.16.0" - "@swc/helpers" "^0.4.14" - -"@react-types/breadcrumbs@^3.4.6": - version "3.4.6" - resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.4.6.tgz#cbc1132b5bfa87dde5467b037c563ed77a211980" - integrity sha512-hvGUI4mKHvOl3QyKFHk1qT/UkG+C4iJsRTlk6pbQgwk4lb7rplEm1CEa7fxzRdI8Gh4Id+C9+WyKCxZf9GNWUw== - dependencies: - "@react-types/link" "^3.3.6" - "@react-types/shared" "^3.16.0" - -"@react-types/button@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.7.0.tgz#774c043d8090a505e60fdf26f026d5f0cc968f0f" - integrity sha512-81BQO3QxSgF9PTXsVozNdNCKxBOB1lpbCWocV99dN1ws9s8uaYw8pmJJZ0LJKLiOsIECQ/3QrhQjmWTDW/qTug== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/calendar@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.0.5.tgz#a91fca7d5a2bbbd554748471f9920600cb364d18" - integrity sha512-Kx00132hFEVvqay/Ub7q2oZEA1AzksirAuCsjakamn4LAXvitlo3PZxqBdEsyRc3nP5NR48KJj8yo276mXY8kQ== - dependencies: - "@internationalized/date" "^3.0.2" - "@react-types/shared" "^3.16.0" - -"@react-types/checkbox@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.4.1.tgz#75a78b3f21f4cc72d2382761ba4c326aefd699db" - integrity sha512-kDMpy9SntjGQ7x00m5zmW8GENPouOtyiDgiEDKsPXUr2iYqHsNtricqVyG9S9+6hqpzuu8BzTcvZamc/xYjzlg== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/combobox@^3.5.5": - version "3.5.5" - resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.5.5.tgz#13410106fc2df8e3d02d53a33e9d2a6f3f2f6b61" - integrity sha512-gpDo/NTQFd5IfCZoNnG16N4/JfvwXpZBNc15Kn7bF+NcpSDhDpI26BZN4mvK4lljKCheD4VrEl9/3PtImCg7cA== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/datepicker@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.1.4.tgz#46fd291d8acd40fdd304c4c0bf1a47e71eaa1801" - integrity sha512-NBCXBCe3YZqeA/JrVKy0IAvJ2XSnXaVpR9iAlUwKu7V8P81CtnXHsVCrd/0HSH8QZWsGdIV5E23z0TctvW8trA== - dependencies: - "@internationalized/date" "^3.0.2" - "@react-types/overlays" "^3.6.5" - "@react-types/shared" "^3.16.0" - -"@react-types/dialog@^3.4.5": - version "3.4.5" - resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.4.5.tgz#a12c4e6d69dd7f098eb8b1534107ae6d970f734b" - integrity sha512-FkxZAYNRWkZVH5rjlw6qyQ/SpoGcYtNI/JQvn1H/xtZy/OJh2b2ERxGWv5x0RItGSeyATdSwFO1Qnf1Kl2K02A== - dependencies: - "@react-types/overlays" "^3.6.5" - "@react-types/shared" "^3.16.0" - -"@react-types/grid@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.1.5.tgz#b0efef48202b40aa05913f1fe5b05d80e7d26c15" - integrity sha512-KiEywsOJ+wdzLmJerAKEMADdvdItaLfhdo3bFfn1lgNUaKiNDJctDYWlhOYsRePf7MIrzoZuXEFnJj45jfpiOQ== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/label@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@react-types/label/-/label-3.7.1.tgz#ad4d3d7a6b5ea6aca70f89661d7c358cf2ab5f94" - integrity sha512-wFpdtjSDBWO4xQQGF57V3PqvVVyE9TPj9ELWLs1yzL09fpXosycuEl5d79RywVlC9aF9dQYUfES09q/DZhRhMQ== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/link@^3.3.6": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.3.6.tgz#74ff1602c7aba38d3200f0d597a04e1f94989e25" - integrity sha512-HMFd94CW8WrHbwXeTtCP/WOZmGugrEkN8f16R0i7T9xlTumk5GxubDMjA41ND/ehH72Xq7lP9VX8qezHWCGSoQ== - dependencies: - "@react-aria/interactions" "^3.13.1" - "@react-types/shared" "^3.16.0" - -"@react-types/listbox@^3.3.5": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.3.5.tgz#c2222e3f50fbf377ed20b2d16e761b9c09d7adc8" - integrity sha512-7SMRJWUi7ayzQ7SUPCXXwgI/Ua3vg0PPQOZFsmJ4/E8VG/xK82IV7BYSZiNjUQuGpVZJL0VPndt/RwIrQO4S3w== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/menu@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.7.3.tgz#beb8d0fb7f1e50254e2e7661dfbfa4bb38826dad" - integrity sha512-3Pax24I/FyNKBjKyNR4ePD8eZs35Th57HzJAVjamQg2fHEDRomg9GQ7fdmfGj72Dv3x3JRCoPYqhJ3L5R3kbzg== - dependencies: - "@react-types/overlays" "^3.6.5" - "@react-types/shared" "^3.16.0" - -"@react-types/meter@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.2.5.tgz#99a381808e98765e7b645721bcc2bff4b5d5f19e" - integrity sha512-pBrHoWRSwrfo3JtCCxoniSEd27Pokt20Fj4ZkJxjjDtLdcHOM4Z1JIKvOlcXMCV35iknrVu4veDHpmXolI+vAw== - dependencies: - "@react-types/progress" "^3.2.5" - "@react-types/shared" "^3.16.0" - -"@react-types/numberfield@^3.3.5": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.3.5.tgz#423aced559f7431e88b7988bf7e2cb3870fcdb1c" - integrity sha512-qBhUSkahiIeTW5IvKvyfLtVHgzyqwKfuDIOlJQiBwgrOPR96X8KDDsOib4r5SFv0lhibv0gQ5L5ucXbmwLyQ8A== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/overlays@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.6.5.tgz#466b325d9be51f67beb98b7bec3fd9295c72efac" - integrity sha512-IeWcF+YTucCYYHagNh8fZLH6R4YUONO1VHY57WJyIHwMy0qgEaKSQCwq72VO1fQJ0ySZgOgm31FniOyKkg6+eQ== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/progress@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.2.5.tgz#71780e48402cb25813c8edd07ee6075cdd972488" - integrity sha512-pFSqaj6rlSdPqGHVErJ8G3RkIyYigoJ3EVozvhR9bcKkLlhnzJiFgOZl+k5u/ZKJOA+YHivIHJwg+Kl1sG0J6A== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/radio@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.3.1.tgz#688570ba9901d21850a16c2aaafed5dd83e09966" - integrity sha512-q/x0kMvBsu6mH4bIkp/Jjrm9ff5y/p3UR0V4CmQFI7604gQd2Dt1dZMU/2HV9x70r1JfWRrDeRrVjUHVfFL5Vg== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/searchfield@^3.3.6": - version "3.3.6" - resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.3.6.tgz#8f33ef6938e2db9f80b7e4008d81fc4de65f07d3" - integrity sha512-DIv5eznnJVv0CM4f8SEEiptEZSzXUJWUyxRPkTzYNWt91pPPaCNbCQbmzZtyR9/R9KRJ9hlZN2bMkrtfVLvl1g== - dependencies: - "@react-types/shared" "^3.16.0" - "@react-types/textfield" "^3.6.2" - -"@react-types/select@^3.6.5": - version "3.6.5" - resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.6.5.tgz#798abf0073b39eef041952198a9e84eff0ce9edc" - integrity sha512-FDeSA7TYMNnhsbXREnD4dWRSu21T5M4BLy+J/5VgwDpr3IN9pzbvngK8a3jc8Yg2S3igKYLMLYfmcsx+yk7ohA== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/shared@^3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.16.0.tgz#cab7bf0376969d1773480ecb2d6da5aa91391db5" - integrity sha512-IQgU4oAEvMwylEvaTsr2XB1G/mAoMe1JFYLD6G78v++oAR9l8o9MQxZ0YSeANDkqTamb2gKezGoT1RxvSKjVxw== - -"@react-types/slider@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.3.1.tgz#0e6a8d0767b1ab94f8c32541d50aaa6d93683df4" - integrity sha512-CbEa1v1IcUJD7VrFhWyOOlT7VyQ5DHEf/pNMkvICOBLMAwnWxS+tnTiRFgA/EbvV/vp24ydeszHYtMvsyRONRw== - dependencies: - "@react-types/shared" "^3.16.0" - -"@react-types/switch@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.2.5.tgz#e1db722e8beeed846cfcf9de94cad81b4e0ead78" - integrity sha512-DlUL0Bz79SUTRje/i8m6qn4Ipn+q8QnyIkyJhkoHeH1R0YNude8xZrBPWbj3zfdddAGDFSF1NzP69q0xmNAcTQ== - dependencies: - "@react-types/checkbox" "^3.4.1" - "@react-types/shared" "^3.16.0" - -"@react-types/table@^3.4.0": +"@react-aria/link@^3.4.0": version "3.4.0" - resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.4.0.tgz#64715f6c355b880467f67b1e5288e6c28d6092e8" - integrity sha512-G2L5WtaBMeG3v/5Kj/ZXH4ywz95vyPUBj7qy9UZJOYNaAR7uJWZkbe+Ka4xD4H/AaOk4mqW8dSo8cj7gtD66GQ== + resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.4.0.tgz#f3f7c5277ab9fc0b8c55c76503e1fbe764e02ca6" + integrity sha512-d/h4y7SFO+KweMX5IRU99L1jz9AAwp6mNStkBjYGxCD29QYTVWClpZHjRlO1s6a9e2QTpk/LzsvjiytowzfHyA== dependencies: - "@react-types/grid" "^3.1.5" - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-types/link" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" -"@react-types/tabs@^3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.1.5.tgz#8676dd16e0dc4be2d4d1cc33bb89cc679ef93abe" - integrity sha512-YgWY8IajCDBZmBzR3eii0aW6+SjcAT/dmqDNmfIuVVnDN7sHQ3PFa0nbmByvb0SfjOkJYumt8TJwFUCugohS8A== +"@react-aria/listbox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.8.0.tgz#2598415cbb6de420e1edfd67391f9548f1abc571" + integrity sha512-v9tvyNsB887H5hpqPBoeBxNDr+3EKavImZk68h/+LKgZehMNSD3TGcmhcQ5Q4xqZJqYrQtKIYdtk+BP2huswAg== dependencies: - "@react-types/shared" "^3.16.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/collections" "^3.6.0" + "@react-stately/list" "^3.7.0" + "@react-types/listbox" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" -"@react-types/textfield@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.6.2.tgz#6cc87c2bac286a06ba04b9465d23fa9078bf280e" - integrity sha512-QhFcpXvmSEW1/PwkWkvHJkcjsVezLW0OAvA0kMt/FMOChQNxnO36Pha+WjfcVbiFHXMhCBl6akbY2xG9NsHJrQ== +"@react-aria/live-announcer@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.2.0.tgz#ff4bd263789aa246de9f966e188649f6454e8b36" + integrity sha512-uSqDDy+9CbmNTZh0Roi4dvWKWcbuMTYKh3RnUw3XBPw0aYxSkcFQeWGfxFoOwXCDcXez02cFJtAxpR2bShkrsw== dependencies: - "@react-types/shared" "^3.16.0" + "@swc/helpers" "^0.4.14" -"@react-types/tooltip@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.2.5.tgz#f2940d3edbcf846dc15f9222f0162664641f183c" - integrity sha512-D4lN32JwQuA3JbCgcI26mgCkLHIj1WE8MTzf1McaasPkx7gVaqW+wfPyFwt99/Oo52TLvA/1oin78qePP67PSw== +"@react-aria/menu@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.8.0.tgz#847396ce69757cc3780c00cbd838deaf4a8cca90" + integrity sha512-5V/EXzdxFxJc1Dh7rqYWeGWeHLgIwyyN4fv+u1Y5+q5dikgTVplbjnO34VHMELHHVWDIqvSikJSyYsdKprVnEQ== dependencies: - "@react-types/overlays" "^3.6.5" - "@react-types/shared" "^3.16.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/overlays" "^3.13.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/collections" "^3.6.0" + "@react-stately/menu" "^3.5.0" + "@react-stately/tree" "^3.5.0" + "@react-types/button" "^3.7.1" + "@react-types/menu" "^3.8.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/meter@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.0.tgz#2d46157668ba3331b505329a961e32e81da06f77" + integrity sha512-2CqpTwkZ1Vnblqd+z+mP+3ZhQRg3oNkz7GxN9nRLTDrpxVLY+WtSeIGDK7x8EwmYrVo4q4wHl3DGa2VOLNNgVA== + dependencies: + "@react-aria/progress" "^3.4.0" + "@react-types/meter" "^3.3.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/numberfield@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.4.0.tgz#158f37d8a388f210c947b0b2baf303f3fd58c95d" + integrity sha512-gZMZAjE+tcwtdDW5X5rlot7ihir1OCCEyzbIDFztte2h+I57b45ET9P4AmgrmqfOnyscPXI3kJn9eILNYHdZVw== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/spinbutton" "^3.3.0" + "@react-aria/textfield" "^3.9.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/numberfield" "^3.4.0" + "@react-types/button" "^3.7.1" + "@react-types/numberfield" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@react-types/textfield" "^3.7.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/overlays@^3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.13.0.tgz#f5a8cdce4754b4fd487baf9f356a5a3cdd731c12" + integrity sha512-hRZyhAYzrlCcEWQ2k2jP24b0wc5/355Xl5w5FZHRmPeU1U4XlFwKX/eFlBs/li9Sprm1bTDXrCY480Kl6UsKDA== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/ssr" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-aria/visually-hidden" "^3.7.0" + "@react-stately/overlays" "^3.5.0" + "@react-types/button" "^3.7.1" + "@react-types/overlays" "^3.7.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/progress@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.0.tgz#76f7ece245e9f33972ba05836daa530a9656901b" + integrity sha512-G8Wew/EjgzoBM6OOAtVinA0hEng/DXWZF7luCoMPuqSKOakFzzazHBMpmjcXku0GGoTGzLsqqOK1M5o3kDn4FA== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/label" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-types/progress" "^3.3.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/radio@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.5.0.tgz#3322063e0ff86275762c0d473dfd2a0c3e82e168" + integrity sha512-d/Hxdu+jUdi3wmyaWYRLTyN16vZxr2MOdkmw8tojTOIMLQj7zTaCFc0D4LR4KZEn3E0F5buGCUHL6o4CTqBeBA== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/radio" "^3.7.0" + "@react-types/radio" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/searchfield@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.5.0.tgz#0ff853c13b21bb49cadecd0ed130813816417d33" + integrity sha512-eAsOiTBUeD8OiRyXUbU6fWzkEO5ERAODZJtv4yGcMdTjtKJW4jxeRwc6GXMKF3hDvdz7Y9NV6YfMCICSiVSFYg== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/textfield" "^3.9.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/searchfield" "^3.4.0" + "@react-types/button" "^3.7.1" + "@react-types/searchfield" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/select@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.9.0.tgz#cada84973b2fd16cdc0215f7a5e30ac1b60e1970" + integrity sha512-sS/y32BFzHWMeQeeBTdnRuFERgF/8WM2qj6p7e9+F68Nb4Lz8Qpneb2pwWD6a+Dl4UGS1yQMSdZOOnS6aBW41w== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/listbox" "^3.8.0" + "@react-aria/menu" "^3.8.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-aria/visually-hidden" "^3.7.0" + "@react-stately/select" "^3.4.0" + "@react-types/button" "^3.7.1" + "@react-types/select" "^3.7.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/selection@^3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.13.0.tgz#3a2c01fe9bead75bde251ce207c89da594fe2dfb" + integrity sha512-KU8xWd2wzL6jacWZeXFx1p6uQ1qAvE4F+K3LqUbj+kWBdmEGYkri9t17A1zQdN7sjaN9cH61eojGpEXYskz01w== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/collections" "^3.6.0" + "@react-stately/selection" "^3.12.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/separator@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.3.0.tgz#093fc0d62aa851d1bcc443d899768c278b9c825a" + integrity sha512-AR3Pbik83dygOvmfBiCTRAHz+B13yyGz8nKyw521toT69RMtJTi8ha8qB6Iw1QP3YZWRv+Fn6WWrfGIvR+f2XQ== + dependencies: + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/slider@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.3.0.tgz#4bb945a93a90607a549d08d99efd543d358fd8e6" + integrity sha512-UgR2XEI3vrJAQU1RVC+1uHVr/vFcVh+Cjt/kaFUO7fdj8usqa4JOnIuX+QKCysiVLJc7IEXw4RCJBJYBSUYK6A== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/radio" "^3.7.0" + "@react-stately/slider" "^3.3.0" + "@react-types/radio" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@react-types/slider" "^3.4.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/spinbutton@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.3.0.tgz#19ae27476ee7acbfb75d40b568164a26466c39d7" + integrity sha512-FXTFNz2RFClqGxQzMIHYdsjkm6fcWRObqelY+lXP5udk7Q8T9aQn+28QhqVpbOFXotLE2PltElbziJeuhkVgNA== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/utils" "^3.15.0" + "@react-types/button" "^3.7.1" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/ssr@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.5.0.tgz#40c1270a75868185f72a88cafe37bd1392f690cb" + integrity sha512-h0MJdSWOd1qObLnJ8mprU31wI8tmKFJMuwT22MpWq6psisOOZaga6Ml4u6Ee6M6duWWISjXvqO4Sb/J0PBA+nQ== + dependencies: + "@swc/helpers" "^0.4.14" + +"@react-aria/switch@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.4.0.tgz#f3cb0a7b64ddcb93e60b31254e7bb5277a954f30" + integrity sha512-FWbjqNcY+fAjRNXVQTvOx93udhaySgXLsMNLRAVUcFm45FqTaxAhHhNGtRnVhDvzHTJY/Y+kpcGzCcW2rXzPxg== + dependencies: + "@react-aria/toggle" "^3.5.0" + "@react-stately/toggle" "^3.5.0" + "@react-types/switch" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/table@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.8.0.tgz#f95aba4d3b0cfbf1e98b7cb89e4da83a6cd85cb3" + integrity sha512-uPy7xvZ47sk8r0d66lI7pshXTOnr/A7DlY60BFEKwPNmO2hVGKvp5ptRI8+EoZzti9JXr1Qz5jsMMSKOocWgtQ== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/grid" "^3.6.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/live-announcer" "^3.2.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/table" "^3.8.0" + "@react-stately/virtualizer" "^3.5.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" + "@react-types/table" "^3.5.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/tabs@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.4.0.tgz#afc6b6d59013f901efa4ec85a2f3cf2844465d48" + integrity sha512-Wwda6yag23eqR6L4+Kwng7jq7va5Enk9xv8y0lFib+ohkPXI6/XhA1Ptc83N2wofmcPtuwLQ6SXSGXOd96lN7w== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/list" "^3.7.0" + "@react-stately/tabs" "^3.3.0" + "@react-types/shared" "^3.17.0" + "@react-types/tabs" "^3.2.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/textfield@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.9.0.tgz#485904cfe241a4bdffa4345158e4858d8cbb3025" + integrity sha512-plX+/RDidTpz4kfQni2mnH10g9iARC5P7oi4XBXqwrVCIqpTUNoyGLUH952wObYOI9k7lG2QG0+b+3GyrV159g== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/label" "^3.5.0" + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" + "@react-types/textfield" "^3.7.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/toggle@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.5.0.tgz#2193fd0a13a6c11ce865768c5b3e4fe37feab433" + integrity sha512-K49OmHBmYW8pk0rXJU1TNRzR+PxLVvfL/ni6ifV5gcxoxV6DmFsNFj+5B/U3AMnCEQeyKQeiY6z9X7EBVX6j9Q== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/toggle" "^3.5.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" + "@react-types/switch" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/tooltip@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.4.0.tgz#a4514570f6ba00d474cfe0b94e639ac3df4ffa93" + integrity sha512-b1E9m6WIPNV0TNRn9VNBnDn1FFt/pwKGtIGDDablLArEmSkkz0HJjwlUqC4+vL0U2dCaQA4TxWl9GDQE7Wzl8w== + dependencies: + "@react-aria/focus" "^3.11.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/tooltip" "^3.3.0" + "@react-types/shared" "^3.17.0" + "@react-types/tooltip" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/utils@^3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.15.0.tgz#a836674dd40ec7f15e9f7a69b1a14f19b1ee42e6" + integrity sha512-aJZBG++iz1UwTW5gXFaHicKju4p0MPhAyBTcf2awHYWeTUUslDjJcEnNg7kjBYZBOrOSlA2rAt7/7C5CCURQPg== + dependencies: + "@react-aria/ssr" "^3.5.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + clsx "^1.1.1" + +"@react-aria/visually-hidden@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.7.0.tgz#4056b8bb33f30ca8c5192dfcf706ac8bb2beb61a" + integrity sha512-v/0ujJ67H6LjwY8J7mIGPVB1K8suBArLV+w8UGdX/wFXRL7H4r2fiqlrwAElWSmNbhDQl5BDm/Zh/ub9jB9yzA== + dependencies: + "@react-aria/interactions" "^3.14.0" + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + clsx "^1.1.1" + +"@react-spring/animated@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.7.1.tgz#0f2d78184ee0cce703acd41abb87ea56765b5713" + integrity sha512-EX5KAD9y7sD43TnLeTNG1MgUVpuRO1YaSJRPawHNRgUWYfILge3s85anny4S4eTJGpdp5OoFV2kx9fsfeo0qsw== + dependencies: + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/core@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.7.1.tgz#cfe176a48ee0a05545b1af5f2fbae718b50e9a99" + integrity sha512-8K9/FaRn5VvMa24mbwYxwkALnAAyMRdmQXrARZLcBW2vxLJ6uw9Cy3d06Z8M12kEqF2bDlccaCSDsn2bSz+Q4A== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/rafz" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/konva@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.7.1.tgz#25640892f88bde06c3ab96c875e5f7408abbce43" + integrity sha512-74svXHtUJi6Tvk9mNLUV1/1WfU8MdWsTK6JUpvmJr/rUr8r3FdOokk22icbgEg6AjxCkIf5e2WFovCCHUSyS0w== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/core" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/native@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.7.1.tgz#3f397f946fc9a7dd4d7d432f8c0a4726d7723751" + integrity sha512-dHWeH0UuE+Rxc3YZFLp8Aq0RBP07sdOgI7pLVG46OzkMRs2RtJeWJxB6UXIWAgcYDqWDk2REAPhLD3ItDl0tDQ== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/core" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/rafz@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.7.1.tgz#bdfea463fcb5ddc4e7253a8fa3870dd52ebbc59a" + integrity sha512-JSsrRfbEJvuE3w/uvU3mCTuWwpQcBXkwoW14lBgzK9XJhuxmscGo59AgJUpFkGOiGAVXFBGB+nEXtSinFsopgw== + +"@react-spring/shared@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.7.1.tgz#29611bb63d0c9e1ac18b6ced7aa4db1d48d136f3" + integrity sha512-R2kZ+VOO6IBeIAYTIA3C1XZ0ZVg/dDP5FKtWaY8k5akMer9iqf5H9BU0jyt3Qtxn0qQY7whQdf6MTcWtKeaawg== + dependencies: + "@react-spring/rafz" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/three@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.7.1.tgz#0dab3b5e96bb6e10db0a1363938e46fc68a861e4" + integrity sha512-5leUe0PDwIIw1M3GN3788zwTY4Ykyy+kNvQmg9+Hqs1DN3T8J1ovRTGwqWfGAu4ApTta9p5BH7SWNxxt3NO59Q== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/core" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/types@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.1.tgz#b540752a479d210c6fb68d2b1d5ff35556df4308" + integrity sha512-yBcyfKUeZv9wf/ZFrQszvhSPuDx6Py6yMJzpMnS+zxcZmhXPeOCKZSHwqrUz1WxvuRckUhlgb7eNI/x5e1e8CA== + +"@react-spring/web@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.7.1.tgz#a9ee730d06c686b8432cd20f41683b1acb9b6300" + integrity sha512-6uUE5MyKqdrJnIJqlDN/AXf3i8PjOQzUuT26nkpsYxUGOk7c+vZVPcfrExLSoKzTb9kF0i66DcqzO5fXz/Z1AA== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/core" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-spring/zdog@~9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.7.1.tgz#474a1366d7b71d623e0dff0e37a243b505e8c1a6" + integrity sha512-FeDws+7ZSoi91TUjxKnq3xmdOW6fthmqky6zSPIZq1NomeyO7+xwbxjtu15IqoWG4DJ9pouVZDijvBQXUNl0Mw== + dependencies: + "@react-spring/animated" "~9.7.1" + "@react-spring/core" "~9.7.1" + "@react-spring/shared" "~9.7.1" + "@react-spring/types" "~9.7.1" + +"@react-stately/calendar@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.1.0.tgz#3254ab630972f5bfeedf821a3580ad83bc087e2e" + integrity sha512-PZXXHyrLoYEUAUL8oFoxHNc7mKrQXLxnYQkY9v3a6SxgST3J4tYoqIXrie0uqpm1LI+1JfKb2lyRGlVPRTBuNQ== + dependencies: + "@internationalized/date" "^3.1.0" + "@react-stately/utils" "^3.6.0" + "@react-types/calendar" "^3.1.0" + "@react-types/datepicker" "^3.2.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/checkbox@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.4.0.tgz#34712864e6b6dbae033b30a279dc32a26bbc1a9b" + integrity sha512-zqwHMmlzza1exS6Bbqj4Mom3ygtG8pLguHweZ9OO7BFQLwBmzJsrFNqDcj7xh8iEWxXKQfZ2YOuhkaGvu4GRjA== + dependencies: + "@react-stately/toggle" "^3.5.0" + "@react-stately/utils" "^3.6.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/collections@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.6.0.tgz#4fbecbbbb354badbc46618262e91743754257673" + integrity sha512-znkaqCPo7F1yyzEKDAB5MpX1Vw5UHcUQhDNrys5YOqAkX6/G/AChnBz0B63UxS3fjyqgnuJylRRmUp9nTqO21w== + dependencies: + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/combobox@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.4.0.tgz#d4189bfe7b17a94a6158357de51ebd4166f819c5" + integrity sha512-QVKNosNqSS7PnjrNVrGat9KKlCcv7e3nTehQuIu18ZE2JVH7Jdf/73zkSMurrnQfbPVeiHkGK1deWqrzoNzYQQ== + dependencies: + "@react-stately/list" "^3.7.0" + "@react-stately/menu" "^3.5.0" + "@react-stately/select" "^3.4.0" + "@react-stately/utils" "^3.6.0" + "@react-types/combobox" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/datepicker@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.3.0.tgz#4dd777756f5f0abb3617b5d61bf34d428f0c563f" + integrity sha512-HH/WPAMXwULyBKHICxTLGDk3cPGf9Yhf8sX2DES935aupd+6YqzQrh97buOedKsF5WKZfzMMtUVqy8uepo6S6g== + dependencies: + "@internationalized/date" "^3.1.0" + "@internationalized/string" "^3.1.0" + "@react-stately/overlays" "^3.5.0" + "@react-stately/utils" "^3.6.0" + "@react-types/datepicker" "^3.2.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/dnd@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.1.0.tgz#b8d2c9baba72607bf0d9aa73ab1e0ccd2a39cfb8" + integrity sha512-PctHJqRm37vdKs91vB18lfdas4CypStbgj6ENApUXSDLd8XrVgthH4sYrX1BX/RbZyCr7u+TG7qVKGcRfsvbTw== + dependencies: + "@react-stately/selection" "^3.12.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/grid@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.5.0.tgz#345a98a2f541d5372ebefe44d42f54e22c08d54e" + integrity sha512-kCmO2KyHoIJWiCqUXJTD0I/4q/6h3pXGdyD4tWmqWdysxf+x09K/Mx/JwwFqee5LICZgt8MtBrfV+ijLZ8mQAg== + dependencies: + "@react-stately/selection" "^3.12.0" + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/layout@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-3.11.0.tgz#e1009eed8cc61fb00691eaf2ea38a5dd5fd49318" + integrity sha512-QNupEFgIv5hqYEbLxDQfHgBkfk6t1VTTxWftBZMXXJEVCC1GH8vUJ35BJGO7hQNhPoTp3xc3X7yEcBlXy1ZmlA== + dependencies: + "@react-stately/table" "^3.8.0" + "@react-stately/virtualizer" "^3.5.0" + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" + "@react-types/table" "^3.5.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/list@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.7.0.tgz#7484cc46d995a18b2b43de50449aba7faae76809" + integrity sha512-/BxCqXFjX9P+OJWjIYmUWaOGJ2hlZHUdymVwZPkIWdO9K7069LWckdYFXRqLFMwIGLUcXVfw4jR0BIQqWlR4eA== + dependencies: + "@react-stately/collections" "^3.6.0" + "@react-stately/selection" "^3.12.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/menu@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.5.0.tgz#04fda461dc3971bc84bf49436625b3e044bca3bc" + integrity sha512-JL6TcT+SbYdlxNLOS84SXp6njDNZuXfkt05o4rS51evmjM2+hlYaB9+yUMqrCb/J2nW7vVAg51TDAhLgmGTYKg== + dependencies: + "@react-stately/overlays" "^3.5.0" + "@react-stately/utils" "^3.6.0" + "@react-types/menu" "^3.8.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/numberfield@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.4.0.tgz#09745a220d4d955de4e9a34c8118d7791a1770e7" + integrity sha512-R+LjwRpspttiO0tZ8KikXu184D3HZJG37jVcp/yM1jyMURmQHWfjjR6PHuD66PSV5PtM2KQlBj6PGvDLg1UwlQ== + dependencies: + "@internationalized/number" "^3.2.0" + "@react-stately/utils" "^3.6.0" + "@react-types/numberfield" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/overlays@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.5.0.tgz#3c33a6f678f728497c94729e8a861ddf1e8704bb" + integrity sha512-r+U/G0Y4tCfI5wyBeIu+hmcZVRN8ChoK2zM1srPH9nDKsijQard2goX+9YmKng2LJ01Re/P6F8S8jYbpfEdLfQ== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/overlays" "^3.7.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/radio@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.7.0.tgz#5312503f36677fd3a42f8fb7bc820463cf879b08" + integrity sha512-TKyR6RfX1qZRPAxVWIKMTt2s3J+IlxFZHykiEl85gHBmABSWW4JO4RjkgcmbaAGLAhu1pJU8ktJOyi+MyndpHA== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/radio" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/searchfield@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.4.0.tgz#863b9741f17672b39a80eb28cb9860dd715809f8" + integrity sha512-aaQLczPUIJwTGlllALT49RSvWY55oqmJWhLL7j3hnL1cNV0WmkmoSdAo7drDaux5vkgkurxuwMEZ8ymFYeZ+Nw== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/searchfield" "^3.4.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/select@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.4.0.tgz#e6df572279b5baed264552032f8060dbf49c9ebb" + integrity sha512-thSqD3apMCSgZgKtqHKGVIQRyvG8l0supIuzJicBwq6xg+J8X5muPCZgchCSNmU6im/l81XXE8LGuHGgMilORA== + dependencies: + "@react-stately/collections" "^3.6.0" + "@react-stately/list" "^3.7.0" + "@react-stately/menu" "^3.5.0" + "@react-stately/selection" "^3.12.0" + "@react-stately/utils" "^3.6.0" + "@react-types/select" "^3.7.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/selection@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.12.0.tgz#feb5ad753ea93870566f2c0b07f0387b690bd860" + integrity sha512-qgUaPwqtAl7YaZxxGdb55ZaVuMB1rG+Vr+9fgG8dPtDYCNaPeIlg7ndC4ylzDhCWIx8D5qZotcrqCA4+93TwdA== + dependencies: + "@react-stately/collections" "^3.6.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/slider@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.3.0.tgz#abfd70be9b8fce5f19898d2dcad116a26dd88781" + integrity sha512-17aGJYHBRY3g4ZeiIgCNOvYl3HBARvSJhUKoNxZMRa2pqREW+WmBRRAXv5KTymW/KfcGb0RCq1ytYsderEgZAQ== + dependencies: + "@react-aria/i18n" "^3.7.0" + "@react-aria/utils" "^3.15.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@react-types/slider" "^3.4.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/table@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.8.0.tgz#2728ee73ab7dd68f009a39252bf075aafbf8d130" + integrity sha512-WmOcW9+4zm6MQZxYEC77u5HMxTcvcotkFptohHd0YtHXx+z5iwClCVKKFG2mc5lE+K4iQE41Q56nVKLjAu+TsA== + dependencies: + "@react-stately/collections" "^3.6.0" + "@react-stately/grid" "^3.5.0" + "@react-stately/selection" "^3.12.0" + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" + "@react-types/table" "^3.5.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/tabs@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.3.0.tgz#9674cb2f7c701bdc7dcc7a0c1bc88f62350da7c1" + integrity sha512-Kf47+aXGf4NvnREMDqH+uuTa0QsYCxOp0poywR8lRPmYsL7V8yrTS2wXQnDL7cq8PXbL5v+ew0xmrV+BiUlNRg== + dependencies: + "@react-stately/list" "^3.7.0" + "@react-stately/utils" "^3.6.0" + "@react-types/tabs" "^3.2.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/toggle@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.5.0.tgz#fee5a29d7699e43867c52981834af5393f47c1c4" + integrity sha512-vKwLLkFsiIve4pXIQC/dqLAz7Z+qtzJ8+D00EXXO1Nf8YHcyIMDkTmi3NTM8Qtvmt4xX2hbJFiPDF6WvF6mBIg== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/tooltip@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.3.0.tgz#7991bc26e21d07368e0f797407652548fa558811" + integrity sha512-cYg4zKUc0y71L5OO5DyaCoh248A7wvXAU6VGMhppPGx+iPoWJMLBBdEJjf8Oa12NGxNv9SC5lTcv6js2k4+WwQ== + dependencies: + "@react-stately/overlays" "^3.5.0" + "@react-stately/utils" "^3.6.0" + "@react-types/tooltip" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/tree@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.5.0.tgz#1d0dffd93c17b004953c27817be1ae2da9f96e5b" + integrity sha512-5+MzMQUFq3+lbGkZC0SlcIDrYmPvxBKuC8xL5W6SuFekbrrxrS6IJexRe4QulaaAliDpX2/9DVZTt38eVfyf0A== + dependencies: + "@react-stately/collections" "^3.6.0" + "@react-stately/selection" "^3.12.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/utils@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.6.0.tgz#f273e7fcb348254347d2e88c8f0c45571060c207" + integrity sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q== + dependencies: + "@swc/helpers" "^0.4.14" + +"@react-stately/virtualizer@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.5.0.tgz#3aa2595757b4120339aadb2c43853137e3742fdc" + integrity sha512-Jjk7V2T9uJ2+1EaVY+v1SJYeKb9dvZKayP35bcUq8/y9+I41kNE+qmgnkr5/SVzkExu4YeZTFxtuOm4l8UX5jg== + dependencies: + "@react-aria/utils" "^3.15.0" + "@react-types/shared" "^3.17.0" + "@swc/helpers" "^0.4.14" + +"@react-types/breadcrumbs@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.5.0.tgz#f9b600e5a0e6fbbc17d2a771a2c60d436eb60409" + integrity sha512-Nd95NnLhrSw8Eaf2nsgAz23BT/ww6m2d2GS/gT7NxkCcqWK8Dpv8+e+JSbO7CUkHJApm76FtRz16JCdltj4CeQ== + dependencies: + "@react-types/link" "^3.4.0" + "@react-types/shared" "^3.17.0" + +"@react-types/button@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.7.1.tgz#a51d2617a593d9862c72306b3bf0c4b5bff4793d" + integrity sha512-c+8xjmqWSjI5/mEHVLbVSp0eh/z2UU8Ga+wqjbEUZUjm8uopYj1PaCAwZ7YgcAebyQrL/21GyjK6tFHKzuUdJQ== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/calendar@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.1.0.tgz#cee348fbc502884237b86c1b4ed22853d9b6ea3c" + integrity sha512-6VKBxG27cLKti8Ik+T2N1y6FqJSgIXuQPMehOA1ASqPQLtnRBEoSgLjuN5qj7RTWgmdTvQmofqVznVFoUe5ozQ== + dependencies: + "@internationalized/date" "^3.1.0" + "@react-types/shared" "^3.17.0" + +"@react-types/checkbox@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.4.2.tgz#6089e9ef2d023415a5f871e312f30bae54143ba5" + integrity sha512-/NWFCEQLvVgo25afPt2jv4syxYvZeY/D/n2Y92IGtoNV4akdz4AuQ65+1X+JOhQc/ZbAblWw5fFWUZoQs3CLZg== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/combobox@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.6.0.tgz#a78e3d0e73723053d49e15b6660883f755734c05" + integrity sha512-tfZtZ12Kf2bKt3EcFKWcUxrLNc61Y1CGynsOQ/KvHTFwlLTTtKnt/wWuf4kxdqlTK7dDqJzWRGWKlWx6eKlx3w== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/datepicker@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.2.0.tgz#a8b7b5da5160774882e73aa175c0fc76ecd82ac9" + integrity sha512-wcxLI6aW+r6nO2bsypxMIaWJHG5YYAD7WtJmhR5n5GK5juUCu/hzKBhdwxE1qtD3kMvIKTDJkMXLVNGmJP0mFw== + dependencies: + "@internationalized/date" "^3.1.0" + "@react-types/overlays" "^3.7.0" + "@react-types/shared" "^3.17.0" + +"@react-types/dialog@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.0.tgz#51d942ba377ac1483c90db69e84bfdc3d5f65129" + integrity sha512-QsHqAK8zE4QSCQTJcRm/e6vweSE8S62o4GGvm+e+crMro/doA4it1Y4udE94Yy3WyDQEMFxyfd2P1Q6bI9JuyQ== + dependencies: + "@react-types/overlays" "^3.7.0" + "@react-types/shared" "^3.17.0" + +"@react-types/grid@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.1.6.tgz#751828e3cfc6bde41e03c3217f0371166f206674" + integrity sha512-j6dO5KgkuIbIhEZYSxd86ZomohCyv3VNQhY2qBHlRoxZs0976komauEOjOpMOu0PxwsFGUgUFqlKOtc34f1SHQ== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/label@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-types/label/-/label-3.7.2.tgz#593bf1171098134cd5dbb6c66bf1063e552d67ea" + integrity sha512-UlsIvxQjBMl9WwJw1bYoJMwiPvYwRsSLl2yoeeGfGr6IaYn5T/2kzBhDLwe5cpKrmi4Mehn1rbReFLGITOy8+g== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/link@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.4.0.tgz#1c549ffbc594e49726a4c4e912bea36718feb4cf" + integrity sha512-eImWLzxwzSmjOLa0Ow3HJaguyDCz98191v2pb7nT/zPzGDnhHhDjxB023hrXVUoCbsWrCb5QLp91Ts+VjiCyTA== + dependencies: + "@react-aria/interactions" "^3.14.0" + "@react-types/shared" "^3.17.0" + +"@react-types/listbox@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.0.tgz#b1fdad5acf8ffd524a9baf31015ff290414f35a0" + integrity sha512-OvHaX4EBRHxKrfFItdJXjY7dYomzejqJ87P5fTL1l1TbDX8gvEP014S3cI+VLQq+EsXeTZ8E/sx0tFUo7ilchA== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/menu@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.8.0.tgz#578d4697caa838e72b2652a81f1241a9cb7815cc" + integrity sha512-1nwGUwKNHJf60vOsg7p48NPQIzMsSprxw8VXfStr8eE5uU4vvKfVNQNUgvpkRmHmel8BrYdh1WnERXJJ3yKUgQ== + dependencies: + "@react-types/overlays" "^3.7.0" + "@react-types/shared" "^3.17.0" + +"@react-types/meter@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.3.0.tgz#93545ce8fbaf734724aa32a4443cb78662937ee1" + integrity sha512-/IAHquSb+tC/YjcXdcYinFTb7puakkQWzNwS4lkhisIoZ0K0Ym/3fat/nzjgG9s2+sqQrW6f3Ndp9GCfSzvHLg== + dependencies: + "@react-types/progress" "^3.3.0" + "@react-types/shared" "^3.17.0" + +"@react-types/numberfield@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.4.0.tgz#ecf29f515e0ebafa2145e275018bd04cd2821759" + integrity sha512-3kKkCFJ9cqCHuoz2BWy3DZLg6SQzqjzbO3DvNTrORd2k7bsI0Ydlfsz1rkCU53GStqovgopX4jo6EZLeRfv05Q== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/overlays@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.7.0.tgz#22dcd1bbc1f8e17b0d7a757414c50ce580ae0d26" + integrity sha512-LstucncZ8dM+xJYEijI1V6jGH20w5XO/T60r7JTrgQElMC86phPeoWkMTN4c2lsRikybolDbvXL6XsF76YO56A== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/progress@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.3.0.tgz#80e79e00931ae796fdc679ff7deb95cc61af8a19" + integrity sha512-k4xivWiEYogsROLyNqVDVjl33rm+X9RKNbKQXg5pqjGikaC8T9hmIwE4tJr26XkMIIvQS6duEBCcuQN/U1+dGQ== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/radio@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.4.0.tgz#0bfc2bae6b5ac0b57636efdf8d2c90e5826e7c82" + integrity sha512-klgEU+987xVUCRqBoxXJiPJvy0upfo76dFnK5eF7U7BzcxhuiFeLDUcqUHtK92Cy5QOiDAF2ML0vUYGIabKMPA== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/searchfield@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.4.0.tgz#42bd161af0d75130b7f1417e8b43237a9b1cc5a1" + integrity sha512-rYupNbyBAjycx6SXCALjINj/nOx7lIq9f4Dk1xo1dd8X6yYU0EF4WlahNua7UV8JC5oYlxN40G7yi4lAS+CdWQ== + dependencies: + "@react-types/shared" "^3.17.0" + "@react-types/textfield" "^3.7.0" + +"@react-types/select@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.7.0.tgz#7d1840525d345625ac6ad69005b192930ca5abec" + integrity sha512-BaynMuW0dQ9ModFzW291+3n1D9bwKSFh03g3+1PvhRcBg1EXq1vFyfFBj4uuBymI0T7oCbnjGh19xo0vKIYRrA== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/shared@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.17.0.tgz#b7c5e318664aadb315d305a27dd2a209d1837d95" + integrity sha512-1SNZ/RhVrrQ1e6yE0bPV7d5Sfp+Uv0dfUEhwF9MAu2v5msu7AMewnsiojKNA0QA6Ing1gpDLjHCxtayQfuxqcg== + +"@react-types/slider@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.4.0.tgz#3a6e68a0cbe6a9741395eeebb83ca15fbf0893bd" + integrity sha512-Kj+B6njpm4ltiu3gCBOPRnbzllV21IVr0bCQdNnWcf5DX8aN4VdI8EFkTz0DSwMm2WPCwZop0MDWDoRwXJK1ng== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/switch@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.3.0.tgz#80172b8960e36ac1b3c19c69a479af407cffc306" + integrity sha512-6h+s//PwWf7/WJQOZKT6k1vdOQCcvPmMZW333AqyxtZX8WV8Q0illgcLMYo5qxT3IWsjYNuPIqMCY+tRbSeA2Q== + dependencies: + "@react-types/checkbox" "^3.4.2" + "@react-types/shared" "^3.17.0" + +"@react-types/table@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.5.0.tgz#25f5576c56e1678367fe687e3a66f9a74b9ff472" + integrity sha512-/Mvn1MQbdnk7i6ivam8kdIh2PKF9GD3A7KC8v1E4JNAgsbOzOkt5JC4PMc1EtAK2eppMEKTN+B84oHKMl1F8Hg== + dependencies: + "@react-types/grid" "^3.1.6" + "@react-types/shared" "^3.17.0" + +"@react-types/tabs@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.2.0.tgz#44f9539b003a42ed547ec1625c10247d772c0146" + integrity sha512-rOQm+JDYcGV+HE/EQ23vr6J3tqvXjFiDA107rU7n4B4mNjJ46k5gOhPdGTosv6wr1+Tp7XD5XMaFfqk+O0/ZZw== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/textfield@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.7.0.tgz#c8e118be03e82a87d2612937accaae903090cdb1" + integrity sha512-4Rqld8VZG324hecw6bqGY2gta1gm5sDhO48nyChfdmjVlFHXLDKazAcrgP76uSmUI6tffUPj3eYxQyTp5uLhyQ== + dependencies: + "@react-types/shared" "^3.17.0" + +"@react-types/tooltip@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.3.0.tgz#676f50860a3cd4317b55581533f749d867becf24" + integrity sha512-TMaKkjYbysZbMnY8zjI2Djh8QMHvB8LoN9EjOZX++3ZsO74CeCeOoGARh6+4c0Bu5rg4BXhNyi+y1JL3jtUEBg== + dependencies: + "@react-types/overlays" "^3.7.0" + "@react-types/shared" "^3.17.0" "@rushstack/eslint-patch@^1.1.3": version "1.2.0" @@ -3434,7 +3471,7 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" -"@sqltools/formatter@^1.2.2": +"@sqltools/formatter@^1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== @@ -3576,22 +3613,22 @@ dependencies: mini-svg-data-uri "^1.2.3" -"@tailwindcss/typography@0.5.8": - version "0.5.8" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.8.tgz#8fb31db5ab0590be6dfa062b1535ac86ad9d12bf" - integrity sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw== +"@tailwindcss/typography@0.5.9": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.9.tgz#027e4b0674929daaf7c921c900beee80dbad93e8" + integrity sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg== dependencies: lodash.castarray "^4.4.0" lodash.isplainobject "^4.0.6" lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@tanem/react-nprogress@5.0.22": - version "5.0.22" - resolved "https://registry.yarnpkg.com/@tanem/react-nprogress/-/react-nprogress-5.0.22.tgz#31aff13de27ec27401acb8cc4a5976eb034616e6" - integrity sha512-S73v6z7uD8wkCzKARDXn/AGEAVlL8IXI2/pqACRMnn3dTyfaLg2JLrZYtrfBcVaZXf5bgKSB+lK1ncKVN40pQQ== +"@tanem/react-nprogress@5.0.30": + version "5.0.30" + resolved "https://registry.yarnpkg.com/@tanem/react-nprogress/-/react-nprogress-5.0.30.tgz#e3c256834e17925ecc903d05603a836e00743702" + integrity sha512-OBvlGfxWMyAGi6C9V6ZCdu5Kn9drxHZSg977TtF9hBpNtl+GY6lxOsbazkMIQua/xqaDe58Bs1kDTNzdwjIFEA== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.20.13" hoist-non-react-statics "^3.3.2" "@tootallnate/once@1": @@ -3746,14 +3783,23 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express-session@1.17.5", "@types/express-session@^1.15.5": - version "1.17.5" - resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.5.tgz#13f48852b4aa60ff595835faeb4b4dda0ba0866e" - integrity sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w== +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-session@1.17.6", "@types/express-session@^1.15.5": + version "1.17.6" + resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.6.tgz#1c8881ba0dc836ffbf1071b2f020d60fcca0f08c" + integrity sha512-L6sB04HVA4HEZo1hDL65JXdZdBJtzZnCiw/P7MnO4w6746tJCNtXlHtzEASyI9ccn9zyOw6IbqQuhVa03VpO4w== dependencies: "@types/express" "*" -"@types/express@*", "@types/express@4.17.15": +"@types/express@*": version "4.17.15" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff" integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ== @@ -3763,6 +3809,16 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/express@4.17.17": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/fs-extra@^9.0.1": version "9.0.13" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" @@ -3913,10 +3969,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@18.0.10": - version "18.0.10" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.10.tgz#3b66dec56aa0f16a6cc26da9e9ca96c35c0b4352" - integrity sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg== +"@types/react-dom@18.0.11": + version "18.0.11" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" + integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== dependencies: "@types/react" "*" @@ -3927,10 +3983,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.26": - version "18.0.26" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" - integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== +"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@18.0.28": + version "18.0.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" + integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -4025,22 +4081,33 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.14.tgz#754f1dccedcc66fc2bbe290c27f5323b407ceb00" integrity sha512-Ynb/CjHhE/Xp/4bhHmQC4U1Ox+I2OpfRYF3dnNgQqn1cHa6LK3H1wJMNPT02tSVZA6FYuXE2ITORfbnb6zBCSA== -"@typescript-eslint/eslint-plugin@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz#54f8368d080eb384a455f60c2ee044e948a8ce67" - integrity sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ== +"@typescript-eslint/eslint-plugin@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz#2c821ad81b2c786d142279a8292090f77d1881f4" + integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== dependencies: - "@typescript-eslint/scope-manager" "5.48.0" - "@typescript-eslint/type-utils" "5.48.0" - "@typescript-eslint/utils" "5.48.0" + "@typescript-eslint/scope-manager" "5.54.0" + "@typescript-eslint/type-utils" "5.54.0" + "@typescript-eslint/utils" "5.54.0" debug "^4.3.4" + grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.48.0", "@typescript-eslint/parser@^5.21.0": +"@typescript-eslint/parser@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.0.tgz#def186eb1b1dbd0439df0dacc44fb6d8d5c417fe" + integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== + dependencies: + "@typescript-eslint/scope-manager" "5.54.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/typescript-estree" "5.54.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^5.21.0": version "5.48.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.0.tgz#02803355b23884a83e543755349809a50b7ed9ba" integrity sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg== @@ -4058,22 +4125,53 @@ "@typescript-eslint/types" "5.48.0" "@typescript-eslint/visitor-keys" "5.48.0" -"@typescript-eslint/type-utils@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz#40496dccfdc2daa14a565f8be80ad1ae3882d6d6" - integrity sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g== +"@typescript-eslint/scope-manager@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz#74b28ac9a3fc8166f04e806c957adb8c1fd00536" + integrity sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg== dependencies: - "@typescript-eslint/typescript-estree" "5.48.0" - "@typescript-eslint/utils" "5.48.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/visitor-keys" "5.54.0" + +"@typescript-eslint/type-utils@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz#390717216eb61393a0cad2995da154b613ba7b26" + integrity sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.54.0" + "@typescript-eslint/utils" "5.54.0" debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/types@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5" + integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA== + "@typescript-eslint/types@5.48.0": version "5.48.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.0.tgz#d725da8dfcff320aab2ac6f65c97b0df30058449" integrity sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw== -"@typescript-eslint/typescript-estree@5.48.0", "@typescript-eslint/typescript-estree@^5.9.1": +"@typescript-eslint/types@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.0.tgz#7d519df01f50739254d89378e0dcac504cab2740" + integrity sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== + +"@typescript-eslint/typescript-estree@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d" + integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ== + dependencies: + "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/visitor-keys" "5.45.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.48.0": version "5.48.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz#a7f04bccb001003405bb5452d43953a382c2fac2" integrity sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw== @@ -4086,20 +4184,41 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.0": - version "5.48.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.0.tgz#eee926af2733f7156ad8d15e51791e42ce300273" - integrity sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ== +"@typescript-eslint/typescript-estree@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz#f6f3440cabee8a43a0b25fa498213ebb61fdfe99" + integrity sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ== + dependencies: + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/visitor-keys" "5.54.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.0.tgz#3db758aae078be7b54b8ea8ea4537ff6cd3fbc21" + integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.0" - "@typescript-eslint/types" "5.48.0" - "@typescript-eslint/typescript-estree" "5.48.0" + "@typescript-eslint/scope-manager" "5.54.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/typescript-estree" "5.54.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/visitor-keys@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528" + integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg== + dependencies: + "@typescript-eslint/types" "5.45.0" + eslint-visitor-keys "^3.3.0" + "@typescript-eslint/visitor-keys@5.48.0": version "5.48.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz#4446d5e7f6cadde7140390c0e284c8702d944904" @@ -4108,6 +4227,14 @@ "@typescript-eslint/types" "5.48.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz#846878afbf0cd67c19cfa8d75947383d4490db8f" + integrity sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA== + dependencies: + "@typescript-eslint/types" "5.54.0" + eslint-visitor-keys "^3.3.0" + JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -4129,7 +4256,12 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -ace-builds@1.14.0, ace-builds@^1.4.14: +ace-builds@1.15.2: + version "1.15.2" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.15.2.tgz#e9be5c4cbc835894e1202ddc8f7a1f0df049f321" + integrity sha512-ANXWnANcB4XgC9tyCtG8EXjeDdDY6iJuPQs+pDiZF/2chQMU7LTOBgw9xJdeRzRyNX5+KGZKwgB80XyY2n5QvA== + +ace-builds@^1.4.14: version "1.14.0" resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.14.0.tgz#85a6733b4fa17b0abc3dbfe38cd8d823cad79716" integrity sha512-3q8LvawomApRCt4cC0OzxVjDsZ609lDbm8l0Xl9uqG06dKEq4RT0YXLUyk7J2SxmqIp5YXzZNw767Dr8GKUruw== @@ -4297,7 +4429,7 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^3.0.0: +app-root-path@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== @@ -4373,6 +4505,13 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +aria-query@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -4514,6 +4653,11 @@ autoprefixer@10.4.13: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -4529,15 +4673,20 @@ axe-core@^4.4.3: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.1.tgz#79cccdee3e3ab61a8f42c458d4123a6768e6fbce" integrity sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w== +axe-core@^4.6.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== + axios-rate-limit@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/axios-rate-limit/-/axios-rate-limit-1.3.0.tgz#03241d24c231c47432dab6e8234cfde819253c2e" integrity sha512-cKR5wTbU/CeeyF1xVl5hl6FlYsmzDVqxlN4rGtfO5x7J83UxKDckudsW0yW21/ZJRcO0Qrfm3fUFbhEbWTLayw== -axios@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1" - integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q== +axios@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" + integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -4548,6 +4697,13 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +axobject-query@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" + babel-plugin-emotion@^10.0.27: version "10.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" @@ -5323,7 +5479,27 @@ commander@^9.0.0, commander@^9.4.1: resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== -commitizen@4.2.6, commitizen@^4.0.3: +commitizen@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924" + integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== + dependencies: + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.5" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.7" + strip-bom "4.0.0" + strip-json-comments "3.1.1" + +commitizen@^4.0.3: version "4.2.6" resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.6.tgz#c35af39e1cb5fc2de88511df802da4344dc3ca80" integrity sha512-RyTM+EiD9GO01DJUn9MRRAet3XUHGfoUZoksLfr+1ym1Xt2q5EYJs9Fg2BtKSb5Mo53i0BtMBmWMHQXVlZ/L9w== @@ -5607,18 +5783,17 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cron-parser@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-3.5.0.tgz#b1a9da9514c0310aa7ef99c2f3f1d0f8c235257c" - integrity sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ== +cron-parser@^4.2.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.7.1.tgz#1e325a6a18e797a634ada1e2599ece0b6b5ed177" + integrity sha512-WguFaoQ0hQ61SgsCZLHUcNbAvlK0lypKXu62ARguefYmjzaOXIVRNrAmyXzabTwUn4sQvQLkk6bjH+ipGfw8bA== dependencies: - is-nan "^1.3.2" - luxon "^1.26.0" + luxon "^3.2.1" -cronstrue@2.21.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-2.21.0.tgz#278d19aa0b9e7ecc90a0c1dbd4f84ceece724094" - integrity sha512-YxabE1ZSHA1zJZMPCTSEbc0u4cRRenjqqTgCwJT7OvkspPSvfYFITuPFtsT+VkBuavJtFv2kJXT+mKSnlUJxfg== +cronstrue@2.23.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-2.23.0.tgz#8f000f62c0034a0efae820b6b4f86052836c3d38" + integrity sha512-iPoWUQbCwUmrBf1w9W+9YQs8FowWp/teC2XGz3zAmt0Aja+HWGjyjUkWASWcsdzxSuL0EIIdvlfGEVBljvTbSQ== cross-spawn@^6.0.0: version "6.0.5" @@ -5733,10 +5908,10 @@ cy-mobile-commands@0.3.0: resolved "https://registry.yarnpkg.com/cy-mobile-commands/-/cy-mobile-commands-0.3.0.tgz#2bf242093149154d846b755977da197b4730429e" integrity sha512-Bj5P2ylw88hPqolLu68xWB6euVH5uNt8zyh+Ju8sBukGv39mWZxpjp6LtnUX/LK/YMthwvILYHhvr9SG1TP+4w== -cypress@12.3.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.3.0.tgz#ae3fb0540aef4b5eab1ef2bcd0760caf2992b8bf" - integrity sha512-ZQNebibi6NBt51TRxRMYKeFvIiQZ01t50HSy7z/JMgRVqBUey3cdjog5MYEbzG6Ktti5ckDt1tfcC47lmFwXkw== +cypress@12.7.0: + version "12.7.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.7.0.tgz#69900f82af76cf3ba0ddb9b59ec3b0d38222ab22" + integrity sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -5755,7 +5930,7 @@ cypress@12.3.0: commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.10.4" - debug "^4.3.2" + debug "^4.3.4" enquirer "^2.3.6" eventemitter2 "6.4.7" execa "4.1.0" @@ -5812,7 +5987,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-fns@2.29.3, date-fns@^2.28.0: +date-fns@2.29.3, date-fns@^2.29.3: version "2.29.3" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== @@ -5878,6 +6053,29 @@ dedent@0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +deep-equal@^2.0.5: + version "2.2.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" + integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-array-buffer "^3.0.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -6140,7 +6338,7 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" -dotenv@^16.0.0: +dotenv@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== @@ -6197,7 +6395,7 @@ email-templates@9.0.0: nodemailer "^6.7.2" preview-email "^3.0.5" -emoji-regex@^10.0.0: +emoji-regex@10.2.1, emoji-regex@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== @@ -6320,6 +6518,21 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" +es-get-iterator@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -6412,20 +6625,22 @@ eslint-module-utils@^2.7.3: dependencies: debug "^3.2.7" -eslint-plugin-formatjs@4.3.9: - version "4.3.9" - resolved "https://registry.yarnpkg.com/eslint-plugin-formatjs/-/eslint-plugin-formatjs-4.3.9.tgz#cccecfa7bb40b6f150c5e0602ddaca1cd632d116" - integrity sha512-+8kGoTUaNe0qS55eg5XbPDY+eQmeZxnrC8MugQTGUXlqbCyLyG7y4mDsMhAgactVyUMST6Ln1HEm1Tk0KNuIKQ== +eslint-plugin-formatjs@4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-formatjs/-/eslint-plugin-formatjs-4.9.0.tgz#9ba74f731d41c2a18d132092766b30553855c666" + integrity sha512-U3u8TI/Mogo3sunTHDh24mc3p1zWAz/VaYjSkGhuYcLmqfkqEr3BmGUNQ8NTDvZviYHNTkhjHWuXQnUkh81grQ== dependencies: - "@formatjs/icu-messageformat-parser" "2.1.14" - "@formatjs/ts-transformer" "3.11.5" + "@formatjs/icu-messageformat-parser" "2.3.0" + "@formatjs/ts-transformer" "3.12.0" "@types/eslint" "7 || 8" "@types/picomatch" "^2.3.0" - "@typescript-eslint/typescript-estree" "^5.9.1" - emoji-regex "^10.0.0" + "@typescript-eslint/typescript-estree" "5.45.0" + emoji-regex "^10.2.1" + magic-string "^0.29.0" picomatch "^2.3.1" - tslib "^2.4.0" + tslib "2.4.0" typescript "^4.7" + unicode-emoji-utils "^1.1.1" eslint-plugin-import@^2.26.0: version "2.26.0" @@ -6446,7 +6661,29 @@ eslint-plugin-import@^2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jsx-a11y@6.6.1, eslint-plugin-jsx-a11y@^6.5.1: +eslint-plugin-jsx-a11y@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + ast-types-flow "^0.0.7" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" + +eslint-plugin-jsx-a11y@^6.5.1: version "6.6.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== @@ -6482,7 +6719,28 @@ eslint-plugin-react-hooks@4.6.0, eslint-plugin-react-hooks@^4.5.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.31.11, eslint-plugin-react@^7.31.7: +eslint-plugin-react@7.32.2: + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" + +eslint-plugin-react@^7.31.7: version "7.31.11" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== @@ -6536,12 +6794,13 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== +eslint@8.35.0: + version "8.35.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.35.0.tgz#fffad7c7e326bae606f0e8f436a6158566d42323" + integrity sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw== dependencies: - "@eslint/eslintrc" "^1.4.1" + "@eslint/eslintrc" "^2.0.0" + "@eslint/js" "8.35.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -6555,7 +6814,7 @@ eslint@8.31.0: eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" espree "^9.4.0" - esquery "^1.4.0" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" @@ -6595,10 +6854,10 @@ esprima@^4.0.0, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" + integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== dependencies: estraverse "^5.1.0" @@ -7027,6 +7286,13 @@ follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -7209,6 +7475,15 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-paths@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/get-paths/-/get-paths-0.0.7.tgz#15331086752077cf130166ccd233a1cdbeefcf38" @@ -7332,6 +7607,17 @@ glob@^8.0.1: minimatch "^5.0.1" once "^1.3.0" +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -7862,6 +8148,27 @@ inquirer@8.2.4: through "^2.3.6" wrap-ansi "^7.0.0" +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + internal-slot@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" @@ -7871,6 +8178,15 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +internal-slot@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + intl-messageformat-parser@6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.1.2.tgz#28c65f3689f538e66c7cf628881548d6a82ff3c2" @@ -7886,7 +8202,17 @@ intl-messageformat-parser@^5.3.7: dependencies: "@formatjs/intl-numberformat" "^5.5.2" -intl-messageformat@10.2.5, intl-messageformat@^10.1.0: +intl-messageformat@10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.3.1.tgz#99b280b706e4eeb232458dcb1b5758e80abf919c" + integrity sha512-mqHc6arhbogrdImIsEscdjWnJcg2bvg3MiyGXDsTSGmPbbM2KtRUe7oNgDUbkM3HMn4KbyOct2JyJScmwRgGSQ== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/fast-memoize" "1.2.8" + "@formatjs/icu-messageformat-parser" "2.3.0" + tslib "^2.4.0" + +intl-messageformat@^10.1.0: version "10.2.5" resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.2.5.tgz#a51e6e2700d82b5b7ccd7a9f3bd45d967d95afc0" integrity sha512-AievYMN6WLLHwBeCTv4aRKG+w3ZNyZtkObwgsKk3Q7GNTq8zDRvDbJSBQkb2OPeVCcAKcIXvak9FF/bRNavoww== @@ -7924,6 +8250,23 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -7961,7 +8304,7 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -7987,7 +8330,7 @@ is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -8047,13 +8390,10 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-negative-zero@^2.0.2: version "2.0.2" @@ -8120,6 +8460,11 @@ is-regex@^1.0.3, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -8163,6 +8508,17 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" +is-typed-array@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -8178,6 +8534,11 @@ is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -8185,6 +8546,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8202,6 +8571,11 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -8391,7 +8765,7 @@ jstransformer@1.0.0: is-promise "^2.0.0" promise "^7.0.1" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2, jsx-ast-utils@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== @@ -8463,11 +8837,18 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -language-subtag-registry@^0.3.20: +language-subtag-registry@^0.3.20, language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== +language-tags@=1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + language-tags@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.7.tgz#41cc248730f3f12a452c2e2efe32bc0bbce67967" @@ -8650,10 +9031,10 @@ linkify-it@4.0.1: dependencies: uc.micro "^1.0.1" -lint-staged@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.1.0.tgz#d4c61aec939e789e489fa51987ec5207b50fd37e" - integrity sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ== +lint-staged@13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.1.2.tgz#443636a0cfd834d5518d57d228130dc04c83d6fb" + integrity sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w== dependencies: cli-truncate "^3.1.0" colorette "^2.0.19" @@ -8934,10 +9315,17 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== -luxon@^1.26.0: - version "1.28.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf" - integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ== +luxon@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.2.1.tgz#14f1af209188ad61212578ea7e3d518d18cee45f" + integrity sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg== + +magic-string@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.29.0.tgz#f034f79f8c43dba4ae1730ffb5e8c4e084b16cf3" + integrity sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" mailparser@^3.5.0: version "3.6.3" @@ -9490,7 +9878,7 @@ minimist@1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@1.2.7, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -9596,6 +9984,11 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" + integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -9828,12 +10221,12 @@ node-releases@^2.0.6: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== -node-schedule@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.0.tgz#068ae38d7351c330616f7fe7cdb05036f977cbaf" - integrity sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ== +node-schedule@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-2.1.1.tgz#6958b2c5af8834954f69bb0a7a97c62b97185de3" + integrity sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ== dependencies: - cron-parser "^3.5.0" + cron-parser "^4.2.0" long-timeout "0.1.1" sorted-array-functions "^1.3.0" @@ -9842,6 +10235,11 @@ nodemailer@6.8.0, nodemailer@^6.7.2, nodemailer@^6.7.7: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.8.0.tgz#804bcc5256ee5523bc914506ee59f8de8f0b1cd5" integrity sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ== +nodemailer@6.9.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.1.tgz#8249d928a43ed85fec17b13d2870c8f758a126ed" + integrity sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA== + nodemon@2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" @@ -10178,6 +10576,14 @@ object-inspect@^1.12.2, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -10288,10 +10694,10 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -openpgp@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.5.0.tgz#235ae5a49d5fda5cfd1d82c4c42cd91433478c14" - integrity sha512-SpwcJnxrK9Y0HRM6KxSFqkAEOSWEabCH/c8dII/+y2e5f6KvuDG5ZE7JXaPBaVJNE4VUZZeTphxXDoZD0KOHrw== +openpgp@5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.7.0.tgz#fe0a346f26171ffb726636ae7ccb24a504281dbc" + integrity sha512-wchYJQfFbSaocUvUIYqNrWD+lRSmFSG1d3Ak2CHeXFocDSEsf7Uc1zUzHjSdlZPTvGeeXPQ+MJrwVtalL4QCBg== dependencies: asn1.js "^5.0.0" @@ -10751,7 +11157,7 @@ postcss-selector-parser@6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.10: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -10773,10 +11179,10 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@8.4.20, postcss@^8.4.18: - version "8.4.20" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56" - integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g== +postcss@8.4.21, postcss@^8.0.9: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" @@ -10794,20 +11200,20 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier-plugin-organize-imports@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.1.tgz#7e0e0a18457e0166e740daaff1aed1c08069fcb9" - integrity sha512-bty7C2Ecard5EOXirtzeCAqj4FU4epeuWrQt/Z+sh8UVEpBlBZ3m3KNPz2kFu7KgRTQx/C9o4/TdquPD1jOqjQ== +prettier-plugin-organize-imports@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.2.tgz#91993365e017daa5d0d28d8183179834224d8dd1" + integrity sha512-e97lE6odGSiHonHJMTYC0q0iLXQyw0u5z/PJpvP/3vRy6/Zi9kLBwFAbEGjDzIowpjQv8b+J04PDamoUSQbzGA== -prettier-plugin-tailwindcss@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.1.tgz#989b35afd86c550cb671da69891aba4f4a051159" - integrity sha512-aIO8IguumORyRsmT+E7JfJ3A9FEoyhqZR7Au7TBOege3VZkgMvHJMkufeYp4zjnDK2iq4ktkvGMNOQR9T8lisQ== +prettier-plugin-tailwindcss@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.3.tgz#b68a1de10056fc84055426af132c2697bea0955c" + integrity sha512-s2N5Dh7Ao5KTV1mao5ZBnn8EKtUcDPJEkGViZIjI0Ij9TTI5zgTz4IHOxW33jOdjHKa8CSjM88scelUiC5TNRQ== -prettier@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== +prettier@2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== pretty-bytes@^5.6.0: version "5.6.0" @@ -11150,45 +11556,45 @@ react-animate-height@2.1.2: classnames "^2.2.5" prop-types "^15.6.1" -react-aria@3.22.0: - version "3.22.0" - resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.22.0.tgz#824dbeac1760240b82359fd60c18bf68769d5815" - integrity sha512-GA+qwnVVTvSirdhB/PsYPwix24vFDlGeK5Lk3zUgB9Q5VHnTfMMJ4+tyu9G38UR0clLQ5SAG1ArNjgzmhexQYg== +react-aria@3.23.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.23.0.tgz#8829ae47373793a7b48e19aa8af1b581021b2a9a" + integrity sha512-CMem/+XnL3yuNHU94usRHS2+rdKLuyUzxRmQ/ndVXresflzKdaLYCH7Dtb2Um4rUEjD0BCz33hiNZPsJ7jBVQQ== dependencies: - "@react-aria/breadcrumbs" "^3.4.1" - "@react-aria/button" "^3.6.4" - "@react-aria/calendar" "^3.0.5" - "@react-aria/checkbox" "^3.7.1" - "@react-aria/combobox" "^3.4.4" - "@react-aria/datepicker" "^3.2.1" - "@react-aria/dialog" "^3.4.2" - "@react-aria/dnd" "^3.0.1" - "@react-aria/focus" "^3.10.1" - "@react-aria/gridlist" "^3.1.2" - "@react-aria/i18n" "^3.6.3" - "@react-aria/interactions" "^3.13.1" - "@react-aria/label" "^3.4.4" - "@react-aria/link" "^3.3.6" - "@react-aria/listbox" "^3.7.2" - "@react-aria/menu" "^3.7.1" - "@react-aria/meter" "^3.3.4" - "@react-aria/numberfield" "^3.3.4" - "@react-aria/overlays" "^3.12.1" - "@react-aria/progress" "^3.3.4" - "@react-aria/radio" "^3.4.2" - "@react-aria/searchfield" "^3.4.4" - "@react-aria/select" "^3.8.4" - "@react-aria/selection" "^3.12.1" - "@react-aria/separator" "^3.2.6" - "@react-aria/slider" "^3.2.4" - "@react-aria/ssr" "^3.4.1" - "@react-aria/switch" "^3.3.1" - "@react-aria/table" "^3.7.0" - "@react-aria/tabs" "^3.3.4" - "@react-aria/textfield" "^3.8.1" - "@react-aria/tooltip" "^3.3.4" - "@react-aria/utils" "^3.14.2" - "@react-aria/visually-hidden" "^3.6.1" + "@react-aria/breadcrumbs" "^3.5.0" + "@react-aria/button" "^3.7.0" + "@react-aria/calendar" "^3.1.0" + "@react-aria/checkbox" "^3.8.0" + "@react-aria/combobox" "^3.5.0" + "@react-aria/datepicker" "^3.3.0" + "@react-aria/dialog" "^3.5.0" + "@react-aria/dnd" "^3.1.0" + "@react-aria/focus" "^3.11.0" + "@react-aria/gridlist" "^3.2.0" + "@react-aria/i18n" "^3.7.0" + "@react-aria/interactions" "^3.14.0" + "@react-aria/label" "^3.5.0" + "@react-aria/link" "^3.4.0" + "@react-aria/listbox" "^3.8.0" + "@react-aria/menu" "^3.8.0" + "@react-aria/meter" "^3.4.0" + "@react-aria/numberfield" "^3.4.0" + "@react-aria/overlays" "^3.13.0" + "@react-aria/progress" "^3.4.0" + "@react-aria/radio" "^3.5.0" + "@react-aria/searchfield" "^3.5.0" + "@react-aria/select" "^3.9.0" + "@react-aria/selection" "^3.13.0" + "@react-aria/separator" "^3.3.0" + "@react-aria/slider" "^3.3.0" + "@react-aria/ssr" "^3.5.0" + "@react-aria/switch" "^3.4.0" + "@react-aria/table" "^3.8.0" + "@react-aria/tabs" "^3.4.0" + "@react-aria/textfield" "^3.9.0" + "@react-aria/tooltip" "^3.4.0" + "@react-aria/utils" "^3.15.0" + "@react-aria/visually-hidden" "^3.7.0" react-dom@18.2.0: version "18.2.0" @@ -11208,25 +11614,25 @@ react-fast-compare@^3.0.1: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-intersection-observer@9.4.1: - version "9.4.1" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz#4ccb21e16acd0b9cf5b28d275af7055bef878f6b" - integrity sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw== +react-intersection-observer@9.4.3: + version "9.4.3" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.3.tgz#ec84ce0c25cad548075130ea045ac5c7adf908f3" + integrity sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ== -react-intl@6.2.5: - version "6.2.5" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.2.5.tgz#eb871145e0866916d0c9283b2c83a146c6121793" - integrity sha512-nz21POTKbE0sPEuEJU4o5YTZYY7VlIYCPNJaD6D2+xKyk6Noj6DoUK0LRO9LXuQNUuQ044IZl3m6ymzZRj8XFQ== +react-intl@6.2.10: + version "6.2.10" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.2.10.tgz#586ba261b3ff67be09072fefdee2ef58497e0ea2" + integrity sha512-l2TpskkFR0OzQnq7ChiJ5ZX23USZSzpKOcaR9MYC4UOHE9bT4kQ5JXXolgkq3tiOlvseEOzUCerlzn886AX9Yg== dependencies: "@formatjs/ecma402-abstract" "1.14.3" - "@formatjs/icu-messageformat-parser" "2.1.14" - "@formatjs/intl" "2.6.3" - "@formatjs/intl-displaynames" "6.2.3" - "@formatjs/intl-listformat" "7.1.7" + "@formatjs/icu-messageformat-parser" "2.3.0" + "@formatjs/intl" "2.6.7" + "@formatjs/intl-displaynames" "6.2.6" + "@formatjs/intl-listformat" "7.1.9" "@types/hoist-non-react-statics" "^3.3.1" "@types/react" "16 || 17 || 18" hoist-non-react-statics "^3.3.2" - intl-messageformat "10.2.5" + intl-messageformat "10.3.1" tslib "^2.4.0" react-is@^16.13.1, react-is@^16.7.0: @@ -11239,10 +11645,10 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-markdown@8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.4.tgz#b5ff1f0f29ead71a7a6f98815eb1a70bcc2a036e" - integrity sha512-2oxHa6oDxc1apg/Gnc1Goh06t3B617xeywqI/92wmDV9FELI6ayRkwge7w7DoEqM0gRpZGTNU6xQG+YpJISnVg== +react-markdown@8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.5.tgz#c9a70a33ca9aeeafb769c6582e7e38843b9d70ad" + integrity sha512-jGJolWWmOWAvzf+xMdB9zwStViODyyFQhNB/bwCerbBKmrTmgmA599CGiOlP58OId1IMoIRsA8UdI1Lod4zb5A== dependencies: "@types/hast" "^2.0.0" "@types/prop-types" "^15.0.0" @@ -11255,7 +11661,7 @@ react-markdown@8.0.4: remark-parse "^10.0.0" remark-rehype "^10.0.0" space-separated-tokens "^2.0.0" - style-to-object "^0.3.0" + style-to-object "^0.4.0" unified "^10.0.0" unist-util-visit "^4.0.0" vfile "^5.0.0" @@ -11292,17 +11698,17 @@ react-select@5.7.0: react-transition-group "^4.3.0" use-isomorphic-layout-effect "^1.1.2" -react-spring@9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.6.1.tgz#e715b2fa523c1a3acfdcf1aaa93e081620b8cc8e" - integrity sha512-BeP80R4SLb1bZHW/Q62nECoScHw/fH+jzGkD7dc892HNGa+lbGIJXURc6U7N8JfZ8peEO46nPxR57aUMuYzquQ== +react-spring@9.7.1: + version "9.7.1" + resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.7.1.tgz#8acfed700823490a4d9d4cf131c5fea12d1aaa93" + integrity sha512-o2+r2DNQDVEuefiz33ZF76DPd/gLq3kbdObJmllGF2IUfv2W6x+ZP0gR97QYCSR4QLbmOl1mPKUBbI+FJdys2Q== dependencies: - "@react-spring/core" "~9.6.1" - "@react-spring/konva" "~9.6.1" - "@react-spring/native" "~9.6.1" - "@react-spring/three" "~9.6.1" - "@react-spring/web" "~9.6.1" - "@react-spring/zdog" "~9.6.1" + "@react-spring/core" "~9.7.1" + "@react-spring/konva" "~9.7.1" + "@react-spring/native" "~9.7.1" + "@react-spring/three" "~9.7.1" + "@react-spring/web" "~9.7.1" + "@react-spring/zdog" "~9.7.1" react-tailwindcss-datepicker-sct@1.3.4: version "1.3.4" @@ -11671,7 +12077,7 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: +resolve@^2.0.0-next.3, resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== @@ -12272,6 +12678,13 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + stream-combiner2@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" @@ -12415,10 +12828,10 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== +style-to-object@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37" + integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw== dependencies: inline-style-parser "0.1.1" @@ -12489,24 +12902,24 @@ swagger-ui-dist@>=4.11.0: resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz#cda226a79db2a9192579cc1f37ec839398a62638" integrity sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA== -swagger-ui-express@4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.6.0.tgz#fc297d80c614c80f5d7def3dab50b56428cfe1c9" - integrity sha512-ZxpQFp1JR2RF8Ar++CyJzEDdvufa08ujNUJgMVTMWPi86CuQeVdBtvaeO/ysrz6dJAYXf9kbVNhWD7JWocwqsA== +swagger-ui-express@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.6.2.tgz#61b2cb9fd7932cdccff99e0efdf700a5459e493c" + integrity sha512-MHIOaq9JrTTB3ygUJD+08PbjM5Tt/q7x80yz9VTFIatw8j5uIWKcr90S0h5NLMzFEDC6+eVprtoeA5MDZXCUKQ== dependencies: swagger-ui-dist ">=4.11.0" -swr@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.0.0.tgz#91d999359e2be92de1a41f6b6711d72be20ffdbd" - integrity sha512-IhUx5yPkX+Fut3h0SqZycnaNLXLXsb2ECFq0Y29cxnK7d8r7auY2JWNbCW3IX+EqXUg3rwNJFlhrw5Ye/b6k7w== +swr@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.0.4.tgz#e68a5cc2e87b2a7f5f7ebf8a472cea24fc1c5fce" + integrity sha512-4GUiTjknRUVuw4MWUHR7mzJ9G/DWL+yZz/TgWDfiA0OZ9tL6qyrTkN2wPeboBpL3OJTkej3pexh3mWCnv8cFkQ== dependencies: use-sync-external-store "^1.2.0" -tailwindcss@3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" - integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== +tailwindcss@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" + integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -12522,12 +12935,12 @@ tailwindcss@3.2.4: normalize-path "^3.0.0" object-hash "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.18" + postcss "^8.0.9" postcss-import "^14.1.0" postcss-js "^4.0.0" postcss-load-config "^3.1.4" postcss-nested "6.0.0" - postcss-selector-parser "^6.0.10" + postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" resolve "^1.22.1" @@ -12785,16 +13198,26 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tslib@^1.10.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" @@ -12886,30 +13309,35 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typeorm@0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.11.tgz#09b6ab0b0574bf33c1faf7344bab6c363cf28921" - integrity sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg== +typeorm@0.3.12: + version "0.3.12" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.12.tgz#d0fcdc4ce0c32bca42ba5ab04e83f5f58c41ebf3" + integrity sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA== dependencies: - "@sqltools/formatter" "^1.2.2" - app-root-path "^3.0.0" + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" buffer "^6.0.3" - chalk "^4.1.0" + chalk "^4.1.2" cli-highlight "^2.1.11" - date-fns "^2.28.0" - debug "^4.3.3" - dotenv "^16.0.0" - glob "^7.2.0" + date-fns "^2.29.3" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" js-yaml "^4.1.0" - mkdirp "^1.0.4" + mkdirp "^2.1.3" reflect-metadata "^0.1.13" sha.js "^2.4.11" - tslib "^2.3.1" - uuid "^8.3.2" + tslib "^2.5.0" + uuid "^9.0.0" xml2js "^0.4.23" - yargs "^17.3.1" + yargs "^17.6.2" -typescript@4.9.4, typescript@^4.0, typescript@^4.6.4, typescript@^4.7: +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typescript@^4.0, typescript@^4.6.4, typescript@^4.7: version "4.9.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== @@ -12961,6 +13389,13 @@ unicode-canonical-property-names-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +unicode-emoji-utils@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unicode-emoji-utils/-/unicode-emoji-utils-1.1.1.tgz#26e4ea4bc4308380caf65fd6a527e090e42ecdaf" + integrity sha512-QEg0BNool1kItuftJp79SbWYzgW8Rnf8I+Q5NIDSkUw8y+KS+mLBoOaxSO+nFFUyIHGEt24I2Fn1iJ74LpiDcA== + dependencies: + emoji-regex "10.2.1" + unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" @@ -13150,6 +13585,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + uvu@^0.5.0: version "0.5.6" resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" @@ -13301,6 +13741,28 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -13541,7 +14003,7 @@ yargs@^16.0.0, yargs@^16.1.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0, yargs@^17.3.1: +yargs@^17.0.0: version "17.6.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== @@ -13554,6 +14016,19 @@ yargs@^17.0.0, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@^17.6.2: + version "17.7.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -13585,7 +14060,7 @@ yup@0.32.11: property-expr "^2.0.4" toposort "^2.0.2" -zod@3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.20.2.tgz#068606642c8f51b3333981f91c0a8ab37dfc2807" - integrity sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ== +zod@3.20.6: + version "3.20.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.20.6.tgz#2f2f08ff81291d47d99e86140fedb4e0db08361a" + integrity sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA== From a4d07f5afab613317d96c9c6e9b47157a5a28986 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Thu, 2 Mar 2023 08:21:55 -0500 Subject: [PATCH 03/49] fix(ui): corrected default badge hover opacity (#3369) --- src/components/Common/Badge/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Common/Badge/index.tsx b/src/components/Common/Badge/index.tsx index 47ce6586..17eda5b1 100644 --- a/src/components/Common/Badge/index.tsx +++ b/src/components/Common/Badge/index.tsx @@ -71,7 +71,7 @@ const Badge = ( 'bg-indigo-500 bg-opacity-80 border border-indigo-500 !text-indigo-100' ); if (href) { - badgeStyle.push('hover:bg-indigo-500 bg-opacity-100'); + badgeStyle.push('hover:bg-indigo-500 hover:bg-opacity-100'); } } From a15c85cbd18adb1bd3b7670946d4483b81bad28e Mon Sep 17 00:00:00 2001 From: Pikachu920 <28607612+Pikachu920@users.noreply.github.com> Date: Sat, 25 Mar 2023 10:22:30 -0500 Subject: [PATCH 04/49] Add helper text to email address field in setup --- src/components/Login/JellyfinLogin.tsx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/Login/JellyfinLogin.tsx b/src/components/Login/JellyfinLogin.tsx index 5bd38301..314a779f 100644 --- a/src/components/Login/JellyfinLogin.tsx +++ b/src/components/Login/JellyfinLogin.tsx @@ -13,6 +13,7 @@ const messages = defineMessages({ password: 'Password', host: '{mediaServerName} URL', email: 'Email', + emailtooltip: 'This can be any valid email. It doesn\'t need to come from your {mediaServerName} instance.', validationhostrequired: '{mediaServerName} URL required', validationhostformat: 'Valid URL required', validationemailrequired: 'Email required', @@ -63,6 +64,12 @@ const JellyfinLogin: React.FC = ({ ), password: Yup.string(), }); + const mediaServerFormatValues = { + mediaServerName: + publicRuntimeConfig.JELLYFIN_TYPE == 'emby' + ? 'Emby' + : 'Jellyfin', + }; return ( = ({
@@ -114,12 +116,7 @@ const JellyfinLogin: React.FC = ({ id="host" name="host" type="text" - placeholder={intl.formatMessage(messages.host, { - mediaServerName: - publicRuntimeConfig.JELLYFIN_TYPE == 'emby' - ? 'Emby' - : 'Jellyfin', - })} + placeholder={intl.formatMessage(messages.host, mediaServerFormatValues)} />
{errors.host && touched.host && ( @@ -128,6 +125,9 @@ const JellyfinLogin: React.FC = ({
From 5f1c10d50aaa430bcda96218ef2cc12a0eb926f3 Mon Sep 17 00:00:00 2001 From: Yalagin Date: Thu, 27 Apr 2023 21:19:36 +0700 Subject: [PATCH 05/49] feat(add watchlist): adding midding functionality from overserr feat(add watchlist): adding missing functionality from overserr --- cypress/e2e/discover.cy.ts | 2 +- overseerr-api.yml | 66 ++++++++ package.json | 1 + server/entity/Media.ts | 20 ++- server/entity/User.ts | 4 + server/entity/Watchlist.ts | 148 ++++++++++++++++++ server/lib/watchlistsync.ts | 1 + .../migration/1682608634546-AddWatchlists.ts | 19 +++ server/repositories/watchlist.repository.ts | 11 ++ server/routes/collection.ts | 1 + server/routes/discover.ts | 32 ++++ server/routes/index.ts | 2 + server/routes/movie.ts | 2 + server/routes/person.ts | 2 + server/routes/search.ts | 1 + server/routes/tv.ts | 2 + server/routes/user/index.ts | 22 ++- server/routes/watchlist.ts | 65 ++++++++ src/components/CollectionDetails/index.tsx | 1 + src/components/Common/ListView/index.tsx | 4 + .../Discover/DiscoverWatchlist/index.tsx | 2 +- .../Discover/PlexWatchlistSlider/index.tsx | 8 +- src/components/Discover/constants.ts | 2 +- src/components/MediaSlider/index.tsx | 4 + .../NotificationTypeSelector/index.tsx | 2 +- src/components/PersonDetails/index.tsx | 2 + src/components/TitleCard/TmdbTitleCard.tsx | 10 ++ src/components/TitleCard/index.tsx | 110 ++++++++++++- src/i18n/locale/en.json | 6 +- src/i18n/locale/ua.json | 2 +- 30 files changed, 534 insertions(+), 20 deletions(-) create mode 100644 server/entity/Watchlist.ts create mode 100644 server/migration/1682608634546-AddWatchlists.ts create mode 100644 server/repositories/watchlist.repository.ts create mode 100644 server/routes/watchlist.ts diff --git a/cypress/e2e/discover.cy.ts b/cypress/e2e/discover.cy.ts index 545f2565..7f2f965b 100644 --- a/cypress/e2e/discover.cy.ts +++ b/cypress/e2e/discover.cy.ts @@ -187,7 +187,7 @@ describe('Discover', () => { cy.wait('@getWatchlist'); - const sliderHeader = cy.contains('.slider-header', 'Your Plex Watchlist'); + const sliderHeader = cy.contains('.slider-header', 'Your Watchlist'); sliderHeader.scrollIntoView(); diff --git a/overseerr-api.yml b/overseerr-api.yml index 20bc2184..013344eb 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -36,6 +36,8 @@ tags: description: Endpoints related to retrieving collection details. - name: service description: Endpoints related to getting service (Radarr/Sonarr) details. + - name: watchlist + description: Collection of media to watch later servers: - url: '{server}/api/v1' variables: @@ -44,6 +46,34 @@ servers: components: schemas: + Watchlist: + type: object + properties: + id: + type: integer + example: 1 + readOnly: true + tmdbId: + type: number + example: 1 + ratingKey: + type: string + type: + type: string + title: + type: string + media: + $ref: '#/components/schemas/MediaInfo' + createdAt: + type: string + example: '2020-09-12T10:00:27.000Z' + readOnly: true + updatedAt: + type: string + example: '2020-09-12T10:00:27.000Z' + readOnly: true + requestedBy: + $ref: '#/components/schemas/User' User: type: object properties: @@ -3962,6 +3992,41 @@ paths: restricted: type: boolean example: false + /watchlist: + post: + summary: Add media to watchlist + tags: + - watchlist + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Watchlist' + responses: + '200': + description: Watchlist data returned + content: + application/json: + schema: + $ref: '#/components/schemas/Watchlist' + /watchlist/{tmdbId}: + delete: + summary: Delete watchlist item + description: Removes a watchlist item. + tags: + - watchlist + parameters: + - in: path + name: tmdbId + description: tmdbId ID + required: true + example: '1' + schema: + type: string + responses: + '204': + description: Succesfully removed watchlist item /user/{userId}/watchlist: get: summary: Get the Plex watchlist for a specific user @@ -3969,6 +4034,7 @@ paths: Retrieves a user's Plex Watchlist in a JSON object. tags: - users + - watchlist parameters: - in: path name: userId diff --git a/package.json b/package.json index f1f2de39..280d6b69 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build:next": "next build", "build": "yarn build:next && yarn build:server", "lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --cache", + "lintfix": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --fix", "start": "NODE_ENV=production node dist/index.js", "i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault true \"./src/**/!(*.test).{ts,tsx}\"", "migration:generate": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:generate -d server/datasource.ts", diff --git a/server/entity/Media.ts b/server/entity/Media.ts index 47217aa0..68a5622c 100644 --- a/server/entity/Media.ts +++ b/server/entity/Media.ts @@ -3,6 +3,8 @@ import SonarrAPI from '@server/api/servarr/sonarr'; import { MediaStatus, MediaType } from '@server/constants/media'; import { MediaServerType } from '@server/constants/server'; import { getRepository } from '@server/datasource'; +import type { User } from '@server/entity/User'; +import { Watchlist } from '@server/entity/Watchlist'; import type { DownloadingItem } from '@server/lib/downloadtracker'; import downloadTracker from '@server/lib/downloadtracker'; import { getSettings } from '@server/lib/settings'; @@ -12,7 +14,6 @@ import { Column, CreateDateColumn, Entity, - In, Index, OneToMany, PrimaryGeneratedColumn, @@ -25,6 +26,7 @@ import Season from './Season'; @Entity() class Media { public static async getRelatedMedia( + user: User | undefined, tmdbIds: number | number[] ): Promise { const mediaRepository = getRepository(Media); @@ -37,9 +39,16 @@ class Media { finalIds = tmdbIds; } - const media = await mediaRepository.find({ - where: { tmdbId: In(finalIds) }, - }); + const media = await mediaRepository + .createQueryBuilder('media') + .leftJoinAndSelect( + 'media.watchlists', + 'watchlist', + 'media.id= watchlist.media and watchlist.requestedBy = :userId', + { userId: user?.id } + ) //, + .where(' media.tmdbId in (:...finalIds)', { finalIds }) + .getMany(); return media; } catch (e) { @@ -94,6 +103,9 @@ class Media { @OneToMany(() => MediaRequest, (request) => request.media, { cascade: true }) public requests: MediaRequest[]; + @OneToMany(() => Watchlist, (watchlist) => watchlist.media) + public watchlists: null | Watchlist[]; + @OneToMany(() => Season, (season) => season.media, { cascade: true, eager: true, diff --git a/server/entity/User.ts b/server/entity/User.ts index 8780e2d8..e4c8314c 100644 --- a/server/entity/User.ts +++ b/server/entity/User.ts @@ -1,6 +1,7 @@ import { MediaRequestStatus, MediaType } from '@server/constants/media'; import { UserType } from '@server/constants/user'; import { getRepository } from '@server/datasource'; +import { Watchlist } from '@server/entity/Watchlist'; import type { QuotaResponse } from '@server/interfaces/api/userInterfaces'; import PreparedEmail from '@server/lib/email'; import type { PermissionCheckOptions } from '@server/lib/permissions'; @@ -103,6 +104,9 @@ export class User { @OneToMany(() => MediaRequest, (request) => request.requestedBy) public requests: MediaRequest[]; + @OneToMany(() => Watchlist, (watchlist) => watchlist.requestedBy) + public watchlists: Watchlist[]; + @Column({ nullable: true }) public movieQuotaLimit?: number; diff --git a/server/entity/Watchlist.ts b/server/entity/Watchlist.ts new file mode 100644 index 00000000..bf362acb --- /dev/null +++ b/server/entity/Watchlist.ts @@ -0,0 +1,148 @@ +import TheMovieDb from '@server/api/themoviedb'; +import { MediaType } from '@server/constants/media'; +import { getRepository } from '@server/datasource'; +import Media from '@server/entity/Media'; +import { User } from '@server/entity/User'; +import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces'; +import logger from '@server/logger'; +import { + Column, + CreateDateColumn, + Entity, + Index, + ManyToOne, + PrimaryGeneratedColumn, + Unique, + UpdateDateColumn, +} from 'typeorm'; + +export class DuplicateWatchlistRequestError extends Error {} +export class NotFoundError extends Error { + constructor(message = 'Not found') { + super(message); + this.name = 'NotFoundError'; + } +} + +@Entity() +@Unique('UNIQUE_USER_DB', ['tmdbId', 'requestedBy']) +export class Watchlist implements WatchlistItem { + @PrimaryGeneratedColumn() + id: number; + + @Column({ type: 'varchar' }) + public ratingKey = ''; + + @Column({ type: 'varchar' }) + public mediaType: MediaType; + + @Column({ type: 'varchar' }) + title = ''; + + @Column() + @Index() + public tmdbId: number; + + @ManyToOne(() => User, (user) => user.watchlists, { + eager: true, + onDelete: 'CASCADE', + }) + public requestedBy: User; + + @ManyToOne(() => Media, (media) => media.watchlists, { + eager: true, + onDelete: 'CASCADE', + }) + public media: Media; + + @CreateDateColumn() + public createdAt: Date; + + @UpdateDateColumn() + public updatedAt: Date; + + constructor(init?: Partial) { + Object.assign(this, init); + } + + public static async createWatchlist( + watchlistRequest: Watchlist, + user: User + ): Promise { + const watchlistRepository = getRepository(this); + const mediaRepository = getRepository(Media); + const tmdb = new TheMovieDb(); + + const tmdbMedia = + watchlistRequest.mediaType === MediaType.MOVIE + ? await tmdb.getMovie({ movieId: watchlistRequest.tmdbId }) + : await tmdb.getTvShow({ tvId: watchlistRequest.tmdbId }); + + const existing = await watchlistRepository + .createQueryBuilder('watchlist') + .leftJoinAndSelect('watchlist.requestedBy', 'user') + .where('user.id = :userId', { userId: user.id }) + .andWhere('watchlist.tmdbId = :tmdbId', { + tmdbId: watchlistRequest.tmdbId, + }) + .andWhere('watchlist.mediaType = :mediaType', { + mediaType: watchlistRequest.mediaType, + }) + .getMany(); + + if (existing && existing.length > 0) { + logger.warn('Duplicate request for watchlist blocked', { + tmdbId: watchlistRequest.tmdbId, + mediaType: watchlistRequest.mediaType, + label: 'Watchlist', + }); + + throw new DuplicateWatchlistRequestError(); + } + + let media = await mediaRepository.findOne({ + where: { + tmdbId: watchlistRequest.tmdbId, + mediaType: watchlistRequest.mediaType, + }, + }); + + if (!media) { + media = new Media({ + tmdbId: tmdbMedia.id, + tvdbId: tmdbMedia.external_ids.tvdb_id, + mediaType: watchlistRequest.mediaType, + }); + } + + const watchlist = new this({ + ...watchlistRequest, + requestedBy: user, + media, + }); + + await mediaRepository.save(media); + await watchlistRepository.save(watchlist); + return watchlist; + } + + public static async deleteWatchlist( + tmdbId: Watchlist['tmdbId'], + user: User + ): Promise { + const watchlistRepository = getRepository(this); + const watchlist = await watchlistRepository.findOneBy({ + tmdbId, + requestedBy: { id: user.id }, + }); + if (!watchlist) { + throw new NotFoundError('not Found'); + } + + if (watchlist) { + await watchlistRepository.delete(watchlist.id); + } + + return watchlist; + } +} diff --git a/server/lib/watchlistsync.ts b/server/lib/watchlistsync.ts index 46147f3f..b4a07297 100644 --- a/server/lib/watchlistsync.ts +++ b/server/lib/watchlistsync.ts @@ -65,6 +65,7 @@ class WatchlistSync { const response = await plexTvApi.getWatchlist({ size: 200 }); const mediaItems = await Media.getRelatedMedia( + user, response.items.map((i) => i.tmdbId) ); diff --git a/server/migration/1682608634546-AddWatchlists.ts b/server/migration/1682608634546-AddWatchlists.ts new file mode 100644 index 00000000..492fb183 --- /dev/null +++ b/server/migration/1682608634546-AddWatchlists.ts @@ -0,0 +1,19 @@ +import type { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddWatchlists1682608634546 implements MigrationInterface { + name = 'AddWatchlists1682608634546'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "watchlist" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ratingKey" varchar NOT NULL, "mediaType" varchar NOT NULL, "title" varchar NOT NULL, "tmdbId" integer NOT NULL, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "updatedAt" datetime NOT NULL DEFAULT (datetime('now')), "requestedById" integer, "mediaId" integer, CONSTRAINT "UNIQUE_USER_DB" UNIQUE ("tmdbId", "requestedById"))` + ); + await queryRunner.query( + `CREATE INDEX "IDX_939f205946256cc0d2a1ac51a8" ON "watchlist" ("tmdbId") ` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`DROP INDEX "IDX_939f205946256cc0d2a1ac51a8"`); + await queryRunner.query(`DROP TABLE "watchlist"`); + } +} diff --git a/server/repositories/watchlist.repository.ts b/server/repositories/watchlist.repository.ts new file mode 100644 index 00000000..128e64f5 --- /dev/null +++ b/server/repositories/watchlist.repository.ts @@ -0,0 +1,11 @@ +import { getRepository } from '@server/datasource'; +import { Watchlist } from '@server/entity/Watchlist'; + +export const UserRepository = getRepository(Watchlist).extend({ + // findByName(firstName: string, lastName: string) { + // return this.createQueryBuilder("user") + // .where("user.firstName = :firstName", { firstName }) + // .andWhere("user.lastName = :lastName", { lastName }) + // .getMany() + // }, +}); diff --git a/server/routes/collection.ts b/server/routes/collection.ts index d58b0357..cc2a36e7 100644 --- a/server/routes/collection.ts +++ b/server/routes/collection.ts @@ -16,6 +16,7 @@ collectionRoutes.get<{ id: string }>('/:id', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, collection.parts.map((part) => part.id) ); diff --git a/server/routes/discover.ts b/server/routes/discover.ts index f032fa66..640572f0 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -6,6 +6,7 @@ import { MediaType } from '@server/constants/media'; import { getRepository } from '@server/datasource'; import Media from '@server/entity/Media'; import { User } from '@server/entity/User'; +import { Watchlist } from '@server/entity/Watchlist'; import type { GenreSliderItem, WatchlistResponse, @@ -100,6 +101,7 @@ discoverRoutes.get('/movies', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -164,6 +166,7 @@ discoverRoutes.get<{ language: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -221,6 +224,7 @@ discoverRoutes.get<{ genreId: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -268,6 +272,7 @@ discoverRoutes.get<{ studioId: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -317,6 +322,7 @@ discoverRoutes.get('/movies/upcoming', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -375,6 +381,7 @@ discoverRoutes.get('/tv', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -438,6 +445,7 @@ discoverRoutes.get<{ language: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -495,6 +503,7 @@ discoverRoutes.get<{ genreId: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -542,6 +551,7 @@ discoverRoutes.get<{ networkId: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -591,6 +601,7 @@ discoverRoutes.get('/tv/upcoming', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -629,6 +640,7 @@ discoverRoutes.get('/trending', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -681,6 +693,7 @@ discoverRoutes.get<{ keywordId: string }>( }); const media = await Media.getRelatedMedia( + req.user, data.results.map((result) => result.id) ); @@ -813,6 +826,25 @@ discoverRoutes.get, WatchlistResponse>( select: ['id', 'plexToken'], }); + if (activeUser) { + const [result, total] = await getRepository(Watchlist).findAndCount({ + where: { requestedBy: { id: activeUser?.id } }, + relations: { + /*requestedBy: true,media:true*/ + }, + // loadRelationIds: true, + take: itemsPerPage, + skip: offset, + }); + if (total) { + return res.json({ + page: page, + totalPages: total / itemsPerPage, + totalResults: total, + results: result, + }); + } + } if (!activeUser?.plexToken) { // We will just return an empty array if the user has no Plex token return res.json({ diff --git a/server/routes/index.ts b/server/routes/index.ts index f76f09fa..552ca78d 100644 --- a/server/routes/index.ts +++ b/server/routes/index.ts @@ -15,6 +15,7 @@ import { mapWatchProviderDetails } from '@server/models/common'; import { mapProductionCompany } from '@server/models/Movie'; import { mapNetwork } from '@server/models/Tv'; import settingsRoutes from '@server/routes/settings'; +import watchlistRoutes from '@server/routes/watchlist'; import { appDataPath, appDataStatus } from '@server/utils/appDataVolume'; import { getAppVersion, getCommitTag } from '@server/utils/appVersion'; import restartFlag from '@server/utils/restartFlag'; @@ -116,6 +117,7 @@ router.use('/settings', isAuthenticated(Permission.ADMIN), settingsRoutes); router.use('/search', isAuthenticated(), searchRoutes); router.use('/discover', isAuthenticated(), discoverRoutes); router.use('/request', isAuthenticated(), requestRoutes); +router.use('/watchlist', isAuthenticated(), watchlistRoutes); router.use('/movie', isAuthenticated(), movieRoutes); router.use('/tv', isAuthenticated(), tvRoutes); router.use('/media', isAuthenticated(), mediaRoutes); diff --git a/server/routes/movie.ts b/server/routes/movie.ts index f11cead8..8d609262 100644 --- a/server/routes/movie.ts +++ b/server/routes/movie.ts @@ -45,6 +45,7 @@ movieRoutes.get('/:id/recommendations', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, results.results.map((result) => result.id) ); @@ -86,6 +87,7 @@ movieRoutes.get('/:id/similar', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, results.results.map((result) => result.id) ); diff --git a/server/routes/person.ts b/server/routes/person.ts index 7f5d6223..d5cb8986 100644 --- a/server/routes/person.ts +++ b/server/routes/person.ts @@ -42,10 +42,12 @@ personRoutes.get('/:id/combined_credits', async (req, res, next) => { }); const castMedia = await Media.getRelatedMedia( + req.user, combinedCredits.cast.map((result) => result.id) ); const crewMedia = await Media.getRelatedMedia( + req.user, combinedCredits.crew.map((result) => result.id) ); diff --git a/server/routes/search.ts b/server/routes/search.ts index b9254221..0de090ca 100644 --- a/server/routes/search.ts +++ b/server/routes/search.ts @@ -34,6 +34,7 @@ searchRoutes.get('/', async (req, res, next) => { } const media = await Media.getRelatedMedia( + req.user, results.results.map((result) => result.id) ); diff --git a/server/routes/tv.ts b/server/routes/tv.ts index d45e4062..1d2b4dee 100644 --- a/server/routes/tv.ts +++ b/server/routes/tv.ts @@ -69,6 +69,7 @@ tvRoutes.get('/:id/recommendations', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, results.results.map((result) => result.id) ); @@ -109,6 +110,7 @@ tvRoutes.get('/:id/similar', async (req, res, next) => { }); const media = await Media.getRelatedMedia( + req.user, results.results.map((result) => result.id) ); diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index 55a912f3..ada7df39 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -8,6 +8,7 @@ import Media from '@server/entity/Media'; import { MediaRequest } from '@server/entity/MediaRequest'; import { User } from '@server/entity/User'; import { UserPushSubscription } from '@server/entity/UserPushSubscription'; +import { Watchlist } from '@server/entity/Watchlist'; import type { WatchlistResponse } from '@server/interfaces/api/discoverInterfaces'; import type { QuotaResponse, @@ -699,8 +700,7 @@ router.get<{ id: string }, WatchlistResponse>( ) { return next({ status: 403, - message: - "You do not have permission to view this user's Plex Watchlist.", + message: "You do not have permission to view this user's Watchlist.", }); } @@ -714,6 +714,24 @@ router.get<{ id: string }, WatchlistResponse>( }); if (!user?.plexToken) { + if (user) { + const [result, total] = await getRepository(Watchlist).findAndCount({ + where: { requestedBy: { id: user?.id } }, + relations: { requestedBy: true }, + // loadRelationIds: true, + take: itemsPerPage, + skip: offset, + }); + if (total) { + return res.json({ + page: page, + totalPages: total / itemsPerPage, + totalResults: total, + results: result, + }); + } + } + // We will just return an empty array if the user has no Plex token return res.json({ page: 1, diff --git a/server/routes/watchlist.ts b/server/routes/watchlist.ts new file mode 100644 index 00000000..cbf165e2 --- /dev/null +++ b/server/routes/watchlist.ts @@ -0,0 +1,65 @@ +import { + DuplicateWatchlistRequestError, + NotFoundError, + Watchlist, +} from '@server/entity/Watchlist'; +import logger from '@server/logger'; +import { Router } from 'express'; +import { QueryFailedError } from 'typeorm'; + +const watchlistRoutes = Router(); + +watchlistRoutes.post( + '/', + async (req, res, next) => { + try { + if (!req.user) { + return next({ + status: 401, + message: 'You must be logged in to add watchlist.', + }); + } + const request = await Watchlist.createWatchlist(req.body, req.user); + return res.status(201).json(request); + } catch (error) { + if (!(error instanceof Error)) { + return; + } + switch (error.constructor) { + case QueryFailedError: + logger.warn('Something wrong with data watchlist', { + ...req.body, + label: 'Watchlist', + }); + return next({ status: 409, message: 'Something wrong' }); + case DuplicateWatchlistRequestError: + return next({ status: 409, message: error.message }); + default: + return next({ status: 500, message: error.message }); + } + } + } +); + +watchlistRoutes.delete('/:tmdbId', async (req, res, next) => { + if (!req.user) { + return next({ + status: 401, + message: 'You must be logged in to delete watchlist data.', + }); + } + try { + await Watchlist.deleteWatchlist(Number(req.params.tmdbId), req.user); + return res.status(204).send(); + } catch (e) { + if (e instanceof NotFoundError) { + return next({ + status: 401, + message: e.message, + }); + } + return next({ status: 500, message: e.message }); + } +}); + +export default watchlistRoutes; diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index 34b379e2..4b3b0fe4 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -338,6 +338,7 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { Plex Watchlist will appear here.', }); @@ -22,12 +22,11 @@ const PlexWatchlistSlider = () => { totalPages: number; totalResults: number; results: WatchlistItem[]; - }>(user?.userType === UserType.PLEX ? '/api/v1/discover/watchlist' : null, { + }>('/api/v1/discover/watchlist', { revalidateOnMount: true, }); if ( - user?.userType !== UserType.PLEX || (watchlistItems && watchlistItems.results.length === 0 && !user?.settings?.watchlistSyncMovies && @@ -69,6 +68,7 @@ const PlexWatchlistSlider = () => { key={`watchlist-slider-item-${item.ratingKey}`} tmdbId={item.tmdbId} type={item.mediaType} + isAddedToWatchlist={true} /> ))} /> diff --git a/src/components/Discover/constants.ts b/src/components/Discover/constants.ts index 6fcbe43c..c58eba7f 100644 --- a/src/components/Discover/constants.ts +++ b/src/components/Discover/constants.ts @@ -74,7 +74,7 @@ export const sliderTitles = defineMessages({ recentlyAdded: 'Recently Added', upcoming: 'Upcoming Movies', trending: 'Trending', - plexwatchlist: 'Your Plex Watchlist', + plexwatchlist: 'Your Watchlist', moviegenres: 'Movie Genres', tvgenres: 'Series Genres', studios: 'Studios', diff --git a/src/components/MediaSlider/index.tsx b/src/components/MediaSlider/index.tsx index 54b5cc80..4ca34d8f 100644 --- a/src/components/MediaSlider/index.tsx +++ b/src/components/MediaSlider/index.tsx @@ -95,7 +95,9 @@ const MediaSlider = ({ case 'movie': return ( { return (
  • { return (
  • { @@ -23,6 +24,7 @@ const TmdbTitleCard = ({ tvdbId, type, canExpand, + isAddedToWatchlist = false, }: TmdbTitleCardProps) => { const { hasPermission } = useUser(); @@ -56,7 +58,11 @@ const TmdbTitleCard = ({ return isMovie(title) ? ( ) : ( {title} added to watchlist successfully!', + watchlistDeleted: + '{title} Removed from watchlist successfully!', + watchlistCancel: 'watchlist for {title} canceled.', + watchlistError: 'Something went wrong try again.', +}); + const TitleCard = ({ id, image, @@ -38,6 +58,7 @@ const TitleCard = ({ title, status, mediaType, + isAddedToWatchlist = false, inProgress = false, canExpand = false, }: TitleCardProps) => { @@ -48,6 +69,10 @@ const TitleCard = ({ const [currentStatus, setCurrentStatus] = useState(status); const [showDetail, setShowDetail] = useState(false); const [showRequestModal, setShowRequestModal] = useState(false); + const { addToast } = useToasts(); + const [toggleWatchlist, setToggleWatchlist] = useState( + !isAddedToWatchlist + ); // Just to get the year from the date if (year) { @@ -68,6 +93,65 @@ const TitleCard = ({ [] ); + const onClickWatchlistBtn = async (): Promise => { + setIsUpdating(true); + try { + const response = await axios.post('/api/v1/watchlist', { + tmdbId: id, + mediaType, + title, + }); + mutate('/api/v1/discover/watchlist'); + if (response.data) { + addToast( + + {intl.formatMessage(messages.watchlistSuccess, { + title, + strong: (msg: React.ReactNode) => {msg}, + })} + , + { appearance: 'success', autoDismiss: true } + ); + } + } catch (e) { + addToast(intl.formatMessage(messages.watchlistError), { + appearance: 'error', + autoDismiss: true, + }); + } finally { + setIsUpdating(false); + setToggleWatchlist((prevState) => !prevState); + } + }; + + const onClickDeleteWatchlistBtn = async (): Promise => { + setIsUpdating(true); + try { + const response = await axios.delete('/api/v1/watchlist/' + id); + + if (response.status === 204) { + addToast( + + {intl.formatMessage(messages.watchlistDeleted, { + title, + strong: (msg: React.ReactNode) => {msg}, + })} + , + { appearance: 'info', autoDismiss: true } + ); + } + } catch (e) { + addToast(intl.formatMessage(messages.watchlistError), { + appearance: 'error', + autoDismiss: true, + }); + } finally { + setIsUpdating(false); + mutate('/api/v1/discover/watchlist'); + setToggleWatchlist((prevState) => !prevState); + } + }; + const closeModal = useCallback(() => setShowRequestModal(false), []); const showRequestButton = hasPermission( @@ -141,6 +225,28 @@ const TitleCard = ({ : intl.formatMessage(globalMessages.tvshow)}
  • + {showDetail && ( + <> + {toggleWatchlist ? ( + + ) : ( + + )} + + )} {currentStatus && currentStatus !== MediaStatus.UNKNOWN && (
    Plex Watchlist will appear here.", "components.Discover.noRequests": "No requests.", - "components.Discover.plexwatchlist": "Your Plex Watchlist", + "components.Discover.plexwatchlist": "Your Watchlist", "components.Discover.popularmovies": "Popular Movies", "components.Discover.populartv": "Popular Series", "components.Discover.recentlyAdded": "Recently Added", @@ -210,7 +210,7 @@ "components.NotificationTypeSelector.mediaapproved": "Request Approved", "components.NotificationTypeSelector.mediaapprovedDescription": "Send notifications when media requests are manually approved.", "components.NotificationTypeSelector.mediaautorequested": "Request Automatically Submitted", - "components.NotificationTypeSelector.mediaautorequestedDescription": "Get notified when new media requests are automatically submitted for items on your Plex Watchlist.", + "components.NotificationTypeSelector.mediaautorequestedDescription": "Get notified when new media requests are automatically submitted for items on Your Watchlist.", "components.NotificationTypeSelector.mediaavailable": "Request Available", "components.NotificationTypeSelector.mediaavailableDescription": "Send notifications when media requests become available.", "components.NotificationTypeSelector.mediadeclined": "Request Declined", diff --git a/src/i18n/locale/ua.json b/src/i18n/locale/ua.json index af02cc6d..9963798e 100644 --- a/src/i18n/locale/ua.json +++ b/src/i18n/locale/ua.json @@ -12,7 +12,7 @@ "components.Discover.DiscoverStudio.studioMovies": "Фільми {studio}", "components.Discover.DiscoverTvGenre.genreSeries": "Серіали в жанрі \"{genre}\"", "components.Discover.DiscoverTvLanguage.languageSeries": "Серіали мовою \"{language}\"", - "components.Discover.DiscoverWatchlist.discoverwatchlist": "Your Plex Watchlist", + "components.Discover.DiscoverWatchlist.discoverwatchlist": "Your Watchlist", "components.Discover.DiscoverWatchlist.watchlist": "Список спостереження Plex", "components.Discover.MovieGenreList.moviegenres": "Фільми за жанрами", "components.Discover.MovieGenreSlider.moviegenres": "Фільми за жанрами", From b7e3d285ed35b623062eceb0d99035cafbf075a6 Mon Sep 17 00:00:00 2001 From: Yalagin Date: Thu, 27 Apr 2023 22:46:46 +0700 Subject: [PATCH 06/49] feat(watchlist): add translation for en --- src/i18n/locale/en.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 27621442..b9bab2e4 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -1080,6 +1080,11 @@ "components.UserProfile.seriesrequest": "Series Requests", "components.UserProfile.totalrequests": "Total Requests", "components.UserProfile.unlimited": "Unlimited", + "components.TitleCard.addToWatchList": "Add to watchlist", + "components.TitleCard.watchlistCancel": "watchlist for {title} canceled.", + "components.TitleCard.watchlistDeleted": "{title} Removed from watchlist successfully!", + "components.TitleCard.watchlistError": "Something went wrong try again.", + "components.TitleCard.watchlistSuccess": "{title} added to watchlist successfully!", "i18n.advanced": "Advanced", "i18n.all": "All", "i18n.approve": "Approve", From 469f64d484f3ccb55da2dce18cc48b3737ef0820 Mon Sep 17 00:00:00 2001 From: Yalagin Date: Tue, 2 May 2023 21:13:18 +0700 Subject: [PATCH 07/49] test(watchlist): fix broken test --- cypress/e2e/discover.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/discover.cy.ts b/cypress/e2e/discover.cy.ts index 7f2f965b..50dacde1 100644 --- a/cypress/e2e/discover.cy.ts +++ b/cypress/e2e/discover.cy.ts @@ -203,7 +203,7 @@ describe('Discover', () => { .find('[data-testid=title-card-title]') .invoke('text') .then((text) => { - cy.contains('.slider-header', 'Plex Watchlist') + cy.contains('.slider-header', 'Watchlist') .next('[data-testid=media-slider]') .find('[data-testid=title-card]') .first() From c08897bdc1cff65862c62347572bbbd01b6c36ac Mon Sep 17 00:00:00 2001 From: Yalagin Date: Thu, 4 May 2023 22:36:36 +0700 Subject: [PATCH 08/49] fix(watchlist): fix github code scanning --- server/routes/watchlist.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/routes/watchlist.ts b/server/routes/watchlist.ts index cbf165e2..b8ca0b90 100644 --- a/server/routes/watchlist.ts +++ b/server/routes/watchlist.ts @@ -28,7 +28,8 @@ watchlistRoutes.post( switch (error.constructor) { case QueryFailedError: logger.warn('Something wrong with data watchlist', { - ...req.body, + tmdbId: req.body.tmdbId, + mediaType: req.body.mediaType, label: 'Watchlist', }); return next({ status: 409, message: 'Something wrong' }); From 77a33cb74d744bb747b791785799b632af8c7862 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Thu, 4 May 2023 14:08:22 -0400 Subject: [PATCH 09/49] fix(ui): corrected mobile menu spacing in collection details (#3432) --- src/components/CollectionDetails/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/CollectionDetails/index.tsx b/src/components/CollectionDetails/index.tsx index 34b379e2..ff22ee10 100644 --- a/src/components/CollectionDetails/index.tsx +++ b/src/components/CollectionDetails/index.tsx @@ -348,7 +348,7 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => { /> ))} /> -
    +
    ); }; From 7522aa31743b169c903ebdf9d4d698645d27514c Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Wed, 10 May 2023 20:36:12 -0400 Subject: [PATCH 10/49] fix: availability sync file detection (#3371) * fix: added extra check for unmonitored movies in radarr * feat: created new radarr/sonarr routes to grab existing series data * refactor: updated job routes to check by external service id * fix: season check will now also look at episode file count --- server/api/servarr/sonarr.ts | 19 ++ server/lib/availabilitySync.ts | 560 +++++++++++++++++++-------------- 2 files changed, 335 insertions(+), 244 deletions(-) diff --git a/server/api/servarr/sonarr.ts b/server/api/servarr/sonarr.ts index 2e423ef3..6cda2a49 100644 --- a/server/api/servarr/sonarr.ts +++ b/server/api/servarr/sonarr.ts @@ -76,6 +76,15 @@ export interface SonarrSeries { ignoreEpisodesWithoutFiles?: boolean; searchForMissingEpisodes?: boolean; }; + statistics: { + seasonCount: number; + episodeFileCount: number; + episodeCount: number; + totalEpisodeCount: number; + sizeOnDisk: number; + releaseGroups: string[]; + percentOfEpisodes: number; + }; } export interface AddSeriesOptions { @@ -116,6 +125,16 @@ class SonarrAPI extends ServarrBase<{ } } + public async getSeriesById(id: number): Promise { + try { + const response = await this.axios.get(`/series/${id}`); + + return response.data; + } catch (e) { + throw new Error(`[Sonarr] Failed to retrieve series by ID: ${e.message}`); + } + } + public async getSeriesByTitle(title: string): Promise { try { const response = await this.axios.get('/series/lookup', { diff --git a/server/lib/availabilitySync.ts b/server/lib/availabilitySync.ts index 93ccfe39..a9f61fff 100644 --- a/server/lib/availabilitySync.ts +++ b/server/lib/availabilitySync.ts @@ -1,7 +1,8 @@ import type { PlexMetadata } from '@server/api/plexapi'; import PlexAPI from '@server/api/plexapi'; +import type { RadarrMovie } from '@server/api/servarr/radarr'; import RadarrAPI from '@server/api/servarr/radarr'; -import type { SonarrSeason } from '@server/api/servarr/sonarr'; +import type { SonarrSeason, SonarrSeries } from '@server/api/servarr/sonarr'; import SonarrAPI from '@server/api/servarr/sonarr'; import { MediaStatus } from '@server/constants/media'; import { getRepository } from '@server/datasource'; @@ -47,158 +48,150 @@ class AvailabilitySync { try { for await (const media of this.loadAvailableMediaPaginated(pageSize)) { - try { - if (!this.running) { - throw new Error('Job aborted'); - } + if (!this.running) { + throw new Error('Job aborted'); + } - const mediaExists = await this.mediaExists(media); + const mediaExists = await this.mediaExists(media); - //We can not delete media so if both versions do not exist, we will change both columns to unknown or null - if (!mediaExists) { - if ( - media.status !== MediaStatus.UNKNOWN || - media.status4k !== MediaStatus.UNKNOWN - ) { - const request = await requestRepository.find({ - relations: { - media: true, - }, - where: { media: { id: media.id } }, - }); - - logger.info( - `${ - media.mediaType === 'tv' ? media.tvdbId : media.tmdbId - } does not exist in any of your media instances. We will change its status to unknown.`, - { label: 'AvailabilitySync' } - ); - - await mediaRepository.update(media.id, { - status: MediaStatus.UNKNOWN, - status4k: MediaStatus.UNKNOWN, - serviceId: null, - serviceId4k: null, - externalServiceId: null, - externalServiceId4k: null, - externalServiceSlug: null, - externalServiceSlug4k: null, - ratingKey: null, - ratingKey4k: null, - }); - - await requestRepository.remove(request); - } - } - - if (media.mediaType === 'tv') { - // ok, the show itself exists, but do all it's seasons? - const seasons = await seasonRepository.find({ - where: [ - { status: MediaStatus.AVAILABLE, media: { id: media.id } }, - { - status: MediaStatus.PARTIALLY_AVAILABLE, - media: { id: media.id }, - }, - { status4k: MediaStatus.AVAILABLE, media: { id: media.id } }, - { - status4k: MediaStatus.PARTIALLY_AVAILABLE, - media: { id: media.id }, - }, - ], + // We can not delete media so if both versions do not exist, we will change both columns to unknown or null + if (!mediaExists) { + if ( + media.status !== MediaStatus.UNKNOWN || + media.status4k !== MediaStatus.UNKNOWN + ) { + const request = await requestRepository.find({ + relations: { + media: true, + }, + where: { media: { id: media.id } }, }); - let didDeleteSeasons = false; - for (const season of seasons) { - if ( - !mediaExists && - (season.status !== MediaStatus.UNKNOWN || - season.status4k !== MediaStatus.UNKNOWN) - ) { - await seasonRepository.update( - { id: season.id }, + logger.info( + `Media ID ${media.id} does not exist in any of your media instances. Status will be changed to unknown.`, + { label: 'AvailabilitySync' } + ); + + await mediaRepository.update(media.id, { + status: MediaStatus.UNKNOWN, + status4k: MediaStatus.UNKNOWN, + serviceId: null, + serviceId4k: null, + externalServiceId: null, + externalServiceId4k: null, + externalServiceSlug: null, + externalServiceSlug4k: null, + ratingKey: null, + ratingKey4k: null, + }); + + await requestRepository.remove(request); + } + } + + if (media.mediaType === 'tv') { + // ok, the show itself exists, but do all it's seasons? + const seasons = await seasonRepository.find({ + where: [ + { status: MediaStatus.AVAILABLE, media: { id: media.id } }, + { + status: MediaStatus.PARTIALLY_AVAILABLE, + media: { id: media.id }, + }, + { status4k: MediaStatus.AVAILABLE, media: { id: media.id } }, + { + status4k: MediaStatus.PARTIALLY_AVAILABLE, + media: { id: media.id }, + }, + ], + }); + + let didDeleteSeasons = false; + for (const season of seasons) { + if ( + !mediaExists && + (season.status !== MediaStatus.UNKNOWN || + season.status4k !== MediaStatus.UNKNOWN) + ) { + await seasonRepository.update( + { id: season.id }, + { + status: MediaStatus.UNKNOWN, + status4k: MediaStatus.UNKNOWN, + } + ); + } else { + const seasonExists = await this.seasonExists(media, season); + + if (!seasonExists) { + logger.info( + `Removing season ${season.seasonNumber}, media ID ${media.id} because it does not exist in any of your media instances.`, + { label: 'AvailabilitySync' } + ); + + if ( + season.status !== MediaStatus.UNKNOWN || + season.status4k !== MediaStatus.UNKNOWN + ) { + await seasonRepository.update( + { id: season.id }, + { + status: MediaStatus.UNKNOWN, + status4k: MediaStatus.UNKNOWN, + } + ); + } + + const seasonToBeDeleted = await seasonRequestRepository.findOne( { - status: MediaStatus.UNKNOWN, - status4k: MediaStatus.UNKNOWN, + relations: { + request: { + media: true, + }, + }, + where: { + request: { + media: { + id: media.id, + }, + }, + seasonNumber: season.seasonNumber, + }, } ); - } else { - const seasonExists = await this.seasonExists(media, season); - if (!seasonExists) { - logger.info( - `Removing season ${season.seasonNumber}, media id: ${media.tvdbId} because it does not exist in any of your media instances.`, - { label: 'AvailabilitySync' } - ); - - if ( - season.status !== MediaStatus.UNKNOWN || - season.status4k !== MediaStatus.UNKNOWN - ) { - await seasonRepository.update( - { id: season.id }, - { - status: MediaStatus.UNKNOWN, - status4k: MediaStatus.UNKNOWN, - } - ); - } - - const seasonToBeDeleted = - await seasonRequestRepository.findOne({ - relations: { - request: { - media: true, - }, - }, - where: { - request: { - media: { - id: media.id, - }, - }, - seasonNumber: season.seasonNumber, - }, - }); - - if (seasonToBeDeleted) { - await seasonRequestRepository.remove(seasonToBeDeleted); - } - - didDeleteSeasons = true; + if (seasonToBeDeleted) { + await seasonRequestRepository.remove(seasonToBeDeleted); } + + didDeleteSeasons = true; } + } - if (didDeleteSeasons) { - if ( - media.status === MediaStatus.AVAILABLE || - media.status4k === MediaStatus.AVAILABLE - ) { - logger.info( - `Marking media id: ${media.tvdbId} as PARTIALLY_AVAILABLE because we deleted some of its seasons.`, - { label: 'AvailabilitySync' } - ); + if (didDeleteSeasons) { + if ( + media.status === MediaStatus.AVAILABLE || + media.status4k === MediaStatus.AVAILABLE + ) { + logger.info( + `Marking media ID ${media.id} as PARTIALLY_AVAILABLE because season removal has occurred.`, + { label: 'AvailabilitySync' } + ); - if (media.status === MediaStatus.AVAILABLE) { - await mediaRepository.update(media.id, { - status: MediaStatus.PARTIALLY_AVAILABLE, - }); - } + if (media.status === MediaStatus.AVAILABLE) { + await mediaRepository.update(media.id, { + status: MediaStatus.PARTIALLY_AVAILABLE, + }); + } - if (media.status4k === MediaStatus.AVAILABLE) { - await mediaRepository.update(media.id, { - status4k: MediaStatus.PARTIALLY_AVAILABLE, - }); - } + if (media.status4k === MediaStatus.AVAILABLE) { + await mediaRepository.update(media.id, { + status4k: MediaStatus.PARTIALLY_AVAILABLE, + }); } } } } - } catch (ex) { - logger.error('Failure with media.', { - errorMessage: ex.message, - label: 'AvailabilitySync', - }); } } } catch (ex) { @@ -254,9 +247,9 @@ class AvailabilitySync { }); logger.info( - `${media.tmdbId} does not exist in your ${is4k ? '4k' : 'non-4k'} ${ - isTVType ? 'sonarr' : 'radarr' - } and plex instance. We will change its status to unknown.`, + `Media ID ${media.id} does not exist in your ${is4k ? '4k' : 'non-4k'} ${ + isTVType ? 'Sonarr' : 'Radarr' + } and Plex instance. Status will be changed to unknown.`, { label: 'AvailabilitySync' } ); @@ -306,46 +299,70 @@ class AvailabilitySync { apiKey: server.apiKey, url: RadarrAPI.buildUrl(server, '/api/v3'), }); - const meta = await api.getMovieByTmdbId(media.tmdbId); + try { + // Check if both exist or if a single non-4k or 4k exists + // If both do not exist we will return false - //check if both exist or if a single non-4k or 4k exists - //if both do not exist we will return false - if (!server.is4k && !meta.id) { - existsInRadarr = false; - } + let meta: RadarrMovie | undefined; - if (server.is4k && !meta.id) { - existsInRadarr4k = false; + if (!server.is4k && media.externalServiceId) { + meta = await api.getMovie({ id: media.externalServiceId }); + } + + if (server.is4k && media.externalServiceId4k) { + meta = await api.getMovie({ id: media.externalServiceId4k }); + } + + if (!server.is4k && (!meta || !meta.hasFile)) { + existsInRadarr = false; + } + + if (server.is4k && (!meta || !meta.hasFile)) { + existsInRadarr4k = false; + } + } catch (ex) { + logger.debug( + `Failure retrieving media ID ${media.id} from your ${ + !server.is4k ? 'non-4K' : '4K' + } Radarr.`, + { + errorMessage: ex.message, + label: 'AvailabilitySync', + } + ); + if (!server.is4k) { + existsInRadarr = false; + } + + if (server.is4k) { + existsInRadarr4k = false; + } } } - if (existsInRadarr && existsInRadarr4k) { - return true; - } - - if (!existsInRadarr && existsInPlex) { - return true; - } - - if (!existsInRadarr4k && existsInPlex4k) { - return true; - } - - //if only a single non-4k or 4k exists, then change entity columns accordingly - //related media request will then be deleted - if (!existsInRadarr && existsInRadarr4k && !existsInPlex) { + // If only a single non-4k or 4k exists, then change entity columns accordingly + // Related media request will then be deleted + if ( + !existsInRadarr && + (existsInRadarr4k || existsInPlex4k) && + !existsInPlex + ) { if (media.status !== MediaStatus.UNKNOWN) { this.mediaUpdater(media, false); } } - if (existsInRadarr && !existsInRadarr4k && !existsInPlex4k) { + if ( + (existsInRadarr || existsInPlex) && + !existsInRadarr4k && + !existsInPlex4k + ) { if (media.status4k !== MediaStatus.UNKNOWN) { this.mediaUpdater(media, true); } } - if (existsInRadarr || existsInRadarr4k) { + if (existsInRadarr || existsInRadarr4k || existsInPlex || existsInPlex4k) { return true; } @@ -357,10 +374,6 @@ class AvailabilitySync { existsInPlex: boolean, existsInPlex4k: boolean ): Promise { - if (!media.tvdbId) { - return false; - } - let existsInSonarr = true; let existsInSonarr4k = true; @@ -369,49 +382,75 @@ class AvailabilitySync { apiKey: server.apiKey, url: SonarrAPI.buildUrl(server, '/api/v3'), }); + try { + // Check if both exist or if a single non-4k or 4k exists + // If both do not exist we will return false - const meta = await api.getSeriesByTvdbId(media.tvdbId); + let meta: SonarrSeries | undefined; - this.sonarrSeasonsCache[`${server.id}-${media.tvdbId}`] = meta.seasons; + if (!server.is4k && media.externalServiceId) { + meta = await api.getSeriesById(media.externalServiceId); + this.sonarrSeasonsCache[`${server.id}-${media.externalServiceId}`] = + meta.seasons; + } - //check if both exist or if a single non-4k or 4k exists - //if both do not exist we will return false - if (!server.is4k && !meta.id) { - existsInSonarr = false; - } + if (server.is4k && media.externalServiceId4k) { + meta = await api.getSeriesById(media.externalServiceId4k); + this.sonarrSeasonsCache[`${server.id}-${media.externalServiceId4k}`] = + meta.seasons; + } - if (server.is4k && !meta.id) { - existsInSonarr4k = false; + if (!server.is4k && (!meta || meta.statistics.episodeFileCount === 0)) { + existsInSonarr = false; + } + + if (server.is4k && (!meta || meta.statistics.episodeFileCount === 0)) { + existsInSonarr4k = false; + } + } catch (ex) { + logger.debug( + `Failure retrieving media ID ${media.id} from your ${ + !server.is4k ? 'non-4K' : '4K' + } Sonarr.`, + { + errorMessage: ex.message, + label: 'AvailabilitySync', + } + ); + + if (!server.is4k) { + existsInSonarr = false; + } + + if (server.is4k) { + existsInSonarr4k = false; + } } } - if (existsInSonarr && existsInSonarr4k) { - return true; - } - - if (!existsInSonarr && existsInPlex) { - return true; - } - - if (!existsInSonarr4k && existsInPlex4k) { - return true; - } - - //if only a single non-4k or 4k exists, then change entity columns accordingly - //related media request will then be deleted - if (!existsInSonarr && existsInSonarr4k && !existsInPlex) { + // If only a single non-4k or 4k exists, then change entity columns accordingly + // Related media request will then be deleted + if ( + !existsInSonarr && + (existsInSonarr4k || existsInPlex4k) && + !existsInPlex + ) { if (media.status !== MediaStatus.UNKNOWN) { this.mediaUpdater(media, false); } } - if (existsInSonarr && !existsInSonarr4k && !existsInPlex4k) { + if ( + (existsInSonarr || existsInPlex) && + !existsInSonarr4k && + !existsInPlex4k + ) { if (media.status4k !== MediaStatus.UNKNOWN) { this.mediaUpdater(media, true); } } - if (existsInSonarr || existsInSonarr4k) { + if (existsInSonarr || existsInSonarr4k || existsInPlex || existsInPlex4k) { return true; } @@ -424,10 +463,6 @@ class AvailabilitySync { seasonExistsInPlex: boolean, seasonExistsInPlex4k: boolean ): Promise { - if (!media.tvdbId) { - return false; - } - let seasonExistsInSonarr = true; let seasonExistsInSonarr4k = true; @@ -441,35 +476,67 @@ class AvailabilitySync { url: SonarrAPI.buildUrl(server, '/api/v3'), }); - const seasons = - this.sonarrSeasonsCache[`${server.id}-${media.tvdbId}`] ?? - (await api.getSeriesByTvdbId(media.tvdbId)).seasons; - this.sonarrSeasonsCache[`${server.id}-${media.tvdbId}`] = seasons; + try { + // Here we can use the cache we built when we fetched the series with mediaExistsInSonarr + // If the cache does not have data, we will fetch with the api route - const hasMonitoredSeason = seasons.find( - ({ monitored, seasonNumber }) => - monitored && season.seasonNumber === seasonNumber - ); + let seasons: SonarrSeason[] = + this.sonarrSeasonsCache[ + `${server.id}-${ + !server.is4k ? media.externalServiceId : media.externalServiceId4k + }` + ]; - if (!server.is4k && !hasMonitoredSeason) { - seasonExistsInSonarr = false; + if (!server.is4k && media.externalServiceId) { + seasons = + this.sonarrSeasonsCache[ + `${server.id}-${media.externalServiceId}` + ] ?? (await api.getSeriesById(media.externalServiceId)).seasons; + this.sonarrSeasonsCache[`${server.id}-${media.externalServiceId}`] = + seasons; + } + + if (server.is4k && media.externalServiceId4k) { + seasons = + this.sonarrSeasonsCache[ + `${server.id}-${media.externalServiceId4k}` + ] ?? (await api.getSeriesById(media.externalServiceId4k)).seasons; + this.sonarrSeasonsCache[`${server.id}-${media.externalServiceId4k}`] = + seasons; + } + + const seasonIsUnavailable = seasons?.find( + ({ seasonNumber, statistics }) => + season.seasonNumber === seasonNumber && + statistics?.episodeFileCount === 0 + ); + + if (!server.is4k && seasonIsUnavailable) { + seasonExistsInSonarr = false; + } + + if (server.is4k && seasonIsUnavailable) { + seasonExistsInSonarr4k = false; + } + } catch (ex) { + logger.debug( + `Failure retrieving media ID ${media.id} from your ${ + !server.is4k ? 'non-4K' : '4K' + } Sonarr.`, + { + errorMessage: ex.message, + label: 'AvailabilitySync', + } + ); + + if (!server.is4k) { + seasonExistsInSonarr = false; + } + + if (server.is4k) { + seasonExistsInSonarr4k = false; + } } - - if (server.is4k && !hasMonitoredSeason) { - seasonExistsInSonarr4k = false; - } - } - - if (seasonExistsInSonarr && seasonExistsInSonarr4k) { - return true; - } - - if (!seasonExistsInSonarr && seasonExistsInPlex) { - return true; - } - - if (!seasonExistsInSonarr4k && seasonExistsInPlex4k) { - return true; } const seasonToBeDeleted = await seasonRequestRepository.findOne({ @@ -489,16 +556,16 @@ class AvailabilitySync { }, }); - //if season does not exist, we will change status to unknown and delete related season request - //if parent media request is empty(all related seasons have been removed), parent is automatically deleted + // If season does not exist, we will change status to unknown and delete related season request + // If parent media request is empty(all related seasons have been removed), parent is automatically deleted if ( !seasonExistsInSonarr && - seasonExistsInSonarr4k && + (seasonExistsInSonarr4k || seasonExistsInPlex4k) && !seasonExistsInPlex ) { if (season.status !== MediaStatus.UNKNOWN) { logger.info( - `${media.tvdbId}, season: ${season.seasonNumber} does not exist in your non-4k sonarr and plex instance. We will change its status to unknown.`, + `Season ${season.seasonNumber}, media ID ${media.id} does not exist in your non-4k Sonarr and Plex instance. Status will be changed to unknown.`, { label: 'AvailabilitySync' } ); await seasonRepository.update(season.id, { @@ -511,7 +578,7 @@ class AvailabilitySync { if (media.status === MediaStatus.AVAILABLE) { logger.info( - `Marking media id: ${media.tvdbId} as PARTIALLY_AVAILABLE because we deleted one of its seasons.`, + `Marking media ID ${media.id} as PARTIALLY_AVAILABLE because season removal has occurred.`, { label: 'AvailabilitySync' } ); await mediaRepository.update(media.id, { @@ -522,13 +589,13 @@ class AvailabilitySync { } if ( - seasonExistsInSonarr && + (seasonExistsInSonarr || seasonExistsInPlex) && !seasonExistsInSonarr4k && !seasonExistsInPlex4k ) { if (season.status4k !== MediaStatus.UNKNOWN) { logger.info( - `${media.tvdbId}, season: ${season.seasonNumber} does not exist in your 4k sonarr and plex instance. We will change its status to unknown.`, + `Season ${season.seasonNumber}, media ID ${media.id} does not exist in your 4k Sonarr and Plex instance. Status will be changed to unknown.`, { label: 'AvailabilitySync' } ); await seasonRepository.update(season.id, { @@ -541,7 +608,7 @@ class AvailabilitySync { if (media.status4k === MediaStatus.AVAILABLE) { logger.info( - `Marking media id: ${media.tvdbId} as PARTIALLY_AVAILABLE because we deleted one of its seasons.`, + `Marking media ID ${media.id} as PARTIALLY_AVAILABLE because season removal has occurred.`, { label: 'AvailabilitySync' } ); await mediaRepository.update(media.id, { @@ -551,7 +618,12 @@ class AvailabilitySync { } } - if (seasonExistsInSonarr || seasonExistsInSonarr4k) { + if ( + seasonExistsInSonarr || + seasonExistsInSonarr4k || + seasonExistsInPlex || + seasonExistsInPlex4k + ) { return true; } @@ -565,7 +637,7 @@ class AvailabilitySync { let existsInPlex = false; let existsInPlex4k = false; - //check each plex instance to see if media exists + // Check each plex instance to see if media exists try { if (ratingKey) { const meta = await this.plexClient?.getMetadata(ratingKey); @@ -573,6 +645,7 @@ class AvailabilitySync { existsInPlex = true; } } + if (ratingKey4k) { const meta4k = await this.plexClient?.getMetadata(ratingKey4k); if (meta4k) { @@ -580,18 +653,17 @@ class AvailabilitySync { } } } catch (ex) { - // TODO: oof, not the nicest way of handling this, but plex-api does not leave us with any other options... if (!ex.message.includes('response code: 404')) { throw ex; } } - //base case for if both media versions exist in plex + // Base case if both media versions exist in plex if (existsInPlex && existsInPlex4k) { return true; } - //we then check radarr or sonarr has that specific media. If not, then we will move to delete - //if a non-4k or 4k version exists in at least one of the instances, we will only update that specific version + // We then check radarr or sonarr has that specific media. If not, then we will move to delete + // If a non-4k or 4k version exists in at least one of the instances, we will only update that specific version if (media.mediaType === 'movie') { const existsInRadarr = await this.mediaExistsInRadarr( media, @@ -599,10 +671,10 @@ class AvailabilitySync { existsInPlex4k ); - //if true, media exists in at least one radarr or plex instance. + // If true, media exists in at least one radarr or plex instance. if (existsInRadarr) { logger.warn( - `${media.tmdbId} exists in at least one radarr or plex instance. Media will be updated if set to available.`, + `${media.id} exists in at least one Radarr or Plex instance. Media will be updated if set to available.`, { label: 'AvailabilitySync', } @@ -619,10 +691,10 @@ class AvailabilitySync { existsInPlex4k ); - //if true, media exists in at least one sonarr or plex instance. + // If true, media exists in at least one sonarr or plex instance. if (existsInSonarr) { logger.warn( - `${media.tvdbId} exists in at least one sonarr or plex instance. Media will be updated if set to available.`, + `${media.id} exists in at least one Sonarr or Plex instance. Media will be updated if set to available.`, { label: 'AvailabilitySync', } @@ -672,7 +744,7 @@ class AvailabilitySync { } } - //base case for if both season versions exist in plex + // Base case if both season versions exist in plex if (seasonExistsInPlex && seasonExistsInPlex4k) { return true; } @@ -686,7 +758,7 @@ class AvailabilitySync { if (existsInSonarr) { logger.warn( - `${media.tvdbId}, season: ${season.seasonNumber} exists in at least one sonarr or plex instance. Media will be updated if set to available.`, + `Season ${season.seasonNumber}, media ID ${media.id} exists in at least one Sonarr or Plex instance. Media will be updated if set to available.`, { label: 'AvailabilitySync', } From 70b1540ae23e83e01013856a9e06ad39e600922d Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 11 May 2023 02:58:16 +0200 Subject: [PATCH 11/49] fix: handle search results with collections (#3393) * feat: handle search collection * Update server/utils/typeHelpers.ts Co-authored-by: Danshil Kokil Mungur * fix: modified title card to show collection instead of movies --------- Co-authored-by: Danshil Kokil Mungur Co-authored-by: Brandon --- server/api/themoviedb/interfaces.ts | 19 ++++++++++- server/models/Search.ts | 40 ++++++++++++++++++++++-- server/routes/discover.ts | 5 ++- server/utils/typeHelpers.ts | 23 ++++++++++++-- src/components/Common/ListView/index.tsx | 15 ++++++++- src/components/TitleCard/index.tsx | 28 ++++++++++++++--- src/i18n/globalMessages.ts | 1 + 7 files changed, 118 insertions(+), 13 deletions(-) diff --git a/server/api/themoviedb/interfaces.ts b/server/api/themoviedb/interfaces.ts index 955e1b12..775a8976 100644 --- a/server/api/themoviedb/interfaces.ts +++ b/server/api/themoviedb/interfaces.ts @@ -28,6 +28,18 @@ export interface TmdbTvResult extends TmdbMediaResult { first_air_date: string; } +export interface TmdbCollectionResult { + id: number; + media_type: 'collection'; + title: string; + original_title: string; + adult: boolean; + poster_path?: string; + backdrop_path?: string; + overview: string; + original_language: string; +} + export interface TmdbPersonResult { id: number; name: string; @@ -45,7 +57,12 @@ interface TmdbPaginatedResponse { } export interface TmdbSearchMultiResponse extends TmdbPaginatedResponse { - results: (TmdbMovieResult | TmdbTvResult | TmdbPersonResult)[]; + results: ( + | TmdbMovieResult + | TmdbTvResult + | TmdbPersonResult + | TmdbCollectionResult + )[]; } export interface TmdbSearchMovieResponse extends TmdbPaginatedResponse { diff --git a/server/models/Search.ts b/server/models/Search.ts index 6ab696fe..2193bbe1 100644 --- a/server/models/Search.ts +++ b/server/models/Search.ts @@ -1,4 +1,5 @@ import type { + TmdbCollectionResult, TmdbMovieDetails, TmdbMovieResult, TmdbPersonDetails, @@ -9,7 +10,7 @@ import type { import { MediaType as MainMediaType } from '@server/constants/media'; import type Media from '@server/entity/Media'; -export type MediaType = 'tv' | 'movie' | 'person'; +export type MediaType = 'tv' | 'movie' | 'person' | 'collection'; interface SearchResult { id: number; @@ -43,6 +44,18 @@ export interface TvResult extends SearchResult { firstAirDate: string; } +export interface CollectionResult { + id: number; + mediaType: 'collection'; + title: string; + originalTitle: string; + adult: boolean; + posterPath?: string; + backdropPath?: string; + overview: string; + originalLanguage: string; +} + export interface PersonResult { id: number; name: string; @@ -53,7 +66,7 @@ export interface PersonResult { knownFor: (MovieResult | TvResult)[]; } -export type Results = MovieResult | TvResult | PersonResult; +export type Results = MovieResult | TvResult | PersonResult | CollectionResult; export const mapMovieResult = ( movieResult: TmdbMovieResult, @@ -99,6 +112,20 @@ export const mapTvResult = ( mediaInfo: media, }); +export const mapCollectionResult = ( + collectionResult: TmdbCollectionResult +): CollectionResult => ({ + id: collectionResult.id, + mediaType: collectionResult.media_type || 'collection', + adult: collectionResult.adult, + originalLanguage: collectionResult.original_language, + originalTitle: collectionResult.original_title, + title: collectionResult.title, + overview: collectionResult.overview, + backdropPath: collectionResult.backdrop_path, + posterPath: collectionResult.poster_path, +}); + export const mapPersonResult = ( personResult: TmdbPersonResult ): PersonResult => ({ @@ -118,7 +145,12 @@ export const mapPersonResult = ( }); export const mapSearchResults = ( - results: (TmdbMovieResult | TmdbTvResult | TmdbPersonResult)[], + results: ( + | TmdbMovieResult + | TmdbTvResult + | TmdbPersonResult + | TmdbCollectionResult + )[], media?: Media[] ): Results[] => results.map((result) => { @@ -139,6 +171,8 @@ export const mapSearchResults = ( req.tmdbId === result.id && req.mediaType === MainMediaType.TV ) ); + case 'collection': + return mapCollectionResult(result); default: return mapPersonResult(result); } diff --git a/server/routes/discover.ts b/server/routes/discover.ts index f032fa66..47492fc0 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -14,12 +14,13 @@ import { getSettings } from '@server/lib/settings'; import logger from '@server/logger'; import { mapProductionCompany } from '@server/models/Movie'; import { + mapCollectionResult, mapMovieResult, mapPersonResult, mapTvResult, } from '@server/models/Search'; import { mapNetwork } from '@server/models/Tv'; -import { isMovie, isPerson } from '@server/utils/typeHelpers'; +import { isCollection, isMovie, isPerson } from '@server/utils/typeHelpers'; import { Router } from 'express'; import { sortBy } from 'lodash'; import { z } from 'zod'; @@ -647,6 +648,8 @@ discoverRoutes.get('/trending', async (req, res, next) => { ) : isPerson(result) ? mapPersonResult(result) + : isCollection(result) + ? mapCollectionResult(result) : mapTvResult( result, media.find( diff --git a/server/utils/typeHelpers.ts b/server/utils/typeHelpers.ts index 507ece8c..548378ff 100644 --- a/server/utils/typeHelpers.ts +++ b/server/utils/typeHelpers.ts @@ -1,4 +1,5 @@ import type { + TmdbCollectionResult, TmdbMovieDetails, TmdbMovieResult, TmdbPersonDetails, @@ -8,17 +9,35 @@ import type { } from '@server/api/themoviedb/interfaces'; export const isMovie = ( - movie: TmdbMovieResult | TmdbTvResult | TmdbPersonResult + movie: + | TmdbMovieResult + | TmdbTvResult + | TmdbPersonResult + | TmdbCollectionResult ): movie is TmdbMovieResult => { return (movie as TmdbMovieResult).title !== undefined; }; export const isPerson = ( - person: TmdbMovieResult | TmdbTvResult | TmdbPersonResult + person: + | TmdbMovieResult + | TmdbTvResult + | TmdbPersonResult + | TmdbCollectionResult ): person is TmdbPersonResult => { return (person as TmdbPersonResult).known_for !== undefined; }; +export const isCollection = ( + collection: + | TmdbMovieResult + | TmdbTvResult + | TmdbPersonResult + | TmdbCollectionResult +): collection is TmdbCollectionResult => { + return (collection as TmdbCollectionResult).media_type === 'collection'; +}; + export const isMovieDetails = ( movie: TmdbMovieDetails | TmdbTvDetails | TmdbPersonDetails ): movie is TmdbMovieDetails => { diff --git a/src/components/Common/ListView/index.tsx b/src/components/Common/ListView/index.tsx index 6f09f768..b4608686 100644 --- a/src/components/Common/ListView/index.tsx +++ b/src/components/Common/ListView/index.tsx @@ -5,6 +5,7 @@ import useVerticalScroll from '@app/hooks/useVerticalScroll'; import globalMessages from '@app/i18n/globalMessages'; import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces'; import type { + CollectionResult, MovieResult, PersonResult, TvResult, @@ -12,7 +13,7 @@ import type { import { useIntl } from 'react-intl'; type ListViewProps = { - items?: (TvResult | MovieResult | PersonResult)[]; + items?: (TvResult | MovieResult | PersonResult | CollectionResult)[]; plexItems?: WatchlistItem[]; isEmpty?: boolean; isLoading?: boolean; @@ -90,6 +91,18 @@ const ListView = ({ /> ); break; + case 'collection': + titleCard = ( + + ); + break; case 'person': titleCard = (
    {mediaType === 'movie' ? intl.formatMessage(globalMessages.movie) + : mediaType === 'collection' + ? intl.formatMessage(globalMessages.collection) : intl.formatMessage(globalMessages.tvshow)}
    @@ -177,7 +187,15 @@ const TitleCard = ({ leaveTo="opacity-0" >
    - + Date: Thu, 11 May 2023 09:59:15 +0900 Subject: [PATCH 12/49] docs: add Alexays as a contributor for code (#3452) [skip ci] * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 113d0af4..180aea27 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -809,6 +809,15 @@ "contributions": [ "code" ] + }, + { + "login": "Alexays", + "name": "Alex", + "avatar_url": "https://avatars.githubusercontent.com/u/13947260?v=4", + "profile": "https://arouillard.fr", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", diff --git a/README.md b/README.md index 83fff5ea..9cf0b0bb 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Translation status GitHub -All Contributors +All Contributors

    @@ -187,6 +187,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Owen Voke
    Owen Voke

    💻 Sebastian K
    Sebastian K

    💻 jariz
    jariz

    💻 + Alex
    Alex

    💻 From ac77b037d5fb0c54f5edf4b29d04adb57aef388f Mon Sep 17 00:00:00 2001 From: Zeb Muller Date: Thu, 11 May 2023 11:45:23 +1000 Subject: [PATCH 13/49] fix: error deleting users with over 1000 requests (#3376) Break-up request removal into groups of 1000 requests to be removed at a time. --- server/routes/user/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index ea709caf..94784df5 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -381,7 +381,14 @@ router.delete<{ id: string }>( * we manually remove all requests from the user here so the parent media's * properly reflect the change. */ - await requestRepository.remove(user.requests); + await requestRepository.remove(user.requests, { + /** + * Break-up into groups of 1000 requests to be removed at a time. + * Necessary for users with >1000 requests, else an SQLite 'Expression tree is too large' error occurs. + * https://typeorm.io/repository-api#additional-options + */ + chunk: user.requests.length / 1000, + }); await userRepository.delete(user.id); return res.status(200).json(user.filter()); From cd1cacad5589e188406466c498d98f2608d40f85 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 10:45:54 +0900 Subject: [PATCH 14/49] docs: add Zebebles as a contributor for code (#3453) [skip ci] * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 180aea27..de5ea491 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -818,6 +818,15 @@ "contributions": [ "code" ] + }, + { + "login": "Zebebles", + "name": "Zeb Muller", + "avatar_url": "https://avatars.githubusercontent.com/u/11425451?v=4", + "profile": "https://github.com/Zebebles", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", diff --git a/README.md b/README.md index 9cf0b0bb..c50ce854 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Translation status GitHub -All Contributors +All Contributors

    @@ -188,6 +188,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Sebastian K
    Sebastian K

    💻 jariz
    jariz

    💻 Alex
    Alex

    💻 + Zeb Muller
    Zeb Muller

    💻 From c1e10338c1a5d1e5d4928428af7edeacfc428916 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Wed, 10 May 2023 22:59:12 -0400 Subject: [PATCH 15/49] refactor: pull to refresh (#3391) * refactor: decoupled PTR by removing import and creating new touch logic * fix: overscroll behavior on mobile is now prevented on the y axis * feat: added shadow effects to icon * fix: modified cypress test * fix: added better scroll lock functionality * fix: hide icon if scroll value is negative * fix: changed to allow usage on all touch devices --- cypress/e2e/pull-to-refresh.cy.ts | 2 +- package.json | 2 - src/components/Layout/PullToRefresh/index.tsx | 118 ++++++++++++++++++ src/components/Layout/index.tsx | 2 +- src/components/PullToRefresh/index.tsx | 45 ------- src/styles/globals.css | 2 +- yarn.lock | 10 -- 7 files changed, 121 insertions(+), 60 deletions(-) create mode 100644 src/components/Layout/PullToRefresh/index.tsx delete mode 100644 src/components/PullToRefresh/index.tsx diff --git a/cypress/e2e/pull-to-refresh.cy.ts b/cypress/e2e/pull-to-refresh.cy.ts index d56c5589..732ee413 100644 --- a/cypress/e2e/pull-to-refresh.cy.ts +++ b/cypress/e2e/pull-to-refresh.cy.ts @@ -13,7 +13,7 @@ describe('Pull To Refresh', () => { url: '/api/v1/*', }).as('apiCall'); - cy.get('.searchbar').swipe('bottom', [190, 400]); + cy.get('.searchbar').swipe('bottom', [190, 500]); cy.wait('@apiCall').then((interception) => { assert.isNotNull( diff --git a/package.json b/package.json index 5dff068e..8b82e45d 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,6 @@ "openpgp": "5.7.0", "plex-api": "5.3.2", "pug": "3.0.2", - "pulltorefreshjs": "0.1.22", "react": "18.2.0", "react-ace": "10.1.0", "react-animate-height": "2.1.2", @@ -121,7 +120,6 @@ "@types/node": "17.0.36", "@types/node-schedule": "2.1.0", "@types/nodemailer": "6.4.7", - "@types/pulltorefreshjs": "0.1.5", "@types/react": "18.0.28", "@types/react-dom": "18.0.11", "@types/react-transition-group": "4.4.5", diff --git a/src/components/Layout/PullToRefresh/index.tsx b/src/components/Layout/PullToRefresh/index.tsx new file mode 100644 index 00000000..cdedcf43 --- /dev/null +++ b/src/components/Layout/PullToRefresh/index.tsx @@ -0,0 +1,118 @@ +import { ArrowPathIcon } from '@heroicons/react/24/outline'; +import { useRouter } from 'next/router'; +import { useEffect, useRef, useState } from 'react'; + +const PullToRefresh = () => { + const router = useRouter(); + + const [pullStartPoint, setPullStartPoint] = useState(0); + const [pullChange, setPullChange] = useState(0); + const refreshDiv = useRef(null); + + // Various pull down thresholds that determine icon location + const pullDownInitThreshold = pullChange > 20; + const pullDownStopThreshold = 120; + const pullDownReloadThreshold = pullChange > 340; + const pullDownIconLocation = pullChange / 3; + + useEffect(() => { + // Reload function that is called when reload threshold has been hit + // Add loading class to determine when to add spin animation + const forceReload = () => { + refreshDiv.current?.classList.add('loading'); + setTimeout(() => { + router.reload(); + }, 1000); + }; + + const html = document.querySelector('html'); + + // Determines if we are at the top of the page + // Locks or unlocks page when pulling down to refresh + const pullStart = (e: TouchEvent) => { + setPullStartPoint(e.targetTouches[0].screenY); + + if (window.scrollY === 0 && window.scrollX === 0) { + refreshDiv.current?.classList.add('block'); + refreshDiv.current?.classList.remove('hidden'); + document.body.style.touchAction = 'none'; + document.body.style.overscrollBehavior = 'none'; + if (html) { + html.style.overscrollBehaviorY = 'none'; + } + } else { + refreshDiv.current?.classList.remove('block'); + refreshDiv.current?.classList.add('hidden'); + } + }; + + // Tracks how far we have pulled down the refresh icon + const pullDown = async (e: TouchEvent) => { + const screenY = e.targetTouches[0].screenY; + + const pullLength = + pullStartPoint < screenY ? Math.abs(screenY - pullStartPoint) : 0; + + setPullChange(pullLength); + }; + + // Will reload the page if we are past the threshold + // Otherwise, we reset the pull + const pullFinish = () => { + setPullStartPoint(0); + + if (pullDownReloadThreshold) { + forceReload(); + } else { + setPullChange(0); + } + + document.body.style.touchAction = 'auto'; + document.body.style.overscrollBehaviorY = 'auto'; + if (html) { + html.style.overscrollBehaviorY = 'auto'; + } + }; + + window.addEventListener('touchstart', pullStart, { passive: false }); + window.addEventListener('touchmove', pullDown, { passive: false }); + window.addEventListener('touchend', pullFinish, { passive: false }); + + return () => { + window.removeEventListener('touchstart', pullStart); + window.removeEventListener('touchmove', pullDown); + window.removeEventListener('touchend', pullFinish); + }; + }, [pullDownInitThreshold, pullDownReloadThreshold, pullStartPoint, router]); + + return ( +
    +
    + +
    +
    + ); +}; + +export default PullToRefresh; diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index b30b9712..878f27b1 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -1,8 +1,8 @@ import MobileMenu from '@app/components/Layout/MobileMenu'; +import PullToRefresh from '@app/components/Layout/PullToRefresh'; import SearchInput from '@app/components/Layout/SearchInput'; import Sidebar from '@app/components/Layout/Sidebar'; import UserDropdown from '@app/components/Layout/UserDropdown'; -import PullToRefresh from '@app/components/PullToRefresh'; import type { AvailableLocale } from '@app/context/LanguageContext'; import useLocale from '@app/hooks/useLocale'; import useSettings from '@app/hooks/useSettings'; diff --git a/src/components/PullToRefresh/index.tsx b/src/components/PullToRefresh/index.tsx deleted file mode 100644 index 68939c48..00000000 --- a/src/components/PullToRefresh/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { ArrowPathIcon } from '@heroicons/react/24/outline'; -import { useRouter } from 'next/router'; -import PR from 'pulltorefreshjs'; -import { useEffect } from 'react'; -import ReactDOMServer from 'react-dom/server'; - -const PullToRefresh = () => { - const router = useRouter(); - - useEffect(() => { - PR.init({ - mainElement: '#pull-to-refresh', - onRefresh() { - router.reload(); - }, - iconArrow: ReactDOMServer.renderToString( -
    - -
    - ), - iconRefreshing: ReactDOMServer.renderToString( -
    - -
    - ), - instructionsPullToRefresh: ReactDOMServer.renderToString(
    ), - instructionsReleaseToRefresh: ReactDOMServer.renderToString(
    ), - instructionsRefreshing: ReactDOMServer.renderToString(
    ), - distReload: 60, - distIgnore: 15, - shouldPullToRefresh: () => - !window.scrollY && document.body.style.overflow !== 'hidden', - }); - return () => { - PR.destroyAll(); - }; - }, [router]); - - return
    ; -}; - -export default PullToRefresh; diff --git a/src/styles/globals.css b/src/styles/globals.css index fac7272d..8110e87e 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -17,7 +17,7 @@ body { @apply bg-gray-900; - overscroll-behavior-y: contain; + -webkit-overflow-scrolling: touch; } code { diff --git a/yarn.lock b/yarn.lock index c95f591d..886aee53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3954,11 +3954,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/pulltorefreshjs@0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@types/pulltorefreshjs/-/pulltorefreshjs-0.1.5.tgz#f15c9dbc91b8fdd8135093d81ece9e9d4d2324d7" - integrity sha512-/VRTgBettvBg1KI8mGnA9oeWs359tTXQ7qsxLuXnksL88jvK6ZNMStG5T9x9vUO9O7jLsgREB0cElz/BWFfdew== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -11434,11 +11429,6 @@ pug@3.0.2, pug@^3.0.2: pug-runtime "^3.0.1" pug-strip-comments "^2.0.0" -pulltorefreshjs@0.1.22: - version "0.1.22" - resolved "https://registry.yarnpkg.com/pulltorefreshjs/-/pulltorefreshjs-0.1.22.tgz#ddb5e3feee0b2a49fd46e1b18e84fffef2c47ac0" - integrity sha512-haxNVEHnS4NCQA7NeG7TSV69z4uqy/N7nfPRuc4dPWe8H6ygUrMjdNeohE+6v0lVVX/ukSjbLYwPUGUYtFKfvQ== - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" From 4bd87647d0551c20e13589a62690a6f3e5ad8ff7 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Thu, 11 May 2023 00:16:50 -0400 Subject: [PATCH 16/49] fix: corrected initial fallback data load on details page (#3395) --- src/pages/movie/[movieId]/index.tsx | 36 ++++++++++++++--------------- src/pages/tv/[tvId]/index.tsx | 34 +++++++++++++-------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/src/pages/movie/[movieId]/index.tsx b/src/pages/movie/[movieId]/index.tsx index 2bb971c1..053ee3ff 100644 --- a/src/pages/movie/[movieId]/index.tsx +++ b/src/pages/movie/[movieId]/index.tsx @@ -1,7 +1,7 @@ import MovieDetails from '@app/components/MovieDetails'; import type { MovieDetails as MovieDetailsType } from '@server/models/Movie'; import axios from 'axios'; -import type { NextPage } from 'next'; +import type { GetServerSideProps, NextPage } from 'next'; interface MoviePageProps { movie?: MovieDetailsType; @@ -11,25 +11,25 @@ const MoviePage: NextPage = ({ movie }) => { return ; }; -MoviePage.getInitialProps = async (ctx) => { - if (ctx.req) { - const response = await axios.get( - `http://localhost:${process.env.PORT || 5055}/api/v1/movie/${ - ctx.query.movieId - }`, - { - headers: ctx.req?.headers?.cookie - ? { cookie: ctx.req.headers.cookie } - : undefined, - } - ); +export const getServerSideProps: GetServerSideProps = async ( + ctx +) => { + const response = await axios.get( + `http://localhost:${process.env.PORT || 5055}/api/v1/movie/${ + ctx.query.movieId + }`, + { + headers: ctx.req?.headers?.cookie + ? { cookie: ctx.req.headers.cookie } + : undefined, + } + ); - return { + return { + props: { movie: response.data, - }; - } - - return {}; + }, + }; }; export default MoviePage; diff --git a/src/pages/tv/[tvId]/index.tsx b/src/pages/tv/[tvId]/index.tsx index 69fe216f..a8a3cbd7 100644 --- a/src/pages/tv/[tvId]/index.tsx +++ b/src/pages/tv/[tvId]/index.tsx @@ -1,7 +1,7 @@ import TvDetails from '@app/components/TvDetails'; import type { TvDetails as TvDetailsType } from '@server/models/Tv'; import axios from 'axios'; -import type { NextPage } from 'next'; +import type { GetServerSideProps, NextPage } from 'next'; interface TvPageProps { tv?: TvDetailsType; @@ -11,25 +11,23 @@ const TvPage: NextPage = ({ tv }) => { return ; }; -TvPage.getInitialProps = async (ctx) => { - if (ctx.req) { - const response = await axios.get( - `http://localhost:${process.env.PORT || 5055}/api/v1/tv/${ - ctx.query.tvId - }`, - { - headers: ctx.req?.headers?.cookie - ? { cookie: ctx.req.headers.cookie } - : undefined, - } - ); +export const getServerSideProps: GetServerSideProps = async ( + ctx +) => { + const response = await axios.get( + `http://localhost:${process.env.PORT || 5055}/api/v1/tv/${ctx.query.tvId}`, + { + headers: ctx.req?.headers?.cookie + ? { cookie: ctx.req.headers.cookie } + : undefined, + } + ); - return { + return { + props: { tv: response.data, - }; - } - - return {}; + }, + }; }; export default TvPage; From c27f96096ac8cc6c387f9d1dde5b263576ac2132 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Thu, 11 May 2023 00:27:45 -0400 Subject: [PATCH 17/49] fix: lock body scroll when using webkit (#3399) --- src/hooks/useLockBodyScroll.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/hooks/useLockBodyScroll.ts b/src/hooks/useLockBodyScroll.ts index 08d7e3b6..e962447c 100644 --- a/src/hooks/useLockBodyScroll.ts +++ b/src/hooks/useLockBodyScroll.ts @@ -15,13 +15,20 @@ export const useLockBodyScroll = ( disabled?: boolean ): void => { useEffect(() => { - const originalStyle = window.getComputedStyle(document.body).overflow; + const originalOverflowStyle = window.getComputedStyle( + document.body + ).overflow; + const originalTouchActionStyle = window.getComputedStyle( + document.body + ).touchAction; if (isLocked && !disabled) { document.body.style.overflow = 'hidden'; + document.body.style.touchAction = 'none'; } return () => { if (!disabled) { - document.body.style.overflow = originalStyle; + document.body.style.overflow = originalOverflowStyle; + document.body.style.touchAction = originalTouchActionStyle; } }; }, [isLocked, disabled]); From e051b1dfea9c9320cc9dd420c475ae74cff0d901 Mon Sep 17 00:00:00 2001 From: Brandon Cohen Date: Thu, 11 May 2023 00:43:11 -0400 Subject: [PATCH 18/49] fix: correctly load series fallback modal with sonarr v4 (#3451) --- server/routes/service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/routes/service.ts b/server/routes/service.ts index b77d58c9..083e1eb5 100644 --- a/server/routes/service.ts +++ b/server/routes/service.ts @@ -183,9 +183,7 @@ serviceRoutes.get<{ tmdbId: string }>( const sonarr = new SonarrAPI({ apiKey: sonarrSettings.apiKey, - url: `${sonarrSettings.useSsl ? 'https' : 'http'}://${ - sonarrSettings.hostname - }:${sonarrSettings.port}${sonarrSettings.baseUrl ?? ''}/api`, + url: SonarrAPI.buildUrl(sonarrSettings, '/api/v3'), }); try { From aa849776809dfe891e67ff4db6861ef44df1a774 Mon Sep 17 00:00:00 2001 From: Shane Friedman Date: Fri, 12 May 2023 20:23:14 -0400 Subject: [PATCH 19/49] feat(discover): support filtering by tmdb user vote count on discover page (#3407) --- overseerr-api.yml | 20 +++++++++ server/api/themoviedb/index.ts | 12 ++++++ server/routes/discover.ts | 6 +++ .../Discover/FilterSlideover/index.tsx | 41 +++++++++++++++++++ src/components/Discover/constants.ts | 16 ++++++++ src/i18n/locale/en.json | 2 + 6 files changed, 97 insertions(+) diff --git a/overseerr-api.yml b/overseerr-api.yml index 542ac59f..c8b52885 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -4186,6 +4186,16 @@ paths: schema: type: number example: 10 + - in: query + name: voteCountGte + schema: + type: number + example: 7 + - in: query + name: voteCountLte + schema: + type: number + example: 10 - in: query name: watchRegion schema: @@ -4465,6 +4475,16 @@ paths: schema: type: number example: 10 + - in: query + name: voteCountGte + schema: + type: number + example: 7 + - in: query + name: voteCountLte + schema: + type: number + example: 10 - in: query name: watchRegion schema: diff --git a/server/api/themoviedb/index.ts b/server/api/themoviedb/index.ts index 4c931ff9..ef36fcd6 100644 --- a/server/api/themoviedb/index.ts +++ b/server/api/themoviedb/index.ts @@ -65,6 +65,8 @@ interface DiscoverMovieOptions { withRuntimeLte?: string; voteAverageGte?: string; voteAverageLte?: string; + voteCountGte?: string; + voteCountLte?: string; originalLanguage?: string; genre?: string; studio?: string; @@ -83,6 +85,8 @@ interface DiscoverTvOptions { withRuntimeLte?: string; voteAverageGte?: string; voteAverageLte?: string; + voteCountGte?: string; + voteCountLte?: string; includeEmptyReleaseDate?: boolean; originalLanguage?: string; genre?: string; @@ -460,6 +464,8 @@ class TheMovieDb extends ExternalAPI { withRuntimeLte, voteAverageGte, voteAverageLte, + voteCountGte, + voteCountLte, watchProviders, watchRegion, }: DiscoverMovieOptions = {}): Promise => { @@ -504,6 +510,8 @@ class TheMovieDb extends ExternalAPI { 'with_runtime.lte': withRuntimeLte, 'vote_average.gte': voteAverageGte, 'vote_average.lte': voteAverageLte, + 'vote_count.gte': voteCountGte, + 'vote_count.lte': voteCountLte, watch_region: watchRegion, with_watch_providers: watchProviders, }, @@ -530,6 +538,8 @@ class TheMovieDb extends ExternalAPI { withRuntimeLte, voteAverageGte, voteAverageLte, + voteCountGte, + voteCountLte, watchProviders, watchRegion, }: DiscoverTvOptions = {}): Promise => { @@ -574,6 +584,8 @@ class TheMovieDb extends ExternalAPI { 'with_runtime.lte': withRuntimeLte, 'vote_average.gte': voteAverageGte, 'vote_average.lte': voteAverageLte, + 'vote_count.gte': voteCountGte, + 'vote_count.lte': voteCountLte, with_watch_providers: watchProviders, watch_region: watchRegion, }, diff --git a/server/routes/discover.ts b/server/routes/discover.ts index 47492fc0..487d1a32 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -65,6 +65,8 @@ const QueryFilterOptions = z.object({ withRuntimeLte: z.coerce.string().optional(), voteAverageGte: z.coerce.string().optional(), voteAverageLte: z.coerce.string().optional(), + voteCountGte: z.coerce.string().optional(), + voteCountLte: z.coerce.string().optional(), network: z.coerce.string().optional(), watchProviders: z.coerce.string().optional(), watchRegion: z.coerce.string().optional(), @@ -96,6 +98,8 @@ discoverRoutes.get('/movies', async (req, res, next) => { withRuntimeLte: query.withRuntimeLte, voteAverageGte: query.voteAverageGte, voteAverageLte: query.voteAverageLte, + voteCountGte: query.voteCountGte, + voteCountLte: query.voteCountLte, watchProviders: query.watchProviders, watchRegion: query.watchRegion, }); @@ -371,6 +375,8 @@ discoverRoutes.get('/tv', async (req, res, next) => { withRuntimeLte: query.withRuntimeLte, voteAverageGte: query.voteAverageGte, voteAverageLte: query.voteAverageLte, + voteCountGte: query.voteCountGte, + voteCountLte: query.voteCountLte, watchProviders: query.watchProviders, watchRegion: query.watchRegion, }); diff --git a/src/components/Discover/FilterSlideover/index.tsx b/src/components/Discover/FilterSlideover/index.tsx index 10ee0fea..83d5a2e4 100644 --- a/src/components/Discover/FilterSlideover/index.tsx +++ b/src/components/Discover/FilterSlideover/index.tsx @@ -35,8 +35,10 @@ const messages = defineMessages({ ratingText: 'Ratings between {minValue} and {maxValue}', clearfilters: 'Clear Active Filters', tmdbuserscore: 'TMDB User Score', + tmdbuservotecount: 'TMDB User Vote Count', runtime: 'Runtime', streamingservices: 'Streaming Services', + voteCount: 'Number of votes between {minValue} and {maxValue}', }); type FilterSlideoverProps = { @@ -246,6 +248,45 @@ const FilterSlideover = ({ })} />
    + + {intl.formatMessage(messages.tmdbuservotecount)} + +
    + { + updateQueryParams( + 'voteCountGte', + min !== 0 && Number(currentFilters.voteCountLte) !== 1000 + ? min.toString() + : undefined + ); + }} + onUpdateMax={(max) => { + updateQueryParams( + 'voteCountLte', + max !== 1000 && Number(currentFilters.voteCountGte) !== 0 + ? max.toString() + : undefined + ); + }} + subText={intl.formatMessage(messages.voteCount, { + minValue: currentFilters.voteCountGte ?? 0, + maxValue: currentFilters.voteCountLte ?? 1000, + })} + /> +
    {intl.formatMessage(messages.streamingservices)} diff --git a/src/components/Discover/constants.ts b/src/components/Discover/constants.ts index 802ba7c6..0571f1fc 100644 --- a/src/components/Discover/constants.ts +++ b/src/components/Discover/constants.ts @@ -104,6 +104,8 @@ export const QueryFilterOptions = z.object({ withRuntimeLte: z.string().optional(), voteAverageGte: z.string().optional(), voteAverageLte: z.string().optional(), + voteCountLte: z.string().optional(), + voteCountGte: z.string().optional(), watchRegion: z.string().optional(), watchProviders: z.string().optional(), }); @@ -169,6 +171,14 @@ export const prepareFilterValues = ( filterValues.voteAverageLte = values.voteAverageLte; } + if (values.voteCountGte) { + filterValues.voteCountGte = values.voteCountGte; + } + + if (values.voteCountLte) { + filterValues.voteCountLte = values.voteCountLte; + } + if (values.watchProviders) { filterValues.watchProviders = values.watchProviders; } @@ -190,6 +200,12 @@ export const countActiveFilters = (filterValues: FilterOptions): number => { delete clonedFilters.voteAverageLte; } + if (clonedFilters.voteCountGte || filterValues.voteCountLte) { + totalCount += 1; + delete clonedFilters.voteCountGte; + delete clonedFilters.voteCountLte; + } + if (clonedFilters.withRuntimeGte || filterValues.withRuntimeLte) { totalCount += 1; delete clonedFilters.withRuntimeGte; diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 39d44bbc..0098eb5c 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -76,7 +76,9 @@ "components.Discover.FilterSlideover.streamingservices": "Streaming Services", "components.Discover.FilterSlideover.studio": "Studio", "components.Discover.FilterSlideover.tmdbuserscore": "TMDB User Score", + "components.Discover.FilterSlideover.tmdbuservotecount": "TMDB User Vote Count", "components.Discover.FilterSlideover.to": "To", + "components.Discover.FilterSlideover.voteCount": "Number of votes between {minValue} and {maxValue}", "components.Discover.MovieGenreList.moviegenres": "Movie Genres", "components.Discover.MovieGenreSlider.moviegenres": "Movie Genres", "components.Discover.NetworkSlider.networks": "Networks", From b8e3c07c4760462d42dafb05ebaea8c19a8ec842 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 13 May 2023 09:35:51 +0900 Subject: [PATCH 20/49] docs: add SMores as a contributor for code (#3455) [skip ci] * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index de5ea491..7cf0f74e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -827,6 +827,15 @@ "contributions": [ "code" ] + }, + { + "login": "SMores", + "name": "Shane Friedman", + "avatar_url": "https://avatars.githubusercontent.com/u/5354254?v=4", + "profile": "http://smoores.dev", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", diff --git a/README.md b/README.md index c50ce854..915c75c8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Translation status GitHub -All Contributors +All Contributors

    @@ -189,6 +189,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d jariz
    jariz

    💻 Alex
    Alex

    💻 Zeb Muller
    Zeb Muller

    💻 + Shane Friedman
    Shane Friedman

    💻 From 03316c642d1ecf89753789af08caf6e3aac80113 Mon Sep 17 00:00:00 2001 From: Yalagin Date: Mon, 15 May 2023 23:25:32 +0700 Subject: [PATCH 21/49] fix(watchlist): add validation for creation request --- server/entity/Watchlist.ts | 17 +++++++++++++---- server/interfaces/api/watchlistCreate.ts | 9 +++++++++ server/routes/watchlist.ts | 9 ++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 server/interfaces/api/watchlistCreate.ts diff --git a/server/entity/Watchlist.ts b/server/entity/Watchlist.ts index bf362acb..df820120 100644 --- a/server/entity/Watchlist.ts +++ b/server/entity/Watchlist.ts @@ -15,6 +15,7 @@ import { Unique, UpdateDateColumn, } from 'typeorm'; +import type { ZodNumber, ZodOptional, ZodString } from 'zod'; export class DuplicateWatchlistRequestError extends Error {} export class NotFoundError extends Error { @@ -65,10 +66,18 @@ export class Watchlist implements WatchlistItem { Object.assign(this, init); } - public static async createWatchlist( - watchlistRequest: Watchlist, - user: User - ): Promise { + public static async createWatchlist({ + watchlistRequest, + user, + }: { + watchlistRequest: { + mediaType: MediaType; + ratingKey?: ZodOptional['_output']; + title?: ZodOptional['_output']; + tmdbId: ZodNumber['_output']; + }; + user: User; + }): Promise { const watchlistRepository = getRepository(this); const mediaRepository = getRepository(Media); const tmdb = new TheMovieDb(); diff --git a/server/interfaces/api/watchlistCreate.ts b/server/interfaces/api/watchlistCreate.ts new file mode 100644 index 00000000..6cc6af3b --- /dev/null +++ b/server/interfaces/api/watchlistCreate.ts @@ -0,0 +1,9 @@ +import { MediaType } from '@server/constants/media'; +import { z } from 'zod'; + +export const watchlistCreate = z.object({ + ratingKey: z.coerce.string().optional(), + tmdbId: z.coerce.number(), + mediaType: z.nativeEnum(MediaType), + title: z.coerce.string().optional(), +}); diff --git a/server/routes/watchlist.ts b/server/routes/watchlist.ts index b8ca0b90..bbb44da0 100644 --- a/server/routes/watchlist.ts +++ b/server/routes/watchlist.ts @@ -7,6 +7,8 @@ import logger from '@server/logger'; import { Router } from 'express'; import { QueryFailedError } from 'typeorm'; +import { watchlistCreate } from '@server/interfaces/api/watchlistCreate'; + const watchlistRoutes = Router(); watchlistRoutes.post( @@ -19,7 +21,12 @@ watchlistRoutes.post( message: 'You must be logged in to add watchlist.', }); } - const request = await Watchlist.createWatchlist(req.body, req.user); + const values = watchlistCreate.parse(req.body); + + const request = await Watchlist.createWatchlist({ + watchlistRequest: values, + user: req.user, + }); return res.status(201).json(request); } catch (error) { if (!(error instanceof Error)) { From 24f268b6cb67d9a8d8675cd6e09dd83a7f499add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Izaac=20Br=C3=A5nn?= Date: Mon, 29 May 2023 04:29:36 +0200 Subject: [PATCH 22/49] feat: auto tagging requested media with username (#3338) * feat: auto tagging requested media with username Relating to discussion: https://github.com/sct/overseerr/discussions/3313 Adding an option to the Radarr and Sonarr service to enable automatic tagging with the username requesting the media. Current format, to reduce tag clutter if a user changes displayname: `[user.id] - [user.displayName]` * fix: modified new secondary tip language --------- Co-authored-by: Brandon Cohen --- server/entity/MediaRequest.ts | 64 +++++++++++++++++++ server/lib/settings.ts | 1 + src/components/Settings/RadarrModal/index.tsx | 20 ++++++ src/components/Settings/SonarrModal/index.tsx | 20 ++++++ src/i18n/locale/en.json | 5 ++ 5 files changed, 110 insertions(+) diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts index 61122afc..5a8d3988 100644 --- a/server/entity/MediaRequest.ts +++ b/server/entity/MediaRequest.ts @@ -764,6 +764,38 @@ export class MediaRequest { return; } + if (radarrSettings.tagRequests) { + let userTag = (await radarr.getTags()).find((v) => + v.label.startsWith(this.requestedBy.id + ' - ') + ); + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: this.id, + mediaId: this.media.id, + userId: this.requestedBy.id, + newTag: + this.requestedBy.id + ' - ' + this.requestedBy.displayName, + }); + userTag = await radarr.createTag({ + label: this.requestedBy.id + ' - ' + this.requestedBy.displayName, + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: this.id, + mediaId: this.media.id, + userId: this.requestedBy.id, + radarrServer: radarrSettings.hostname + ':' + radarrSettings.port, + }); + } + } + if ( media[this.is4k ? 'status4k' : 'status'] === MediaStatus.AVAILABLE ) { @@ -1022,6 +1054,38 @@ export class MediaRequest { }); } + if (sonarrSettings.tagRequests) { + let userTag = (await sonarr.getTags()).find((v) => + v.label.startsWith(this.requestedBy.id + ' - ') + ); + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: this.id, + mediaId: this.media.id, + userId: this.requestedBy.id, + newTag: + this.requestedBy.id + ' - ' + this.requestedBy.displayName, + }); + userTag = await sonarr.createTag({ + label: this.requestedBy.id + ' - ' + this.requestedBy.displayName, + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: this.id, + mediaId: this.media.id, + userId: this.requestedBy.id, + sonarrServer: sonarrSettings.hostname + ':' + sonarrSettings.port, + }); + } + } + const sonarrSeriesOptions: AddSeriesOptions = { profileId: qualityProfile, languageProfileId: languageProfile, diff --git a/server/lib/settings.ts b/server/lib/settings.ts index 8e66ebc5..c3981fe9 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -61,6 +61,7 @@ export interface DVRSettings { externalUrl?: string; syncEnabled: boolean; preventSearch: boolean; + tagRequests: boolean; } export interface RadarrSettings extends DVRSettings { diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx index e74b0465..4ebc7a8b 100644 --- a/src/components/Settings/RadarrModal/index.tsx +++ b/src/components/Settings/RadarrModal/index.tsx @@ -57,6 +57,9 @@ const messages = defineMessages({ testFirstTags: 'Test connection to load tags', tags: 'Tags', enableSearch: 'Enable Automatic Search', + tagRequests: 'Tag Requests', + tagRequestsInfo: + "Automatically add an additional tag with the requester's user ID & display name", validationApplicationUrl: 'You must provide a valid URL', validationApplicationUrlTrailingSlash: 'URL must not end in a trailing slash', validationBaseUrlLeadingSlash: 'URL base must have a leading slash', @@ -238,6 +241,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { externalUrl: radarr?.externalUrl, syncEnabled: radarr?.syncEnabled ?? false, enableSearch: !radarr?.preventSearch, + tagRequests: radarr?.tagRequests ?? false, }} validationSchema={RadarrSettingsSchema} onSubmit={async (values) => { @@ -263,6 +267,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { externalUrl: values.externalUrl, syncEnabled: values.syncEnabled, preventSearch: !values.enableSearch, + tagRequests: values.tagRequests, }; if (!radarr) { await axios.post('/api/v1/settings/radarr', submission); @@ -713,6 +718,21 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { />
    +
    + +
    + +
    +
    ); diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index d9ff0c17..6c61d5db 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -62,6 +62,9 @@ const messages = defineMessages({ syncEnabled: 'Enable Scan', externalUrl: 'External URL', enableSearch: 'Enable Automatic Search', + tagRequests: 'Tag Requests', + tagRequestsInfo: + "Automatically add an additional tag with the requester's user ID & display name", validationApplicationUrl: 'You must provide a valid URL', validationApplicationUrlTrailingSlash: 'URL must not end in a trailing slash', validationBaseUrlLeadingSlash: 'Base URL must have a leading slash', @@ -252,6 +255,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { externalUrl: sonarr?.externalUrl, syncEnabled: sonarr?.syncEnabled ?? false, enableSearch: !sonarr?.preventSearch, + tagRequests: sonarr?.tagRequests ?? false, }} validationSchema={SonarrSettingsSchema} onSubmit={async (values) => { @@ -292,6 +296,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { externalUrl: values.externalUrl, syncEnabled: values.syncEnabled, preventSearch: !values.enableSearch, + tagRequests: values.tagRequests, }; if (!sonarr) { await axios.post('/api/v1/settings/sonarr', submission); @@ -960,6 +965,21 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { />
    +
    + +
    + +
    +
    ); diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 0098eb5c..24a537a0 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -684,6 +684,8 @@ "components.Settings.RadarrModal.servername": "Server Name", "components.Settings.RadarrModal.ssl": "Use SSL", "components.Settings.RadarrModal.syncEnabled": "Enable Scan", + "components.Settings.RadarrModal.tagRequests": "Tag Requests", + "components.Settings.RadarrModal.tagRequestsInfo": "Automatically add an additional tag with the requester's user ID & display name", "components.Settings.RadarrModal.tags": "Tags", "components.Settings.RadarrModal.testFirstQualityProfiles": "Test connection to load quality profiles", "components.Settings.RadarrModal.testFirstRootFolders": "Test connection to load root folders", @@ -861,6 +863,8 @@ "components.Settings.SonarrModal.servername": "Server Name", "components.Settings.SonarrModal.ssl": "Use SSL", "components.Settings.SonarrModal.syncEnabled": "Enable Scan", + "components.Settings.SonarrModal.tagRequests": "Tag Requests", + "components.Settings.SonarrModal.tagRequestsInfo": "Automatically add an additional tag with the requester's user ID & display name", "components.Settings.SonarrModal.tags": "Tags", "components.Settings.SonarrModal.testFirstLanguageProfiles": "Test connection to load language profiles", "components.Settings.SonarrModal.testFirstQualityProfiles": "Test connection to load quality profiles", @@ -1178,6 +1182,7 @@ "i18n.cancel": "Cancel", "i18n.canceling": "Canceling…", "i18n.close": "Close", + "i18n.collection": "Collection", "i18n.decline": "Decline", "i18n.declined": "Declined", "i18n.delete": "Delete", From 0a007ca805dff334fc7972590c6f7bc85dce95a7 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 29 May 2023 11:32:08 +0900 Subject: [PATCH 23/49] docs: add IzaacJ as a contributor for code (#3473) [skip ci] * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 12 +++++++++++- README.md | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7cf0f74e..62df8b80 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -836,6 +836,15 @@ "contributions": [ "code" ] + }, + { + "login": "IzaacJ", + "name": "Izaac Brånn", + "avatar_url": "https://avatars.githubusercontent.com/u/711323?v=4", + "profile": "https://izaacj.me", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", @@ -845,5 +854,6 @@ "repoType": "github", "repoHost": "https://github.com", "skipCi": false, - "commitConvention": "angular" + "commitConvention": "angular", + "commitType": "docs" } diff --git a/README.md b/README.md index 915c75c8..af2e7859 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Translation status GitHub -All Contributors +All Contributors

    @@ -191,6 +191,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Zeb Muller
    Zeb Muller

    💻 Shane Friedman
    Shane Friedman

    💻 + + Izaac Brånn
    Izaac Brånn

    💻 + From f33eb862fd85ff135828ab25c8d12d84e7e50762 Mon Sep 17 00:00:00 2001 From: Ryan Cohen Date: Mon, 29 May 2023 11:36:26 +0900 Subject: [PATCH 24/49] chore: update codeowners (#3474) [skip ci] --- .github/CODEOWNERS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6effae04..68a2d018 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,10 +1,10 @@ # Global code ownership -* @sct @TheCatLady @danshilm +* @sct @TheCatLady @danshilm @OwsleyJr # Documentation -/.all-contributorsrc @TheCatLady @samwiseg0 @danshilm -/*.md @TheCatLady @samwiseg0 @danshilm -/docs/ @TheCatLady @samwiseg0 @danshilm +/.all-contributorsrc @TheCatLady @samwiseg0 @danshilm @OwsleyJr +/*.md @TheCatLady @samwiseg0 @danshilm @OwsleyJr +/docs/ @TheCatLady @samwiseg0 @danshilm @OwsleyJr # Snap-related files /.github/workflows/snap.yaml @samwiseg0 @@ -12,4 +12,4 @@ # i18n locale files /src/i18n/locale/ @sct @TheCatLady -/src/i18n/locale/en.json @sct @TheCatLady @danshilm +/src/i18n/locale/en.json @sct @TheCatLady @danshilm @OwsleyJr From d7fa35e066cf371797aaa46ca464aa531ba8fb35 Mon Sep 17 00:00:00 2001 From: Salman Tariq Date: Thu, 1 Jun 2023 02:53:50 +0500 Subject: [PATCH 25/49] fix(genreselector): fix searching in Genre filter (#3468) --- src/components/Selector/index.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/Selector/index.tsx b/src/components/Selector/index.tsx index 8a21d3fb..78ae33ea 100644 --- a/src/components/Selector/index.tsx +++ b/src/components/Selector/index.tsx @@ -169,15 +169,19 @@ export const GenreSelector = ({ loadDefaultGenre(); }, [defaultValue, type]); - const loadGenreOptions = async () => { + const loadGenreOptions = async (inputValue: string) => { const results = await axios.get( `/api/v1/discover/genreslider/${type}` ); - return results.data.map((result) => ({ - label: result.name, - value: result.id, - })); + return results.data + .map((result) => ({ + label: result.name, + value: result.id, + })) + .filter(({ label }) => + label.toLowerCase().includes(inputValue.toLowerCase()) + ); }; return ( From df332cec84f31e7a5152d9ad80f3f7839c0f3329 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 1 Jun 2023 00:24:05 +0000 Subject: [PATCH 26/49] docs: add SalmanTariq as a contributor for code (#3478) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 62df8b80..634d9050 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -845,6 +845,15 @@ "contributions": [ "code" ] + }, + { + "login": "SalmanTariq", + "name": "Salman Tariq", + "avatar_url": "https://avatars.githubusercontent.com/u/13284494?v=4", + "profile": "https://github.com/SalmanTariq", + "contributions": [ + "code" + ] } ], "badgeTemplate": "\"All-orange.svg\"/>", diff --git a/README.md b/README.md index af2e7859..5aa90d25 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Translation status GitHub -All Contributors +All Contributors

    @@ -193,6 +193,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Izaac Brånn
    Izaac Brånn

    💻 + Salman Tariq
    Salman Tariq

    💻 From 672061cd646c97c9954790c8e50eac88ea2666e9 Mon Sep 17 00:00:00 2001 From: Jesse Boswell Date: Mon, 5 Jun 2023 10:59:32 -0500 Subject: [PATCH 27/49] feat(src/components/externallinkblock/index.tsx): support Emby icon Display the Emby icon instead of Jellyfin when mediaserver type is Emby --- src/assets/services/emby.svg | 78 ++++++++++++++++++++++ src/components/ExternalLinkBlock/index.tsx | 6 +- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/assets/services/emby.svg diff --git a/src/assets/services/emby.svg b/src/assets/services/emby.svg new file mode 100644 index 00000000..e68d69ac --- /dev/null +++ b/src/assets/services/emby.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/components/ExternalLinkBlock/index.tsx b/src/components/ExternalLinkBlock/index.tsx index d7c4b460..f6c4caf6 100644 --- a/src/components/ExternalLinkBlock/index.tsx +++ b/src/components/ExternalLinkBlock/index.tsx @@ -1,3 +1,4 @@ +import EmbyLogo from '@app/assets/services/emby.svg'; import ImdbLogo from '@app/assets/services/imdb.svg'; import JellyfinLogo from '@app/assets/services/jellyfin.svg'; import PlexLogo from '@app/assets/services/plex.svg'; @@ -41,8 +42,11 @@ const ExternalLinkBlock = ({ > {settings.currentSettings.mediaServerType === MediaServerType.PLEX ? ( - ) : ( + ) : settings.currentSettings.mediaServerType === + MediaServerType.JELLYFIN ? ( + ) : ( + )} )} From 46cd4d01d9a3cf17d79350c5e678202820272299 Mon Sep 17 00:00:00 2001 From: Jesse Boswell Date: Mon, 5 Jun 2023 12:10:25 -0500 Subject: [PATCH 28/49] fix: externalLinkBlock --- src/components/ExternalLinkBlock/index.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/ExternalLinkBlock/index.tsx b/src/components/ExternalLinkBlock/index.tsx index f6c4caf6..1de0b5a3 100644 --- a/src/components/ExternalLinkBlock/index.tsx +++ b/src/components/ExternalLinkBlock/index.tsx @@ -10,6 +10,7 @@ import useLocale from '@app/hooks/useLocale'; import useSettings from '@app/hooks/useSettings'; import { MediaType } from '@server/constants/media'; import { MediaServerType } from '@server/constants/server'; +import getConfig from 'next/config'; interface ExternalLinkBlockProps { mediaType: 'movie' | 'tv'; @@ -29,6 +30,7 @@ const ExternalLinkBlock = ({ mediaUrl, }: ExternalLinkBlockProps) => { const settings = useSettings(); + const { publicRuntimeConfig } = getConfig(); const { locale } = useLocale(); return ( @@ -42,11 +44,10 @@ const ExternalLinkBlock = ({ > {settings.currentSettings.mediaServerType === MediaServerType.PLEX ? ( - ) : settings.currentSettings.mediaServerType === - MediaServerType.JELLYFIN ? ( - - ) : ( + ) : publicRuntimeConfig.JELLYFIN_TYPE == 'emby' ? ( + ) : ( + )} )} From ad69d6715e976630092bfbbb1843886523551014 Mon Sep 17 00:00:00 2001 From: Jesse Boswell Date: Mon, 5 Jun 2023 13:21:00 -0500 Subject: [PATCH 29/49] fix(ui): Resize Emby icon and add margins --- src/assets/services/emby.svg | 73 +++++++++--------------------------- 1 file changed, 17 insertions(+), 56 deletions(-) diff --git a/src/assets/services/emby.svg b/src/assets/services/emby.svg index e68d69ac..9db72842 100644 --- a/src/assets/services/emby.svg +++ b/src/assets/services/emby.svg @@ -1,61 +1,15 @@ + viewBox="0 0 712.60077 712.5481" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - - - - - - - - - - + id="defs4" /> @@ -64,15 +18,22 @@ image/svg+xml - + + id="layer1" + transform="matrix(0.70249853,0,0,0.70249853,88.77116,96.84571)"> From 1fe4bb8a0415a72791ced75a2fba1027287398d5 Mon Sep 17 00:00:00 2001 From: Jesse Boswell Date: Mon, 5 Jun 2023 18:44:42 -0500 Subject: [PATCH 30/49] fix(ui): Make play symbol white --- src/assets/services/emby.svg | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/assets/services/emby.svg b/src/assets/services/emby.svg index 9db72842..eddc540c 100644 --- a/src/assets/services/emby.svg +++ b/src/assets/services/emby.svg @@ -26,11 +26,18 @@ id="rect249" width="712.60077" height="712.5481" - x="1e-06" - y="-2.8421709e-14" /> + x="-0.00071160076" + y="2.0223413e-11" /> + + transform="matrix(0.70249853,0,0,0.70249853,88.770447,96.84571)"> Date: Mon, 5 Jun 2023 23:05:54 -0500 Subject: [PATCH 31/49] feat(settings): add internal url to jellyfin settings form re #194 --- src/components/Settings/SettingsJellyfin.tsx | 30 +++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/components/Settings/SettingsJellyfin.tsx b/src/components/Settings/SettingsJellyfin.tsx index f4834582..d843510f 100644 --- a/src/components/Settings/SettingsJellyfin.tsx +++ b/src/components/Settings/SettingsJellyfin.tsx @@ -30,8 +30,9 @@ const messages = defineMessages({ jellyfinSettingsSuccess: '{mediaServerName} settings saved successfully!', jellyfinSettings: '{mediaServerName} Settings', jellyfinSettingsDescription: - 'Optionally configure an external player endpoint for your {mediaServerName} server that is different to the internal URL used during setup', + 'Optionally configure the internal and external endpoints for your {mediaServerName} server. In most cases, the external URL is different to the internal URL.', externalUrl: 'External URL', + internalUrl: 'Internal URL', validationUrl: 'You must provide a valid URL', syncing: 'Syncing', syncJellyfin: 'Sync Libraries', @@ -89,6 +90,10 @@ const SettingsJellyfin: React.FC = ({ /^(?:(?:(?:https?):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/, intl.formatMessage(messages.validationUrl) ), + jellyfinInternalUrl: Yup.string().matches( + /^(?:(?:(?:https?):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/, + intl.formatMessage(messages.validationUrl) + ), }); const activeLibraries = @@ -346,12 +351,14 @@ const SettingsJellyfin: React.FC = ({
    { try { await axios.post('/api/v1/settings/jellyfin', { + hostname: values.jellyfinInternalUrl, externalHostname: values.jellyfinExternalUrl, } as JellyfinSettings); @@ -388,6 +395,27 @@ const SettingsJellyfin: React.FC = ({ {({ errors, touched, handleSubmit, isSubmitting, isValid }) => { return ( +
    + +
    +
    + +
    + {errors.jellyfinInternalUrl && + touched.jellyfinInternalUrl && ( +
    + {errors.jellyfinInternalUrl} +
    + )} +
    +
    {errors.host && touched.host && (
    {errors.host}
    )}
    -