Button Component
A versatile button component with multiple variants and sizes. Uses semantic class names with data attributes for styling.
Design Philosophy
The Button component follows Nitro conventions:
- Semantic class names (btn, btn-primary, etc.)
- Data attributes for variants (data-variant, data-size)
- cls parameter merges with base classes
- **attrs pass-through for any HTML attribute
Variants
Seven visual variants are available for different use cases:
Div(
Button("Primary/Default", variant="primary"),
Button("Secondary", variant="secondary"),
Button("Ghost", variant="ghost"),
Button("Destructive", variant="destructive"),
Button("Outline", variant="outline"),
Button("Link", variant="link"),
cls="flex flex-wrap gap-2"
)
Sizes
Four sizes including an icon-only option:
Div(
Button("Small", variant="sm"),
Button("Default"),
Button("Large", variant="lg"),
Button(LucideIcon("plus")," Icon", variant="icon"),
cls="flex flex-wrap items-center gap-2"
)
With Icons
Buttons can include icons before or after text:
Div(
Button(LucideIcon("mail"), "Login with Email", variant="primary"),
Button(LucideIcon("loader-2", cls="animate-spin"), "Loading...", disabled=True),
Button("Next", LucideIcon("arrow-right"), variant="outline"),
cls="flex flex-wrap gap-2"
)
Button Group
Group related buttons together:
Div(
ButtonGroup(
Button("Left", variant="outline"),
Button("Center", variant="outline"),
Button("Right", variant="outline"),
),
ButtonGroup(
Button("Top", variant="outline"),
Button("Middle", variant="outline"),
Button("Bottom", variant="outline"),
orientation="vertical",
),
cls="flex flex-wrap gap-2"
)
Disabled State
Buttons can be disabled:
Div(
Button("Disabled Default", disabled=True),
Button("Disabled Primary", variant="primary", disabled=True),
Button("Disabled Destructive", variant="destructive", disabled=True),
cls="flex flex-wrap gap-2"
)
API Reference
def Button(
*children, # Button content (text, icons, etc.)
variant: str = "default", # default, primary, secondary, ghost,
# destructive, outline, link
size: str = "md", # sm, md, lg, icon
disabled: bool = False, # Whether button is disabled
cls: str = "", # Additional CSS classes
**attrs # Additional HTML attributes
) -> HtmlString
def ButtonGroup(
*children, # Button components to group
cls: str = "", # Additional CSS classes
**attrs # Additional HTML attributes
) -> HtmlString