Files
mb-grid-solutions.com/components/TileGrid.tsx
Marc Mintel 00bafa761b
Some checks failed
Build & Deploy / 🔍 Prepare Environment (push) Successful in 31s
Build & Deploy / 🧪 QA (push) Failing after 37s
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🔔 Notifications (push) Has been cancelled
Build & Deploy / 🏗️ Build (push) Has been cancelled
fix: performance issues
2026-02-07 09:37:44 +01:00

53 lines
1.6 KiB
TypeScript

"use client";
import React, { useEffect, useState } from "react";
import { m } from "framer-motion";
export const TileGrid = () => {
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
if (!mounted) return null;
const rows = 7;
const cols = 8;
return (
<div className="absolute inset-0 pointer-events-none overflow-hidden z-[1]">
<div className="flex flex-col gap-8 md:gap-12 min-w-[120%] min-h-[120%] -left-[10%] -top-[10%] absolute">
{[...Array(rows)].map((_, rowIndex) => (
<div
key={rowIndex}
className="flex gap-8 md:gap-12 justify-center"
style={{
transform:
rowIndex % 2 === 0 ? "translateX(0)" : "translateX(100px)",
}}
>
{[...Array(cols)].map((_, colIndex) => (
<m.div
key={`${rowIndex}-${colIndex}`}
initial={{ opacity: 0.03 }}
animate={{
opacity: [0.03, Math.random() > 0.8 ? 0.15 : 0.03, 0.03],
scale: [1, Math.random() > 0.8 ? 1.02 : 1, 1],
}}
transition={{
duration: 8 + Math.random() * 8,
repeat: Infinity,
delay: Math.random() * 15,
ease: "easeInOut",
}}
className="w-32 h-32 md:w-56 md:h-56 bg-white/5 rounded-3xl md:rounded-[3rem] border border-white/10 shadow-[0_8px_32px_0_rgba(31,38,135,0.03)] shrink-0 will-change-transform"
/>
))}
</div>
))}
</div>
</div>
);
};