Button
---import { Button } from "@/components/starwind/button";---
<Button>Button</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <Button>Button</Button> );}Installation
pnpx starwind@latest add buttonnpx starwind@latest add buttonyarn dlx starwind@latest add buttonLink
The Button component can also function as a link (<a> tag) by providing an href prop.
---import { Button } from "@/components/starwind/button";---
<Button href="#link">Button</Button>import { Button } from "@/components/starwind/button";
export function Example() { return ( <> <Button href="#link">Button</Button> </> );}Usage
variant
---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> </> );}size
---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"><Mail /></Button><Button size="icon-sm"><Mail /></Button><Button size="icon-lg"><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"><Mail /></Button> <Button size="icon-sm"><Mail /></Button> <Button size="icon-lg"><Mail /></Button> </> );}radius
Info
With v2.0.0 of this component, it no longer has a radius prop, and instead the classes you pass in will be merged with the component’s default classes using tailwind-variants. This means you can simply pass the class rounded-full or similar.
---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> </> );}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
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