Skip to content
Zuno UI
Explore components
EXPLORE
Actions
Forms
Layout
Navigation
Data display
Feedback
Overlays
RESOURCES
Components/Input Group

Input Group

Prefixes, suffixes and actions aligned with the field, without breaking its semantics.

Base UI reference ↗
https://
.zuno.app

Installation

Run it from the root of a project already set up with zunoui init.

npx zunoui@latest add input-group

Dependencies

What add input-group installs alongside the component. The CLI skips any you already have in a compatible version.

ZUNO registry

npm

Examples

4 examples · 1 component
input-group
https://
.zuno.app

Prefix and suffix

Text addons on both sides; the suffix is linked as a description.

input-group
CommandK

Icon and actions

A search icon, a shortcut hint and a copy button inside the field.

input-group
0/280

Textarea with a toolbar

A block-end addon holds the character count and the send button.

input-group
$
USD

Enter an amount greater than zero.

Invalid

aria-invalid on the control turns the frame destructive; the error is linked text.

API reference

Keeps the props, events and refs of the matching Base UI primitive, plus ZUNO's styles.

PropTypeDefault
InputGroup

role="group"; the bordered frame. Its ring follows the text control, and aria-invalid or a Field error on the control turns it destructive.

div—
InputGroupInput

Borderless Base UI Input; works inside Field like Input.

input—
InputGroupTextarea

Borderless textarea for block layouts; resizes vertically.

textarearows = 3
InputGroupAddon

align: "inline-start" | "inline-end" | "block-start" | "block-end". Place it in the DOM where it appears; clicking its text or icon focuses the control.

div"inline-start"
InputGroupText

Muted prefix or suffix such as https:// or USD.

span—
InputGroupButton

Compact Button that fits the field height; all Button variants and size="icon" work.

Buttonvariant = "ghost", size = "sm"

States

The states that apply to this component and their visual treatment.

StateTreatment
RestInput border around the control and its addons.
Focus visibleRing on the whole frame while the text control has focus; a focused button inside shows its own ring instead.
Invalidaria-invalid (or a Field error) on the control turns the frame destructive.
DisabledA disabled control dims the whole group.

Accessibility

Label the control, not the group: a visible Label with htmlFor, or aria-label on the input.

Prefix and suffix text is not read as part of the name. When it carries meaning (a unit, a currency, a domain), point aria-describedby at it or put it in the label.

Addons sit in the DOM where they appear, so screen readers and Tab follow the visual order; buttons keep their own Tab stop and focus ring.

Icon-only buttons need an aria-label; decorative icons are aria-hidden.

Invalid state is the destructive border plus a text error linked with aria-describedby, never color alone.