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