Button Group

A button group allows you to group related buttons into sections.

<dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="arrow-left"/>
        </dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline">Review</dui-button>
        <dui-button variant="ButtonVariant.Outline">Book Again</dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline">
            <dui-icon name="mail"/>
            Email Hotel
        </dui-button>
    </dui-button-group>
</dui-button-group>

Usage

<dui-button-group>
    <dui-button>...</dui-button>
    <dui-button>...</dui-button>
</dui-button-group>

Examples

Basic

<dui-button-group>
    <dui-button variant="ButtonVariant.Outline">
        Button
    </dui-button>
    <dui-button variant="ButtonVariant.Outline">
        Another Button
    </dui-button>
</dui-button-group>

Sizes

Control the size of the buttons using the size property of the individual buttons.

<dui-button-group>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">Small</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">Button</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">Group</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.IconSmall">
        <dui-icon name="plus"/>
    </dui-button>
</dui-button-group>
<dui-button-group>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Default">Default</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Default">Button</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Default">Group</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
        <dui-icon name="plus"/>
    </dui-button>
</dui-button-group>
<dui-button-group>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Large">Large</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Large">Button</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Large">Group</dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.IconLarge">
        <dui-icon name="plus"/>
    </dui-button>
</dui-button-group>

Separator

When using button variants without a border (such as Default or Secondary), you can add a separator to visually separate buttons.

<dui-button-group>
    <dui-button variant="ButtonVariant.Default">Review</dui-button>
    <dui-button-group-separator/>
    <dui-button variant="ButtonVariant.Default">Book Again</dui-button>
</dui-button-group>
<dui-button-group>
    <dui-button variant="ButtonVariant.Secondary">Review</dui-button>
    <dui-button-group-separator/>
    <dui-button variant="ButtonVariant.Secondary">Book Again</dui-button>
</dui-button-group>

With Input

<div class="flex flex-col gap-4">
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline">Button</dui-button>
        <dui-input placeholder="Type something here..." />
    </dui-button-group>
    <dui-button-group>
        <dui-input placeholder="Type something here..." />
        <dui-button variant="ButtonVariant.Outline">Button</dui-button>
    </dui-button-group>
</div>

With Text

<div class="flex flex-col gap-4">
    <dui-button-group>
        <dui-button-group-text>Text</dui-button-group-text>
        <dui-button variant="ButtonVariant.Outline">Another Button</dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-button-group-text as as-child="true">
            <dui-label for="input-text">
                GPU Size    
            </dui-label>
        </dui-button-group-text>
        <dui-input id="input-text" placeholder="Type something here..."/>
    </dui-button-group>
</div>

With Select

<dui-field>
    <dui-label for="amount">Amount</dui-label>
    <dui-button-group>
        <dui-select>
            <option>$</option>
            <option>€</option>
            <option>£</option>
        </dui-select>
        <dui-input id="amount" placeholder="Enter amount to send"/>
        <dui-button variant="ButtonVariant.Outline">
            <dui-icon name="arrow-right"/>
        </dui-button>
    </dui-button-group>
</dui-field>

With Icons

<dui-button-group>
    <dui-button variant="ButtonVariant.Outline">
        <dui-icon name="flip-horizontal"/>
    </dui-button>
    <dui-button variant="ButtonVariant.Outline">
        <dui-icon name="flip-vertical"/>
    </dui-button>
    <dui-button variant="ButtonVariant.Outline">
        <dui-icon name="rotate-cw"/>
    </dui-button>
</dui-button-group>

With Input Group

<dui-input-group>
    <dui-input-group-input placeholder="Type to search..."/>
    <dui-input-group-addon
        align="InputGroupAddOnVariantAlignment.InlineStart"
        class="text-muted-foreground">
        <dui-icon name="search"/>
    </dui-input-group-addon>
</dui-input-group>

With Fields

<dui-field-group class="max-w-[300px]">
    <dui-field>
        <dui-label for="width">Width</dui-label>
        <dui-button-group>
            <dui-input-group>
                <dui-input-group-input id="width"/>
                <dui-input-group-addon class="text-muted-foreground">
                    W
                </dui-input-group-addon>
                <dui-input-group-addon
                    align="InputGroupAddOnVariantAlignment.InlineEnd"
                    class="text-muted-foreground"
                >
                    px
                </dui-input-group-addon>
            </dui-input-group>
            <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
                <dui-icon name="minus"/>
            </dui-button>
            <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
                <dui-icon name="plus"/>
            </dui-button>
        </dui-button-group>
    </dui-field>
</dui-field-group>
    

With Like

<dui-button-group>
    <dui-button variant="ButtonVariant.Outline">
        <dui-icon name="heart"/>
        Like
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon" class="w-12!" as-child="true">
        <span>1.2K</span>
    </dui-button>
</dui-button-group>

With Select and Input

<dui-button-group>
    <dui-select>
        <option>Hours</option>
        <option>Days</option>
        <option>Weeks</option>
    </dui-select>
    <dui-input />
</dui-button-group>

Nested

You can nest button groups to create multiple groupings.

<dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="plus"/>
        </dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-input-group>
            <dui-input-group-input placeholder="Send a message..."/>
            <dui-input-group-addon align="InputGroupAddOnVariantAlignment.InlineEnd">
                <dui-icon name="audio-lines"/>
            </dui-input-group-addon>
        </dui-input-group>
    </dui-button-group>
</dui-button-group>

Pagination

<dui-button-group>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        <dui-icon name="arrow-left"/>
        Previous
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        1
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        2
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        3
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        4
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        5
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
        Next
        <dui-icon name="arrow-right"/>
    </dui-button>
</dui-button-group>

Pagination Split

<dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
            1
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
            2
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
            3
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
            4
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Small">
            5
        </dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.IconExtraSmall">
            <dui-icon name="arrow-left"/>
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.IconExtraSmall">
            <dui-icon name="arrow-right"/>
        </dui-button>
    </dui-button-group>
</dui-button-group>

Vertical

Use the orientation property to switch to a vertical layout.

<dui-button-group orientation="ButtonGroupOrientation.Vertical" aria-label="Media controls" class="h-fit">
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
        <dui-icon name="plus"/>
    </dui-button>
    <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
        <dui-icon name="minus"/>
    </dui-button>
</dui-button-group>

Vertical Nested

<dui-button-group orientation="ButtonGroupOrientation.Vertical" aria-label="Design tools palette">
    <dui-button-group orientation="ButtonGroupOrientation.Vertical">
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="search" />
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="copy" />
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="share" />
        </dui-button>
    </dui-button-group>
    <dui-button-group orientation="ButtonGroupOrientation.Vertical">
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="flip-horizontal" />
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="flip-vertical" />
        </dui-button>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="rotate-cw" />
        </dui-button>
    </dui-button-group>
    <dui-button-group>
        <dui-button variant="ButtonVariant.Outline" size="ButtonSize.Icon">
            <dui-icon name="trash" />
        </dui-button>
    </dui-button-group>
</dui-button-group>