View
The View component is a layout primitive that makes it easy to arrange elements in a vertical or horizontal View with consistent spacing. It's built on top of flexbox and provides a simple API for common layout patterns.
Import
import { View } from '@oztix/roadie-components'
Examples
Basic View
By default, View arranges items vertically with no gap:
<View> <View p='100' bg='neutral.surface.subtle'> Item 1 </View> <View p='100' bg='neutral.surface.subtle'> Item 2 </View> <View p='100' bg='neutral.surface.subtle'> Item 3 </View> </View>
Horizontal View
Use flexDirection='row' to arrange items horizontally:
<View flexDirection='row' gap='200'> <View p='100' bg='neutral.surface.subtle'>Item 1</View> <View p='100' bg='neutral.surface.subtle'>Item 2</View> <View p='100' bg='neutral.surface.subtle'>Item 3</View> </View>
Spacing Between Items
Control the gap between items using the gap prop:
<View gap='300'> <View p='100' bg='neutral.surface.subtle'>Item 1</View> <View p='100' bg='neutral.surface.subtle'>Item 2</View> <View p='100' bg='neutral.surface.subtle'>Item 3</View> </View>
Alignment
Control alignment using alignItems and justifyContent props:
<View flexDirection='row' alignItems='center' justifyContent='space-between' height='1000' bg='neutral.surface.subtle' > <View p='100' bg='neutral.surface.subtle'>Start</View> <View p='100' bg='neutral.surface.subtle'>Center</View> <View p='100' bg='neutral.surface.subtle'>End</View> </View>
Responsive Props
View supports responsive props for different screen sizes:
<View flexDirection={{ base: 'column', md: 'row' }} gap={{ base: '100', md: '200' }} alignItems={{ base: 'stretch', md: 'center' }} > <View p='100' bg='neutral.surface.subtle'> Item 1 </View> <View p='100' bg='neutral.surface.subtle'> Item 2 </View> <View p='100' bg='neutral.surface.subtle'> Item 3 </View> </View>
Nested Views
Views can be nested to create complex layouts:
<View gap='200'> <View flexDirection='row' gap='200' justifyContent='center'> <View p='100' bg='neutral.surface.subtle'>Top Left</View> <View p='100' bg='neutral.surface.subtle'>Top Right</View> </View> <View flexDirection='row' gap='200' justifyContent='space-between'> <View p='100' bg='neutral.surface.subtle'>Bottom Left</View> <View p='100' bg='neutral.surface.subtle'>Bottom Right</View> </View> </View>
Custom elements
View can be rendered as any HTML element or component (like section
or Link) using the as prop:
<View as='section' bg='neutral.surface.subtle'> <View p='100' bg='neutral.surface.subtle'>Section</View> <View as={Link} href='/'>Link</View> </View>
Custom attributes
View can be rendered with custom attributes like data-testid:
<View as='section' data-testid='section'> <View p='100' bg='neutral.surface.subtle'>Section</View> </View>
Props
ViewProps
A foundational layout component that provides a flexible container with sensible defaults. Based on the Panda CSS Box pattern but with better defaults for application UI layout.