# Button > Trigger actions with variants, sizes, and asChild. Import from `@aspyn-io/kit`. Scaffold source: `npx shadcn@latest add https://design.aspyn.io/r/button.json` ## Install ```tsx import { Button } from "@aspyn-io/kit"; ``` ### Variants Six visual intents. Default is the primary action; use one primary per view. ```tsx ``` ### Sizes ```tsx ``` ### As a link (asChild) Render the button as a Next.js Link (or any element) while keeping styling and focus behavior. ```tsx import Link from "next/link"; ``` ### Loading state Disable while pending and communicate progress to assistive tech. ```tsx ``` ### With icon Icons sit inline before the label and inherit its size. ```tsx ``` ### Icon only Use size="icon" and always provide an aria-label. ```tsx ``` ### Rounded ```tsx ``` ## Notes - Icon-only buttons require an aria-label. - Buttons get cursor:pointer automatically from @aspyn-io/tokens: no per-app fixes needed. - Use variant="destructive" only for irreversible actions, paired with a confirmation Dialog.