Skip to content
Component

Icon Button

A square, icon-only button. aria-label is required at the type level. Shares Button's sizes, appearances, decorative tones and press ripple, but defaults to the ghost appearance.

Appearances

contained, bordered, dashed, and ghost - the default, since an icon-only control usually sits beside the thing it acts on.

Sizes

Decorative tones

Shares Button's five decorative tones (ComponentTone) - a purely visual choice, not a status signal.

Press ripple

The same pointer-origin ripple as Button, clipped to the control's corners. ripple={false} turns it off on one control.

  • Pointer presses only, and skipped under prefers-reduced-motion: reduce

Disabled and loading

  • Every icon button requires aria-label; disabled shows a not-allowed cursor

API reference

aria-label *None
string

Required - icon-only controls must still have an accessible name.

children *None
React.ReactNode

The icon. Required - there is nothing else to render.

appearance"ghost"
ComponentAppearance

Visual treatment. Defaults to `"ghost"`, unlike `Button` - an icon-only control is usually secondary to the thing it sits beside.

loadingfalse
boolean

Swaps the icon for a spinner and disables interaction.

rippletrue
boolean

Plays a pointer-origin ripple on press. On by default, matching Button; pass `false` to suppress it. Does nothing under `prefers-reduced-motion: reduce`.

size"md"
ComponentSize

Control size - the square is sized to match `Button` at the same value.

tone"default"
ComponentTone

Decorative color.

Also accepts everything from React.ButtonHTMLAttributes<HTMLButtonElement>.

Coding agents read this reference, with its examples, from the version your project has installed, through the Fuji UI MCP server. Set up your agent