Skip to main content

Examples

Primary

Loading

With Left Icon

All Styles V2

Join Now With Price

Props

Button

A versatile button component with multiple visual variants, sizes, icon slots, loading state, and optional pricing display. Pass negative when rendering on a dark surface to opt into the inverted treatment for primary, secondary, tertiary, and outline variants. The ai variant ships with the AI sparkle icon baked in (locked at 16px regardless of button size); pass leftIcon to override the default sparkle.
boolean
default:"false"
Merge props onto a child element instead of rendering a <button>.
string
Old price shown with a strikethrough before the current price.
boolean
default:"false"
When true, the button will take the full width of its container.
ReactNode
Icon element displayed before the label.
boolean
default:"false"
When true, replaces the label with a spinner and disables interaction.
boolean
default:"false"
Forces the dark-surface treatment regardless of theme. Only honored on primary, secondary, tertiary, and outline variants; ignored on all others. Use when placing the button on a dark background in a light theme (e.g. an inverted hero or modal).
string
Current price shown inside the button after the label and icons.
ReactNode
Icon element displayed after the label.
"24" | "32" | "40" | "48"
default:"40"
Height of the button in pixels.
"link" | "text" | "brand" | "primary" | "secondary" | "tertiary" | "outline" | ...
default:"primary"
Visual style variant of the button.Full type: "link" | "text" | "brand" | "primary" | "secondary" | "tertiary" | "outline" | "destructive" | "white" | "alwaysBlack" | "ai" | "tertiaryDestructive".

Exported types

Also exported from @fanvue/ui: ButtonProps, ButtonSize, ButtonVariant.
Setup: Installation · Theming