"use client"; import { useRef, useEffect } from "react"; interface SectionDividerProps { variant?: "gradient" | "pulse" | "waveform"; className?: string; } export default function SectionDivider({ variant = "gradient", className = "", }: SectionDividerProps) { const canvasRef = useRef(null); useEffect(() => { if (variant !== "waveform") return; const canvas = canvasRef.current; if (!canvas) return; const ctx = canvas.getContext("2d"); if (!ctx) return; let animId: number; const resize = () => { canvas.width = window.innerWidth; canvas.height = 60; }; resize(); window.addEventListener("resize", resize); const render = () => { animId = requestAnimationFrame(render); const { width, height } = canvas; const t = performance.now() * 0.001; ctx.clearRect(0, 0, width, height); // Draw multiple waveforms for (let wave = 0; wave < 3; wave++) { ctx.beginPath(); ctx.strokeStyle = `rgba(204, 255, 0, ${0.1 - wave * 0.03})`; ctx.lineWidth = 1; for (let x = 0; x < width; x++) { const frequency = 0.005 + wave * 0.002; const amplitude = 8 + wave * 4; const speed = t * (0.5 + wave * 0.2); const y = height / 2 + Math.sin(x * frequency + speed) * amplitude + Math.sin(x * frequency * 2.3 + speed * 1.5) * (amplitude * 0.4); if (x === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y); } ctx.stroke(); } }; animId = requestAnimationFrame(render); return () => { cancelAnimationFrame(animId); window.removeEventListener("resize", resize); }; }, [variant]); if (variant === "gradient") { return (
); } if (variant === "pulse") { return (
{[...Array(5)].map((_, i) => (
))}
); } // waveform return (
); }