Button

An interactive element used to trigger actions, submit forms, or navigate between views.

Variants

Themes

Sizes

Icons

API Reference

Show types
typescript
import { type RouterLinkProps } from 'vue-router'
import { type Component } from 'vue'

type Theme = 'gray' | 'blue' | 'green' | 'red'
type Size = 'sm' | 'md' | 'md' | 'lg' | 'xl' | '2xl'
type Variant = 'solid' | 'subtle' | 'outline' | 'ghost'

export interface ButtonProps {
  /** Visual color theme of the button */
  theme?: Theme

  /** Controls the button size */
  size?: Size

  /** Visual style of the button */
  variant?: Variant

  /** Text label displayed inside the button */
  label?: string

  /** Icon shown when no left or right icon is specified */
  icon?: string | Component

  /** Icon shown before the label */
  iconLeft?: string | Component

  /** Icon shown after the label */
  iconRight?: string | Component

  /** Tooltip text shown on hover */
  tooltip?: string

  /** Shows a loading state and disables interaction */
  loading?: boolean

  /** Text shown while the button is loading */
  loadingText?: string

  /** Disables the button */
  disabled?: boolean

  /** Router destination when used as a link */
  route?: RouterLinkProps['to']

  /** External link URL */
  link?: string

  /** Native button type */
  type?: 'button' | 'submit' | 'reset'
}

/** Combined theme and variant key */
export type ThemeVariant = `${Theme}-${Variant}`
Prop Default Type
theme
"gray"
Theme

Visual color theme of the button

size
"sm"
Size

Controls the button size

variant
"subtle"
Variant

Visual style of the button

label
string

Text label displayed inside the button

icon
string | Component

Icon shown when no left or right icon is specified

iconLeft
string | Component

Icon shown before the label

iconRight
string | Component

Icon shown after the label

tooltip
string

Tooltip text shown on hover

loading
false
boolean

Shows a loading state and disables interaction

loadingText
string

Text shown while the button is loading

disabled
false
boolean

Disables the button

route
string | kt | Tt

Router destination when used as a link

link
string

External link URL

type
"button"
"button" | "submit" | "reset"

Native button type

Slot Payload
prefix

Content shown before the button label (left icon / custom content)

icon

Icon-only content for icon buttons

default

Main button content (overrides `label`)

suffix

Content shown after the button label (right icon / custom content)