Logo Astro UI Kit

Badges

Red Orange Amber Yellow Lime Green Emerald Teal Cyan Sky Blue Indigo Violet Purple Fuchsia Pink Rose Slate Gray Zinc Neutral Stone

Tamaños

XS SM MD

Instalación

npm install class-variance-authority clsx tailwind-merge

Luego copie el siguiente codigo, cree un archivo en src/components/ui/button.astro y peguelo ahí.

---
import { cn } from "@/lib/utils"
import type { HTMLAttributes } from "astro/types"
import { cva, type VariantProps } from "class-variance-authority"

const badge = cva(
	"transition-all duration-300 ease-in-out pointer-events-none flex items-center justify-center gap-x-1 font-medium capitalize",
	{
		variants: {
			variant: {
				neutral:
					"bg-neutral-50 text-neutral-600 ring-1 ring-neutral-600/10 ring-inset dark:bg-neutral-400/10 dark:text-neutral-400 dark:ring-neutral-400/30",
				red: "bg-red-50 text-red-600 ring-1 ring-red-600/10 ring-inset dark:bg-red-400/10 dark:text-red-400 dark:ring-red-400/30",
				blue: "bg-blue-50 text-blue-600 ring-1 ring-blue-600/10 ring-inset dark:bg-blue-400/10 dark:text-blue-400 dark:ring-blue-400/30",
				green:
					"bg-green-50 text-green-600 ring-1 ring-green-600/10 ring-inset dark:bg-green-400/10 dark:text-green-400 dark:ring-green-400/30",
				yellow:
					"bg-yellow-50 text-yellow-600 ring-1 ring-yellow-600/10 ring-inset dark:bg-yellow-400/10 dark:text-yellow-400 dark:ring-yellow-400/30",
				pink: "bg-pink-50 text-pink-600 ring-1 ring-pink-600/10 ring-inset dark:bg-pink-400/10 dark:text-pink-400 dark:ring-pink-400/30",
				orange:
					"bg-orange-50 text-orange-600 ring-1 ring-orange-600/10 ring-inset dark:bg-orange-400/10 dark:text-orange-400 dark:ring-orange-400/30",
				cyan: "bg-cyan-50 text-cyan-600 ring-1 ring-cyan-600/10 ring-inset dark:bg-cyan-400/10 dark:text-cyan-400 dark:ring-cyan-400/30",
				fuchsia:
					"bg-fuchsia-50 text-fuchsia-600 ring-1 ring-fuchsia-600/10 ring-inset dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:ring-fuchsia-400/30",
				purple:
					"bg-purple-50 text-purple-600 ring-1 ring-purple-600/10 ring-inset dark:bg-purple-400/10 dark:text-purple-400 dark:ring-purple-400/30",
				sky: "bg-sky-50 text-sky-600 ring-1 ring-sky-600/10 ring-inset dark:bg-sky-400/10 dark:text-sky-400 dark:ring-sky-400/30",
				amber:
					"bg-amber-50 text-amber-600 ring-1 ring-amber-600/10 ring-inset dark:bg-amber-400/10 dark:text-amber-400 dark:ring-amber-400/30",
				lime: "bg-lime-50 text-lime-600 ring-1 ring-lime-600/10 ring-inset dark:bg-lime-400/10 dark:text-lime-400 dark:ring-lime-400/30",
				emerald:
					"bg-emerald-50 text-emerald-600 ring-1 ring-emerald-600/10 ring-inset dark:bg-emerald-400/10 dark:text-emerald-400 dark:ring-emerald-400/30",
				teal: "bg-teal-50 text-teal-600 ring-1 ring-teal-600/10 ring-inset dark:bg-teal-400/10 dark:text-teal-400 dark:ring-teal-400/30",
				violet:
					"bg-violet-50 text-violet-600 ring-1 ring-violet-600/10 ring-inset dark:bg-violet-400/10 dark:text-violet-400 dark:ring-violet-400/30",
				rose: "bg-rose-50 text-rose-600 ring-1 ring-rose-600/10 ring-inset dark:bg-rose-400/10 dark:text-rose-400 dark:ring-rose-400/30",
				zinc: "bg-zinc-50 text-zinc-600 ring-1 ring-zinc-600/10 ring-inset dark:bg-zinc-400/10 dark:text-zinc-400 dark:ring-zinc-400/30",
				stone:
					"bg-stone-50 text-stone-600 ring-1 ring-stone-600/10 ring-inset dark:bg-stone-400/10 dark:text-stone-400 dark:ring-stone-400/30",
				gray: "bg-gray-50 text-gray-600 ring-1 ring-gray-600/10 ring-inset dark:bg-gray-400/10 dark:text-gray-400 dark:ring-gray-400/30",
				indigo:
					"bg-indigo-50 text-indigo-600 ring-1 ring-indigo-600/10 ring-inset dark:bg-indigo-400/10 dark:text-indigo-400 dark:ring-indigo-400/30",
				slate:
					"bg-slate-50 text-slate-600 ring-1 ring-slate-600/10 ring-inset dark:bg-slate-400/10 dark:text-slate-400 dark:ring-slate-400/30"
			},
			size: {
				xs: "px-2 py-1 text-xs rounded-md",
				sm: "px-3 py-1.5 text-xs rounded-md",
				md: "px-4 py-2 text-sm rounded-lg"
			}
		},
		defaultVariants: { variant: "neutral", size: "xs" }
	}
)

interface Props
	extends HTMLAttributes<"span">,
		Omit<HTMLAttributes<"a">, "type">,
		VariantProps<typeof badge> {}

const { variant, size, class: className, ...rest } = Astro.props
const Tag = rest.href ? "a" : "span"
---

<Tag class={cn(badge({ variant, size }), className)} {...rest}>
	<slot />
</Tag>

Importación

---
import Badge from "@/components/ui/badge.astro"
---

Para usar los alias ”@/” configure su archivo ts.config.json Mirar como configurar aquí

Component API

Badge

PropTypeDefaultDescription
slotstringEl contenido del badge.
variants’neutral’ | ‘red’ | ‘blue’ | ‘green’ | ‘yellow’ | ‘pink’ | ‘orange’ | ‘cyan’ | ‘fuchsia’ | ‘purple’ | ‘sky''neutral’Variantes del badge (Colores de TailwindCSS).
size’xs’ | ‘sm’ | ‘md''xs’Tamaño del badge.
classstringClases opcionales de CSS.