Components
Displays a button or a component that looks like a button.
Playground
import { Button } from "@workspace/ui/components/button"
<Button variant="outline">Button</Button>
<Button variant="outline" size="icon" aria-label="Submit">
<ArrowUpIcon />
</Button>@layer base {
button:not(:disabled),
[role="button"]:not(:disabled) {
cursor: pointer;
}
}<Button size="xs" variant="outline">Extra Small</Button> <Button size="icon-xs" variant="outline" aria-label="Submit"> <ArrowUpRightIcon /> </Button> <Button size="sm" variant="outline">Small</Button> <Button size="icon-sm" variant="outline" aria-label="Submit"> <ArrowUpRightIcon /> </Button> <Button variant="outline">Default</Button> <Button size="icon" variant="outline" aria-label="Submit"> <ArrowUpRightIcon /> </Button> <Button size="lg" variant="outline">Large</Button> <Button size="icon-lg" variant="outline" aria-label="Submit"> <ArrowUpRightIcon /> </Button>
<Button>Button</Button>
<Button variant="outline">Outline</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="destructive">Destructive</Button>
<Button variant="link">Link</Button>
<Button variant="outline" size="icon" aria-label="Update"> <ArrowCircleUpIcon /> </Button>
data-icon="inline-start" or data-icon="inline-end" attribute to the icon for the correct spacing.<Button variant="outline"> <GitBranchIcon data-icon="inline-start" /> New Branch </Button> <Button variant="outline"> Fork <GitForkIcon data-icon="inline-end" /> </Button>
<Button className="rounded-full">Get Started</Button> <Button variant="outline" size="icon" className="rounded-full" aria-label="Submit" > <ArrowUpIcon /> </Button>
data-icon attribute to the spinner for the correct spacing.<Button variant="outline" disabled> <Spinner data-icon="inline-start" /> Generating </Button> <Button variant="secondary" disabled> Downloading <Spinner data-icon="inline-end" /> </Button>
<ButtonGroup>
<ButtonGroup>
<Button variant="outline" size="icon" aria-label="Go Back">
<ArrowLeftIcon />
</Button>
</ButtonGroup>
<ButtonGroup>
<Button variant="outline">Archive</Button>
<Button variant="outline">Report</Button>
</ButtonGroup>
<ButtonGroup>
<Button variant="outline">Snooze</Button>
<Button variant="outline" size="icon" aria-label="More Options">
<DotsThreeIcon />
</Button>
</ButtonGroup>
</ButtonGroup>asChild prop to make another component look like a button — the Radix Slot merges the button classes onto the child and keeps its semantics. Here's an example of a link that looks like a button.import Link from "next/link" <Button asChild> <Link href="#">Login</Link> </Button>
rtl:rotate-180 to directional icons so arrows point the right way.<div dir="rtl">
<Button variant="outline">زر</Button>
<Button variant="destructive">حذف</Button>
<Button variant="outline">
إرسال <ArrowRightIcon className="rtl:rotate-180" data-icon="inline-end" />
</Button>
<Button variant="outline" size="icon" aria-label="Add">
<PlusIcon />
</Button>
<Button variant="secondary" disabled>
<Spinner data-icon="inline-start" /> جاري التحميل
</Button>
</div>| Prop | Type | Default |
|---|---|---|
| variant | "default" | "outline" | "ghost" | "destructive" | "secondary" | "link" | "default" |
| size | "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | "default" |
| asChild | boolean | false |
Tokens used
12 design tokens consumed by the Button component.
--primary
Primary
--primary-foreground
Primary Foreground
--secondary
Secondary
--secondary-foreground
Secondary Foreground
--background
Background
--foreground
Foreground
--muted
Muted
--border
Border
--input
Input
--destructive
Destructive
--ring
Ring
--radius-md
Radius 0.8× (8px)