Components
Input Group
A container for grouping inputs with addons, buttons, and text elements.
The Input Group component provides a way to visually and structurally group an input field with addon elements, buttons, and text labels. It supports inline addons (start/end) and integrates with the Input, Textarea, and Button components.
Preview
https://
example.com
Installation
npx novaui-cli add input-groupImport
import {
InputGroup,
InputGroupAddon,
InputGroupButton,
InputGroupText,
InputGroupInput,
InputGroupTextarea,
} from 'novaui-components'Basic Usage
https://
example.com
import {
InputGroup,
InputGroupAddon,
InputGroupInput,
} from 'novaui-components'
export function BasicInputGroup() {
return (
<InputGroup>
<InputGroupAddon align="inline-start">https://</InputGroupAddon>
<InputGroupInput placeholder="example.com" />
</InputGroup>
)
}With End Addon
0.00
USD
<InputGroup>
<InputGroupInput placeholder="0.00" />
<InputGroupAddon align="inline-end">USD</InputGroupAddon>
</InputGroup>With Button
Search...
import { Search } from 'lucide-react-native'
<InputGroup>
<InputGroupInput placeholder="Search..." />
<InputGroupButton size="icon-xs">
<Search size={16} />
</InputGroupButton>
</InputGroup>With Text Element
@
username
<InputGroup>
<InputGroupText>@</InputGroupText>
<InputGroupInput placeholder="username" />
</InputGroup>Both Sides
$
0.00
.00
<InputGroup>
<InputGroupAddon align="inline-start">$</InputGroupAddon>
<InputGroupInput placeholder="0.00" />
<InputGroupAddon align="inline-end">.00</InputGroupAddon>
</InputGroup>Props API
InputGroup
Extends React.ComponentPropsWithoutRef<typeof View>:
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes |
InputGroupAddon
Extends React.ComponentPropsWithoutRef<typeof View>:
| Prop | Type | Default | Description |
|---|---|---|---|
align | 'inline-start' | 'inline-end' | 'block-start' | 'block-end' | 'inline-start' | Position of the addon |
className | string | - | Additional CSS classes |
InputGroupButton
Extends Button props:
| Prop | Type | Default | Description |
|---|---|---|---|
size | 'xs' | 'sm' | 'icon-xs' | 'icon-sm' | 'xs' | Size of the button |
variant | string | 'ghost' | Button variant |
className | string | - | Additional CSS classes |
InputGroupText
Extends React.ComponentPropsWithoutRef<typeof View>:
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes |
InputGroupInput
Extends Input props:
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes |
InputGroupTextarea
Extends Textarea props:
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | Additional CSS classes |
Best Practices
- Use addons for context: Show units, currency symbols, or URL prefixes as addons
- Keep addons simple: Addons should be short text or small icons
- Pair with Field: Wrap
InputGroupin aFieldfor labels and error messages - Use buttons for actions: Use
InputGroupButtonfor inline search or clear actions - Don't overload: Avoid using both addons and buttons simultaneously — pick the pattern that fits
Related Components
- Input - Standalone text input
- Textarea - Multi-line text input
- Field - Form field wrapper with labels and errors