Skip to content

InputGroup

Groups multiple inputs into a single visually connected row.

Website
https://
.com
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
placeholder="example"
value={value}
/>
<InputGroupText>.com</InputGroupText>
</InputGroup>
);
}
Price
$
USD
(args: InputGroupProps) => {
const [value, setValue] = useState<number | null>(24);
return (
<InputGroup {...args}>
<InputGroupText>$</InputGroupText>
<NumberInput
hasClear
isLabelHidden
label="Amount"
min={0}
onChange={setValue}
value={value}
/>
<InputGroupText>USD</InputGroupText>
</InputGroup>
);
}
Phone number
+1
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>+1</InputGroupText>
<TextInput
autoComplete="tel"
isLabelHidden
label="Phone number"
onChange={setValue}
placeholder="(555) 123-4567"
type="tel"
value={value}
/>
</InputGroup>
);
}
Price
(args: InputGroupProps) => {
const [amount, setAmount] = useState<number | null>(24);
const [currency, setCurrency] = useState<string | null>('USD');
return (
<InputGroup {...args}>
<NumberInput
isLabelHidden
label="Amount"
min={0}
onChange={setAmount}
value={amount}
/>
<Select
isLabelHidden
label="Currency"
onChange={setCurrency}
options={['USD', 'EUR', 'GBP']}
value={currency}
/>
</InputGroup>
);
}
Columns
Show
(args: InputGroupProps) => {
const [value, setValue] = useState<string[]>(['Name']);
return (
<InputGroup {...args}>
<InputGroupText>Show</InputGroupText>
<MultiSelect
isLabelHidden
label="Columns"
onChange={setValue}
options={['Name', 'Email', 'Role']}
value={value}
/>
</InputGroup>
);
}
Assignee
@
(args: InputGroupProps) => {
const [value, setValue] = useState<SearchableItem | null>(null);
return (
<InputGroup {...args}>
<InputGroupText>@</InputGroupText>
<AutocompleteInput
isLabelHidden
label="Person"
onChange={setValue}
placeholder="Search people"
searchSource={createStaticSearchSource(PEOPLE)}
value={value}
/>
</InputGroup>
);
}
Recipients
To
Ada Lovelace
(args: InputGroupProps) => {
const [value, setValue] = useState<SearchableItem[]>([PEOPLE[0]]);
return (
<InputGroup {...args}>
<InputGroupText>To</InputGroupText>
<TagsInput
isLabelHidden
label="People"
onChange={setValue}
placeholder="Add people"
searchSource={createStaticSearchSource(PEOPLE)}
value={value}
/>
</InputGroup>
);
}
WebsiteEnter a complete website host name.
https://
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
value={value}
/>
</InputGroup>
);
}
Website
https://
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
value={value}
/>
</InputGroup>
);
}
Website
https://
.com
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={() => {}}
value="example"
/>
<InputGroupText>.com</InputGroupText>
</InputGroup>
Size sm
https://
.com
Size md
https://
.com
Size lg
https://
.com
<div style={{display: 'flex', flexDirection: 'column', gap: 16}}>
{(['sm', 'md', 'lg'] as const).map(size => (
<InputGroup key={size} label={`Size ${size}`} size={size}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={() => {}}
placeholder="example"
value=""
/>
<InputGroupText>.com</InputGroupText>
</InputGroup>
))}
</div>
WebsiteRequired
https://
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
placeholder="example"
value={value}
/>
</InputGroup>
);
}
WebsiteOptional
https://
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
placeholder="example"
value={value}
/>
</InputGroup>
);
}
Website
https://
.com
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
placeholder="example"
value={value}
/>
<InputGroupText>.com</InputGroupText>
</InputGroup>
);
}
Website
https://
(args: InputGroupProps) => {
const [value, setValue] = useState('');
return (
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={setValue}
placeholder="example"
value={value}
/>
</InputGroup>
);
}
Date range
to
(args: InputGroupProps) => {
const [start, setStart] = useState('');
const [end, setEnd] = useState('');
return (
<InputGroup {...args}>
<TextInput
isLabelHidden
label="Start date"
onChange={setStart}
placeholder="Start"
value={start}
/>
<InputGroupText>to</InputGroupText>
<TextInput
isLabelHidden
label="End date"
onChange={setEnd}
placeholder="End"
value={end}
/>
</InputGroup>
);
}
Website
https://
<InputGroup {...args}>
<InputGroupText>https://</InputGroupText>
<TextInput
isLabelHidden
label="URL"
onChange={() => {}}
value="example.com"
/>
</InputGroup>

