import React, { useEffect, useState } from "react"; import { cn } from "@/lib/utils" export const RippleButton = React.forwardRef(( { className, children, rippleColor = "#ffffff", duration = "600ms", onClick, ...props }, ref ) => { const [buttonRipples, setButtonRipples] = useState([]) const handleClick = (event) => { createRipple(event) onClick?.(event) } const createRipple = (event) => { const button = event.currentTarget const rect = button.getBoundingClientRect() const size = Math.max(rect.width, rect.height) const x = event.clientX - rect.left - size / 2 const y = event.clientY - rect.top - size / 2 const newRipple = { x, y, size, key: Date.now() } setButtonRipples((prevRipples) => [...prevRipples, newRipple]) } useEffect(() => { if (buttonRipples.length > 0) { const lastRipple = buttonRipples[buttonRipples.length - 1] const timeout = setTimeout(() => { setButtonRipples((prevRipples) => prevRipples.filter((ripple) => ripple.key !== lastRipple.key)) }, parseInt(duration)) return () => clearTimeout(timeout); } }, [buttonRipples, duration]) return ( ); }) RippleButton.displayName = "RippleButton"