import PropTypes from 'prop-types'; // third-party import { motion, useCycle } from 'framer-motion'; // ==============================|| ANIMATION BUTTON ||============================== // export default function AnimateButton({ children, type = 'scale', direction = 'right', offset = 10, scale = { hover: 1.05, tap: 0.95 } }) { let offset1; let offset2; switch (direction) { case 'up': case 'left': offset1 = offset; offset2 = 0; break; case 'right': case 'down': default: offset1 = 0; offset2 = offset; break; } const [x, cycleX] = useCycle(offset1, offset2); const [y, cycleY] = useCycle(offset1, offset2); switch (type) { case 'rotate': return ( {children} ); case 'slide': if (direction === 'up' || direction === 'down') { return ( cycleY()} onHoverStart={() => cycleY()}> {children} ); } return ( cycleX()} onHoverStart={() => cycleX()}> {children} ); case 'scale': default: if (typeof scale === 'number') { scale = { hover: scale, tap: scale }; } return ( {children} ); } } AnimateButton.propTypes = { children: PropTypes.node, offset: PropTypes.number, type: PropTypes.oneOf(['slide', 'scale', 'rotate']), direction: PropTypes.oneOf(['up', 'down', 'left', 'right']), scale: PropTypes.oneOfType([PropTypes.number, PropTypes.object]) };