"use client" import React, { useMemo, useRef } from "react" import { cn } from "@/lib/utils" import { useDimensions } from "@/hooks/use-debounced-dimensions" interface AnimatedGradientProps { colors: string[] speed?: number blur?: "light" | "medium" | "heavy" } const randomInt = (min: number, max: number) => { return Math.floor(Math.random() * (max - min + 1)) + min } const AnimatedGradient: React.FC = ({ colors, speed = 5, blur = "light", }) => { const containerRef = useRef(null) const dimensions = useDimensions(containerRef) const circleSize = useMemo( () => Math.max(dimensions.width, dimensions.height), [dimensions.width, dimensions.height] ) const blurClass = blur === "light" ? "blur-2xl" : blur === "medium" ? "blur-3xl" : "blur-[100px]" return (
{colors.map((color, index) => { const animationProps = { animation: `background-gradient ${speed}s infinite ease-in-out`, animationDuration: `${speed}s`, top: `${Math.random() * 50}%`, left: `${Math.random() * 50}%`, "--tx-1": Math.random() - 0.5, "--ty-1": Math.random() - 0.5, "--tx-2": Math.random() - 0.5, "--ty-2": Math.random() - 0.5, "--tx-3": Math.random() - 0.5, "--ty-3": Math.random() - 0.5, "--tx-4": Math.random() - 0.5, "--ty-4": Math.random() - 0.5, } as React.CSSProperties return ( ) })}
) } export default AnimatedGradient