Glass Morph Card
einui/glass-morph-cardFreeComponent
A card component with a morphing glass effect, suitable for displaying content in a visually appealing way.
Live preview
live · rendered by the registry
Rendered by einui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.eindev.ir/r/glass-morph-card.jsonSource
1"use client"23import * as React from "react"4import { cn } from "@/lib/utils"56interface GlassMorphCardProps extends React.HTMLAttributes<HTMLDivElement> {7 children: React.ReactNode8 intensity?: number9 glowColor?: "cyan" | "purple" | "blue" | "pink" | "green"10 disabled?: boolean11}1213const glowColors = {14 cyan: "from-cyan-500/40 to-blue-500/40",15 purple: "from-purple-500/40 to-pink-500/40",16 blue: "from-blue-500/40 to-indigo-500/40",17 pink: "from-pink-500/40 to-rose-500/40",18 green: "from-emerald-500/40 to-teal-500/40",19}2021const GlassMorphCard = React.forwardRef<HTMLDivElement, GlassMorphCardProps>(22 ({ className, children, intensity = 15, glowColor = "cyan", disabled = false, ...props }, ref) => {23 const cardRef = React.useRef<HTMLDivElement>(null)24 const [transform, setTransform] = React.useState({ rotateX: 0, rotateY: 0 })25 const [lightPosition, setLightPosition] = React.useState({ x: 50, y: 50 })26 const [isHovered, setIsHovered] = React.useState(false)2728 const handleMouseMove = React.useCallback(29 (e: React.MouseEvent<HTMLDivElement>) => {30 if (disabled || !cardRef.current) return3132 const rect = cardRef.current.getBoundingClientRect()33 const x = e.clientX - rect.left34 const y = e.clientY - rect.top35 const centerX = rect.width / 236 const centerY = rect.height / 23738 const rotateX = ((y - centerY) / centerY) * -intensity39 const rotateY = ((x - centerX) / centerX) * intensity4041 setTransform({ rotateX, rotateY })42 setLightPosition({43 x: (x / rect.width) * 100,44 y: (y / rect.height) * 100,45 })46 },47 [intensity, disabled],48 )4950 const handleMouseLeave = React.useCallback(() => {51 setTransform({ rotateX: 0, rotateY: 0 })52 setLightPosition({ x: 50, y: 50 })53 setIsHovered(false)54 }, [])5556 const handleMouseEnter = React.useCallback(() => {57 setIsHovered(true)58 }, [])5960 return (61 <div ref={ref} className={cn("relative", className)} style={{ perspective: "1000px" }} {...props}>62 {/* Glow effect */}63 <div64 className={cn(65 "absolute -inset-2 rounded-2xl bg-linear-to-r blur-xl transition-opacity duration-300",66 glowColors[glowColor],67 isHovered ? "opacity-80" : "opacity-40",68 )}69 />7071 {/* Card container */}72 <div73 ref={cardRef}74 onMouseMove={handleMouseMove}75// … truncated
Files it writes
More from einui
All 44 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Base Widgetbase-widget | einui | Components | Free | 1 dep | |
| Calendar Widgetscalendar-widget | einui | Components | Free | 1 dep | |
| Clock Widgetsclock-widget | einui | Components | Free | 1 dep | |
| Glass Alert Dialogglass-alert-dialog | einui | Components | Free | 1 dep | |
| Glass Avatarglass-avatar | einui | Components | Free | 1 dep | |
| Glass Badgeglass-badge | einui | Components | Free | 1 dep | |
| Glass Breadcrumbglass-breadcrumb | einui | Components | Free | 1 dep | |
| Glass Buttonglass-button | einui | Components | Free | 2 deps |
