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 resources = [ { href: '/quick-start', name: 'Quick Start', description: 'Learn how to use Plane and follow the best practices of taking-off.', icon: UserIcon, pattern: { y: 16, squares: [ [0, 1], [1, 3], ], }, }, { href: '/self-host', name: 'Self-host Plane', description: 'Run Plane on your computer or development machine.', icon: ChatBubbleIcon, pattern: { y: -6, squares: [ [-1, 2], [1, 3], ], }, }, { href: '/plane-basics', name: 'Plane Basics', description: 'Learn about Plane basic features and kickstart your workspace', icon: EnvelopeIcon, pattern: { y: 32, squares: [ [0, 2], [1, 4], ], }, }, { href: '/', name: 'Community', description: 'Hang out with truly exceptional devs & designers on Discord.', icon: UsersIcon, pattern: { y: 22, squares: [[0, 1]], }, }, ] function ResourceIcon({ icon: Icon }) { return (
) } function ResourcePattern({ mouseX, mouseY, ...gridProps }) { let maskImage = useMotionTemplate`radial-gradient(180px at ${mouseX}px ${mouseY}px, white, transparent)` let style = { maskImage, WebkitMaskImage: maskImage } return (
) } function Resource({ resource }) { 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 (

{resource.name}

{resource.description}

) } export function Resources() { return (
Resources
{resources.map((resource) => ( ))}
) }