Add component to project
"use client"; import { InView } from "@/components/ui/in-view"; import { motion } from "framer-motion"; function InViewBasic() { return ( <div className="h-[350px] w-full overflow-auto"> <div className="py-12 text-center text-sm">Scroll down</div> <div className="flex h-[500px] items-end justify-center px-4 pb-24"> <InView variants={{ hidden: { opacity: 0, y: 100, filter: "blur(4px)" }, visible: { opacity: 1, y: 0, filter: "blur(0px)" }, }} viewOptions={{ margin: "0px 0px -200px 0px" }} transition={{ duration: 0.3, ease: "easeInOut" }} > <div className="max-w-96"> <p className=""> <strong className="font-medium"> Craft beautiful animated components with Motion-Primitives. </strong>{" "} Designed for developers and designers. The library leverages the power of Framer Motion, with intuitive APIs that simplifies creating complex animations for any project. Start building more dynamic interfaces today. </p> </div> </InView> </div> </div> ); } function InViewBasicMultiple() { return ( <div className="h-[350px] w-full overflow-y-auto overflow-x-hidden"> <div className="mb-36 py-12 text-center text-sm">Scroll down</div> <div className="flex h-[350px] items-end justify-center px-4 pb-24"> <InView variants={{ hidden: { opacity: 0, y: 30, scale: 0.95, filter: "blur(4px)", }, visible: { opacity: 1, y: 0, scale: 1, filter: "blur(0px)", }, }} transition={{ duration: 0.3, ease: "easeInOut" }} viewOptions={{ margin: "0px 0px -350px 0px" }} > <div className="max-w-96 bg-zinc-100 p-4"> <p className="text-zinc-600"> <strong className="font-medium text-zinc-900">Athletics.</strong>{" "} Watch running, jumping, and throwing events. Athletes compete in many different activities. </p> </div> </InView> </div> <div className="flex h-[350px] items-end justify-center px-4 pb-24"> <InView variants={{ hidden: { opacity: 0, x: 100, }, visible: { opacity: 1, x: 0, }, }} transition={{ duration: 0.3, ease: "easeInOut" }} viewOptions={{ margin: "0px 0px -350px 0px" }} > <div className="max-w-96 bg-zinc-900 p-4"> <p className="text-zinc-400"> <strong className="font-medium text-zinc-50">Swimming.</strong>{" "} See swimmers race in water. They use different styles to swim fast and win medals. </p> </div> </InView> </div> <div className="flex h-[350px] items-end justify-center overflow-x-hidden px-4 pb-24"> <InView variants={{ hidden: { opacity: 0, scale: 1.5, }, visible: { opacity: 1, scale: 1, }, }} transition={{ duration: 0.3, ease: "easeInOut" }} viewOptions={{ margin: "0px 0px -350px 0px" }} > <div className="max-w-96 bg-zinc-100 p-4"> <p className="text-zinc-600"> <strong className="font-medium">Gymnastics.</strong> Gymnasts perform amazing flips and jumps. They show strength and balance in their routines. </p> </div> </InView> </div> </div> ); } function InViewImagesGrid() { return ( <div className="h-full w-full overflow-auto"> <div className="mb-20 py-12 text-center text-sm">Scroll down</div> <div className="flex h-[1200px] items-end justify-center pb-12"> <InView viewOptions={{ once: true, margin: "0px 0px -250px 0px" }} variants={{ hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.09 }, }, }} > <div className="columns-2 gap-4 px-8 sm:columns-3"> {[ "https://images.beta.cosmos.so/e5ebb6f8-8202-40ec-bc70-976f81153501?format=jpeg", "https://images.beta.cosmos.so/1b6f1bee-1b4c-4035-9e93-c93ef4d445e1?format=jpeg", "https://images.beta.cosmos.so/9968a6cf-d7f6-4ec9-a56d-ac4eef3f8689?format=jpeg", "https://images.beta.cosmos.so/4b88a39c-c657-4911-b843-b473237e83b5?format=jpeg", "https://images.beta.cosmos.so/86af92c0-064d-4801-b7ed-232535b03328?format=jpeg", "https://images.beta.cosmos.so/399e2a4a-e118-4aaf-9c7e-155ed18f6556?format=jpeg", "https://images.beta.cosmos.so/6ff16bc9-dc94-4549-a057-673a603ce203?format=jpeg", "https://images.beta.cosmos.so/d67c3185-4480-4408-8f9d-1cbf541e5d91?format=jpeg", "https://images.beta.cosmos.so/a7b19274-3370-4080-b734-e8ac268d8c8e.?format=jpeg", "https://images.beta.cosmos.so/551daf0d-77e8-472c-9324-468fed15a0ba?format=jpeg", ].map((imgSrc, index) => { return ( <motion.div variants={{ hidden: { opacity: 0, scale: 0.8, filter: "blur(10px)" }, visible: { opacity: 1, scale: 1, filter: "blur(0px)" }, }} key={index} className="mb-4" > <img src={imgSrc} alt={`Image placeholder from cosmos.so, index:${index}`} className="size-full rounded-lg object-contain" /> </motion.div> ); })} </div> </InView> </div> </div> ); } export default { InViewBasic, InViewBasicMultiple, InViewImagesGrid, };