@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.

Read Docs
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

PropTypeDefaultDescription
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.
loadingbooleanfalseShows spinner and disables interaction.
disabledbooleanfalseDisables the button.
asElementType / string"button"Render as a different element. Use "a" for link buttons.
leftIconReactNodeReact only. Icon rendered before the label.
rightIconReactNodeReact only. Icon rendered after the label.
classNamestringAdditional CSS class names.