diff --git a/package.json b/package.json index 02a2912..78d9aa9 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@mui/material": "^5.10.9", "@mui/x-date-pickers": "^6.0.1", "@originjs/vite-plugin-commonjs": "^1.0.3", + "@react-hookz/web": "^23.0.0", "@tanstack/react-query": "^4.12.0", "axios": "^1.1.2", "axios-case-converter": "^0.11.1", diff --git a/src/components/AppLoadingScreen/AppLoadingScreen.tsx b/src/components/AppLoadingScreen/AppLoadingScreen.tsx index bf3b6c8..3b0c7e3 100644 --- a/src/components/AppLoadingScreen/AppLoadingScreen.tsx +++ b/src/components/AppLoadingScreen/AppLoadingScreen.tsx @@ -1,5 +1,4 @@ import {ReactElement, useMemo} from "react" -import {useAsyncFn} from "react-use" import AppLoadingScreenContext, {AppLoadingScreenContextType} from "./AppLoadingScreenContext" diff --git a/src/components/AuthContext/AuthContextProvider.tsx b/src/components/AuthContext/AuthContextProvider.tsx index 9ca2205..a5ddd70 100644 --- a/src/components/AuthContext/AuthContextProvider.tsx +++ b/src/components/AuthContext/AuthContextProvider.tsx @@ -1,7 +1,8 @@ import {ReactElement, ReactNode, useCallback} from "react" -import {useLocalStorage} from "react-use" import fastHashCode from "fast-hash-code" +import {useLocalStorageValue} from "@react-hookz/web" + import {ServerUser, User} from "~/server-types" import AuthContext from "./AuthContext" @@ -16,10 +17,13 @@ export interface AuthContextProviderProps { } export default function AuthContextProvider({children}: AuthContextProviderProps): ReactElement { - const [user, setUser] = useLocalStorage( - "_global-context-auth-user", - null, - ) + const { + value: user, + set: setUser, + remove: removeUser, + } = useLocalStorageValue("_global-context-auth-user", { + defaultValue: null, + }) const { encryptUsingMasterPassword, decryptUsingMasterPassword, @@ -37,8 +41,8 @@ export default function AuthContextProvider({children}: AuthContextProviderProps const logout = useCallback(() => { localStorage.removeItem("signup-form-state-email") logoutMasterPassword() - setUser(null) - }, [logoutMasterPassword]) + removeUser() + }, [logoutMasterPassword, removeUser]) const contextValue = useContextValue({ _decryptUsingPrivateKey: decryptUsingPrivateKey, @@ -55,6 +59,7 @@ export default function AuthContextProvider({children}: AuthContextProviderProps logout, decryptUsingMasterPassword, user: user || null, + // @ts-ignore: `undefined` should not be passed updateUser: setUser, masterPasswordHash: passwordHash, }) diff --git a/src/components/AuthContext/use-context-value.ts b/src/components/AuthContext/use-context-value.ts index 4d13092..19e0955 100644 --- a/src/components/AuthContext/use-context-value.ts +++ b/src/components/AuthContext/use-context-value.ts @@ -1,5 +1,6 @@ import {Dispatch, SetStateAction, useMemo, useRef} from "react" -import {useUpdateEffect} from "react-use" + +import {useUpdateEffect} from "@react-hookz/web" import {ServerUser, User} from "~/server-types" import {AuthContextType, EncryptionStatus} from "~/components" diff --git a/src/components/AuthContext/use-extension-handler.ts b/src/components/AuthContext/use-extension-handler.ts index c3a3f5e..210ea69 100644 --- a/src/components/AuthContext/use-extension-handler.ts +++ b/src/components/AuthContext/use-extension-handler.ts @@ -1,6 +1,7 @@ import {useCallback, useRef, useState} from "react" import {useNavigate} from "react-router-dom" -import {useEvent} from "react-use" + +import {useEventListener} from "@react-hookz/web" import {ExtensionKleckEvent} from "~/extension-types" import {User} from "~/server-types" @@ -102,7 +103,9 @@ export default function useExtensionHandler( [dispatchPasswordStatus], ) - useEvent("kleckrelay-kleck", handleExtensionEvent) + useEventListener(window, "kleckrelay-kleck", handleExtensionEvent, { + passive: true, + }) return { sharePassword: () => { diff --git a/src/components/AuthContext/use-master-password.ts b/src/components/AuthContext/use-master-password.ts index d8f1c72..4d41f3c 100644 --- a/src/components/AuthContext/use-master-password.ts +++ b/src/components/AuthContext/use-master-password.ts @@ -1,8 +1,9 @@ -import {useLocalStorage} from "react-use" import {Dispatch, SetStateAction, useCallback} from "react" import {decrypt, readMessage, readPrivateKey} from "openpgp" import fastHashCode from "fast-hash-code" +import {useLocalStorageValue} from "@react-hookz/web" + import {decryptString, encryptString} from "~/utils" import {ServerUser, User} from "~/server-types" @@ -19,10 +20,13 @@ export interface UseMasterPasswordResult { } export default function useMasterPassword(user: User | ServerUser | null): UseMasterPasswordResult { - const [encryptionPassword, setEncryptionPassword] = useLocalStorage( - "_global-context-auth-encryption-password", - null, - ) + const { + value: encryptionPassword, + remove: removeEncryptionPassword, + set: setEncryptionPassword, + } = useLocalStorageValue("_global-context-auth-encryption-password", { + defaultValue: null, + }) const encryptUsingMasterPassword = useCallback( (content: string) => { @@ -70,9 +74,7 @@ export default function useMasterPassword(user: User | ServerUser | null): UseMa [user], ) - const logout = useCallback(() => { - setEncryptionPassword(null) - }, []) + const logout = removeEncryptionPassword return { encryptUsingMasterPassword, diff --git a/src/components/LockNavigation/FormikAutoLockNavigation.tsx b/src/components/LockNavigation/FormikAutoLockNavigation.tsx index 37fbd71..a9e1d86 100644 --- a/src/components/LockNavigation/FormikAutoLockNavigation.tsx +++ b/src/components/LockNavigation/FormikAutoLockNavigation.tsx @@ -1,8 +1,9 @@ import {FormikContextType} from "formik" import {useContext} from "react" -import {useShallowCompareEffect} from "react-use" import deepEqual from "deep-equal" +import {useUpdateEffect} from "@react-hookz/web" + import LockNavigationContext from "./LockNavigationContext" export interface LockNavigationContextProviderProps { @@ -17,7 +18,7 @@ export default function FormikAutoLockNavigation({ }: LockNavigationContextProviderProps): null { const {lock, release} = useContext(LockNavigationContext) - useShallowCompareEffect(() => { + useUpdateEffect(() => { if (!deepEqual(formik.values, formik.initialValues) && active) { lock() } else { diff --git a/src/components/widgets/ErrorSnack.tsx b/src/components/widgets/ErrorSnack.tsx index 0bfdd4e..5e7bd7a 100644 --- a/src/components/widgets/ErrorSnack.tsx +++ b/src/components/widgets/ErrorSnack.tsx @@ -1,6 +1,6 @@ -import {usePrevious} from "react-use" import React, {ReactElement, useEffect, useState} from "react" +import {usePrevious} from "@react-hookz/web" import {Alert, Snackbar} from "@mui/material" export interface ErrorSnackProps { diff --git a/src/components/widgets/SuccessSnack.tsx b/src/components/widgets/SuccessSnack.tsx index 807f326..090b239 100644 --- a/src/components/widgets/SuccessSnack.tsx +++ b/src/components/widgets/SuccessSnack.tsx @@ -1,6 +1,6 @@ -import {usePrevious} from "react-use" import React, {ReactElement, useEffect, useState} from "react" +import {usePrevious} from "@react-hookz/web" import {Alert, Snackbar} from "@mui/material" export interface SuccessSnackProps { diff --git a/src/hooks/use-extension-handler.ts b/src/hooks/use-extension-handler.ts index b99731a..3f21e56 100644 --- a/src/hooks/use-extension-handler.ts +++ b/src/hooks/use-extension-handler.ts @@ -1,5 +1,6 @@ import {useCallback} from "react" -import {useEvent} from "react-use" + +import {useEventListener} from "@react-hookz/web" import {ExtensionKleckEvent, ExtensionKleckMessageLatestAlias} from "~/extension-types" @@ -30,5 +31,7 @@ export default function useExtensionHandler({ [onEnterPassword, onRefetchAliases, onLatestAliasChange], ) - useEvent("kleckrelay-kleck", handleExtensionEvent) + useEventListener(window, "kleckrelay-kleck", handleExtensionEvent, { + passive: true, + }) } diff --git a/src/hooks/use-is-any-input-focused.ts b/src/hooks/use-is-any-input-focused.ts index 8dbb469..b1370b5 100644 --- a/src/hooks/use-is-any-input-focused.ts +++ b/src/hooks/use-is-any-input-focused.ts @@ -1,5 +1,6 @@ import {useCallback, useState} from "react" -import {useEvent} from "react-use" + +import {useEventListener} from "@react-hookz/web" export default function useIsAnyInputFocused(): boolean { const [isFocused, setIsFocused] = useState(false) @@ -14,8 +15,8 @@ export default function useIsAnyInputFocused(): boolean { setIsFocused(false) }, []) - useEvent("focus", focusHandler, window, {capture: true}) - useEvent("blur", blurHandler, window, {capture: true}) + useEventListener(window, "focus", focusHandler, {capture: true}) + useEventListener(window, "blur", blurHandler, {capture: true}) return isFocused } diff --git a/src/hooks/use-ui-state.ts b/src/hooks/use-ui-state.ts index b8473a5..718f4d4 100644 --- a/src/hooks/use-ui-state.ts +++ b/src/hooks/use-ui-state.ts @@ -1,5 +1,6 @@ import {Dispatch, SetStateAction, useState} from "react" -import {useUpdateEffect} from "react-use" + +import {useUpdateEffect} from "@react-hookz/web" export default function useUIState(outerValue: T): [T, Dispatch>] { const [value, setValue] = useState(outerValue) diff --git a/src/hooks/use-window-visible.ts b/src/hooks/use-window-visible.ts index 7764499..2a72b43 100644 --- a/src/hooks/use-window-visible.ts +++ b/src/hooks/use-window-visible.ts @@ -1,5 +1,5 @@ import {useCallback, useState} from "react" -import {useEvent} from "react-use" +import {useEventListener} from "@react-hookz/web" export default function useWindowVisible(isVisibleByDefault = true): boolean { const [isVisible, setIsVisible] = useState(isVisibleByDefault) @@ -8,7 +8,7 @@ export default function useWindowVisible(isVisibleByDefault = true): boolean { setIsVisible(document.visibilityState === "visible") }, []) - useEvent("visibilitychange", handleVisibilityChange, document) + useEventListener(document, "visibilitychange", handleVisibilityChange) return isVisible } diff --git a/src/route-widgets/GlobalSettingsRoute/RandomAliasGenerator.tsx b/src/route-widgets/GlobalSettingsRoute/RandomAliasGenerator.tsx index d2be605..faf2e67 100644 --- a/src/route-widgets/GlobalSettingsRoute/RandomAliasGenerator.tsx +++ b/src/route-widgets/GlobalSettingsRoute/RandomAliasGenerator.tsx @@ -1,9 +1,9 @@ import {useLoaderData} from "react-router-dom" import {ReactElement, useCallback, useState} from "react" -import {useUpdateEffect} from "react-use" import {BiRefresh} from "react-icons/bi" import {useTranslation} from "react-i18next" +import {useUpdateEffect} from "@react-hookz/web" import {Alert, FormHelperText, Grid, IconButton, Typography, useTheme} from "@mui/material" import {ServerSettings} from "~/server-types" diff --git a/src/route-widgets/LoginRoute/ConfirmCodeForm/ConfirmCodeForm.tsx b/src/route-widgets/LoginRoute/ConfirmCodeForm/ConfirmCodeForm.tsx index 94ffa78..fb226ad 100644 --- a/src/route-widgets/LoginRoute/ConfirmCodeForm/ConfirmCodeForm.tsx +++ b/src/route-widgets/LoginRoute/ConfirmCodeForm/ConfirmCodeForm.tsx @@ -6,10 +6,10 @@ import {FaHashtag} from "react-icons/fa" import {MdChevronRight, MdMail} from "react-icons/md" import {useLoaderData} from "react-router-dom" import {useTranslation} from "react-i18next" -import {useEffectOnce} from "react-use" import differenceInSeconds from "date-fns/differenceInSeconds" import inMilliseconds from "in-milliseconds" +import {useMountEffect} from "@react-hookz/web" import {useMutation} from "@tanstack/react-query" import { Alert, @@ -142,7 +142,7 @@ export default function ConfirmCodeForm({ } }, [requestDate]) - useEffectOnce(() => { + useMountEffect(() => { const preCheck = setInterval(checkExpiration, inMilliseconds.seconds(isDev ? 1 : 20)) const finalCheck = setTimeout(checkExpiration, inMilliseconds.seconds(expirationTime)) diff --git a/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx b/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx index c05bf8e..331f679 100644 --- a/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx +++ b/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx @@ -1,8 +1,8 @@ import {ReactElement} from "react" import {AxiosError} from "axios" -import {useMount} from "react-use" import {useTranslation} from "react-i18next" +import {useMountEffect} from "@react-hookz/web" import {useMutation} from "@tanstack/react-query" import {Box, Grid, Paper, Typography} from "@mui/material" @@ -34,7 +34,7 @@ export default function ConfirmFromDifferentDevice({ }, ) - useMount(mutate) + useMountEffect(mutate) if (isLoading) { return ( diff --git a/src/route-widgets/SignupRoute/EmailForm/DetectEmailAutofillService.tsx b/src/route-widgets/SignupRoute/EmailForm/DetectEmailAutofillService.tsx index 7cf4284..67660ea 100644 --- a/src/route-widgets/SignupRoute/EmailForm/DetectEmailAutofillService.tsx +++ b/src/route-widgets/SignupRoute/EmailForm/DetectEmailAutofillService.tsx @@ -1,7 +1,8 @@ import {MdCheck} from "react-icons/md" -import {useSessionStorage} from "react-use" +import {useTranslation} from "react-i18next" import React, {ReactElement, useCallback, useEffect, useRef, useState} from "react" +import {useSessionStorageValue} from "@react-hookz/web" import { Alert, Button, @@ -12,7 +13,6 @@ import { DialogTitle, Grid, } from "@mui/material" -import {useTranslation} from "react-i18next" export interface DetectEmailAutofillServiceProps { domains: string[] @@ -38,7 +38,12 @@ export default function DetectEmailAutofillService({ const $hasDetected = useRef(false) const [type, setType] = useState(null) - const [hasShownModal, setHasShownModal] = useSessionStorage(STORAGE_KEY, false) + const {value: hasShownModal, set: setHasShownModal} = useSessionStorageValue( + STORAGE_KEY, + { + defaultValue: false, + }, + ) const handleFound = useCallback( (type: AliasType) => { @@ -50,7 +55,7 @@ export default function DetectEmailAutofillService({ } } }, - [domains.length, hasShownModal], + [domains.length, hasShownModal, setHasShownModal], ) useEffect(() => { diff --git a/src/routes/AliasesRoute.tsx b/src/routes/AliasesRoute.tsx index 7bffdfe..dd1fec4 100644 --- a/src/routes/AliasesRoute.tsx +++ b/src/routes/AliasesRoute.tsx @@ -2,7 +2,8 @@ import {ReactElement, useCallback, useState, useTransition} from "react" import {AxiosError} from "axios" import {MdSearch} from "react-icons/md" import {useTranslation} from "react-i18next" -import {useCopyToClipboard, useEffectOnce, useKeyPress, useUpdateEffect} from "react-use" +import {useMountEffect, useUpdateEffect} from "@react-hookz/web" +import {useCopyToClipboard, useKeyPress} from "react-use" import {useQuery} from "@tanstack/react-query" import {Alert, Chip, Grid, InputAdornment, List, Snackbar, TextField} from "@mui/material" @@ -119,7 +120,7 @@ export default function AliasesRoute(): ReactElement { }, [latestAliasId]) // Fetch the latest alias - useEffectOnce(() => { + useMountEffect(() => { window.dispatchEvent( new CustomEvent("kleckrelay-blob", { detail: { diff --git a/src/routes/LoginRoute.tsx b/src/routes/LoginRoute.tsx index 7b4fda3..7e20d00 100644 --- a/src/routes/LoginRoute.tsx +++ b/src/routes/LoginRoute.tsx @@ -1,6 +1,7 @@ import {ReactElement, useContext, useState} from "react" import {useNavigate} from "react-router-dom" -import {useUpdateEffect} from "react-use" + +import {useUpdateEffect} from "@react-hookz/web" import {AuthContext, MultiStepForm} from "~/components" import {useQueryParams} from "~/hooks" diff --git a/src/routes/LogoutRoute.tsx b/src/routes/LogoutRoute.tsx index 29021bc..62e7680 100644 --- a/src/routes/LogoutRoute.tsx +++ b/src/routes/LogoutRoute.tsx @@ -1,7 +1,7 @@ import {ReactElement, useContext} from "react" import {useTranslation} from "react-i18next" -import {useEffectOnce} from "react-use" +import {useMountEffect} from "@react-hookz/web" import {Box, CircularProgress, Grid, Paper, Typography} from "@mui/material" import {useNavigateToNext} from "~/hooks" @@ -12,7 +12,7 @@ export default function LogoutRoute(): ReactElement { const navigateToNext = useNavigateToNext("/auth/login") const {logout} = useContext(AuthContext) - useEffectOnce(() => { + useMountEffect(() => { logout() navigateToNext() }) diff --git a/src/routes/SignupRoute.tsx b/src/routes/SignupRoute.tsx index da4afc4..4d0ef7a 100644 --- a/src/routes/SignupRoute.tsx +++ b/src/routes/SignupRoute.tsx @@ -1,7 +1,8 @@ import {ReactElement} from "react" -import {useLocalStorage} from "react-use" import {useLoaderData} from "react-router-dom" +import {useLocalStorageValue} from "@react-hookz/web" + import {MultiStepForm} from "~/components" import {ServerSettings} from "~/server-types" import EmailForm from "~/route-widgets/SignupRoute/EmailForm" @@ -10,7 +11,13 @@ import YouGotMail from "~/route-widgets/SignupRoute/YouGotMail" export default function SignupRoute(): ReactElement { const serverSettings = useLoaderData() as ServerSettings - const [email, setEmail] = useLocalStorage("signup-form-state-email", "") + const { + value: email, + set: setEmail, + remove: removeEmail, + } = useLocalStorageValue("signup-form-state-email", { + defaultValue: "", + }) const index = email ? 1 : 0 @@ -22,7 +29,7 @@ export default function SignupRoute(): ReactElement { , - setEmail("")} email={email || ""} key="you_got_mail" />, + removeEmail} email={email!} key="you_got_mail" />, ]} index={index} /> diff --git a/src/routes/VerifyEmailRoute.tsx b/src/routes/VerifyEmailRoute.tsx index 7c28982..f107f34 100644 --- a/src/routes/VerifyEmailRoute.tsx +++ b/src/routes/VerifyEmailRoute.tsx @@ -1,6 +1,6 @@ import * as yup from "yup" import {useLoaderData, useNavigate} from "react-router-dom" -import {useAsync, useLocalStorage} from "react-use" +import {useAsync} from "react-use" import {MdCancel} from "react-icons/md" import {AxiosError} from "axios" import {useTranslation} from "react-i18next" @@ -22,7 +22,6 @@ export default function VerifyEmailRoute(): ReactElement { const navigate = useNavigate() const {login} = useContext(AuthContext) - const [_, setEmail] = useLocalStorage("signup-form-state-email", "") const {email, token} = useQueryParams<{ email: string token: string diff --git a/yarn.lock b/yarn.lock index 9763a1a..f6a4af7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -450,7 +450,14 @@ "@babel/plugin-syntax-jsx" "^7.18.6" "@babel/types" "^7.19.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.1.2": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== @@ -1229,6 +1236,18 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== +"@react-hookz/deep-equal@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@react-hookz/deep-equal/-/deep-equal-1.0.4.tgz#68a71f36cbc88724b3ce6f4036183778b6e7f282" + integrity sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg== + +"@react-hookz/web@^23.0.0": + version "23.0.0" + resolved "https://registry.npmjs.org/@react-hookz/web/-/web-23.0.0.tgz#d0470de7f9ec4f6eaedd2c13b9fb474d8f3a0d09" + integrity sha512-diBtlo17CJtZJ/Yb8veri7hZL7QPnqNZ+IAMHWWSb//nq+Z3XDHaXcozH7cyvMZj4gYwQeY/L/H4298etHxu1Q== + dependencies: + "@react-hookz/deep-equal" "^1.0.4" + "@remix-run/router@1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.2.tgz#1c17eadb2fa77f80a796ad5ea9bf108e6993ef06" @@ -1466,7 +1485,7 @@ "@types/js-cookie@^2.2.6": version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" + resolved "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== "@types/jsdom@^20.0.0": @@ -1712,7 +1731,7 @@ "@xobotyi/scrollbar-width@^1.9.5": version "1.9.5" - resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" + resolved "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== abab@^2.0.6: @@ -2188,9 +2207,9 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== copy-to-clipboard@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz#5b263ec2366224b100181dded7ce0579b340c107" - integrity sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg== + version "3.3.3" + resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" @@ -2242,17 +2261,16 @@ crypto-js@^4.1.1: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== -css-in-js-utils@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" - integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== +css-in-js-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz#640ae6a33646d401fc720c54fc61c42cd76ae2bb" + integrity sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A== dependencies: - hyphenate-style-name "^1.0.2" - isobject "^3.0.1" + hyphenate-style-name "^1.0.3" css-tree@^1.1.2: version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" @@ -2275,11 +2293,16 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2, csstype@^3.0.6, csstype@^3.1.1: +csstype@^3.0.2, csstype@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== +csstype@^3.0.6: + version "3.1.2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -2443,7 +2466,7 @@ error-ex@^1.3.1: error-stack-parser@^2.0.6: version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" @@ -3032,14 +3055,19 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-loops@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz#ce96adb86d07e7bf9b4822ab9c6fac9964981f75" + integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== + fast-shallow-equal@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" + resolved "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== fastest-stable-stringify@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" + resolved "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== fastq@^1.6.0: @@ -3367,9 +3395,9 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -hyphenate-style-name@^1.0.2: +hyphenate-style-name@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== i18next-browser-languagedetector@^7.0.0: @@ -3460,11 +3488,12 @@ inherits@2, inherits@^2.0.1: integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inline-style-prefixer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.1.tgz#c5c0e43ba8831707afc5f5bbfd97edf45c1fa7ae" - integrity sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ== + version "6.0.4" + resolved "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz#4290ed453ab0e4441583284ad86e41ad88384f44" + integrity sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg== dependencies: - css-in-js-utils "^2.0.0" + css-in-js-utils "^3.1.0" + fast-loops "^1.1.3" internal-slot@^1.0.3: version "1.0.3" @@ -3651,11 +3680,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -4075,7 +4099,7 @@ jest@^29.3.1: js-cookie@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: @@ -4289,7 +4313,7 @@ map-obj@^4.3.0: mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== merge-stream@^2.0.0: @@ -4346,7 +4370,7 @@ ms@2.1.2: nano-css@^5.3.1: version "5.3.5" - resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.5.tgz#3075ea29ffdeb0c7cb6d25edb21d8f7fa8e8fe8e" + resolved "https://registry.npmjs.org/nano-css/-/nano-css-5.3.5.tgz#3075ea29ffdeb0c7cb6d25edb21d8f7fa8e8fe8e" integrity sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg== dependencies: css-tree "^1.1.2" @@ -4831,12 +4855,12 @@ react-transition-group@^4.4.5: react-universal-interface@^0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" + resolved "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== react-use@^17.4.0: version "17.4.0" - resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.4.0.tgz#cefef258b0a6c534a5c8021c2528ac6e1a4cdc6d" + resolved "https://registry.npmjs.org/react-use/-/react-use-17.4.0.tgz#cefef258b0a6c534a5c8021c2528ac6e1a4cdc6d" integrity sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q== dependencies: "@types/js-cookie" "^2.2.6" @@ -4897,7 +4921,7 @@ requires-port@^1.0.0: resize-observer-polyfill@^1.5.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-cwd@^3.0.0: @@ -4960,9 +4984,9 @@ rollup@~2.78.0: fsevents "~2.3.2" rtl-css-js@^1.14.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.0.tgz#e8d682982441aadb63cabcb2f7385f3fb78ff26e" - integrity sha512-Oc7PnzwIEU4M0K1J4h/7qUUaljXhQ0kCObRsZjxs2HjkpKsnoTMvSmvJ4sqgJZd0zBoEfAyTdnK/jMIYvrjySQ== + version "1.16.1" + resolved "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80" + integrity sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg== dependencies: "@babel/runtime" "^7.1.2" @@ -5003,7 +5027,7 @@ scheduler@^0.23.0: screenfull@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" + resolved "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== secure-random-password@^0.2.3: @@ -5039,7 +5063,7 @@ semver@^6.0.0, semver@^6.3.0: set-harmonic-interval@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" + resolved "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== shebang-command@^2.0.0: @@ -5109,7 +5133,7 @@ source-map-support@0.5.13: source-map@0.5.6: version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== source-map@^0.5.7: @@ -5134,7 +5158,7 @@ sprintf-js@~1.0.2: stack-generator@^2.0.5: version "2.0.10" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + resolved "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== dependencies: stackframe "^1.3.4" @@ -5148,12 +5172,12 @@ stack-utils@^2.0.3: stackframe@^1.3.4: version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== stacktrace-gps@^3.0.4: version "3.1.2" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + resolved "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== dependencies: source-map "0.5.6" @@ -5161,7 +5185,7 @@ stacktrace-gps@^3.0.4: stacktrace-js@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + resolved "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== dependencies: error-stack-parser "^2.0.6" @@ -5245,9 +5269,9 @@ stylis@4.0.13: integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== stylis@^4.0.6: - version "4.1.2" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.2.tgz#870b3c1c2275f51b702bb3da9e94eedad87bba41" - integrity sha512-Nn2CCrG2ZaFziDxaZPN43CXqn+j7tcdjPFCkRBkFue8QYXC2HdEwnw5TCBo4yQZ2WxKYeSi0fdoOrtEqgDrXbA== + version "4.2.0" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== supports-color@^5.3.0: version "5.5.0" @@ -5301,7 +5325,7 @@ text-table@^0.2.0: throttle-debounce@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" + resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== tiny-warning@^1.0.2: @@ -5328,7 +5352,7 @@ to-regex-range@^5.0.1: toggle-selection@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== toposort@^2.0.2: @@ -5360,7 +5384,7 @@ tr46@~0.0.3: ts-easing@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" + resolved "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== ts-jest@^29.0.3: @@ -5387,11 +5411,16 @@ tslib@^2.0.0, tslib@^2.4.0, tslib@^2.4.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: +tslib@^2.0.3, tslib@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.1.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"