'use client'; // Animate decorative snack images with gentle randomized motion. import type {FloatingSnack} from '@/types/domain'; import {useEffect, useRef} from 'react'; import {gsap} from 'gsap'; /** * Renders the centralized `floatingSnacks` config as absolutely-positioned * images and gives each one a gentle, randomized floating drift via GSAP. * Positions/sizes/images all come from data/content.ts — edit there only. */ export default function FloatingItems({items}: {items: FloatingSnack[]}) { const containerRef = useRef(null); useEffect(() => { const nodes = containerRef.current?.querySelectorAll('[data-float-item]'); if (!nodes) return; const tweens = Array.from(nodes).map((node, i) => { const drift = 14 + Math.random() * 14; const rotate = 4 + Math.random() * 6; return gsap.to(node, { y: `+=${drift}`, rotate: i % 2 === 0 ? rotate : -rotate, duration: 3.5 + Math.random() * 2.5, ease: 'sine.inOut', yoyo: true, repeat: -1, delay: Math.random() * 1.5, }); }); return () => tweens.forEach(t => t.kill()); }, [items]); return (
{items.map(item => ( ))}
); }