Button

Button component for user actions and navigation.

Usage

<%= ui.btn "Default" %>
<%= ui.btn "Outline", variant: :outline %>
<%= ui.btn "Link Button", url: "/path" %>
Block contentText, icons, or HTML. Alternative to passing text as first argument.
Props
PropTypeDefaultDescription
variantSymbol
:default | :outline | :secondary | :danger | :ghost | :link
:defaultVisual style of the button.
urlStringnilURL to navigate to. Renders as a link when provided.
sizeSymbol
:xs | :sm | :md | :lg | :icon_xs | :icon_sm | :icon_md | :icon_lg
:mdSize of the button. Icon sizes are for icon-only buttons.
roundedBooleanfalseApply fully rounded corners (pill shape).
blockBooleanfalseMake button full width.
circleBooleanfalseApply circular shape to the button.
methodSymbolnilHTTP method for form submission (e.g., :delete, :post). Only works with `url`.

Also accepts any HTML attributes via **options (e.g., id:, data:, aria:). class: is also supported for custom styling.

Examples

Basic Variants

<%= ui.btn "Default" %>
<%= ui.btn "Outline", variant: :outline %>
<%= ui.btn "Secondary", variant: :secondary %>
<%= ui.btn "Danger", variant: :danger %>
<%= ui.btn "Ghost", variant: :ghost %>
<%= ui.btn "Link", variant: :link %>

Sizes

<%= ui.btn "Button XS", size: :xs %>
<%= ui.btn "Button SM", size: :sm %>
<%= ui.btn "Button MD", size: :md %>
<%= ui.btn "Button LG", size: :lg %>

With Icons

<%= ui.btn size: :md do %>
  <%= ui.icon "plus" %>
  Create
<% end %>

Icon Only

<%= ui.btn ui.icon("plus"), size: :icon_xs %>
<%= ui.btn ui.icon("pencil"), variant: :secondary, size: :icon_sm %>
<%= ui.btn ui.icon("cog"), variant: :outline, size: :icon_md %>
<%= ui.btn ui.icon("trash"), variant: :danger, size: :icon_lg %>

Special Styles

<div class="flex items-center gap-2">
  <%= ui.btn "Rounded", size: :sm, rounded: true %>
  <%= ui.btn "Rounded Secondary", variant: :secondary, size: :sm, rounded: true %>
  <%= ui.btn ui.icon("heart"), size: :icon_md, rounded: true %>
</div>
<%= ui.btn block: true, size: :lg, class: "mt-2" do %>
  <%= ui.icon("arrow-down-tray", size: 6) %>
  Download
<% end %>

As Links

<%= ui.btn "Link Button", url: root_path %>
<%= ui.btn "Link", url: root_path, variant: :link %>
<%= ui.btn "Link Ghost", url: root_path, variant: :ghost %>