import { Box, Flex, Heading } from '@invoke-ai/ui-library'; import type { AnimationProps } from 'framer-motion'; import { motion } from 'framer-motion'; import { memo } from 'react'; import type { DropzoneState } from 'react-dropzone'; import { useHotkeys } from 'react-hotkeys-hook'; import { useTranslation } from 'react-i18next'; const initial: AnimationProps['initial'] = { opacity: 0, }; const animate: AnimationProps['animate'] = { opacity: 1, transition: { duration: 0.1 }, }; const exit: AnimationProps['exit'] = { opacity: 0, transition: { duration: 0.1 }, }; type ImageUploadOverlayProps = { dropzone: DropzoneState; setIsHandlingUpload: (isHandlingUpload: boolean) => void; }; const ImageUploadOverlay = (props: ImageUploadOverlayProps) => { const { t } = useTranslation(); const { dropzone, setIsHandlingUpload } = props; useHotkeys( 'esc', () => { setIsHandlingUpload(false); }, [setIsHandlingUpload] ); return ( {dropzone.isDragAccept ? ( {t('gallery.dropToUpload')} ) : ( <> {t('toast.invalidUpload')} {t('toast.uploadFailedInvalidUploadDesc')} )} ); }; export default memo(ImageUploadOverlay);