# Button
A versatile, polymorphic button component supporting multiple sizes, visual variants, and optional leading or trailing icons.
```tsx demo
import { Button } from "@tenstorrent/vesper/button";
export default function ButtonDemo() {
return ;
}
```
> [!IMPORTANT]
>
> Keep the content inside of your button short (1-3 words) and descriptive of the action being taken. It is not advisable to use a `Button` to render non-text content, or text content that overflows/wraps.
## Options
| Prop | Type | Description | Default |
| ----------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------- |
| `size` | `"xs" \| "sm" \| "md" \| "lg"` | The size of the button. Affects padding and font size. | `"md"` |
| `variant` | `"contrast" \| "danger" \| "ghost" \| "primary" \| "subtle" \| "tertiary" \| "warning"` | The visual style variant of the button. | `"primary"` |
| `disabled` | `boolean` | When `true`, renders the button in a disabled state and prevents interaction. | `false` |
| `iconLeft` | `ReactNode` | An optional icon element rendered to the left of the button content. | — |
| `iconRight` | `ReactNode` | An optional icon element rendered to the right of the button content. | — |
| `as` | `ElementType` | The root element type for polymorphic rendering. | `"button"` |
| `children` | `ReactNode` | The content of the button. | — |
All other props are forwarded to the underlying `