/* eslint-disable react-hooks/set-state-in-effect */ "use client" import React, { useEffect, useState } from "react" import { cn } from "@/lib/utils" interface MeteorsProps { number?: number minDelay?: number maxDelay?: number minDuration?: number maxDuration?: number angle?: number className?: string } export const Meteors = ({ number = 20, minDelay = 0.2, maxDelay = 1.2, minDuration = 2, maxDuration = 10, angle = 215, className, }: MeteorsProps) => { const [meteorStyles, setMeteorStyles] = useState>( [] ) useEffect(() => { const styles = [...new Array(number)].map(() => ({ "--angle": -angle + "deg", top: "-5%", left: `calc(0% + ${Math.floor(Math.random() * window.innerWidth)}px)`, animationDelay: Math.random() * (maxDelay - minDelay) + minDelay + "s", animationDuration: Math.floor(Math.random() * (maxDuration - minDuration) + minDuration) + "s", })) setMeteorStyles(styles) }, [number, minDelay, maxDelay, minDuration, maxDuration, angle]) return ( <> {[...meteorStyles].map((style, idx) => ( // Meteor Head {/* Meteor Tail */}
))} ) }