Skip to content

Instantly share code, notes, and snippets.

@sek-consulting
Last active February 13, 2024 18:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sek-consulting/18d2cc4c89b74948124f6a2b9b8525ff to your computer and use it in GitHub Desktop.
Save sek-consulting/18d2cc4c89b74948124f6a2b9b8525ff to your computer and use it in GitHub Desktop.
a button component for Astro ported from @shadcn/ui
---
interface Props {
href: string
variant?: "default" | "destructive" | "outline" | "subtle" | "ghost" | "link"
size?: "default" | "sm" | "lg"
class?: string
[x: string]: any
}
const variants = {
default: "bg-slate-900 text-white hover:bg-slate-700 dark:bg-slate-50 dark:text-slate-900",
destructive: "bg-red-500 text-white hover:bg-red-600 dark:hover:bg-red-600",
outline:
"bg-transparent border border-slate-200 hover:bg-slate-100 dark:border-slate-700 dark:text-slate-100",
subtle: "bg-slate-100 text-slate-900 hover:bg-slate-200 dark:bg-slate-700 dark:text-slate-100",
ghost:
"bg-transparent hover:bg-slate-100 dark:hover:bg-slate-800 dark:text-slate-100 dark:hover:text-slate-100 data-[state=open]:bg-transparent dark:data-[state=open]:bg-transparent",
link: "bg-transparent dark:bg-transparent underline-offset-4 hover:underline text-slate-900 dark:text-slate-100 hover:bg-transparent dark:hover:bg-transparent"
}
const sizes = {
default: "h-10 py-2 px-4",
sm: "h-9 px-2 rounded-md text-sm",
lg: "h-11 px-8 rounded-md"
}
const { href, size = "default", variant = "default", class: className, ...rest } = Astro.props
---
<a
href={href}
class:list={[
"active:scale-95 inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 dark:hover:bg-slate-800 dark:hover:text-slate-100 disabled:opacity-50 dark:focus:ring-slate-400 disabled:pointer-events-none dark:focus:ring-offset-slate-900 data-[state=open]:bg-slate-100 dark:data-[state=open]:bg-slate-800",
variants[variant],
sizes[size],
className
]}
{...rest}
><slot />
</a>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment