Skip to main content

Box

Box is a primitive component that acts as a generic container and provides managed access to design tokens.

Usage

Box is the foundation for layout and spacing in Teardrop. Use it to create containers with consistent spacing and styling.

import { Box } from '@hardwater/teardrop';

<Box padding="medium" backgroundColor="neutral.100">
Content here
</Box>

Padding

All Sides

<Box padding="medium">Content</Box>

Specific Sides

<Box paddingX="large" paddingY="small">Content</Box>
<Box paddingTop="medium">Content</Box>
<Box paddingRight="small">Content</Box>
<Box paddingBottom="large">Content</Box>
<Box paddingLeft="medium">Content</Box>

Margin

<Box margin="large">Content</Box>
<Box marginX="medium" marginY="small">Content</Box>
<Box marginTop="large">Content</Box>

Background Color

<Box backgroundColor="neutral.100">Light background</Box>
<Box backgroundColor="primary.500">Primary background</Box>
<Box backgroundColor="semantic.success.100">Success background</Box>

Border

<Box border="1px solid" borderColor="neutral.200">
Bordered box
</Box>

<Box borderRadius="medium" border="1px solid" borderColor="neutral.200">
Rounded box
</Box>

Width and Height

<Box width="100%">Full width</Box>
<Box width={300}>Fixed width</Box>
<Box minHeight={200}>Minimum height</Box>

Display

<Box display="flex">Flex container</Box>
<Box display="grid">Grid container</Box>
<Box display="none">Hidden</Box>

API

Props

PropTypeDefaultDescription
paddingSpacingToken-Padding on all sides
paddingXSpacingToken-Horizontal padding
paddingYSpacingToken-Vertical padding
paddingTopSpacingToken-Top padding
paddingRightSpacingToken-Right padding
paddingBottomSpacingToken-Bottom padding
paddingLeftSpacingToken-Left padding
marginSpacingToken-Margin on all sides
marginXSpacingToken-Horizontal margin
marginYSpacingToken-Vertical margin
marginTopSpacingToken-Top margin
marginRightSpacingToken-Right margin
marginBottomSpacingToken-Bottom margin
marginLeftSpacingToken-Left margin
backgroundColorColorToken-Background color
borderstring-Border style
borderColorColorToken-Border color
borderRadiusBorderRadiusToken-Border radius
widthstring | number-Width
heightstring | number-Height
minWidthstring | number-Minimum width
minHeightstring | number-Minimum height
maxWidthstring | number-Maximum width
maxHeightstring | number-Maximum height
displaystring-Display property
asstring | Component'div'Element or component to render as

Examples

Card

<Box
padding="large"
backgroundColor="white"
borderRadius="medium"
border="1px solid"
borderColor="neutral.200"
>
<Heading>Card Title</Heading>
<Text>Card content</Text>
</Box>

Container

<Box
maxWidth={1200}
marginX="auto"
paddingX="large"
>
Page content
</Box>

Section

<Box
paddingY="xlarge"
backgroundColor="neutral.50"
>
Section content
</Box>

Best Practices

  1. Use for layout - Box is ideal for creating layout containers
  2. Use tokens - Always use spacing and color tokens
  3. Semantic HTML - Use as prop for semantic HTML elements
  4. Composition - Combine Box with Stack and Inline for complex layouts