1import { Button } from '@/components/ui/button';23export function Default() {4 return <Button>Click me</Button>;5}
Installation
pnpm dlx mateui add button
Anatomy
1import { Button } from '@/components/ui/button';
1<Button variant="outline">Button</Button>
Variants
Sizes
1import { Plus, Settings } from 'lucide-react';2import { Button } from '@/components/ui/button';34export function Sizes() {5 return (6 <div className="flex flex-col gap-6">7 <div className="flex flex-wrap items-center gap-4">8 <Button size="sm">Small</Button>9 <Button size="default">Default</Button>10 <Button size="lg">Large</Button>11 <Button size="icon" aria-label="Settings">12 <Settings className="size-4" />13 </Button>14 </div>15 <div className="flex flex-wrap items-center gap-4">16 <Button size="sm" leftIcon={<Plus className="size-4" />}>17 Add small18 </Button>19 <Button size="default" leftIcon={<Plus className="size-4" />}>20 Add default21 </Button>22 <Button size="lg" leftIcon={<Plus className="size-5" />}>23 Add large24 </Button>25 </div>26 </div>27 );28}
Secondary
1import { Button } from '@/components/ui/button';23export function Secondary() {4 return <Button variant="secondary">Secondary</Button>;5}
Destructive
1import { Button } from '@/components/ui/button';23export function Destructive() {4 return <Button variant="destructive">Destructive</Button>;5}
Outline
1import { Button } from '@/components/ui/button';23export function Outline() {4 return <Button variant="outline">Outline</Button>;5}
Ghost
1import { Button } from '@/components/ui/button';23export function Ghost() {4 return <Button variant="ghost">Ghost</Button>;5}
Link
1import { Button } from '@/components/ui/button';23export function Link() {4 return <Button variant="link">Link</Button>;5}
API Reference
Button
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "default" | The button style. |
size | "default" | "sm" | "lg" | "icon" | "default" | The button size. |
loading | boolean | false | Whether the button is in a loading state. |
loader | React.ReactNode | <Loader2 /> | Custom loader component to be displayed when loading. |
leftIcon | React.ReactNode | — | Icon to display on the left side of the button. |
rightIcon | React.ReactNode | — | Icon to display on the right side of the button. |
fullWidth | boolean | false | Whether the button should take up the full width of its container. |
disabled | boolean | — | Disables the button. |
className | string | — | Additional CSS class names. |
type | "button" | "submit" | "reset" | "button" | The type of the button element. |
children | React.ReactNode | — | The button content (text or other elements). |
ButtonGroup
| Prop | Type | Default | Description |
|---|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" | The layout of the button group, either horizontal or vertical. |
attached | boolean | false | Whether the buttons in the group are attached to each other (i.e., no border-radius between buttons). |
className | string | — | Additional CSS class names. |
children | React.ReactNode | — | The buttons inside the group. |