PurpleBenefits.tsx (4001B)
1 import { MeshGradient2 } from "../effects/MeshGradient.2"; 2 import { Button } from "../ui/Button"; 3 import { FormattedMessage, useIntl } from "react-intl"; 4 import Link from "next/link"; 5 import { motion } from "framer-motion"; 6 import { RoundedContainerWithGradientBorder } from "../ui/RoundedContainerWithGradientBorder"; 7 import { cn } from "@/lib/utils"; 8 import Image from "next/image"; 9 import { Award, Badge, Heart, Joystick, KeyRound, Scale, Stars, Wallet } from "lucide-react"; 10 import { MeshGradient4 } from "../effects/MeshGradient.4"; 11 import { MeshGradient3 } from "../effects/MeshGradient.3"; 12 13 export function PurpleBenefits({ className }: { className?: string }) { 14 const intl = useIntl() 15 16 const benefits = [ 17 { 18 icon: <Heart className="h-12 w-12 text-white opacity-80" />, 19 headline: intl.formatMessage({ id: "purple.benefits.benefit1.name", defaultMessage: "Help Build The Future" }), 20 description: intl.formatMessage({ id: "purple.benefits.benefit1.description", defaultMessage: "Support Damus development to help build the future of decentralized communication on the web." }), 21 }, 22 { 23 icon: <Stars className="text-white h-12 w-12 opacity-80" />, 24 headline: intl.formatMessage({ id: "purple.benefits.benefit2.name", defaultMessage: "Exclusive features" }), 25 description: intl.formatMessage({ id: "purple.benefits.benefit2.description", defaultMessage: "Be the first to access upcoming premium features: Automatic translations, longer note storage, and more" }), 26 }, 27 { 28 icon: <Award className="h-12 w-12 text-white opacity-80" />, 29 headline: intl.formatMessage({ id: "purple.benefits.benefit3.name", defaultMessage: "Supporter Badge" }), 30 description: intl.formatMessage({ id: "purple.benefits.benefit3.description", defaultMessage: "Get a special badge on your profile to show everyone your contribution to Freedom tech" }), 31 }, 32 ] 33 34 return (<> 35 <div className={cn("bg-black overflow-hidden relative min-h-screen", className)} id="benefits"> 36 <MeshGradient3 className="absolute top-0 left-0 pointer-events-none translate-y-3/4 overflow-visible scale-150" /> 37 <div className="container mx-auto px-6 pt-20"> 38 <div className="flex flex-col items-center justify-center lg:mt-16"> 39 <div className="relative mb-16 md:mb-32 flex flex-col items-center"> 40 <motion.h2 className="text-5xl md:text-8xl text-center text-transparent bg-clip-text bg-gradient-to-r from-damuspink-500 from-30% to-damuspink-600 to-100% font-semibold pb-8 break-keep"> 41 {intl.formatMessage({ id: "purple.benefits.headline", defaultMessage: "Get more from Damus." })} 42 </motion.h2> 43 <motion.div className="text-white/60 text-xl text-center max-w-2xl mb-6 mt-6 break-keep"> 44 {intl.formatMessage({ id: "purple.benefits.description", defaultMessage: "Help us stay independent in our mission for Freedom tech with our Purple membership, and look cool doing it!" })} 45 </motion.div> 46 </div> 47 {(intl.locale != "ja" || process.env.FORCE_LOAD_ALL_JA_SECTIONS) && ( 48 <div className="flex flex-wrap gap-x-8 gap-y-16 items-stretch justify-center"> 49 {benefits.map((item, index) => ( 50 <div key={index} className="max-w-xs flex flex-col items-center justify-between"> 51 <RoundedContainerWithGradientBorder className=""> 52 {item.icon} 53 </RoundedContainerWithGradientBorder> 54 <h3 className="text-xl font-semibold text-transparent bg-clip-text bg-gradient-to-br from-white from-30% to-cyan-200 to-100% text-center text-normal mt-6"> 55 {item.headline} 56 </h3> 57 <p className="text-white/80 text-center text-normal mt-4"> 58 {item.description} 59 </p> 60 </div> 61 ))} 62 </div> 63 )} 64 </div> 65 </div> 66 </div> 67 </>) 68 }