Button
---import { Button } from "@/components/starwind/button";---
<Button>Button</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <Button>Button</Button> );}<script setup lang="ts">import { Button } from "@/components/starwind/button";</script>
<template> <Button>Button</Button></template>Installation
pnpx starwind@latest add button --framework astronpx starwind@latest add button --framework astroyarn dlx starwind@latest add button --framework astropnpx starwind@latest add button --framework reactnpx starwind@latest add button --framework reactyarn dlx starwind@latest add button --framework reactpnpx starwind@latest add button --framework vuenpx starwind@latest add button --framework vueyarn dlx starwind@latest add button --framework vueUsage
Button renders a <button> by default. Provide href when the action should navigate to another page.
---import { Button } from "@/components/starwind/button";---
<Button>Save</Button><Button href="#api-reference" variant="outline">View API</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <> <Button>Save</Button> <Button href="#api-reference" variant="outline">View API</Button> </> );}<script setup lang="ts">import { Button } from "@/components/starwind/button";</script>
<template> <Button>Save</Button> <Button href="#api-reference" variant="outline">View API</Button></template>Variants
Use variant to set the action’s visual emphasis and status.
---import { Button } from "@/components/starwind/button";---
<Button variant="default">default</Button><Button variant="primary">primary</Button><Button variant="secondary">secondary</Button><Button variant="outline">outline</Button><Button variant="ghost">ghost</Button><Button variant="info">info</Button><Button variant="success">success</Button><Button variant="warning">warning</Button><Button variant="error">error</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <> <Button variant="default">default</Button> <Button variant="primary">primary</Button> <Button variant="secondary">secondary</Button> <Button variant="outline">outline</Button> <Button variant="ghost">ghost</Button> <Button variant="info">info</Button> <Button variant="success">success</Button> <Button variant="warning">warning</Button> <Button variant="error">error</Button> </> );}<script setup lang="ts">import { Button } from "@/components/starwind/button";</script>
<template> <Button variant="default">default</Button> <Button variant="primary">primary</Button> <Button variant="secondary">secondary</Button> <Button variant="outline">outline</Button> <Button variant="ghost">ghost</Button> <Button variant="info">info</Button> <Button variant="success">success</Button> <Button variant="warning">warning</Button> <Button variant="error">error</Button></template>Sizes
Use size for text buttons and the icon-* sizes for icon-only buttons. Give every icon-only button an accessible name.
---import { Button } from "@/components/starwind/button";import Mail from "@tabler/icons/outline/mail.svg";---
<Button size="sm">small</Button><Button size="md">medium</Button><Button size="lg">large</Button><Button size="icon" aria-label="Open messages"><Mail /></Button><Button size="icon-sm" aria-label="Open messages"><Mail /></Button><Button size="icon-lg" aria-label="Open messages"><Mail /></Button>import { Button } from "@/components/starwind/button";import { IconMail as Mail } from "@tabler/icons-react";
export function Example() { return ( <> <Button size="sm">small</Button> <Button size="md">medium</Button> <Button size="lg">large</Button> <Button size="icon" aria-label="Open messages"><Mail /></Button> <Button size="icon-sm" aria-label="Open messages"><Mail /></Button> <Button size="icon-lg" aria-label="Open messages"><Mail /></Button> </> );}<script setup lang="ts">import { Button } from "@/components/starwind/button";import { IconMail as Mail } from "@tabler/icons-vue";</script>
<template> <Button size="sm">small</Button> <Button size="md">medium</Button> <Button size="lg">large</Button> <Button size="icon" aria-label="Open messages"><Mail /></Button> <Button size="icon-sm" aria-label="Open messages"><Mail /></Button> <Button size="icon-lg" aria-label="Open messages"><Mail /></Button></template>Border Radius
Use a Tailwind radius class such as rounded-none or rounded-full to override the default corners.
---import { Button } from "@/components/starwind/button";---
<Button class="rounded-none">btn none</Button><Button class="rounded-xs">btn xs</Button><Button class="rounded-sm">btn sm</Button><Button class="rounded-md">btn md</Button><Button class="rounded-lg">btn lg</Button><Button class="rounded-xl">btn xl</Button><Button class="rounded-full">btn full</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <> <Button className="rounded-none">btn none</Button> <Button className="rounded-xs">btn xs</Button> <Button className="rounded-sm">btn sm</Button> <Button className="rounded-md">btn md</Button> <Button className="rounded-lg">btn lg</Button> <Button className="rounded-xl">btn xl</Button> <Button className="rounded-full">btn full</Button> </> );}<script setup lang="ts">import { Button } from "@/components/starwind/button";</script>
<template> <Button class="rounded-none">btn none</Button> <Button class="rounded-xs">btn xs</Button> <Button class="rounded-sm">btn sm</Button> <Button class="rounded-md">btn md</Button> <Button class="rounded-lg">btn lg</Button> <Button class="rounded-xl">btn xl</Button> <Button class="rounded-full">btn full</Button></template>API Reference
Styled Component API
These props are added or materially changed by the installed styled component. Standard HTML attributes remain available through the inherited interfaces noted below. Expand a prop to see named type definitions and framework-specific imports. Follow the Primitive and Runtime links for lower-level behavior props.
Button
Inherits a attributes. Omits `type`.
Inherits button attributes.
Contains the following additional props:
as "button" | "a" —
- Description
- Selects the rendered element or component.
- Classification
- Wrapper prop
focusableWhenDisabled boolean —
- Description
- Keeps the disabled control in the keyboard focus order.
- Classification
- Primitive override
- Primitive prop
- button.Root.focusableWhenDisabled
size "sm" | "md" | "lg" | "icon-sm" | "icon" | "icon-lg" "md"
- Description
- Selects the component's visual size.
- Classification
- Styled variant
variant "default" | "primary" | "secondary" | "outline" | "ghost" | "info" | "success" | "warning" | "error" "default"
- Description
- Selects the component's visual variant.
- Classification
- Styled variant
Primitive And Runtime API
Use these references when you need the lower-level behavior APIs behind Button.
Primitive API
Runtime API
- Button primitive
createButtonfrom@starwind-ui/runtime/button
Changelog
View version history v3.0.1 8 releases
v3.0.1
- Named the generated aggregate default export so React and Astro tooling can identify the installed component cleanly.
v3.0.0
- Rebuilt Button on Starwind Runtime while preserving styled variants and link rendering.
- See the Button Primitive for the underlying unstyled anatomy and behavior API.
v2.3.3
- Refactor tailwind variants functions into separate
variants.tsfile
v2.3.0
- Add
aria-invalidstyling - Update styling for SVGs within so it doesn’t override any
size-*classes on the SVG itself - Update style horizontal padding to more closely match shadcn aspect ratios
v2.2.0
- add additional sizes “icon-sm” and “icon-lg”
- style and focus state updates
v2.1.0
- Add a
data-slotattribute to all components to enable global styling updates
v2.0.1
- Adjust component to use type
VariantPropsfromtailwind-variants. This provides greater type safety and cleans up component frontmatter.
v2.0.0
tailwind-variantsnow implemented. This usestailwind-mergeunder the hood to merge Tailwind classes without style conflicts.- Removed
radiusprop now that classes like “rounded-full” can be passed to the components to override, taking advantage oftailwind-variants