v0.1 public beta early access on GitHub
Home / Components / button

ButtonAndroid

Tactile pill button with press spring, ink wash and async loading.

$ npx lumioui add button
import { Button } from "@/components/ui/button/button";
Buttonbutton.tsx
button/button.tsx open

Live preview — the real component, driven by the props below.

Props13
onPress? | ((e: GestureResponderEvent) => void) | ((e: GestureResponderEvent) => Promise<unknown>) | null Press handler — may return a Promise. With asyncTracking (default) the button enters the loading state until the promise settles. Declared as a union of signatures rather than `void | Promise<unknown>` so `void` keeps its leniency — handlers returning other values (e.g. a timeout id) still typecheck.
variant? "default" | "destructive" | "outline" | "tinted" | "secondary" | "ghost" | "link" | "glass" Visual style — "glass" is the liquid-glass material button.
tone? "accent" | "inverse" | "surface" Fill voice for the default variant — `inverse` is the near-black CTA, `surface` a bordered card-colored button. Default "accent".
radius? "pill" | "xl" | "lg" | "md" Corner radius. Default "pill".
size? "sm" | "md" | "lg" | "icon" Size preset.
loading? boolean Crossfade to a spinner and block presses while true.
asyncTracking? boolean Auto-track async onPress — when onPress returns a Promise, the button automatically enters loading state until it resolves. Default true.
haptic? "light" | "medium" | "heavy" | false Haptic feedback on press. Default "light"; false to disable.
pressedScale? number Override the press-dip scale (1 = none). ButtonGroup sets this to 1 on attached children — a scaled segment opens a gap in the weld.
className? string Extra NativeWind classes for the container.
textClassName? string Extra classes for the label.
icon? React.ReactNode Icon rendered before the label.
children? React.ReactNode
Button — Glassglass.tsx
button/variants/glass.tsx open

Tactile pill button with press spring, ink wash and async loading.

Button — Sizessizes.tsx
button/variants/sizes.tsx open

Tactile pill button with press spring, ink wash and async loading.

Button — Stylesstyles.tsx
button/variants/styles.tsx open

Tactile pill button with press spring, ink wash and async loading.