Button
Triggers an action or event, such as submitting a form or opening a dialog.
Show codeHide code
Installation
import { Button } from "@makeplane/propel/components/button";Usage
import { Button } from "@makeplane/propel/components/button";
export default function BasicDemo() {
return <Button label="Button" variant="primary" size="sm" stretch="auto" />;
}Examples
With an icon
Pass icon and pick its side with iconPosition (start by default).
Show codeHide code
Variants
Variant sets the visual weight and palette: primary, secondary, tertiary, and ghost, plus
danger and danger-outline for destructive actions.
Show codeHide code
Sizes
size sets the height and everything that follows from it — text, glyph, padding, and radius
(xs 20 / sm 24 / md 28 / lg 32 px). There is no default: every call site picks one. xs is
inline chrome only: it ships a synthesized 24px pointer target, which is why the grouped families
have no xs rung at all — ButtonGroup runs sm–md and
SplitButton sm–lg, since their segments touch and adjacent targets
would intersect. See Sizing for the full ladder.
Show codeHide code
Loading
The loading state shows a spinner in the icon slot, sets aria-busy, and blocks interaction while staying focusable.
Show codeHide code
Full width
stretch="full" makes the button fill its container, e.g. a form row or a mobile CTA.
Show codeHide code
Disabled
disabled is the hard, non-focusable disabled state; unlike loading, it removes the button from the tab order.
Show codeHide code
As a link
render={<a href=… />} swaps the underlying element and nativeButton={false} applies Base UI’s non-native button semantics: the control is announced as a button while the <a> keeps native navigation.
Show codeHide code
API Reference
Button
The ready-made Button: grafts Base UI's Button behavior onto the styled Button element and
lays out an optional icon beside the label (iconPosition), swapping it for the loading
spinner in the same slot. Content — the label, icon, and loading state — is not a variant.