| import { AnimatePresence, cubicBezier, motion } from 'framer-motion'; | |
| interface SendButtonProps { | |
| show: boolean; | |
| isStreaming?: boolean; | |
| disabled?: boolean; | |
| onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void; | |
| onImagesSelected?: (images: File[]) => void; | |
| } | |
| const customEasingFn = cubicBezier(0.4, 0, 0.2, 1); | |
| export const SendButton = ({ show, isStreaming, disabled, onClick }: SendButtonProps) => { | |
| return ( | |
| <AnimatePresence> | |
| {show ? ( | |
| <motion.button | |
| className="absolute flex justify-center items-center top-[18px] right-[22px] p-1 bg-accent-500 hover:brightness-94 color-white rounded-md w-[34px] h-[34px] transition-theme disabled:opacity-50 disabled:cursor-not-allowed" | |
| transition={{ ease: customEasingFn, duration: 0.17 }} | |
| initial={{ opacity: 0, y: 10 }} | |
| animate={{ opacity: 1, y: 0 }} | |
| exit={{ opacity: 0, y: 10 }} | |
| disabled={disabled} | |
| onClick={(event) => { | |
| event.preventDefault(); | |
| if (!disabled) { | |
| onClick?.(event); | |
| } | |
| }} | |
| > | |
| <div className="text-lg"> | |
| {!isStreaming ? <div className="i-ph:arrow-right"></div> : <div className="i-ph:stop-circle-bold"></div>} | |
| </div> | |
| </motion.button> | |
| ) : null} | |
| </AnimatePresence> | |
| ); | |
| }; | |