fix: Migrate easy stuff to react-hookz/web

This commit is contained in:
Myzel394 2023-05-06 22:40:52 +02:00
parent 0395bce5dd
commit ed73897519
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
23 changed files with 160 additions and 101 deletions

View File

@ -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",

View File

@ -1,5 +1,4 @@
import {ReactElement, useMemo} from "react"
import {useAsyncFn} from "react-use"
import AppLoadingScreenContext, {AppLoadingScreenContextType} from "./AppLoadingScreenContext"

View File

@ -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<ServerUser | User | null>(
"_global-context-auth-user",
null,
)
const {
value: user,
set: setUser,
remove: removeUser,
} = useLocalStorageValue<ServerUser | User | null>("_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,
})

View File

@ -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"

View File

@ -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: () => {

View File

@ -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<string | null>(
"_global-context-auth-encryption-password",
null,
)
const {
value: encryptionPassword,
remove: removeEncryptionPassword,
set: setEncryptionPassword,
} = useLocalStorageValue<string | null>("_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,

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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,
})
}

View File

@ -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<boolean>(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
}

View File

@ -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<T>(outerValue: T): [T, Dispatch<SetStateAction<T>>] {
const [value, setValue] = useState<T>(outerValue)

View File

@ -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<boolean>(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
}

View File

@ -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"

View File

@ -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))

View File

@ -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 (

View File

@ -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<boolean>(false)
const [type, setType] = useState<AliasType | null>(null)
const [hasShownModal, setHasShownModal] = useSessionStorage<boolean>(STORAGE_KEY, false)
const {value: hasShownModal, set: setHasShownModal} = useSessionStorageValue<boolean>(
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(() => {

View File

@ -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: {

View File

@ -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"

View File

@ -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()
})

View File

@ -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<string>("signup-form-state-email", "")
const {
value: email,
set: setEmail,
remove: removeEmail,
} = useLocalStorageValue<string>("signup-form-state-email", {
defaultValue: "",
})
const index = email ? 1 : 0
@ -22,7 +29,7 @@ export default function SignupRoute(): ReactElement {
<MultiStepForm
steps={[
<EmailForm serverSettings={serverSettings} onSignUp={setEmail} key="email" />,
<YouGotMail onGoBack={() => setEmail("")} email={email || ""} key="you_got_mail" />,
<YouGotMail onGoBack={() => removeEmail} email={email!} key="you_got_mail" />,
]}
index={index}
/>

View File

@ -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<string>("signup-form-state-email", "")
const {email, token} = useQueryParams<{
email: string
token: string

131
yarn.lock
View File

@ -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"