Icon buttons help people take minor actions, often used in app bars and toolbars where
space is tight. ButtonIcon shares the same emphasis levels
as Button, and can optionally act as a toggle with a pressed
state.
The ButtonIcon component implements the Material Design 3 Icon Buttons pattern: standard, filled, tonal, and outlined emphasis levels, all icon-only.
Because there's no visible label, always pass tooltipContent — it's wrapped in a Tooltip internally, giving both a visual
hint on hover and a text alternative for assistive tech. Set variation="toggle" for a two-state icon button (e.g.
bookmark, mute) — it swaps the underlying element for Bits UI's Toggle.Root.
import { ButtonIcon } from '@noxlovette/material'; See it live, with Controls, in Storybook rather than a hand-rolled preview here.
Always pair the icon with tooltip text to describe the action:
<script lang="ts">
import { ButtonIcon } from '@noxlovette/material';
</script>
<ButtonIcon
variant="tonal"
iconProps={{ name: 'search' }}
tooltipContent="Search"
/>
<!-- Toggle variation -->
<ButtonIcon
variation="toggle"
iconProps={{ name: 'bookmark' }}
tooltipContent="Save"
/> Accessible name
tooltipContent doubles as the only visible/announced description of the action — always provide it since there is no text label.
Toggle semantics
variation="toggle" uses Bits UI's Toggle.Root, which exposes aria-pressed for the pressed/unpressed state.
Disabled state
disabled removes the button from the tab order and exposes the disabled attribute to assistive tech.