Native buttons and links with typed variants, sizes, and icons.
app/components/nitro_kit/button.rbNitroKit::Button.new(text, variant:, size:, icon:)Every visual intent uses the same native button contract.
test/dummy/app/components/gallery/components/button_page.rbGallery::Data.button_variants.each do |button|
sample(button.label, slug: button.slug) do
render_button(button, id: "gallery-button-variant-#{button.slug}")
end
endFive closed sizes cover compact controls through high-emphasis calls to action.
test/dummy/app/components/gallery/components/button_page.rbGallery::Data.button_sizes.each do |button|
sample(button.label, slug: button.slug) do
render_button(button, id: "gallery-button-size-#{button.slug}")
end
endText, leading and trailing icons, icon-only controls, links, and block labels stay explicit.
test/dummy/app/components/gallery/components/button_page.rbsample("Leading icon", slug: "leading-icon") do
render NitroKit::Button.new(
"Save report",
id: "gallery-button-leading-icon",
icon: :save,
variant: :primary
)
end
sample("Trailing icon", slug: "trailing-icon") do
render NitroKit::Button.new(
"Continue",
id: "gallery-button-trailing-icon",
icon_right: :arrow_right
)
end
sample("Icon only", slug: "icon-only") do
render NitroKit::Button.new(
id: "gallery-button-icon-only",
icon: :x,
variant: :ghost,
aria: { label: "Close notification" }
)
end
sample("Link", slug: "link") do
render NitroKit::Button.new(
"Read documentation",
id: "gallery-button-link",
href: "#button-documentation",
icon_right: :arrow_right
)
end
sample("Block label", slug: "block-label") do
render NitroKit::Button.new(id: "gallery-button-block-label") do
"Label supplied by a Phlex block"
end
end
sample("Long label", slug: "long-label") do
render NitroKit::Button.new(
"Download the complete workspace activity archive",
id: "gallery-button-long-label",
icon: :download
)
endDisabled controls retain visible state while links lose navigation and expose ARIA disabled.
test/dummy/app/components/gallery/components/button_page.rbrender NitroKit::Button.new(
"Submit invoice",
id: "gallery-button-submit",
type: :submit,
variant: :primary
)
render NitroKit::Button.new(
"Delete workspace",
id: "gallery-button-disabled",
variant: :destructive,
disabled: true
)
render NitroKit::Button.new(
"Available link",
id: "gallery-button-link-enabled",
href: "#button-enabled"
)
render NitroKit::Button.new(
"Unavailable link",
id: "gallery-button-link-disabled",
href: "#button-disabled",
disabled: true
)