import Link from 'next/link' import { motion, useMotionTemplate, useMotionValue } from 'framer-motion' import { GridPattern } from '@/components/GridPattern' import { Heading } from '@/components/Heading' import { ChatBubbleIcon } from '@/components/icons/ChatBubbleIcon' import { EnvelopeIcon } from '@/components/icons/EnvelopeIcon' import { UserIcon } from '@/components/icons/UserIcon' import { UsersIcon } from '@/components/icons/UsersIcon' const clients = [ { href: '/client-installation#linux', name: 'Linux', description: 'Learn how to install the NetBird client on Linux devices.', icon: UserIcon, pattern: { y: 16, squares: [ [0, 1], [1, 3], ], }, }, { href: '/client-installation#mac-os', name: 'MacOS', description: 'Learn how to install the NetBird client on MacOS devices.', icon: ChatBubbleIcon, pattern: { y: -6, squares: [ [-1, 2], [1, 3], ], }, }, { href: '/client-installation#windows', name: 'Windows', description: 'Learn how to install the NetBird client on Windows devices.', icon: EnvelopeIcon, pattern: { y: 32, squares: [ [0, 2], [1, 4], ], }, }, { href: '/client-installation#android', name: 'Android', description: 'Learn how to install the NetBird client on Android devices.', icon: UsersIcon, pattern: { y: 22, squares: [[0, 1]], }, }, { href: '/client-installation#ios', name: 'iOS', description: 'Learn how to install the NetBird client on OS devices.', icon: UsersIcon, pattern: { y: 22, squares: [[0, 1]], }, }, ] function ClientIcon({ icon: Icon }) { return (
) } function ClientPattern({ mouseX, mouseY, ...gridProps }) { let maskImage = useMotionTemplate`radial-gradient(180px at ${mouseX}px ${mouseY}px, white, transparent)` let style = { maskImage, WebkitMaskImage: maskImage } return (
) } function Client({ client }) { let mouseX = useMotionValue(0) let mouseY = useMotionValue(0) function onMouseMove({ currentTarget, clientX, clientY }) { let { left, top } = currentTarget.getBoundingClientRect() mouseX.set(clientX - left) mouseY.set(clientY - top) } return (

{client.name}

{client.description}

) } export function Clients() { return (
Clients
{clients.map((client) => ( ))}
) }