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.