import React, { ComponentPropsWithoutRef, ElementRef, forwardRef, ReactNode, } from 'react' import * as DialogPrimitive from '@radix-ui/react-dialog' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faClose, faChevronLeft } from '@fortawesome/free-solid-svg-icons' import { Anchor, Button, Flex, Text, Box } from '../primitives' import { styled } from '../../stitches.config' import { Dialog } from '../primitives/Dialog' import LoadingSpinner from './LoadingSpinner' import ReservoirLogoWhiteText from 'public/ReservoirLogoWhiteText' const Title = styled(DialogPrimitive.Title, { margin: 0, }) type Props = { title: string children: ReactNode onBack?: (() => void) | null loading?: boolean } & Pick< ComponentPropsWithoutRef, | 'onPointerDownOutside' | 'onOpenChange' | 'open' | 'trigger' | 'onFocusCapture' > const Logo = styled(ReservoirLogoWhiteText, { '& .letter': { fill: '$gray12', }, }) export const Modal = forwardRef, Props>( ( { title, children, trigger, onBack, open, onOpenChange, loading, onPointerDownOutside, onFocusCapture, }, forwardedRef ) => { return ( {onBack && ( <Button color="ghost" size="none" css={{ mr: '$2', color: '$neutralText' }} onClick={onBack} > <FontAwesomeIcon icon={faChevronLeft} width={16} height={16} /> </Button> )} <Text style="h6">{title}</Text> {loading && } {children} Powered by ) } )