Buttons are interactive elements that allow the user to perform an action on the page or serve as a prominent hyperlink.
href to render a Button as a hyperlink — prefer this for CTAs or prominent standalone links.isIconOnly) — renders only the icon with reduced padding. Use in condensed layouts or for menus and dropdowns. Requires icon or iconSrc.href) — renders as an anchor element. Use for calls-to-action that navigate.variant="primary" — the most important action on the page, including CTAs and form submission. Limit to one per page.variant="secondary" — lesser important actions. Multiple allowed per page.variant="subtle" — the least important action (referred to as "Tertiary" in design language).size="md" — default size for most use cases.size="sm" — for smaller screens or less prominent actions.icon — renders a Pluma icon by name. Leading position by default.iconPosition="trailing" — places the icon after the label.iconSrc — renders a custom image icon by URL. Sizing matches Pluma icons. Be aware of how the custom icon's color and style interact with each variant's background.isLoading) — displays a spinner overlay and blocks interaction.autoLoading, default true) — automatically shows a spinner when onClick returns a promise.isDisabled) — prevents interaction and applies lighter colors across all variants.isDanger) — applies critical color treatment for destructive actions. Works with all variants.isActive) — applies the hover/active visual state programmatically.…) when the action opens a dialog or requires additional input before completing. Never add an ellipsis for immediate actions.variant="subtle". The literal value "tertiary" also exists as a separate variant with different styling. Use variant="subtle" for the Tertiary design intent.unsafe_withSoftDeprecatedSecondaryVariant — when true, the secondary variant renders with tertiary styling. Used during the layout refresh transition. Can also be set globally via PlumaProvider component config.unsafe_withMigratedButtonVariants — when true, shifts all variants down one level (secondary → tertiary styling, tertiary → subtle styling). Intended for use after running the button-variant-rename codemod (pnx @customerio/pluma-cli upgrade --codemod button-variant-rename). Supersedes unsafe_withSoftDeprecatedSecondaryVariant.isError is deprecated — use isDanger instead.unsafe_isActive is deprecated — use isActive instead.size="medium" and size="small" are deprecated — use "md" and "sm".children for the label text. Ember uses {{yield}} (default block) via <PlumaButton>Label</PlumaButton>.<button type="button"> by default. When href is provided, it renders as a PlainLink anchor element instead.