"use client"; import React, { useEffect, useRef, useState } from "react"; import CurvyRect from "@/components/shared/layout/curvy-rect"; import { cn } from "@/utils/cn"; interface FlameButtonProps extends React.ButtonHTMLAttributes { children: React.ReactNode; className?: string; variant?: "primary" | "secondary"; } // Flame patterns for hover effect - designed to tile and fill the button const flamePatterns = [ `▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ `, ` ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ `, `▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲`, ]; export function FlameButton({ children, className, variant = "primary", onMouseDown, onMouseUp, onMouseLeave, ...props }: FlameButtonProps) { const [flameIndex, setFlameIndex] = useState(0); const [isHovered, setIsHovered] = useState(false); const [isPressed, setIsPressed] = useState(false); const intervalRef = useRef(null); useEffect(() => { if (isHovered || isPressed) { const speed = isPressed ? 80 : 150; // Faster when pressed intervalRef.current = setInterval(() => { setFlameIndex((prev) => (prev + 1) % flamePatterns.length); }, speed); } else { if (intervalRef.current) { clearInterval(intervalRef.current); } } return () => { if (intervalRef.current) { clearInterval(intervalRef.current); } }; }, [isHovered, isPressed]); const handleMouseDown = (e: React.MouseEvent) => { setIsPressed(true); onMouseDown?.(e); }; const handleMouseUp = (e: React.MouseEvent) => { setIsPressed(false); onMouseUp?.(e); }; const handleMouseLeave = (e: React.MouseEvent) => { setIsPressed(false); setIsHovered(false); onMouseLeave?.(e); }; return ( ); }