Overview
Group arranges children horizontally in a flex row with consistent spacing and alignment. It’s optimized for common horizontal layout patterns like button groups, inline text with icons, and navigation items.
Import
import { Group } from '@kivora/react';
Props
gap
0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12
default:"4"
Spacing between items in Tailwind units (1 = 0.25rem, 4 = 1rem).
align
'start' | 'center' | 'end' | 'baseline' | 'stretch'
default:"'center'"
Vertical alignment of children (cross-axis).
justify
'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'
default:"'start'"
Horizontal distribution of children along the main axis.
Whether items should wrap onto multiple lines when they overflow.
When true, sets w-full to fill available width.
Usage
Basic group
<Group gap={3}>
<Button>Cancel</Button>
<Button variant="primary">Save</Button>
</Group>
Space between
<Group justify="between">
<Text>Total</Text>
<Text className="font-bold">$99.00</Text>
</Group>
Centered content
<Group justify="center" gap={2}>
<Icon name="info" />
<Text>This action cannot be undone</Text>
</Group>
Icon with text
<Group gap={2}>
<Icon name="mail" size="sm" />
<Text>[email protected]</Text>
</Group>
Wrapping items
<Group wrap gap={2}>
{tags.map(tag => (
<Badge key={tag.id}>{tag.name}</Badge>
))}
</Group>
Right-aligned actions
<Group justify="end" gap={2}>
<Button variant="secondary">Discard</Button>
<Button variant="primary">Publish</Button>
</Group>
Layout Examples
<Card>
<Group justify="between" align="center" className="p-6 border-b">
<div>
<Heading size="lg">Settings</Heading>
<Text className="text-gray-600">Manage your preferences</Text>
</div>
<Button variant="secondary">Export</Button>
</Group>
<div className="p-6">
{/* Card content */}
</div>
</Card>
Navigation bar
<nav className="border-b">
<Container>
<Group justify="between" align="center" className="py-4">
<Group gap={8}>
<Logo />
<Group gap={4}>
<Button variant="ghost">Products</Button>
<Button variant="ghost">Pricing</Button>
<Button variant="ghost">Docs</Button>
</Group>
</Group>
<Group gap={2}>
<Button variant="secondary">Sign In</Button>
<Button variant="primary">Sign Up</Button>
</Group>
</Group>
</Container>
</nav>
List item
<Group justify="between" align="center" className="p-4 border rounded-lg">
<Group gap={3}>
<Avatar src={user.avatar} />
<Stack gap={0}>
<Text className="font-medium">{user.name}</Text>
<Text size="sm" className="text-gray-600">{user.email}</Text>
</Stack>
</Group>
<Group gap={2}>
<Button variant="secondary" size="sm">Edit</Button>
<Button variant="secondary" size="sm">Remove</Button>
</Group>
</Group>
<div>
<Label>API Key</Label>
<Group gap={2}>
<Input
type="text"
value="sk_live_..."
readOnly
className="flex-1"
/>
<Button variant="secondary">Copy</Button>
<Button variant="secondary">Regenerate</Button>
</Group>
</div>
Stats row
<Group justify="around" className="border rounded-lg p-6">
<Stack gap={1} align="center">
<Text size="2xl" className="font-bold">1,234</Text>
<Text className="text-gray-600">Users</Text>
</Stack>
<Stack gap={1} align="center">
<Text size="2xl" className="font-bold">89</Text>
<Text className="text-gray-600">Projects</Text>
</Stack>
<Stack gap={1} align="center">
<Text size="2xl" className="font-bold">45</Text>
<Text className="text-gray-600">Teams</Text>
</Stack>
</Group>
Breadcrumbs
<Group gap={2} align="center">
<Button variant="link">Home</Button>
<Text className="text-gray-400">/</Text>
<Button variant="link">Projects</Button>
<Text className="text-gray-400">/</Text>
<Text>Current Project</Text>
</Group>
Alert with icon
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4">
<Group gap={3}>
<Icon name="info" className="text-blue-600" />
<Stack gap={1} className="flex-1">
<Text className="font-medium">Update available</Text>
<Text size="sm" className="text-gray-600">
A new version is ready to install.
</Text>
</Stack>
<Button variant="primary" size="sm">Update Now</Button>
</Group>
</div>
Tag list
<div>
<Label>Tags</Label>
<Group wrap gap={2}>
<Badge>react</Badge>
<Badge>typescript</Badge>
<Badge>tailwind</Badge>
<Badge>ui</Badge>
<Button variant="ghost" size="sm">+ Add tag</Button>
</Group>
</div>
Best Practices
- Use Group as the default for horizontal layouts
- Use
justify="between" for distributing items across available space
- Use
align="center" (default) for vertically centering mixed-height items
- Use
align="baseline" when aligning text with different sizes
- Enable
wrap for tag lists and dynamic content that may overflow
- Combine with
grow to fill the parent container width
- Use
gap={2} for tight groups like button pairs
- Use
gap={4-6} for more distinct items