Installation
Section titled “Installation”pnpm dlx shadcn@latest add pxl-ui/registry/input-group
Copy and paste the following code into your project.
Update the import paths to match your project setup.
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea,} from "@/components/ui/pxl/input-group"<InputGroup> <InputGroupInput placeholder="Search..." /> <InputGroupAddon> <SearchIcon /> </InputGroupAddon></InputGroup>Composition
Section titled “Composition”Use the following composition to build an InputGroup:
InputGroup├── InputGroupInput or InputGroupTextarea├── InputGroupAddon├── InputGroupButton└── InputGroupTextUse the align prop on InputGroupAddon to position the addon relative to the input.
For proper focus management, InputGroupAddon should always be placed after
InputGroupInput or InputGroupTextarea in the DOM. Use the align prop to
visually position the addon.
inline-start
Section titled “inline-start”Use align="inline-start" to position the addon at the start of the input. This is the default.
inline-end
Section titled “inline-end”Use align="inline-end" to position the addon at the end of the input.
block-start
Section titled “block-start”Use align="block-start" to position the addon above the input.
block-end
Section titled “block-end”Use align="block-end" to position the addon below the input.
Custom Input
Section titled “Custom Input”Add the data-slot="input-group-control" attribute to your custom input for automatic focus state handling.
API Reference
Section titled “API Reference”InputGroup
Section titled “InputGroup”The main component that wraps inputs and addons.
| Prop | Type | Default |
|---|---|---|
className |
string |
<InputGroup> <InputGroupInput /> <InputGroupAddon /></InputGroup>InputGroupAddon
Section titled “InputGroupAddon”Displays icons, text, buttons, or other content alongside inputs.
For proper focus navigation, the InputGroupAddon component should be placed
after the input. Set the align prop to position the addon.
| Prop | Type | Default |
|---|---|---|
align |
"inline-start" | "inline-end" | "block-start" | "block-end" |
"inline-start" |
className |
string |
<InputGroupAddon align="inline-end"> <SearchIcon /></InputGroupAddon>For <InputGroupInput />, use the inline-start or inline-end alignment. For <InputGroupTextarea />, use the block-start or block-end alignment.
The InputGroupAddon component can have multiple InputGroupButton components and icons.
<InputGroupAddon> <InputGroupButton>Button</InputGroupButton> <InputGroupButton>Button</InputGroupButton></InputGroupAddon>InputGroupButton
Section titled “InputGroupButton”Displays buttons within input groups.
| Prop | Type | Default |
|---|---|---|
size |
"xs" | "icon-xs" | "sm" | "icon-sm" |
"xs" |
variant |
"default" | "destructive" | "outline" | "secondary" | "ghost" | "link" |
"ghost" |
className |
string |
<InputGroupButton>Button</InputGroupButton><InputGroupButton size="icon-xs" aria-label="Copy"> <CopyIcon /></InputGroupButton>InputGroupInput
Section titled “InputGroupInput”Replacement for <Input /> when building input groups. This component has the input group styles pre-applied and uses the unified data-slot="input-group-control" for focus state handling.
| Prop | Type | Default |
|---|---|---|
className |
string |
All other props are passed through to the underlying <Input /> component.
<InputGroup> <InputGroupInput placeholder="Enter text..." /> <InputGroupAddon> <SearchIcon /> </InputGroupAddon></InputGroup>InputGroupTextarea
Section titled “InputGroupTextarea”Replacement for <Textarea /> when building input groups. This component has the textarea group styles pre-applied and uses the unified data-slot="input-group-control" for focus state handling.
| Prop | Type | Default |
|---|---|---|
className |
string |
All other props are passed through to the underlying <Textarea /> component.
<InputGroup> <InputGroupTextarea placeholder="Enter message..." /> <InputGroupAddon align="block-end"> <InputGroupButton>Send</InputGroupButton> </InputGroupAddon></InputGroup>