A button component with 7 variants (default, outline, secondary, destructive, destructive-outline, ghost, link), 10 sizes (xs–xl + icon sizes), loading state with built-in spinner, and render-as-child support via asChild prop.
import { Button } from "@/components/ui/component"; import { ChevronRight, Mail, Loader2, Plus } from "lucide-react"; export default function ButtonIconDemo() { return ( <div className="flex min-h-screen w-full items-center justify-center bg-background p-8"> <div className="flex flex-wrap items-center gap-3"> <Button size="icon" variant="outline"> <ChevronRight /> </Button> <Button size="icon-sm" variant="outline"> <Plus /> </Button> <Button size="icon-lg" variant="outline"> <Mail /> </Button> </div> </div> ); }
Part of coss — browse the full library on 21st.dev.