From 8826af3859077adf3c97920129b4561a38234e78 Mon Sep 17 00:00:00 2001 From: katspaugh <381895+katspaugh@users.noreply.github.com> Date: Mon, 7 Aug 2023 13:38:39 +0200 Subject: [PATCH] Fix: prevent key prop warning in EthHashInfo (#2351) * Fix: prevent key prop warning in EthHashInfo Fix: prevent key prop warning in EthHashInfo Fix: prevent key prop warning in EthHashInfo * Fix tests * PR comments --- package.json | 6 +- .../SrcEthHashInfo/CopyAddressButton.tsx | 14 +++ .../EthHashInfo/SrcEthHashInfo/index.tsx | 96 +++++++++++++++ .../SrcEthHashInfo/styles.module.css | 22 ++++ src/components/common/EthHashInfo/index.tsx | 11 +- .../common/ExplorerButton/index.tsx | 27 +++++ src/components/common/ImageFallback/index.tsx | 19 ++- .../settings/DelegatesList/index.tsx | 4 +- .../sidebar/SidebarHeader/index.tsx | 12 +- .../sidebar/SidebarHeader/styles.module.css | 1 + .../tx-flow/flows/AddOwner/ChooseOwner.tsx | 2 +- .../flows/RemoveOwner/ReviewRemoveOwner.tsx | 2 +- .../ApprovalEditorForm.test.tsx | 8 +- .../tx/ApprovalEditor/ApprovalItem.tsx | 4 +- .../tx/security/redefine/useRedefine.ts | 7 +- src/hooks/useSafeTokenAllocation.ts | 2 + yarn.lock | 114 ++++++++++-------- 17 files changed, 262 insertions(+), 89 deletions(-) create mode 100644 src/components/common/EthHashInfo/SrcEthHashInfo/CopyAddressButton.tsx create mode 100644 src/components/common/EthHashInfo/SrcEthHashInfo/index.tsx create mode 100644 src/components/common/EthHashInfo/SrcEthHashInfo/styles.module.css create mode 100644 src/components/common/ExplorerButton/index.tsx diff --git a/package.json b/package.json index a782ecfee1..a64be9f03e 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "@emotion/react": "^11.10.0", "@emotion/server": "^11.10.0", "@emotion/styled": "^11.10.0", - "@mui/icons-material": "^5.8.4", - "@mui/material": "^5.13.5", + "@mui/icons-material": "^5.14.3", + "@mui/material": "^5.14.3", "@mui/x-date-pickers": "^5.0.12", "@reduxjs/toolkit": "^1.9.5", "@safe-global/safe-apps-sdk": "7.11.0", @@ -52,7 +52,7 @@ "@safe-global/safe-ethers-lib": "^1.9.4", "@safe-global/safe-gateway-typescript-sdk": "^3.8.0", "@safe-global/safe-modules-deployments": "^1.0.0", - "@safe-global/safe-react-components": "^2.0.5", + "@safe-global/safe-react-components": "^2.0.6", "@sentry/react": "^7.28.1", "@sentry/tracing": "^7.28.1", "@truffle/hdwallet-provider": "^2.1.4", diff --git a/src/components/common/EthHashInfo/SrcEthHashInfo/CopyAddressButton.tsx b/src/components/common/EthHashInfo/SrcEthHashInfo/CopyAddressButton.tsx new file mode 100644 index 0000000000..f432cf1028 --- /dev/null +++ b/src/components/common/EthHashInfo/SrcEthHashInfo/CopyAddressButton.tsx @@ -0,0 +1,14 @@ +import CopyButton from '../../CopyButton' + +type CopyAddressButtonProps = { + prefix?: string + address: string + copyPrefix?: boolean +} + +const CopyAddressButton = ({ prefix, address, copyPrefix }: CopyAddressButtonProps): React.ReactElement => { + const addressText = copyPrefix && prefix ? `${prefix}:${address}` : address + return +} + +export default CopyAddressButton diff --git a/src/components/common/EthHashInfo/SrcEthHashInfo/index.tsx b/src/components/common/EthHashInfo/SrcEthHashInfo/index.tsx new file mode 100644 index 0000000000..71739f738d --- /dev/null +++ b/src/components/common/EthHashInfo/SrcEthHashInfo/index.tsx @@ -0,0 +1,96 @@ +import type { ReactNode, ReactElement } from 'react' +import { isAddress } from 'ethers/lib/utils' +import { useTheme } from '@mui/material/styles' +import Box from '@mui/material/Box' +import useMediaQuery from '@mui/material/useMediaQuery' +import Identicon from '../../Identicon' +import CopyAddressButton from '../../CopyAddressButton' +import ExplorerButton, { type ExplorerButtonProps } from '../../ExplorerButton' +import { shortenAddress } from '@/utils/formatters' +import ImageFallback from '../../ImageFallback' +import css from './styles.module.css' + +export type EthHashInfoProps = { + address: string + chainId?: string + name?: string | null + showAvatar?: boolean + showCopyButton?: boolean + prefix?: string + showPrefix?: boolean + copyPrefix?: boolean + shortAddress?: boolean + customAvatar?: string + hasExplorer?: boolean + avatarSize?: number + children?: ReactNode + ExplorerButtonProps?: ExplorerButtonProps +} + +const SrcEthHashInfo = ({ + address, + customAvatar, + prefix = '', + copyPrefix, + showPrefix, + shortAddress = true, + showAvatar = true, + avatarSize, + name, + showCopyButton, + hasExplorer, + ExplorerButtonProps, + children, +}: EthHashInfoProps): ReactElement => { + const shouldPrefix = isAddress(address) + const theme = useTheme() + const isMobile = useMediaQuery(theme.breakpoints.down('sm')) + + const identicon = + + return ( +
+ {showAvatar && ( +
+ {customAvatar ? ( + + ) : ( + identicon + )} +
+ )} + + + {name && ( + + {name} + + )} + +
+ + {showPrefix && shouldPrefix && prefix && {prefix}:} + {shortAddress || isMobile ? shortenAddress(address) : address} + + + {showCopyButton && ( + + )} + + {hasExplorer && ExplorerButtonProps && ( + + + + )} + + {children} +
+
+
+ ) +} + +export default SrcEthHashInfo diff --git a/src/components/common/EthHashInfo/SrcEthHashInfo/styles.module.css b/src/components/common/EthHashInfo/SrcEthHashInfo/styles.module.css new file mode 100644 index 0000000000..6fff7b5dc1 --- /dev/null +++ b/src/components/common/EthHashInfo/SrcEthHashInfo/styles.module.css @@ -0,0 +1,22 @@ +.container { + display: flex; + align-items: center; + gap: 0.5em; + line-height: 1.4; +} + +.avatarContainer { + flex-shrink: 0; +} + +.avatarContainer > * { + width: 100% !important; + height: 100% !important; +} + +.addressContainer { + display: flex; + align-items: center; + gap: 0.25em; + white-space: nowrap; +} diff --git a/src/components/common/EthHashInfo/index.tsx b/src/components/common/EthHashInfo/index.tsx index dcfd6ce100..3ae1a0e7bb 100644 --- a/src/components/common/EthHashInfo/index.tsx +++ b/src/components/common/EthHashInfo/index.tsx @@ -1,16 +1,15 @@ import { type ReactElement } from 'react' -import { EthHashInfo } from '@safe-global/safe-react-components' import useAddressBook from '@/hooks/useAddressBook' import useChainId from '@/hooks/useChainId' import { useAppSelector } from '@/store' import { selectSettings } from '@/store/settingsSlice' import { selectChainById } from '@/store/chainsSlice' import { getBlockExplorerLink } from '@/utils/chains' -import type { EthHashInfoProps } from '@safe-global/safe-react-components' import css from './styles.module.css' import { Emoji } from './AddressEmoji' +import SrcEthHashInfo, { type EthHashInfoProps } from './SrcEthHashInfo' -const PrefixedEthHashInfo = ({ +const EthHashInfo = ({ showName = true, avatarSize = 44, ...props @@ -25,7 +24,7 @@ const PrefixedEthHashInfo = ({ return (
- {props.children} - + {showEmoji && }
) } -export default PrefixedEthHashInfo +export default EthHashInfo diff --git a/src/components/common/ExplorerButton/index.tsx b/src/components/common/ExplorerButton/index.tsx new file mode 100644 index 0000000000..278a011752 --- /dev/null +++ b/src/components/common/ExplorerButton/index.tsx @@ -0,0 +1,27 @@ +import type { ReactElement, ComponentType } from 'react' +import { IconButton, SvgIcon, Tooltip } from '@mui/material' +import LinkIcon from '@/public/images/common/link.svg' + +export type ExplorerButtonProps = { + title?: string + href?: string + className?: string + icon?: ComponentType +} + +const ExplorerButton = ({ title = '', href = '', icon = LinkIcon, className }: ExplorerButtonProps): ReactElement => ( + + + + + +) + +export default ExplorerButton diff --git a/src/components/common/ImageFallback/index.tsx b/src/components/common/ImageFallback/index.tsx index 75e00d885c..03f91c9409 100644 --- a/src/components/common/ImageFallback/index.tsx +++ b/src/components/common/ImageFallback/index.tsx @@ -1,10 +1,19 @@ import type { ReactElement } from 'react' import { useState } from 'react' -type ImageFallbackProps = React.DetailedHTMLProps, HTMLImageElement> & { - fallbackSrc: string - fallbackComponent?: ReactElement -} +type ImageAttributes = React.DetailedHTMLProps, HTMLImageElement> + +type ImageFallbackProps = ImageAttributes & + ( + | { + fallbackSrc: string + fallbackComponent?: ReactElement + } + | { + fallbackSrc?: string + fallbackComponent: ReactElement + } + ) const ImageFallback = ({ src, fallbackSrc, fallbackComponent, ...props }: ImageFallbackProps): React.ReactElement => { const [isError, setIsError] = useState(false) @@ -14,7 +23,7 @@ const ImageFallback = ({ src, fallbackSrc, fallbackComponent, ...props }: ImageF return ( {props.alt} setIsError(true)} /> diff --git a/src/components/settings/DelegatesList/index.tsx b/src/components/settings/DelegatesList/index.tsx index b9ee500e7d..1610e2db82 100644 --- a/src/components/settings/DelegatesList/index.tsx +++ b/src/components/settings/DelegatesList/index.tsx @@ -2,7 +2,7 @@ import { getDelegates } from '@safe-global/safe-gateway-typescript-sdk' import useAsync from '@/hooks/useAsync' import useSafeInfo from '@/hooks/useSafeInfo' import { Box, Grid, Paper, SvgIcon, Tooltip, Typography } from '@mui/material' -import PrefixedEthHashInfo from '@/components/common/EthHashInfo' +import EthHashInfo from '@/components/common/EthHashInfo' import InfoIcon from '@/public/images/notifications/info.svg' import ExternalLink from '@/components/common/ExternalLink' import { HelpCenterArticle } from '@/config/constants' @@ -61,7 +61,7 @@ const DelegatesList = () => { style={{ listStyleType: 'none', marginBottom: '1em' }} title={`Delegated by ${item.delegator}`} > - { const currency = useAppSelector(selectCurrency) @@ -93,16 +94,7 @@ const SafeHeader = (): ReactElement => { - - - - - + diff --git a/src/components/sidebar/SidebarHeader/styles.module.css b/src/components/sidebar/SidebarHeader/styles.module.css index 05e06e5e6d..f5cf985566 100644 --- a/src/components/sidebar/SidebarHeader/styles.module.css +++ b/src/components/sidebar/SidebarHeader/styles.module.css @@ -24,6 +24,7 @@ .iconButton { border-radius: 4px; padding: 6px; + color: var(--color-primary-main); background-color: var(--color-background-main); width: 32px; height: 32px; diff --git a/src/components/tx-flow/flows/AddOwner/ChooseOwner.tsx b/src/components/tx-flow/flows/AddOwner/ChooseOwner.tsx index 73590da568..644a057c46 100644 --- a/src/components/tx-flow/flows/AddOwner/ChooseOwner.tsx +++ b/src/components/tx-flow/flows/AddOwner/ChooseOwner.tsx @@ -1,4 +1,3 @@ -import { EthHashInfo } from '@safe-global/safe-react-components' import { Box, Typography, @@ -27,6 +26,7 @@ import TxCard from '../../common/TxCard' import InfoIcon from '@/public/images/notifications/info.svg' import commonCss from '@/components/tx-flow/common/styles.module.css' import { TOOLTIP_TITLES } from '@/components/tx-flow/common/constants' +import EthHashInfo from '@/components/common/EthHashInfo' type FormData = Pick diff --git a/src/components/tx-flow/flows/RemoveOwner/ReviewRemoveOwner.tsx b/src/components/tx-flow/flows/RemoveOwner/ReviewRemoveOwner.tsx index 3c59f4b35c..676a2b1561 100644 --- a/src/components/tx-flow/flows/RemoveOwner/ReviewRemoveOwner.tsx +++ b/src/components/tx-flow/flows/RemoveOwner/ReviewRemoveOwner.tsx @@ -1,6 +1,5 @@ import { useContext, useEffect } from 'react' import { Typography, Divider, Box, Paper, SvgIcon } from '@mui/material' -import { EthHashInfo } from '@safe-global/safe-react-components' import type { ReactElement } from 'react' import SignOrExecuteForm from '@/components/tx/SignOrExecuteForm' @@ -11,6 +10,7 @@ import { createRemoveOwnerTx } from '@/services/tx/tx-sender' import MinusIcon from '@/public/images/common/minus.svg' import { SafeTxContext } from '../../SafeTxProvider' import type { RemoveOwnerFlowProps } from '.' +import EthHashInfo from '@/components/common/EthHashInfo' import commonCss from '@/components/tx-flow/common/styles.module.css' diff --git a/src/components/tx/ApprovalEditor/ApprovalEditorForm.test.tsx b/src/components/tx/ApprovalEditor/ApprovalEditorForm.test.tsx index 2b7650baa7..ea5928f06a 100644 --- a/src/components/tx/ApprovalEditor/ApprovalEditorForm.test.tsx +++ b/src/components/tx/ApprovalEditor/ApprovalEditorForm.test.tsx @@ -1,8 +1,8 @@ -import { fireEvent, getAllByRole, render, waitFor } from '@/tests/test-utils' +import { fireEvent, render, waitFor } from '@/tests/test-utils' import { hexZeroPad } from 'ethers/lib/utils' import { TokenType } from '@safe-global/safe-gateway-typescript-sdk' import { ApprovalEditorForm } from '@/components/tx/ApprovalEditor/ApprovalEditorForm' -import { getAllByTestId } from '@testing-library/dom' +import { getAllByTestId, getAllByTitle } from '@testing-library/dom' describe('ApprovalEditorForm', () => { beforeEach(() => { @@ -39,7 +39,7 @@ describe('ApprovalEditorForm', () => { expect(approvalItems).toHaveLength(2) // One button for each approval - const buttons = getAllByRole(result.container, 'button') + const buttons = getAllByTitle(result.container, 'Save') expect(buttons).toHaveLength(2) // First approval value is rendered @@ -100,7 +100,7 @@ describe('ApprovalEditorForm', () => { // Change value and save const amountInput = result.container.querySelector('input[name="approvals.0"]') as HTMLInputElement - const saveButton = result.getByRole('button') + const saveButton = result.getByTitle('Save') fireEvent.change(amountInput!, { target: { value: '100' } }) fireEvent.click(saveButton) diff --git a/src/components/tx/ApprovalEditor/ApprovalItem.tsx b/src/components/tx/ApprovalEditor/ApprovalItem.tsx index 8a75c02623..74859657e1 100644 --- a/src/components/tx/ApprovalEditor/ApprovalItem.tsx +++ b/src/components/tx/ApprovalEditor/ApprovalItem.tsx @@ -1,7 +1,7 @@ import { type ReactElement } from 'react' import { Alert, Grid, Typography } from '@mui/material' import css from '@/components/tx/ApprovalEditor/styles.module.css' -import PrefixedEthHashInfo from '@/components/common/EthHashInfo' +import EthHashInfo from '@/components/common/EthHashInfo' const ApprovalItem = ({ spender, children }: { spender: string; children: ReactElement }) => { return ( @@ -20,7 +20,7 @@ const ApprovalItem = ({ spender, children }: { spender: string; children: ReactE - + diff --git a/src/components/tx/security/redefine/useRedefine.ts b/src/components/tx/security/redefine/useRedefine.ts index 7ed4b7d39a..ec3144f1a9 100644 --- a/src/components/tx/security/redefine/useRedefine.ts +++ b/src/components/tx/security/redefine/useRedefine.ts @@ -11,8 +11,8 @@ import { import type { SecurityResponse } from '@/services/security/modules/types' import { FEATURES } from '@/utils/chains' import type { SafeTransaction } from '@safe-global/safe-core-sdk-types' -import { useState, useEffect, useMemo } from 'react' -import { type AlertColor, type SvgIconProps } from '@mui/material' +import { useState, useEffect, useMemo, type ComponentType } from 'react' +import { type AlertColor } from '@mui/material' import { SecuritySeverity } from '@/services/security/modules/types' import CloseIcon from '@/public/images/common/close.svg' import InfoIcon from '@/public/images/notifications/info.svg' @@ -31,8 +31,7 @@ const CRITICAL_ERRORS: Record = { type SecurityWarningProps = { color: AlertColor - // @ts-expect-error - Use any to avoid conflicts with @svgr/webpack plugin or babel-plugin-inline-react-svg plugin. - icon: SvgIconProps['component'] + icon: ComponentType label: string action?: string } diff --git a/src/hooks/useSafeTokenAllocation.ts b/src/hooks/useSafeTokenAllocation.ts index 2ea00d7151..75539eb71b 100644 --- a/src/hooks/useSafeTokenAllocation.ts +++ b/src/hooks/useSafeTokenAllocation.ts @@ -129,12 +129,14 @@ const useSafeTokenAllocation = (): [BigNumber | undefined, boolean] => { ), ) // If the history tag changes we could have claimed / redeemed tokens + // eslint-disable-next-line react-hooks/exhaustive-deps }, [chainId, safeAddress, safe.txHistoryTag]) const [balance, _error, balanceLoading] = useAsync(() => { if (!safeAddress) return return fetchTokenBalance(chainId, safeAddress) // If the history tag changes we could have claimed / redeemed tokens + // eslint-disable-next-line react-hooks/exhaustive-deps }, [chainId, safeAddress, safe.txHistoryTag]) const allocation = useMemo(() => { diff --git a/yarn.lock b/yarn.lock index 033773b8e0..970cab1ae0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1010,6 +1010,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.22.5", "@babel/runtime@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.18.10", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -2777,57 +2784,57 @@ "@motionone/dom" "^10.16.2" tslib "^2.3.1" -"@mui/base@5.0.0-beta.4": - version "5.0.0-beta.4" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.4.tgz#e3f4f4a056b88ab357194a245e223177ce35e0b0" - integrity sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g== +"@mui/base@5.0.0-beta.9": + version "5.0.0-beta.9" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.9.tgz#e88d7052aa6d97c1e57d5ce2a4e2edf898db90ec" + integrity sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q== dependencies: - "@babel/runtime" "^7.21.0" + "@babel/runtime" "^7.22.6" "@emotion/is-prop-valid" "^1.2.1" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.14.3" "@popperjs/core" "^2.11.8" - clsx "^1.2.1" + clsx "^2.0.0" prop-types "^15.8.1" react-is "^18.2.0" -"@mui/core-downloads-tracker@^5.13.4": - version "5.13.4" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz#7e4b491d8081b6d45ae51556d82cb16b31315a19" - integrity sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw== +"@mui/core-downloads-tracker@^5.14.3": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.3.tgz#474689f4d691993376e8a1ca07e08d4545275082" + integrity sha512-QxvrcDqphZoXRjsAmCaQylmWjC/8/qKWwIde1MJMna5YIst3R9O0qhKRPu36/OE2d8AeTbCVjRcRvNqhhW8jyg== -"@mui/icons-material@^5.8.4": - version "5.11.0" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.11.0.tgz#9ea6949278b2266d2683866069cd43009eaf6464" - integrity sha512-I2LaOKqO8a0xcLGtIozC9xoXjZAto5G5gh0FYUMAlbsIHNHIjn4Xrw9rvjY20vZonyiGrZNMAlAXYkY6JvhF6A== +"@mui/icons-material@^5.14.3": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.14.3.tgz#26a84d52ab2fceea2856adf7a139527b3a51ae90" + integrity sha512-XkxWPhageu1OPUm2LWjo5XqeQ0t2xfGe8EiLkRW9oz2LHMMZmijvCxulhgquUVTF1DnoSh+3KoDLSsoAFtVNVw== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.22.6" -"@mui/material@^5.13.5": - version "5.13.5" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.13.5.tgz#c14f14824f3a37ae0c5ebddbc0034956bc6fec30" - integrity sha512-eMay+Ue1OYXOFMQA5Aau7qbAa/kWHLAyi0McsbPTWssCbGehqkF6CIdPsfVGw6tlO+xPee1hUitphHJNL3xpOQ== +"@mui/material@^5.14.3": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.3.tgz#c88dbc270c4ebde32f9956b9b3cbf8a5d1dc7aef" + integrity sha512-dlu4SOcCp9Cy+wkcfZ/ns9ZkP40nr/WPgqxX0HmrE0o+dkE1ropY9BbHsLrTlYJCko8yzcC8bLghrD4xqZG1og== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/base" "5.0.0-beta.4" - "@mui/core-downloads-tracker" "^5.13.4" - "@mui/system" "^5.13.5" + "@babel/runtime" "^7.22.6" + "@mui/base" "5.0.0-beta.9" + "@mui/core-downloads-tracker" "^5.14.3" + "@mui/system" "^5.14.3" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" + "@mui/utils" "^5.14.3" "@types/react-transition-group" "^4.4.6" - clsx "^1.2.1" + clsx "^2.0.0" csstype "^3.1.2" prop-types "^15.8.1" react-is "^18.2.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.13.1": - version "5.13.1" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.13.1.tgz#c3e9a0b44f9c5a51b92cfcfb660536060cb61ed7" - integrity sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ== +"@mui/private-theming@^5.13.7": + version "5.13.7" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.13.7.tgz#2f8ef5da066f3c6c6423bd4260d003a28d10b099" + integrity sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/utils" "^5.13.1" + "@babel/runtime" "^7.22.5" + "@mui/utils" "^5.13.7" prop-types "^15.8.1" "@mui/styled-engine@^5.13.2": @@ -2840,17 +2847,17 @@ csstype "^3.1.2" prop-types "^15.8.1" -"@mui/system@^5.13.5": - version "5.13.5" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.13.5.tgz#9f67ea0c4f6974713f90b7b94c999fd3f40f8de3" - integrity sha512-n0gzUxoZ2ZHZgnExkh2Htvo9uW2oakofgPRQrDoa/GQOWyRD0NH9MDszBwOb6AAoXZb+OV5TE7I4LeZ/dzgHYA== +"@mui/system@^5.14.3": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.3.tgz#71aa88433649a23dfa5c102cef8a3c5b1ac40ac6" + integrity sha512-b+C+j9+75+/iIYSa+1S4eCMc9MDNrj9hzWfExJqS2GffuNocRagjBZFyjtMqsLWLxMxQIX8Cg6j0hAioiw+WfQ== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/private-theming" "^5.13.1" + "@babel/runtime" "^7.22.6" + "@mui/private-theming" "^5.13.7" "@mui/styled-engine" "^5.13.2" "@mui/types" "^7.2.4" - "@mui/utils" "^5.13.1" - clsx "^1.2.1" + "@mui/utils" "^5.14.3" + clsx "^2.0.0" csstype "^3.1.2" prop-types "^15.8.1" @@ -2870,14 +2877,14 @@ prop-types "^15.8.1" react-is "^18.2.0" -"@mui/utils@^5.13.1": - version "5.13.1" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.13.1.tgz#86199e46014215f95da046a5ec803f4a39c96eee" - integrity sha512-6lXdWwmlUbEU2jUI8blw38Kt+3ly7xkmV9ljzY4Q20WhsJMWiNry9CX8M+TaP/HbtuyR8XKsdMgQW7h7MM3n3A== +"@mui/utils@^5.13.7", "@mui/utils@^5.14.3": + version "5.14.3" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.3.tgz#76d8151c23d2c2a871e98b90add57a8fd01d5d80" + integrity sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw== dependencies: - "@babel/runtime" "^7.21.0" + "@babel/runtime" "^7.22.6" "@types/prop-types" "^15.7.5" - "@types/react-is" "^18.2.0" + "@types/react-is" "^18.2.1" prop-types "^15.8.1" react-is "^18.2.0" @@ -3273,10 +3280,10 @@ resolved "https://registry.yarnpkg.com/@safe-global/safe-modules-deployments/-/safe-modules-deployments-1.1.0.tgz#e8441d6da17ed4b29a211ecb9b97fadbd7c7ca2b" integrity sha512-UgSH/7Zcv6BJBBqoipKts6SKCPYPau9F1/arndsBYvb5Ayn28Q9cu/yiRbln2iI4VL21SIl9lcO/zRKJKl7QbQ== -"@safe-global/safe-react-components@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@safe-global/safe-react-components/-/safe-react-components-2.0.5.tgz#294b1198ef27322d74eac5f49e54652b57b6eb55" - integrity sha512-ExrE2ZAV+3qm6wi5QfEGUcb4R7rFsvP2oHcZ4k6gGZDLsvAnP8X5LMnXldriOvBjLBD3m3RoLYLfDER5hBrQ3A== +"@safe-global/safe-react-components@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@safe-global/safe-react-components/-/safe-react-components-2.0.6.tgz#795a3506b84806e43a50171e71ad5bde3a36f012" + integrity sha512-KCo/zf+xcBlXhcROQbyyscsfOExLV1dTQBoKrB2zluwQOQjbsKZu3qOpnIgU/94yHATm38IOJdC8snv6fQQe0A== dependencies: "@ethersproject/address" "^5.7.0" ethereum-blockies-base64 "^1.0.2" @@ -4254,7 +4261,7 @@ dependencies: "@types/react" "*" -"@types/react-is@^18.2.0": +"@types/react-is@^18.2.1": version "18.2.1" resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-18.2.1.tgz#61d01c2a6fc089a53520c0b66996d458fdc46863" integrity sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw== @@ -6265,6 +6272,11 @@ clsx@^1.1.0, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"