Layout Components
Row
A fundamental layout component that arranges its children in a horizontal line. It is built on the flexbox model and is used to create columns.
A fundamental layout component that arranges its children in a horizontal line. It is built on the flexbox model and is used to create columns.
Basic Row
A horizontal flex container. Row defaults to gap, itemsCenter, noPadding, noBorder, noRing, outline, and sharp — you don't need to pass these explicitly. Pass href to render Row as <a> instead of <div> — a focus-visible outline auto-enables when href is set.
<Row> <div className="p-4 bg-gray-100 rounded">Item 1</div> <div className="p-4 bg-gray-100 rounded">Item 2</div> <div className="p-4 bg-gray-100 rounded">Item 3</div></Row>Row Spacing
Use size props (xs, sm, md, lg, xl) to control the gap amount, or noGap to disable.
xs
sm
md (default)
lg
xl
noGap
<Col> <Text semibold>xs</Text> <Row xs> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row> <Text semibold>sm</Text> <Row sm> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row> <Text semibold>md (default)</Text> <Row> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row> <Text semibold>lg</Text> <Row lg> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row> <Text semibold>xl</Text> <Row xl> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row> <Text semibold>noGap</Text> <Row noGap> <div className="p-3 bg-gray-100 rounded">Item 1</div> <div className="p-3 bg-gray-100 rounded">Item 2</div> <div className="p-3 bg-gray-100 rounded">Item 3</div> </Row></Col>Justify (Main Axis)
Control horizontal distribution with justifyStart, justifyEnd, justifyCenter, justifyBetween, justifyAround, or justifyEvenly.
justifyStart
justifyEnd
justifyCenter
justifyBetween
justifyAround
justifyEvenly
<Col> <Text semibold>justifyStart</Text> <Row justifyStart className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row> <Text semibold>justifyEnd</Text> <Row justifyEnd className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row> <Text semibold>justifyCenter</Text> <Row justifyCenter className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row> <Text semibold>justifyBetween</Text> <Row justifyBetween className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row> <Text semibold>justifyAround</Text> <Row justifyAround className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row> <Text semibold>justifyEvenly</Text> <Row justifyEvenly className="border-2 border-dashed border-gray-300 p-2"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row></Col>Items (Cross Axis)
Control vertical alignment with itemsStart, itemsEnd, itemsCenter (default), itemsBaseline, or itemsStretch.
itemsStart
itemsEnd
itemsCenter (default)
itemsBaseline
Small text
Large text
Default
itemsStretch
<Col> <Text semibold>itemsStart</Text> <Row itemsStart className="border-2 border-dashed border-gray-300 p-2 h-24"> <div className="p-2 bg-gray-100 rounded">Small</div> <div className="p-6 bg-gray-100 rounded">Tall</div> <div className="p-2 bg-gray-100 rounded">Small</div> </Row> <Text semibold>itemsEnd</Text> <Row itemsEnd className="border-2 border-dashed border-gray-300 p-2 h-24"> <div className="p-2 bg-gray-100 rounded">Small</div> <div className="p-6 bg-gray-100 rounded">Tall</div> <div className="p-2 bg-gray-100 rounded">Small</div> </Row> <Text semibold>itemsCenter (default)</Text> <Row className="border-2 border-dashed border-gray-300 p-2 h-24"> <div className="p-2 bg-gray-100 rounded">Small</div> <div className="p-6 bg-gray-100 rounded">Tall</div> <div className="p-2 bg-gray-100 rounded">Small</div> </Row> <Text semibold>itemsBaseline</Text> <Row itemsBaseline className="border-2 border-dashed border-gray-300 p-2 h-24"> <Text sm>Small text</Text> <Text xl>Large text</Text> <Text>Default</Text> </Row> <Text semibold>itemsStretch</Text> <Row itemsStretch className="border-2 border-dashed border-gray-300 p-2 h-24"> <div className="p-2 bg-gray-100 rounded">A</div> <div className="p-2 bg-gray-100 rounded">B</div> <div className="p-2 bg-gray-100 rounded">C</div> </Row></Col>Row Wrap
Use flexWrap to allow items to wrap to the next line when they overflow.
<Row flexWrap className="max-w-md border-2 border-dashed border-gray-300 p-2"> <div className="p-4 bg-gray-100 rounded">Item 1</div> <div className="p-4 bg-gray-100 rounded">Item 2</div> <div className="p-4 bg-gray-100 rounded">Item 3</div> <div className="p-4 bg-gray-100 rounded">Item 4</div> <div className="p-4 bg-gray-100 rounded">Item 5</div></Row>Reverse Order
Use rowReverse to reverse the visual order of children.
<Row rowReverse className="border-2 border-dashed border-gray-300 p-2"> <div className="p-4 bg-gray-100 rounded">First in DOM</div> <div className="p-4 bg-gray-100 rounded">Second</div> <div className="p-4 bg-gray-100 rounded">Last in DOM</div></Row>Responsive Layout
Use mobileCol to stack on mobile, or tabletCol to stack on tablet and below.
tabletCol (stacks at ≤1024px)
Column 1
Horizontal on desktop, stacked on tablet and below.
Column 2
Resize to see the responsive behavior.
mobileCol (stacks at ≤768px)
Column 1
Horizontal until mobile.
Column 2
Stacks only on narrow viewports.
<Col> <Text semibold>tabletCol (stacks at ≤1024px)</Text> <Row tabletCol> <Col flex1 className="p-4 bg-primary-100 rounded"> <Text semibold>Column 1</Text> <Text>Horizontal on desktop, stacked on tablet and below.</Text> </Col> <Col flex1 className="p-4 bg-primary-100 rounded"> <Text semibold>Column 2</Text> <Text>Resize to see the responsive behavior.</Text> </Col> </Row> <Text semibold>mobileCol (stacks at ≤768px)</Text> <Row mobileCol> <Col flex1 className="p-4 bg-primary-100 rounded"> <Text semibold>Column 1</Text> <Text>Horizontal until mobile.</Text> </Col> <Col flex1 className="p-4 bg-primary-100 rounded"> <Text semibold>Column 2</Text> <Text>Stacks only on narrow viewports.</Text> </Col> </Row></Col>Row Variants
Use filled or outline with appearance props for styled rows. Row uses sharp (no border-radius) by default — pair with rounded or pill for curved corners.
<Col> <Row filled primary padding rounded> <div className="p-4 bg-white/80 rounded">Filled Primary</div> <div className="p-4 bg-white/80 rounded">Item 2</div> </Row> <Row border success padding rounded> <div className="p-4 rounded">Outline Success</div> <div className="p-4 rounded">Item 2</div> </Row></Col>Text Alignment
Use textCenter, textLeft, textRight, or textJustify to control text alignment within the row.
Left aligned content in a row.
Center aligned content in a row.
Right aligned content in a row.
<Col> <Row textLeft className="border-2 border-dashed border-gray-300 p-4"> <Text>Left aligned content in a row.</Text> </Row> <Row textCenter className="border-2 border-dashed border-gray-300 p-4"> <Text>Center aligned content in a row.</Text> </Row> <Row textRight className="border-2 border-dashed border-gray-300 p-4"> <Text>Right aligned content in a row.</Text> </Row></Col>Inside a Card
Row composes naturally inside a Card to lay out header actions, button groups, or any horizontal cluster.
Settings
ActiveConfigure your preferences below.
<Card> <Row justifyBetween> <Title>Settings</Title> <Badge success>Active</Badge> </Row> <Text>Configure your preferences below.</Text> <Row justifyEnd> <Button secondary>Cancel</Button> <Button filled>Save</Button> </Row></Card>As Link
Add href to render the Row as an <a> tag — useful for clickable list rows. A keyboard focus-visible outline auto-renders so the link is reachable via Tab; opt out with noFocusVisible.
<Col> <Row href="#inbox" justifyBetween padding border rounded> <Text semibold>Inbox</Text> <Badge primary filled>12</Badge> </Row> <Row href="#drafts" justifyBetween padding border rounded> <Text semibold>Drafts</Text> <Badge secondary>3</Badge> </Row> <Row href="https://github.com" target="_blank" rel="noopener noreferrer" justifyBetween padding border rounded> <Text semibold>GitHub</Text> <Text sm secondary>External</Text> </Row></Col>Next.js Link Integration
Use the tag prop to render the Row as a Next.js Link for client-side navigation.
import Link from 'next/link';import { Row, Text, Badge } from '@vaneui/ui';
<Row href="/inbox" tag={Link} justifyBetween padding border rounded> <Text semibold>Inbox</Text> <Badge primary filled>12</Badge></Row>Row Props
| Prop | Category | Default | Description |
|---|---|---|---|
accent | Appearance | Accent color appearance (rose) | |
brand | Appearance | Brand color appearance (blue) | |
danger | Appearance | Danger color appearance (red) | |
info | Appearance | Info color appearance (cyan) | |
inherit | Appearance | Inherit appearance from parent — suppresses own data-appearance/data-variant, uses parent's CSS variables | |
link | Appearance | Link color appearance (blue, for hyperlinks) | |
primary | Appearance | Primary color appearance (gray) | |
secondary | Appearance | Secondary color appearance (gray) | |
success | Appearance | Success color appearance (green) | |
tertiary | Appearance | Tertiary color appearance | |
warning | Appearance | Warning color appearance (amber) | |
desktopCol | Breakpoint | Switch to column layout on desktop and below (max-desktop: 80rem) | |
mobileCol | Breakpoint | Switch to column layout on mobile and below (max-mobile: 48rem) | |
tabletCol | Breakpoint | Switch to column layout on tablet and below (max-tablet: 64rem) | |
flex1 | Flex | Take up remaining space (= `flex-1`, i.e. `flex: 1 1 0%`) | |
flexAuto | Flex | Grow but respect intrinsic size (= `flex-auto`, i.e. `flex: 1 1 auto`) | |
flexNone | Flex | Don't grow and don't shrink (= `flex-none`, i.e. `flex: none`) | |
noPadding | Padding | ✓ | Disable internal padding |
padding | Padding | Enable internal padding | |
paddingX | Padding | Enable only horizontal padding | |
paddingY | Padding | Enable only vertical padding | |
pill | Shape | Fully rounded corners (circular) | |
rounded | Shape | Medium rounded corners (default) | |
sharp | Shape | ✓ | No rounded corners (square) |
noShrink | Shrink | Prevent the flex item from shrinking below its content size (= `shrink-0`) | |
lg | Size | Large size | |
md | Size | ✓ | Medium size (default) |
sm | Size | Small size | |
xl | Size | Extra large size | |
xs | Size | Extra small size | |
textCenter | Text Align | Align text to center | |
textJustify | Text Align | Justify text | |
textLeft | Text Align | Align text to left | |
textRight | Text Align | Align text to right | |
filled | Variant | Filled variant - solid background with contrasting text color | |
ghost | Variant | Ghost variant - transparent background, no border, appearance-colored text, tinted hover background | |
outline | Variant | ✓ | Outline variant - transparent background with border and colored text (default) |
Layout & utility props (gap, padding, hide, items, justify, ...) — documented on Common Props
| Prop | Category | Default | Description |
|---|---|---|---|
border | Border | Enable border on all sides | |
borderB | Border | Enable border on bottom | |
borderL | Border | Enable border on left | |
borderR | Border | Enable border on right | |
borderT | Border | Enable border on top | |
borderX | Border | Enable border on left and right | |
borderY | Border | Enable border on top and bottom | |
noBorder | Border | ✓ | Disable all borders |
block | Display | Block display - takes full width, new line | |
contents | Display | Contents display - element's box is removed, children display as if parent didn't exist | |
flex | Display | ✓ | Flex display - flexbox container |
grid | Display | Grid display - CSS grid container | |
hidden | Display | Hidden display - element is not visible | |
inline | Display | Inline display - flows with text | |
inlineBlock | Display | Inline-block display - inline but with block properties | |
inlineFlex | Display | Inline-flex display - inline flexbox container | |
inlineGrid | Display | Inline-grid display - inline grid container | |
table | Display | Table display - behaves like table element | |
tableCell | Display | Table-cell display - behaves like td element | |
column | Flex Direction | Flex direction column (vertical) | |
columnReverse | Flex Direction | Flex direction column-reverse | |
row | Flex Direction | ✓ | Flex direction row (horizontal) |
rowReverse | Flex Direction | Flex direction row-reverse | |
focusVisible | Focus Visible | Enable focus-visible outline | |
noFocusVisible | Focus Visible | Disable focus-visible outline | |
gap | Gap | ✓ | Enable gap spacing between children |
noGap | Gap | Disable gap spacing | |
hAuto | Height | Set height to auto | |
hFit | Height | Set height to fit-content | |
hFull | Height | Set height to 100% | |
hScreen | Height | Set height to 100vh (viewport height), removes max-height constraint | |
desktopHide | Hide | Hide element on desktop devices and below (max-desktop: 80rem) | |
mobileHide | Hide | Hide element on mobile devices and below (max-mobile: 48rem) | |
tabletHide | Hide | Hide element on tablet devices and below (max-tablet: 64rem) | |
itemsBaseline | Items | Align items to baseline | |
itemsCenter | Items | ✓ | Align items to center |
itemsEnd | Items | Align items to end (bottom/right) | |
itemsStart | Items | Align items to start (top/left) | |
itemsStretch | Items | Stretch items to fill container | |
justifyAround | Justify | Distribute items with space around them | |
justifyBaseline | Justify | Align items along their baseline on main axis | |
justifyBetween | Justify | Distribute items with space between them | |
justifyCenter | Justify | Center items along the main axis | |
justifyEnd | Justify | Pack items toward the end of the main axis | |
justifyEvenly | Justify | Distribute items with equal space around them | |
justifyStart | Justify | Pack items toward the start of the main axis | |
justifyStretch | Justify | Stretch items to fill the main axis | |
overflowAuto | Overflow | Auto overflow - show scrollbars if needed | |
overflowClip | Overflow | Clip overflow - hard clip without scrollbars | |
overflowHidden | Overflow | Hidden overflow - clip content without scrollbars | |
overflowScroll | Overflow | Scroll overflow - always show scrollbars | |
overflowVisible | Overflow | Visible overflow - content extends beyond bounds | |
overflowXAuto | Overflow | Auto overflow on X-axis only | |
overflowXClip | Overflow | Clip overflow on X-axis only | |
overflowXHidden | Overflow | Hidden overflow on X-axis only | |
overflowXScroll | Overflow | Scroll overflow on X-axis only | |
overflowXVisible | Overflow | Visible overflow on X-axis only | |
overflowYAuto | Overflow | Auto overflow on Y-axis only | |
overflowYClip | Overflow | Clip overflow on Y-axis only | |
overflowYHidden | Overflow | Hidden overflow on Y-axis only | |
overflowYScroll | Overflow | Scroll overflow on Y-axis only | |
overflowYVisible | Overflow | Visible overflow on Y-axis only | |
absolute | Position | Absolute positioning | |
fixed | Position | Fixed positioning | |
relative | Position | Relative positioning | |
static | Position | Static positioning | |
sticky | Position | Sticky positioning | |
responsive | Responsive | Enable responsive sizing - uses breakpoint-specific classes for font size, padding, and gap | |
reverse | Reverse | Reverse the order of children | |
noRing | Ring | ✓ | Disable focus ring |
ring | Ring | Enable focus ring | |
noShadow | Shadow | Disable drop shadow | |
shadow | Shadow | Enable drop shadow | |
transparent | Transparent | Disable background color - makes component background transparent | |
wAuto | Width | Set width to auto | |
wFit | Width | Set width to fit-content | |
wFull | Width | Set width to 100% | |
wScreen | Width | Set width to 100vw (viewport width), removes max-width constraint | |
flexNoWrap | Wrap | Force flex items to stay on single line (may overflow) | |
flexWrap | Wrap | Allow flex items to wrap to new lines when container is too narrow | |
flexWrapReverse | Wrap | Wrap flex items in reverse order (last items wrap first) |