Groups multiple inputs into a single visually connected row.

When isOptional: false, isRequired: false

PropTypeDefaultDescription
children*ReactNodeGrouped input children to render side-by-side.
classNamestringAdditional CSS class names applied to the group wrapper.
data-testidstringTest ID applied to the group wrapper.
descriptionReactNodeSupporting text displayed below the label.
isDisabledbooleanfalseWhether all grouped inputs are disabled.
isReadOnlybooleanfalseWhether all grouped inputs are read-only.
isLabelHiddenbooleanfalseWhether to visually hide the label.
label*stringLabel text for the input group.
labelTooltipReactNodeTooltip content shown next to the label.
refRef<HTMLDivElement>Ref forwarded to the group wrapper.
size"sm" | "md" | "lg"The enclosing Toolbar size, otherwise 'md'Visual size applied to the group and its children.
statusInputStatusValidation status displayed below the group.
statusVariant"attached" | "detached"'attached'How the status message is positioned.
styleCSSPropertiesInline styles applied to the group wrapper.
isOptionalfalse
isRequiredfalse

When isOptional: true, isRequired: false

PropTypeDefaultDescription
children*ReactNodeGrouped input children to render side-by-side.
classNamestringAdditional CSS class names applied to the group wrapper.
data-testidstringTest ID applied to the group wrapper.
descriptionReactNodeSupporting text displayed below the label.
isDisabledbooleanfalseWhether all grouped inputs are disabled.
isReadOnlybooleanfalseWhether all grouped inputs are read-only.
isLabelHiddenbooleanfalseWhether to visually hide the label.
label*stringLabel text for the input group.
labelTooltipReactNodeTooltip content shown next to the label.
refRef<HTMLDivElement>Ref forwarded to the group wrapper.
size"sm" | "md" | "lg"The enclosing Toolbar size, otherwise 'md'Visual size applied to the group and its children.
statusInputStatusValidation status displayed below the group.
statusVariant"attached" | "detached"'attached'How the status message is positioned.
styleCSSPropertiesInline styles applied to the group wrapper.
isOptional*true
isRequiredfalse

When isOptional: false, isRequired: true

PropTypeDefaultDescription
children*ReactNodeGrouped input children to render side-by-side.
classNamestringAdditional CSS class names applied to the group wrapper.
data-testidstringTest ID applied to the group wrapper.
descriptionReactNodeSupporting text displayed below the label.
isDisabledbooleanfalseWhether all grouped inputs are disabled.
isReadOnlybooleanfalseWhether all grouped inputs are read-only.
isLabelHiddenbooleanfalseWhether to visually hide the label.
label*stringLabel text for the input group.
labelTooltipReactNodeTooltip content shown next to the label.
refRef<HTMLDivElement>Ref forwarded to the group wrapper.
size"sm" | "md" | "lg"The enclosing Toolbar size, otherwise 'md'Visual size applied to the group and its children.
statusInputStatusValidation status displayed below the group.
statusVariant"attached" | "detached"'attached'How the status message is positioned.
styleCSSPropertiesInline styles applied to the group wrapper.
isOptionalfalse
isRequired*true
PropTypeDefaultDescription
children*ReactNode
classNamestring
data-testidstring
refRef<HTMLDivElement>
styleCSSProperties