Input groups fuse prefixes, suffixes, and action buttons with a text field. Wrap siblings in input-group: static text uses input-group-label, the field uses input-group-field, and buttons live in input-group-button.
Button groups
button-group clusters related actions (segmented filters, toolbar controls). Use expanded on one button when it should fill remaining space in a bar layout.
When to stop
One primary action per group keeps tab order predictable. Complex pickers (date ranges, tag chips) deserve a dedicated component—not five addons glued to one input.
Self-check
- Which class wraps the actual text input in a group?
- Where does a search submit button belong?
- When is an input group the wrong pattern?