import { ButtonGroup, ButtonGroupItem } from "@/components/ui/button-group";
import { DesignIcon } from "@/components/ui/design-icon";Container component props - wraps ButtonGroupItem children
| Prop | Type | Default | Description |
|---|---|---|---|
size | "small" | "default" | "large" | "default" | Size of all buttons in the group (28px / 32px / 40px) |
withSeparator | boolean | false | Add visual dividers between buttons |
className | string | - | Additional CSS classes for the container |
children | ReactNode | - | ButtonGroupItem components |
Individual button props - must be a child of ButtonGroup
| Prop | Type | Default | Description |
|---|---|---|---|
icon | ReactNode | - | DesignIcon component or any React SVG |
iconUrl | string | - | Path to SVG file (uses CSS mask for theming) |
tooltip | string | - | Tooltip text shown on hover |
tooltipSide | "top" | "bottom" | "left" | "right" | "bottom" | Tooltip placement |
disableTooltip | boolean | false | Disable tooltip even if tooltip prop is set |
active | boolean | false | Active/pressed state (5% background + primary icon color) |
disabled | boolean | false | Disabled state (44% opacity) |
onClick | (e) => void | - | Click handler |
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" />
<ButtonGroupItem icon={<DesignIcon name="gif" />} tooltip="Add GIF" />
<ButtonGroupItem icon={<DesignIcon name="emoji" />} tooltip="Add emoji" />
</ButtonGroup><ButtonGroup>
<ButtonGroupItem iconUrl="/imgs/icons/ic_image.svg" tooltip="Add image" />
<ButtonGroupItem iconUrl="/imgs/icons/ic_gif.svg" tooltip="Add GIF" />
</ButtonGroup><ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="link" />} tooltip="Add link" active={hasLink} onClick={toggleLink} />
<ButtonGroupItem icon={<DesignIcon name="thread" />} tooltip="Thread" active={isThread} onClick={toggleThread} />
</ButtonGroup><ButtonGroup size="small">
<ButtonGroupItem icon={<DesignIcon name="move-up" />} tooltip="Move up" />
<ButtonGroupItem icon={<DesignIcon name="move-down" />} tooltip="Move down" />
<ButtonGroupItem icon={<DesignIcon name="delete" />} tooltip="Delete" />
</ButtonGroup><div className="flex items-center gap-2">
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" />
<ButtonGroupItem icon={<DesignIcon name="gif" />} tooltip="Add GIF" />
</ButtonGroup>
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="ai" />} tooltip="AI assist" />
<ButtonGroupItem icon={<DesignIcon name="duplicate" />} tooltip="Duplicate" />
</ButtonGroup>
</div>Use default size with DesignIcon for consistent styling
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" />
<ButtonGroupItem icon={<DesignIcon name="gif" />} tooltip="Add GIF" />
<ButtonGroupItem icon={<DesignIcon name="emoji" />} tooltip="Add emoji" />
</ButtonGroup>Use active prop to show current state
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="link" />} tooltip="Link" active={hasLink} onClick={toggleLink} />
<ButtonGroupItem icon={<DesignIcon name="thread" />} tooltip="Thread" active={isThread} onClick={toggleThread} />
</ButtonGroup>Use small size for compact UI
<ButtonGroup size="small">
<ButtonGroupItem icon={<DesignIcon name="move-up" />} tooltip="Move up" disabled={isFirst} />
<ButtonGroupItem icon={<DesignIcon name="move-down" />} tooltip="Move down" disabled={isLast} />
<ButtonGroupItem icon={<DesignIcon name="delete" />} tooltip="Delete" />
</ButtonGroup>Use tooltipSide='top' to prevent overflow
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" tooltipSide="top" />
<ButtonGroupItem icon={<DesignIcon name="gif" />} tooltip="Add GIF" tooltipSide="top" />
</ButtonGroup>Always wrap ButtonGroupItem inside ButtonGroup
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" />
</ButtonGroup>Add tooltips for accessibility
<ButtonGroupItem icon={<DesignIcon name="link" />} tooltip="Add link (βK)" />Use active prop for toggle states
<ButtonGroupItem icon={<DesignIcon name="thread" />} active={isThread} onClick={toggleThread} />Use DesignIcon for consistent design system styling
<ButtonGroupItem icon={<DesignIcon name="ai" />} tooltip="AI assist" />Don't use ButtonGroupItem outside of ButtonGroup
// β Bad - no container
<ButtonGroupItem icon={<DesignIcon name="image" />} />
// β
Good - wrapped in ButtonGroup
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} />
</ButtonGroup>Don't use text content - ButtonGroupItem is icon-only
// β Bad - no text support
<ButtonGroupItem>Add Image</ButtonGroupItem>
// β
Good - use icon + tooltip
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add Image" />Don't mix icon and iconUrl - use one or the other
// β Bad - conflicting props
<ButtonGroupItem icon={<DesignIcon name="image" />} iconUrl="/icon.svg" />
// β
Good - use one
<ButtonGroupItem icon={<DesignIcon name="image" />} />
// or
<ButtonGroupItem iconUrl="/imgs/icons/ic_image.svg" />Interactive examples showing all variants and states
small (28px), default (32px), large (40px)
<ButtonGroup size="small">...</ButtonGroup>
<ButtonGroup>...</ButtonGroup>
<ButtonGroup size="large">...</ButtonGroup>Toggle buttons showing active/inactive states
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="link" />} active />
<ButtonGroupItem icon={<DesignIcon name="thread" />} />
<ButtonGroupItem icon={<DesignIcon name="bookmark" />} active />
</ButtonGroup>Individual buttons can be disabled
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="move-up" />} disabled />
<ButtonGroupItem icon={<DesignIcon name="move-down" />} />
<ButtonGroupItem icon={<DesignIcon name="delete" />} />
</ButtonGroup>Using iconUrl for mask-based icons
<ButtonGroup>
<ButtonGroupItem iconUrl="/imgs/icons/ic_image.svg" tooltip="Image" />
<ButtonGroupItem iconUrl="/imgs/icons/ic_gif.svg" tooltip="GIF" />
</ButtonGroup>Separate logical button groups
<div className="flex items-center gap-2">
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} />
<ButtonGroupItem icon={<DesignIcon name="gif" />} />
</ButtonGroup>
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="ai" />} />
<ButtonGroupItem icon={<DesignIcon name="duplicate" />} />
</ButtonGroup>
</div>Media toolbar with actions
<div className="flex items-center gap-2">
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="image" />} tooltip="Add image" />
<ButtonGroupItem icon={<DesignIcon name="gif" />} tooltip="Add GIF" />
<ButtonGroupItem icon={<DesignIcon name="emoji" />} tooltip="Add emoji" />
</ButtonGroup>
<ButtonGroup>
<ButtonGroupItem icon={<DesignIcon name="ai" />} tooltip="AI assist" />
</ButtonGroup>
</div>