Comet Card
aceternity/comet-cardFreeComponent
aceternity publishes no description for this item.
Install it
npx shadcn@latest add https://ui.aceternity.com/registry/comet-card.jsonSource
1"use client";2import React, { useRef } from "react";3import {4 motion,5 useMotionValue,6 useSpring,7 useTransform,8 useMotionTemplate,9} from "motion/react";10import { cn } from "@/lib/utils";1112export const CometCard = ({13 rotateDepth = 17.5,14 translateDepth = 20,15 className,16 children,17}: {18 rotateDepth?: number;19 translateDepth?: number;20 className?: string;21 children: React.ReactNode;22}) => {23 const ref = useRef<HTMLDivElement>(null);2425 const x = useMotionValue(0);26 const y = useMotionValue(0);2728 const mouseXSpring = useSpring(x);29 const mouseYSpring = useSpring(y);3031 const rotateX = useTransform(32 mouseYSpring,33 [-0.5, 0.5],34 [`-${rotateDepth}deg`, `${rotateDepth}deg`],35 );36 const rotateY = useTransform(37 mouseXSpring,38 [-0.5, 0.5],39 [`${rotateDepth}deg`, `-${rotateDepth}deg`],40 );4142 const translateX = useTransform(43 mouseXSpring,44 [-0.5, 0.5],45 [`-${translateDepth}px`, `${translateDepth}px`],46 );47 const translateY = useTransform(48 mouseYSpring,49 [-0.5, 0.5],50 [`${translateDepth}px`, `-${translateDepth}px`],51 );5253 const glareX = useTransform(mouseXSpring, [-0.5, 0.5], [0, 100]);54 const glareY = useTransform(mouseYSpring, [-0.5, 0.5], [0, 100]);5556 const glareBackground = useMotionTemplate`radial-gradient(circle at ${glareX}% ${glareY}%, rgba(255, 255, 255, 0.9) 10%, rgba(255, 255, 255, 0.75) 20%, rgba(255, 255, 255, 0) 80%)`;5758 const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {59 if (!ref.current) return;6061 const rect = ref.current.getBoundingClientRect();6263 const width = rect.width;64 const height = rect.height;6566 const mouseX = e.clientX - rect.left;67 const mouseY = e.clientY - rect.top;6869 const xPct = mouseX / width - 0.5;70 const yPct = mouseY / height - 0.5;7172 x.set(xPct);73 y.set(yPct);74 };7576 const handleMouseLeave = () => {77 x.set(0);78 y.set(0);79 };8081 return (82 <div className={cn("perspective-distant transform-3d", className)}>83 <motion.div84 ref={ref}85 onMouseMove={handleMouseMove}86 onMouseLeave={handleMouseLeave}87 style={{88 rotateX,89 rotateY,90 translateX,91 translateY,92 boxShadow:93 "rgba(0, 0, 0, 0.01) 0px 520px 146px 0px, rgba(0, 0, 0, 0.04) 0px 333px 133px 0px, rgba(0, 0, 0, 0.26) 0px 83px 83px 0px, rgba(0, 0, 0, 0.29) 0px 21px 46px 0px",94 }}95 initial={{ scale: 1, z: 0 }}96 whileHover={{97 scale: 1.05,98// … truncated
Files it writes
More from aceternity
All 275 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| 3d Card3d-card | aceternity | Components | Free | no deps | |
| 3d Globe3d-globe | aceternity | Components | Free | 3 deps | |
| 3d Marquee3d-marquee | aceternity | Components | Free | no deps | |
| 3d Pin3d-pin | aceternity | Components | Free | 1 dep | |
| Animated Modalanimated-modal | aceternity | Components | Free | 1 dep | |
| Animated Testimonialsanimated-testimonials | aceternity | Components | Free | 2 deps | |
| Animated Tooltipanimated-tooltip | aceternity | Components | Free | 1 dep | |
| Apple Cards Carouselapple-cards-carousel | aceternity | Components | Free | 2 deps |
