Skip to content

Button

Primary interactive element for triggering actions

All Variants

Usage

tsx
import { Button } from '@tryvienna/ui'

<Button>Button</Button>

Examples

Default

Default
tsx
<Button>Button</Button>

Destructive

Destructive
tsx
<Button variant="destructive">Delete</Button>

Outline

Outline
tsx
<Button variant="outline">Outline</Button>

Secondary

Secondary
tsx
<Button variant="secondary">Secondary</Button>

Ghost

Ghost
tsx
<Button variant="ghost">Ghost</Button>
Link
tsx
<Button variant="link">Link Button</Button>

All Variants

All Variants
tsx
<div className="flex flex-wrap items-center gap-4">
  <Button variant="default">Default</Button>
  <Button variant="destructive">Destructive</Button>
  <Button variant="outline">Outline</Button>
  <Button variant="secondary">Secondary</Button>
  <Button variant="ghost">Ghost</Button>
  <Button variant="link">Link</Button>
</div>

All Sizes

All Sizes
tsx
<div className="flex flex-wrap items-center gap-4">
  <Button size="xs">Extra Small (24px)</Button>
  <Button size="sm">Small (32px)</Button>
  <Button size="default">Default (40px)</Button>
  <Button size="lg">Large (48px)</Button>
</div>

With Icons

With Icons
tsx
<div className="flex flex-wrap items-center gap-4">
  <Button>
    <MailIcon /> Send Email
  </Button>
  <Button variant="destructive">
    <TrashIcon /> Delete
  </Button>
  <Button variant="outline">
    <DownloadIcon /> Download
  </Button>
  <Button variant="secondary">
    Next <ChevronRightIcon />
  </Button>
</div>

Icon Buttons

Icon Buttons
tsx
<div className="flex flex-wrap items-center gap-4">
  <Button size="icon-xs" variant="ghost">
    <PlusIcon />
  </Button>
  <Button size="icon-sm" variant="ghost">
    <PlusIcon />
  </Button>
  <Button size="icon" variant="outline">
    <PlusIcon />
  </Button>
  <Button size="icon-lg" variant="outline">
    <PlusIcon />
  </Button>
</div>

Loading

Loading
tsx
<div className="flex flex-wrap items-center gap-4">
  <Button disabled>
    <LoaderIcon className="animate-spin" /> Please wait
  </Button>
  <Button variant="outline" disabled>
    <LoaderIcon className="animate-spin" /> Loading...
  </Button>
</div>

Disabled

Disabled
tsx
<Button disabled="true">Disabled</Button>

Variants

NameOptionsDefault
variantdefault | destructive | outline | secondary | ghost | linkdefault
sizedefault | xs | sm | lg | icon | 'icon-xs' | 'icon-sm' | 'icon-lg'default

API Reference

Button

PropTypeDefaultDescription
variant"link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | nulldefault
size"default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | nulldefault
asChildbooleanfalse

Also accepts all props from button.

Data Attributes

Componentdata-slot
Button"button"