Visually joins multiple form controls into a single shell — strips inner borders/radii from children and adds segment dividers, so combos like country-code + phone read as one field.
Composes any form children (input, button, select) into a single joined shell.
size and surface props inherit the kit-wide design tokens.
Accessible: applies role="group" only when an aria-label/aria-labelledby is provided.
Dev-mode warning when a multi-child group is missing an accessible name.
Keeps the classes of each control alongside the join classes.
Status
stable
Category
forms
Since
v1.9.0
API
import { PixelInputGroup } from '@pxlkit/ui-kit';
Prop
Type
Default
Description
size
'sm' | 'md' | 'lg'
'md'
Height of the shell.
surface
'pixel' | 'linear'
—
Surface override; defaults to the nearest provider.
aria-label
string
—
Accessible name for the group. Strongly recommended since this primitive visually joins multiple form controls (e.g. country code + phone) — without an accessible name a screen reader user has no idea what the group represents. In development, a group of more than one child without a name logs a warning.
aria-labelledby
string
—
Id of the element that names the group, in place of aria-label.
children* (required)
React.ReactNode
—
The controls to join; each element is joined, text is dropped.
Also takes the native attributes and event handlers of <div> (HTMLAttributes<HTMLDivElement>).
ref points to <div>.
Accessibility
WCAG target: 2.1 AA
group
Sets role="group" only when given an accessible name (aria-label / aria-labelledby). Decorative addons inside should use aria-hidden; child controls keep their own labels. The shell clips its controls, so each shows keyboard focus inside its own edge.