import type { TokenAmount } from '@lifi/sdk'; import ExpandLessIcon from '@mui/icons-material/ExpandLess'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import VerifiedUserIcon from '@mui/icons-material/VerifiedUser'; import type { TooltipProps } from '@mui/material'; import { Box, Collapse, Tooltip, Typography } from '@mui/material'; import type { MouseEventHandler } from 'react'; import { Fragment, useState } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useWidgetConfig } from '../../providers'; import { formatTokenAmount } from '../../utils'; import type { CardProps } from '../Card'; import { Card, CardIconButton, CardLabel, CardLabelTypography } from '../Card'; import type { InsuredAmount } from '../Insurance'; import { StepActions } from '../StepActions'; import { Token } from '../Token'; import { TokenContainer } from './RouteCard.style'; import { RouteCardEssentials } from './RouteCardEssentials'; import { RouteCardEssentialsExpanded } from './RouteCardEssentialsExpanded'; import type { RouteCardProps } from './types'; export const RouteCard: React.FC< RouteCardProps & Omit > = ({ route, active, variant = 'default', expanded: defaulExpanded, ...other }) => { const { t } = useTranslation(); const { subvariant } = useWidgetConfig(); const [cardExpanded, setCardExpanded] = useState(defaulExpanded); const handleExpand: MouseEventHandler = (e) => { e.stopPropagation(); setCardExpanded((expanded) => !expanded); }; const insurable = route.insurance?.state === 'INSURABLE'; const token: TokenAmount = subvariant === 'nft' ? { ...route.fromToken, amount: BigInt(route.fromAmount) } : { ...route.toToken, amount: BigInt(route.toAmount) }; const RecommendedTagTooltip = route.tags?.[0] === 'RECOMMENDED' ? RecommendedTooltip : Fragment; const cardContent = ( {subvariant !== 'refuel' && (insurable || route.tags?.length) ? ( {route.tags?.length ? ( {t(`main.tags.${route.tags[0].toLowerCase()}` as any)} ) : null} {insurable ? ( {t(`main.tags.insurable`)} ) : null} ) : null} {!defaulExpanded ? ( {cardExpanded ? : } ) : null} {route.steps.map((step) => ( ))} ); return subvariant === 'refuel' || variant === 'cardless' ? ( cardContent ) : ( {cardContent} ); }; const InsuranceTooltip: React.FC< InsuredAmount & Pick > = ({ insuredAmount, insuredTokenSymbol, children }) => { const { t } = useTranslation(); return ( ]} /> {t('insurance.bridgeExploits')} {t('insurance.slippageError')} } placement="top" enterDelay={400} arrow > {children} ); }; const RecommendedTooltip: React.FC> = ({ children, }) => { const { t } = useTranslation(); return ( {children} ); };