Spaces:
Running
Running
| import React from "react"; | |
| import { ArrowRight } from "lucide-react"; | |
| import { cn } from "@/lib/utils"; | |
| interface InteractiveHoverButtonProps | |
| extends React.ButtonHTMLAttributes<HTMLButtonElement> {} | |
| export const InteractiveHoverButton = React.forwardRef< | |
| HTMLButtonElement, | |
| InteractiveHoverButtonProps | |
| >(({ children, className, ...props }, ref) => { | |
| return ( | |
| <button | |
| ref={ref} | |
| className={cn( | |
| "group relative w-auto cursor-pointer overflow-hidden rounded-full border bg-background p-2 px-6 text-center font-semibold", | |
| className, | |
| )} | |
| {...props} | |
| > | |
| <div className="flex items-center gap-2"> | |
| <div className="h-2 w-2 rounded-full bg-primary transition-all duration-300 group-hover:scale-[100.8]"></div> | |
| <span className="inline-block transition-all duration-300 group-hover:translate-x-12 group-hover:opacity-0"> | |
| {children} | |
| </span> | |
| </div> | |
| <div className="absolute top-0 z-10 flex h-full w-full translate-x-12 items-center justify-center gap-2 text-primary-foreground opacity-0 transition-all duration-300 group-hover:-translate-x-5 group-hover:opacity-100"> | |
| <span>{children}</span> | |
| <ArrowRight /> | |
| </div> | |
| </button> | |
| ); | |
| }); | |
| InteractiveHoverButton.displayName = "InteractiveHoverButton"; | |