Skip to content

Icon Button

A square or circular button that contains only an icon. Always requires an accessible label prop which becomes the aria-label and title tooltip.

Variants

Ghost (default)

Use in toolbars, table rows, and any dense surface where a full-width label would be noisy.

Tailwind v4
vue
<IconButton label="Edit">
  <svg .../>
</IconButton>

Primary

Tailwind v4
vue
<IconButton variant="primary" label="Add">
  <svg .../>
</IconButton>

Secondary

Tailwind v4
vue
<IconButton variant="secondary" label="Download">
  <svg .../>
</IconButton>

Subtle

Tailwind v4
vue
<IconButton variant="subtle" label="Filter">
  <svg .../>
</IconButton>

All variants

Tailwind v4
vue
<IconButton variant="primary" label="Primary"><svg .../></IconButton>
<IconButton variant="secondary" label="Secondary"><svg .../></IconButton>
<IconButton variant="ghost" label="Ghost"><svg .../></IconButton>
<IconButton variant="subtle" label="Subtle"><svg .../></IconButton>

Sizes

Tailwind v4
vue
<IconButton size="sm" label="Small"><svg .../></IconButton>
<IconButton size="md" label="Medium"><svg .../></IconButton>
<IconButton size="lg" label="Large"><svg .../></IconButton>

Circle shape

Tailwind v4
vue
<IconButton shape="circle" label="Close"><svg .../></IconButton>
<IconButton shape="circle" variant="primary" label="Add"><svg .../></IconButton>

States

Loading

Tailwind v4
vue
<IconButton :loading="saving" label="Save"><svg .../></IconButton>

Disabled

Tailwind v4
vue
<IconButton disabled label="Not available"><svg .../></IconButton>

Selected

Tailwind v4
vue
<IconButton :selected="isActive" label="Toggle view"><svg .../></IconButton>

Private — Jetpack Labs internal use only