@usevyre/react @usevyre/vue

Button

Triggers actions and navigation. Supports 6 variants, 4 sizes, loading state, icons, and polymorphic rendering via as.


Variants

import { Button } from "@usevyre/react";

<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="accent">Accent</Button>
<Button variant="teal">Teal</Button>
<Button variant="danger">Danger</Button>

Sizes

<Button variant="accent" size="sm">Small</Button>
<Button variant="accent" size="md">Medium</Button>
<Button variant="accent" size="lg">Large</Button>

States

<Button variant="accent">Default</Button>
<Button variant="accent" loading>Loading</Button>
<Button variant="accent" disabled>Disabled</Button>

Icons & polymorphic

Use leftIcon / rightIcon props in React, or named slots #left-icon / #right-icon in Vue. Pass as="a" to render as an anchor while keeping all button styles.

import { Button } from "@usevyre/react";
import { Search } from "lucide-react"; // any icon library

// Icon before label
<Button variant="secondary" leftIcon={<Search size={14} />}>
  Search
</Button>

// Icon only (use size="icon" + aria-label)
<Button variant="ghost" size="icon" aria-label="Search">
  <Search size={16} />
</Button>

// As anchor link
<Button as="a" href="/docs" variant="accent">
  Read Docs
</Button>

Props

Props

Prop Type Default Description
variant "primary" | "secondary" | "ghost" | "accent" | "teal" | "danger" "secondary" Visual style variant.
size "sm" | "md" | "lg" | "icon" "md" Size scale. Use icon for square icon-only buttons.
loading boolean false Shows spinner and disables interaction.
disabled boolean false Disables the button.
as ElementType / string "button" Render as a different element. Use "a" for link buttons.
leftIcon ReactNode React only. Icon rendered before the label.
rightIcon ReactNode React only. Icon rendered after the label.
className string Additional CSS class names.