> ## Documentation Index
> Fetch the complete documentation index at: https://api.fanvue.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ButtonIconGroup

> A pre-composed cluster of `IconButton`s for toolbars and action rows (media controls, editing tools, content action bars).

```tsx theme={null}
import { ButtonIconGroup } from "@fanvue/ui";
import type { ButtonIconGroupOrientation, ButtonIconGroupProps } from "@fanvue/ui";
```

## Examples

## Default

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-buttonicongroup--default&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="200" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ButtonIconGroup — Default" />
</Frame>

```tsx theme={null}
import { ButtonIconGroup, HeartIcon, IconButton, ReplyIcon, ShareIcon } from "@fanvue/ui";

<ButtonIconGroup aria-label="Post actions">
  <IconButton key="like" variant="tertiary" size="48" icon={<HeartIcon />} aria-label="Like" />
  <IconButton
    key="reply"
    variant="tertiary"
    size="48"
    icon={<ReplyIcon />}
    aria-label="Reply"
  />
  <IconButton
    key="share"
    variant="tertiary"
    size="48"
    icon={<ShareIcon />}
    aria-label="Share"
  />
</ButtonIconGroup>
```

## Secondary Variant

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-buttonicongroup--secondary-variant&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="200" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ButtonIconGroup — Secondary Variant" />
</Frame>

```tsx theme={null}
import { ButtonIconGroup, HeartIcon, IconButton, ReplyIcon, ShareIcon } from "@fanvue/ui";

<ButtonIconGroup aria-label="Post actions">
  <IconButton
    key="like"
    variant="secondary"
    size="40"
    icon={<HeartIcon />}
    aria-label="Like"
  />
  <IconButton
    key="reply"
    variant="secondary"
    size="40"
    icon={<ReplyIcon />}
    aria-label="Reply"
  />
  <IconButton
    key="share"
    variant="secondary"
    size="40"
    icon={<ShareIcon />}
    aria-label="Share"
  />
</ButtonIconGroup>
```

## Disabled

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-buttonicongroup--disabled&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="200" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ButtonIconGroup — Disabled" />
</Frame>

```tsx theme={null}
import { ButtonIconGroup, CopyIcon, EditIcon, IconButton, TrashBinIcon } from "@fanvue/ui";

<ButtonIconGroup aria-label="Editing tools">
  <IconButton
    key="edit"
    variant="tertiary"
    size="48"
    icon={<EditIcon />}
    aria-label="Edit"
    disabled
  />
  <IconButton
    key="copy"
    variant="tertiary"
    size="48"
    icon={<CopyIcon />}
    aria-label="Copy"
    disabled
  />
  <IconButton
    key="delete"
    variant="tertiary"
    size="48"
    icon={<TrashBinIcon />}
    aria-label="Delete"
    disabled
  />
</ButtonIconGroup>
```

## Media Controls

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-buttonicongroup--media-controls&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="200" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ButtonIconGroup — Media Controls" />
</Frame>

```tsx theme={null}
import {
  ButtonIconGroup,
  ForwardIcon,
  IconButton,
  PauseIcon,
  PlayIcon,
  RepeatIcon,
} from "@fanvue/ui";

<ButtonIconGroup aria-label="Media controls">
  <IconButton key="play" variant="tertiary" size="48" icon={<PlayIcon />} aria-label="Play" />
  <IconButton
    key="pause"
    variant="tertiary"
    size="48"
    icon={<PauseIcon />}
    aria-label="Pause"
  />
  <IconButton
    key="forward"
    variant="tertiary"
    size="48"
    icon={<ForwardIcon />}
    aria-label="Skip forward"
  />
  <IconButton
    key="repeat"
    variant="tertiary"
    size="48"
    icon={<RepeatIcon />}
    aria-label="Repeat"
  />
</ButtonIconGroup>
```

## Editing Tools

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-buttonicongroup--editing-tools&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="200" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ButtonIconGroup — Editing Tools" />
</Frame>

```tsx theme={null}
import { ButtonIconGroup, CopyIcon, EditIcon, IconButton, TrashBinIcon } from "@fanvue/ui";

<ButtonIconGroup aria-label="Editing tools">
  <IconButton key="edit" variant="tertiary" size="48" icon={<EditIcon />} aria-label="Edit" />
  <IconButton key="copy" variant="tertiary" size="48" icon={<CopyIcon />} aria-label="Copy" />
  <IconButton
    key="delete"
    variant="tertiary"
    size="48"
    icon={<TrashBinIcon />}
    aria-label="Delete"
  />
</ButtonIconGroup>
```

## Props

## ButtonIconGroup

A pre-composed cluster of `IconButton`s for toolbars and action rows (media controls, editing tools, content action bars). Items are spaced with a fixed 4px gap and stay individually rounded — this is a spaced group, not a segmented/joined control.

Exposes `role="group"` by default; pass an `aria-label` or `aria-labelledby` to describe the cluster for assistive technology.

This is a presentational layout primitive: it does not implement roving-tabindex / arrow-key focus management. `role` is overridable, but if you set an interactive-widget role such as `role="toolbar"` you own the keyboard behaviour that role implies. For orientation-aware roles the `aria-orientation` is synced to `orientation` automatically.

<ParamField path="children" type="ReactNode" required>
  The icon buttons to cluster together. Compose `IconButton` elements here; the group only handles layout and spacing.
</ParamField>

<ParamField path="orientation" type="&#x22;horizontal&#x22; | &#x22;vertical&#x22;" default="horizontal">
  Direction the icon buttons flow in. Use `vertical` for side rails and stacked media controls.
</ParamField>

## Exported types

Also exported from `@fanvue/ui`: `ButtonIconGroupOrientation`, `ButtonIconGroupProps`.

***

**Setup:** [Installation](/docs/ui/installation) · [Theming](/docs/ui/theming)
