1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

UX - Update all copy icons (#17445)

This commit is contained in:
David Walsh 2023-01-31 11:00:26 -06:00 committed by GitHub
parent 8aa3263b82
commit 145cf1ec01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 81 additions and 148 deletions

View File

@ -32,20 +32,10 @@ exports[`SelectedAccount Component should match snapshot 1`] = `
<div <div
class="selected-account__copy" class="selected-account__copy"
> >
<svg <div
fill="none" class="box mm-icon mm-icon--size-sm box--flex-direction-row box--color-icon-alternative"
height="11" style="mask-image: url('./images/icons/copy.svg');"
viewBox="0 0 11 11" />
width="11"
xmlns="http://www.w3.org/2000/svg"
>
<path
clip-rule="evenodd"
d="M0 0H1H9V1H1V9H0V0ZM2 2H11V11H2V2ZM3 3H10V10H3V3Z"
fill="var(--color-icon-alternative)"
fill-rule="evenodd"
/>
</svg>
</div> </div>
</div> </div>
</button> </button>

View File

@ -4,9 +4,10 @@ import copyToClipboard from 'copy-to-clipboard';
import { shortenAddress } from '../../../helpers/utils/util'; import { shortenAddress } from '../../../helpers/utils/util';
import Tooltip from '../../ui/tooltip'; import Tooltip from '../../ui/tooltip';
import CopyIcon from '../../ui/icon/copy-icon.component';
import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils'; import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils';
import { SECOND } from '../../../../shared/constants/time'; import { SECOND } from '../../../../shared/constants/time';
import { Icon, ICON_NAMES, ICON_SIZES } from '../../component-library';
import { COLORS } from '../../../helpers/constants/design-system';
class SelectedAccount extends Component { class SelectedAccount extends Component {
state = { state = {
@ -64,7 +65,15 @@ class SelectedAccount extends Component {
<div className="selected-account__address"> <div className="selected-account__address">
{shortenAddress(checksummedAddress)} {shortenAddress(checksummedAddress)}
<div className="selected-account__copy"> <div className="selected-account__copy">
<CopyIcon size={11} color="var(--color-icon-alternative)" /> <Icon
name={
this.state.copied
? ICON_NAMES.COPY_SUCCESS
: ICON_NAMES.COPY
}
size={ICON_SIZES.SM}
color={COLORS.ICON_ALTERNATIVE}
/>
</div> </div>
</div> </div>
</button> </button>

View File

@ -1,10 +1,11 @@
import React, { useContext } from 'react'; import React, { useContext } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Tooltip from '../../../../../ui/tooltip/tooltip'; import Tooltip from '../../../../../ui/tooltip/tooltip';
import CopyIcon from '../../../../../ui/icon/copy-icon.component';
import { I18nContext } from '../../../../../../contexts/i18n'; import { I18nContext } from '../../../../../../contexts/i18n';
import { useCopyToClipboard } from '../../../../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../../../../hooks/useCopyToClipboard';
import { Icon, ICON_NAMES } from '../../../../../component-library';
import { COLORS } from '../../../../../../helpers/constants/design-system';
const CopyRawData = ({ data }) => { const CopyRawData = ({ data }) => {
const t = useContext(I18nContext); const t = useContext(I18nContext);
@ -20,7 +21,10 @@ const CopyRawData = ({ data }) => {
className="copy-raw-data__button" className="copy-raw-data__button"
> >
<div className="copy-raw-data__icon"> <div className="copy-raw-data__icon">
<CopyIcon size={12} color="var(--color-icon-default)" /> <Icon
name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
color={COLORS.ICON_DEFAULT}
/>
</div> </div>
<div className="copy-raw-data__label"> <div className="copy-raw-data__label">
{t('copyRawTransactionData')} {t('copyRawTransactionData')}

View File

@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Copy from '../icon/copy-icon.component';
import { useI18nContext } from '../../../hooks/useI18nContext'; import { useI18nContext } from '../../../hooks/useI18nContext';
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
import { exportAsFile } from '../../../helpers/utils/export-utils'; import { exportAsFile } from '../../../helpers/utils/export-utils';
import { Icon, ICON_NAMES } from '../../component-library';
function ExportTextContainer({ function ExportTextContainer({
text = '', text = '',
@ -28,7 +28,7 @@ function ExportTextContainer({
handleCopy(text); handleCopy(text);
}} }}
> >
<Copy size={17} color="var(--color-primary-default)" /> <Icon name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY} />
<div className="export-text-container__button-text"> <div className="export-text-container__button-text">
{copied ? t('copiedExclamation') : t('copyToClipboard')} {copied ? t('copiedExclamation') : t('copyToClipboard')}
</div> </div>

View File

@ -2,7 +2,6 @@ import { Story, Canvas, ArgsTable } from '@storybook/addon-docs';
import IconCaretLeft from './icon-caret-left.js'; import IconCaretLeft from './icon-caret-left.js';
import Approve from './approve-icon.component'; import Approve from './approve-icon.component';
import CopyIcon from './copy-icon.component';
import InfoIcon from './info-icon.component'; import InfoIcon from './info-icon.component';
import InfoIconInverted from './info-icon-inverted.component'; import InfoIconInverted from './info-icon-inverted.component';
import Interaction from './interaction-icon.component'; import Interaction from './interaction-icon.component';
@ -175,14 +174,6 @@ Use the `className` prop to add an additional class to the icon. This additional
<ArgsTable of={SwapIconComponent} /> <ArgsTable of={SwapIconComponent} />
## CopyIcon
<Canvas>
<Story id="components-ui-icon--copy-icon-story" />
</Canvas>
<ArgsTable of={CopyIcon} />
## Preloader ## Preloader
<Canvas> <Canvas>

View File

@ -1,41 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
const Copy = ({ className, size, color }) => (
<svg
className={className}
width={size}
height={size}
viewBox="0 0 11 11"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0 0H1H9V1H1V9H0V0ZM2 2H11V11H2V2ZM3 3H10V10H3V3Z"
fill={color}
/>
</svg>
);
Copy.defaultProps = {
className: undefined,
};
Copy.propTypes = {
/**
* Additional className
*/
className: PropTypes.string,
/**
* Size of the icon should adhere to 8px grid. e.g: 8, 16, 24, 32, 40
*/
size: PropTypes.number.isRequired,
/**
* Color of the icon should be a valid design system color and is required
*/
color: PropTypes.string.isRequired,
};
export default Copy;

View File

@ -12,7 +12,6 @@ import Box from '../box';
import README from './README.mdx'; import README from './README.mdx';
import Approve from './approve-icon.component'; import Approve from './approve-icon.component';
import CopyIcon from './copy-icon.component';
import InfoIcon from './info-icon.component'; import InfoIcon from './info-icon.component';
import InfoIconInverted from './info-icon-inverted.component'; import InfoIconInverted from './info-icon-inverted.component';
import Interaction from './interaction-icon.component'; import Interaction from './interaction-icon.component';
@ -159,7 +158,6 @@ export const DefaultStory = (args) => (
<IconItem Component={<InfoIconInverted {...args} />} /> <IconItem Component={<InfoIconInverted {...args} />} />
<IconItem Component={<SunCheck {...args} />} /> <IconItem Component={<SunCheck {...args} />} />
<IconItem Component={<SunCheck {...args} reverseColors />} /> <IconItem Component={<SunCheck {...args} reverseColors />} />
<IconItem Component={<CopyIcon {...args} />} />
<IconItem Component={<Preloader {...args} />} /> <IconItem Component={<Preloader {...args} />} />
<IconItem Component={<IconEye {...args} />} /> <IconItem Component={<IconEye {...args} />} />
<IconItem Component={<IconEyeSlash {...args} />} /> <IconItem Component={<IconEyeSlash {...args} />} />
@ -281,13 +279,6 @@ SunCheckStory.argTypes = {
}; };
SunCheckStory.storyName = 'SunCheck'; SunCheckStory.storyName = 'SunCheck';
export const CopyIconStory = (args) => <CopyIcon {...args} />;
CopyIconStory.args = {
size: 40,
color: 'var(--color-icon-default)',
};
CopyIconStory.storyName = 'CopyIcon';
export const PreloaderStory = (args) => <Preloader {...args} />; export const PreloaderStory = (args) => <Preloader {...args} />;
PreloaderStory.args = { PreloaderStory.args = {
size: 40, size: 40,

View File

@ -8,10 +8,10 @@ import Popover from '../popover';
import Button from '../button'; import Button from '../button';
import Identicon from '../identicon'; import Identicon from '../identicon';
import { shortenAddress } from '../../../helpers/utils/util'; import { shortenAddress } from '../../../helpers/utils/util';
import CopyIcon from '../icon/copy-icon.component';
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
import { getTokenList, getBlockExplorerLinkText } from '../../../selectors'; import { getTokenList, getBlockExplorerLinkText } from '../../../selectors';
import { NETWORKS_ROUTE } from '../../../helpers/constants/routes'; import { NETWORKS_ROUTE } from '../../../helpers/constants/routes';
import { ButtonIcon, ICON_NAMES, ICON_SIZES } from '../../component-library';
const NicknamePopover = ({ const NicknamePopover = ({
address, address,
@ -62,15 +62,11 @@ const NicknamePopover = ({
position="bottom" position="bottom"
title={copied ? t('copiedExclamation') : t('copyToClipboard')} title={copied ? t('copiedExclamation') : t('copyToClipboard')}
> >
<button <ButtonIcon
type="link" iconName={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
onClick={() => { size={ICON_SIZES.SM}
handleCopy(address); onClick={() => handleCopy(address)}
}} />
title=""
>
<CopyIcon size={11} color="var(--color-icon-default)" />
</button>
</Tooltip> </Tooltip>
</div> </div>

View File

@ -28,18 +28,12 @@
&__address-container { &__address-container {
display: flex; display: flex;
justify-content: center; justify-content: center;
cursor: pointer;
align-items: center;
&__tooltip-wrapper { &__tooltip-wrapper {
width: 100%; width: 100%;
} }
&:hover {
cursor: pointer;
.qr-code__copy-icon__svg {
fill: var(--color-primary-default);
}
}
} }
&__address { &__address {
@ -51,15 +45,4 @@
word-break: break-all; word-break: break-all;
text-align: center; text-align: center;
} }
&__copy-icon {
height: 13px;
padding: 17px 0;
position: absolute;
right: 24px;
&__svg {
fill: var(--color-icon-default);
}
}
} }

View File

@ -6,8 +6,8 @@ import { isHexPrefixed } from 'ethereumjs-util';
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils'; import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils';
import Tooltip from '../tooltip'; import Tooltip from '../tooltip';
import CopyIcon from '../icon/copy-icon.component';
import { useI18nContext } from '../../../hooks/useI18nContext'; import { useI18nContext } from '../../../hooks/useI18nContext';
import { Icon, ICON_NAMES, ICON_SIZES } from '../../component-library';
export default connect(mapStateToProps)(QrCodeView); export default connect(mapStateToProps)(QrCodeView);
@ -68,9 +68,11 @@ function QrCodeView(props) {
}} }}
> >
<div className="qr-code__address">{toChecksumHexAddress(data)}</div> <div className="qr-code__address">{toChecksumHexAddress(data)}</div>
<div className="qr-code__copy-icon"> <Icon
<CopyIcon size={11} className="qr-code__copy-icon__svg" color="" /> name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
</div> size={ICON_SIZES.SM}
marginInlineStart={3}
/>
</div> </div>
</Tooltip> </Tooltip>
</div> </div>

View File

@ -11,7 +11,6 @@ import Box from '../../../components/ui/box';
import Button from '../../../components/ui/button'; import Button from '../../../components/ui/button';
import EditGasFeeButton from '../../../components/app/edit-gas-fee-button'; import EditGasFeeButton from '../../../components/app/edit-gas-fee-button';
import MultiLayerFeeMessage from '../../../components/app/multilayer-fee-message'; import MultiLayerFeeMessage from '../../../components/app/multilayer-fee-message';
import CopyIcon from '../../../components/ui/icon/copy-icon.component';
import { import {
TYPOGRAPHY, TYPOGRAPHY,
FONT_WEIGHT, FONT_WEIGHT,
@ -20,13 +19,13 @@ import {
COLORS, COLORS,
DISPLAY, DISPLAY,
} from '../../../helpers/constants/design-system'; } from '../../../helpers/constants/design-system';
import { SECOND } from '../../../../shared/constants/time';
import { ConfirmPageContainerWarning } from '../../../components/app/confirm-page-container/confirm-page-container-content'; import { ConfirmPageContainerWarning } from '../../../components/app/confirm-page-container/confirm-page-container-content';
import GasDetailsItem from '../../../components/app/gas-details-item'; import GasDetailsItem from '../../../components/app/gas-details-item';
import LedgerInstructionField from '../../../components/app/ledger-instruction-field'; import LedgerInstructionField from '../../../components/app/ledger-instruction-field';
import { TokenStandard } from '../../../../shared/constants/transaction'; import { TokenStandard } from '../../../../shared/constants/transaction';
import { CHAIN_IDS, TEST_CHAINS } from '../../../../shared/constants/network'; import { CHAIN_IDS, TEST_CHAINS } from '../../../../shared/constants/network';
import ContractDetailsModal from '../../../components/app/modals/contract-details-modal/contract-details-modal'; import ContractDetailsModal from '../../../components/app/modals/contract-details-modal/contract-details-modal';
import { ICON_NAMES, ButtonIcon } from '../../../components/component-library';
export default class ConfirmApproveContent extends Component { export default class ConfirmApproveContent extends Component {
static contextTypes = { static contextTypes = {
@ -210,25 +209,19 @@ export default class ConfirmApproveContent extends Component {
{displayedAddress} {displayedAddress}
</div> </div>
<div className="confirm-approve-content__medium-text"> <div className="confirm-approve-content__medium-text">
<Button <ButtonIcon
type="link" ariaLabel="copy"
className="confirm-approve-content__copy-address" onClick={() => copyToClipboard(toAddress)}
onClick={() => { color={COLORS.ICON_DEFAULT}
this.setState({ copied: true }); iconName={
this.copyTimeout = setTimeout( this.state.copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY
() => this.setState({ copied: false }), }
SECOND * 3,
);
copyToClipboard(toAddress);
}}
title={ title={
this.state.copied this.state.copied
? t('copiedExclamation') ? t('copiedExclamation')
: t('copyToClipboard') : t('copyToClipboard')
} }
> />
<CopyIcon size={14} color="var(--color-icon-default)" />
</Button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -6,13 +6,14 @@ import classnames from 'classnames';
import AccountListItem from '../../components/app/account-list-item'; import AccountListItem from '../../components/app/account-list-item';
import Identicon from '../../components/ui/identicon'; import Identicon from '../../components/ui/identicon';
import Tooltip from '../../components/ui/tooltip'; import Tooltip from '../../components/ui/tooltip';
import Copy from '../../components/ui/icon/copy-icon.component';
import { PageContainerFooter } from '../../components/ui/page-container'; import { PageContainerFooter } from '../../components/ui/page-container';
import { EVENT } from '../../../shared/constants/metametrics'; import { EVENT } from '../../../shared/constants/metametrics';
import { SECOND } from '../../../shared/constants/time'; import { SECOND } from '../../../shared/constants/time';
import { Numeric } from '../../../shared/modules/Numeric'; import { Numeric } from '../../../shared/modules/Numeric';
import { EtherDenomination } from '../../../shared/constants/common'; import { EtherDenomination } from '../../../shared/constants/common';
import { Icon, ICON_NAMES } from '../../components/component-library';
import { COLORS } from '../../helpers/constants/design-system';
export default class ConfirmDecryptMessage extends Component { export default class ConfirmDecryptMessage extends Component {
static contextTypes = { static contextTypes = {
@ -238,7 +239,10 @@ export default class ConfirmDecryptMessage extends Component {
<div className="request-decrypt-message__message-copy-text"> <div className="request-decrypt-message__message-copy-text">
{t('decryptCopy')} {t('decryptCopy')}
</div> </div>
<Copy size={17} color="var(--color-primary-default)" /> <Icon
name={hasCopied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
color={COLORS.PRIMARY_DEFAULT}
/>
</Tooltip> </Tooltip>
</div> </div>
) : ( ) : (

View File

@ -4,7 +4,6 @@ import PropTypes from 'prop-types';
import Box from '../../../components/ui/box'; import Box from '../../../components/ui/box';
import Button from '../../../components/ui/button'; import Button from '../../../components/ui/button';
import Typography from '../../../components/ui/typography'; import Typography from '../../../components/ui/typography';
import Copy from '../../../components/ui/icon/copy-icon.component';
import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../hooks/useCopyToClipboard';
import { useI18nContext } from '../../../hooks/useI18nContext'; import { useI18nContext } from '../../../hooks/useI18nContext';
import { ONBOARDING_CONFIRM_SRP_ROUTE } from '../../../helpers/constants/routes'; import { ONBOARDING_CONFIRM_SRP_ROUTE } from '../../../helpers/constants/routes';
@ -13,6 +12,7 @@ import {
TYPOGRAPHY, TYPOGRAPHY,
JUSTIFY_CONTENT, JUSTIFY_CONTENT,
FONT_WEIGHT, FONT_WEIGHT,
COLORS,
} from '../../../helpers/constants/design-system'; } from '../../../helpers/constants/design-system';
import { import {
ThreeStepProgressBar, ThreeStepProgressBar,
@ -20,6 +20,7 @@ import {
} from '../../../components/app/step-progress-bar'; } from '../../../components/app/step-progress-bar';
import { EVENT_NAMES, EVENT } from '../../../../shared/constants/metametrics'; import { EVENT_NAMES, EVENT } from '../../../../shared/constants/metametrics';
import { MetaMetricsContext } from '../../../contexts/metametrics'; import { MetaMetricsContext } from '../../../contexts/metametrics';
import { Icon, ICON_NAMES } from '../../../components/component-library';
import RecoveryPhraseChips from './recovery-phrase-chips'; import RecoveryPhraseChips from './recovery-phrase-chips';
export default function RecoveryPhrase({ secretRecoveryPhrase }) { export default function RecoveryPhrase({ secretRecoveryPhrase }) {
@ -115,9 +116,10 @@ export default function RecoveryPhrase({ secretRecoveryPhrase }) {
handleCopy(secretRecoveryPhrase); handleCopy(secretRecoveryPhrase);
}} }}
icon={ icon={
copied ? null : ( <Icon
<Copy size={20} color="var(--color-primary-default)" /> name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
) color={COLORS.PRIMARY_DEFAULT}
/>
} }
className="recovery-phrase__footer__copy-and-hide__button recovery-phrase__footer__copy-and-hide__button__copy-to-clipboard" className="recovery-phrase__footer__copy-and-hide__button recovery-phrase__footer__copy-and-hide__button__copy-to-clipboard"
type="link" type="link"

View File

@ -3,12 +3,17 @@ import PropTypes from 'prop-types';
import { Redirect } from 'react-router-dom'; import { Redirect } from 'react-router-dom';
import Identicon from '../../../../components/ui/identicon'; import Identicon from '../../../../components/ui/identicon';
import Copy from '../../../../components/ui/icon/copy-icon.component';
import Button from '../../../../components/ui/button/button.component'; import Button from '../../../../components/ui/button/button.component';
import {
ButtonIcon,
ICON_NAMES,
ICON_SIZES,
} from '../../../../components/component-library';
import Tooltip from '../../../../components/ui/tooltip'; import Tooltip from '../../../../components/ui/tooltip';
import { useI18nContext } from '../../../../hooks/useI18nContext'; import { useI18nContext } from '../../../../hooks/useI18nContext';
import { useCopyToClipboard } from '../../../../hooks/useCopyToClipboard'; import { useCopyToClipboard } from '../../../../hooks/useCopyToClipboard';
import { COLORS } from '../../../../helpers/constants/design-system';
function quadSplit(address) { function quadSplit(address) {
return `0x${address return `0x${address
@ -62,14 +67,16 @@ function ViewContact({
position="bottom" position="bottom"
title={copied ? t('copiedExclamation') : t('copyToClipboard')} title={copied ? t('copiedExclamation') : t('copyToClipboard')}
> >
<button <ButtonIcon
ariaLabel="copy"
className="address-book__view-contact__group__static-address--copy-icon" className="address-book__view-contact__group__static-address--copy-icon"
onClick={() => { onClick={() => {
handleCopy(checkSummedAddress); handleCopy(checkSummedAddress);
}} }}
> iconName={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
<Copy size={20} color="var(--color-primary-default)" /> size={ICON_SIZES.LG}
</button> color={COLORS.PRIMARY_DEFAULT}
/>
</Tooltip> </Tooltip>
</div> </div>
</div> </div>

View File

@ -13,7 +13,6 @@ import { NETWORK_TYPES } from '../../../shared/constants/network';
import { ASSET_ROUTE, DEFAULT_ROUTE } from '../../helpers/constants/routes'; import { ASSET_ROUTE, DEFAULT_ROUTE } from '../../helpers/constants/routes';
import Tooltip from '../../components/ui/tooltip'; import Tooltip from '../../components/ui/tooltip';
import Button from '../../components/ui/button'; import Button from '../../components/ui/button';
import CopyIcon from '../../components/ui/icon/copy-icon.component';
import Box from '../../components/ui/box'; import Box from '../../components/ui/box';
import Typography from '../../components/ui/typography'; import Typography from '../../components/ui/typography';
import { import {
@ -25,6 +24,11 @@ import {
OVERFLOW_WRAP, OVERFLOW_WRAP,
} from '../../helpers/constants/design-system'; } from '../../helpers/constants/design-system';
import { isEqualCaseInsensitive } from '../../../shared/modules/string-utils'; import { isEqualCaseInsensitive } from '../../../shared/modules/string-utils';
import {
ButtonIcon,
ICON_SIZES,
ICON_NAMES,
} from '../../components/component-library';
export default function TokenDetailsPage() { export default function TokenDetailsPage() {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -132,15 +136,13 @@ export default function TokenDetailsPage() {
title={copied ? t('copiedExclamation') : t('copyToClipboard')} title={copied ? t('copiedExclamation') : t('copyToClipboard')}
containerClassName="token-details__copy-icon" containerClassName="token-details__copy-icon"
> >
<Button <ButtonIcon
type="link" name={copied ? ICON_NAMES.COPY_SUCCESS : ICON_NAMES.COPY}
className="token-details__copyIcon" className="token-details__copyIcon"
onClick={() => { onClick={() => handleCopy(token.address)}
handleCopy(token.address); color={COLORS.PRIMARY_DEFAULT}
}} size={ICON_SIZES.SM}
> />
<CopyIcon size={11} color="var(--color-primary-default)" />
</Button>
</Tooltip> </Tooltip>
</Box> </Box>
<Typography <Typography