-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9d44086
commit 826e647
Showing
5 changed files
with
174 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import { HoverEffect } from "./ui/card-hover-effect"; | ||
|
||
export function CardHoverEffectDemo() { | ||
return ( | ||
<> | ||
<h1 className="heading"> | ||
My Services / <span className="text-purple">What I Do?</span> | ||
</h1> | ||
<div className="max-w-7xl mx-auto px-1"> | ||
<HoverEffect items={projects} /> | ||
</div> | ||
</> | ||
); | ||
} | ||
export const projects = [ | ||
{ | ||
title: "Web Application Development", | ||
description: | ||
"I develop custom, scalable web applications tailored to your business, ensuring security and seamless user experiences.", | ||
link: "#", | ||
}, | ||
{ | ||
title: "Technical Support", | ||
description: | ||
"I provide reliable technical support, ensuring your systems run smoothly and efficiently.I resolve issues and offer expert guidance.", | ||
link: "#", | ||
}, | ||
{ | ||
title: "Database Management", | ||
description: | ||
"I specialize in code optimization, enhancing performance, efficiency, and maintainability. I ensures faster, more reliable applications.", | ||
link: "#", | ||
}, | ||
{ | ||
title: "Code Optimization", | ||
description: | ||
"A technology company that focuses on building products that advance Facebook's mission of bringing the world closer together.", | ||
link: "#", | ||
}, | ||
{ | ||
title: "Consultation Services", | ||
description: | ||
"Providing insights and solutions to optimize your projects.Ensuring efficient and high-quality code development.", | ||
link: "#", | ||
}, | ||
{ | ||
title: "Freelancer", | ||
description: | ||
"I offer freelance web development services, creating custom, scalable solutions to meet your business needs.", | ||
link: "#", | ||
}, | ||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
"use client"; | ||
|
||
import { cn } from "@/utils/cn"; | ||
import { AnimatePresence, motion } from "framer-motion"; | ||
import Link from "next/link"; | ||
import { useState } from "react"; | ||
|
||
export const HoverEffect = ({ | ||
items, | ||
className, | ||
}: { | ||
items: { | ||
title: string; | ||
description: string; | ||
link: string; | ||
}[]; | ||
className?: string; | ||
}) => { | ||
let [hoveredIndex, setHoveredIndex] = useState<number | null>(null); | ||
|
||
return ( | ||
<div | ||
className={cn( | ||
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 py-10", | ||
className | ||
)} | ||
> | ||
{items.map((item, idx) => ( | ||
<Link | ||
href={item?.link} | ||
key={item?.link} | ||
className="relative group block p-2 h-full w-full" | ||
onMouseEnter={() => setHoveredIndex(idx)} | ||
onMouseLeave={() => setHoveredIndex(null)} | ||
> | ||
<AnimatePresence> | ||
{hoveredIndex === idx && ( | ||
<motion.span | ||
className="absolute inset-0 h-full w-full bg-neutral-200 dark:bg-slate-800/[0.8] block rounded-3xl" | ||
layoutId="hoverBackground" | ||
initial={{ opacity: 0 }} | ||
animate={{ | ||
opacity: 1, | ||
transition: { duration: 0.15 }, | ||
}} | ||
exit={{ | ||
opacity: 0, | ||
transition: { duration: 0.15, delay: 0.2 }, | ||
}} | ||
/> | ||
)} | ||
</AnimatePresence> | ||
<Card> | ||
<CardTitle>{item.title}</CardTitle> | ||
<CardDescription>{item.description}</CardDescription> | ||
</Card> | ||
</Link> | ||
))} | ||
</div> | ||
); | ||
}; | ||
|
||
export const Card = ({ | ||
className, | ||
children, | ||
}: { | ||
className?: string; | ||
children: React.ReactNode; | ||
}) => { | ||
return ( | ||
<div | ||
className={cn( | ||
"rounded-2xl h-full w-full p-4 overflow-hidden bg-black-100 border border-transparent dark:border-white/[0.2] group-hover:border-slate-700 relative z-20", | ||
className | ||
)} | ||
> | ||
<div className="relative z-50"> | ||
<div className="p-4">{children}</div> | ||
</div> | ||
</div> | ||
); | ||
}; | ||
export const CardTitle = ({ | ||
className, | ||
children, | ||
}: { | ||
className?: string; | ||
children: React.ReactNode; | ||
}) => { | ||
return ( | ||
<h4 className={cn("text-zinc-100 font-bold tracking-wide mt-4", className)}> | ||
{children} | ||
</h4> | ||
); | ||
}; | ||
export const CardDescription = ({ | ||
className, | ||
children, | ||
}: { | ||
className?: string; | ||
children: React.ReactNode; | ||
}) => { | ||
return ( | ||
<p | ||
className={cn( | ||
"mt-8 text-zinc-400 tracking-wide leading-relaxed text-sm", | ||
className | ||
)} | ||
> | ||
{children} | ||
</p> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.