Card

A surface component with an optional title, caption, and variant-based visual treatment. Extends Paper - all Paper, Flex, and space/layout props pass through.

Theme-customizable via theme.components.Card - slots root / title / caption for styleOverrides, plus defaultProps.titleProps/.captionProps (token-typed) to restyle the title/caption Typography app-wide; per-instance titleProps/captionProps always win. See docs/customization.md.

Examples

Default

ComponentA flexible card surface with paper and bracketBox variants.
<Card
  title="Component"
  caption="A flexible card surface with paper and bracketBox variants."
  p={3}
/>

Paper

PaperDefault surface with elevation shadow.
<Card variant="paper" p={3} title="Paper" caption="Default surface with elevation shadow." />

Bracket Box

BracketBoxFlat surface with corner bracket accents.
<Card
  variant="bracketBox"
  p={3}
  elevation={0}
  title="BracketBox"
  caption="Flat surface with corner bracket accents."
/>

With Icon

System ScalabilityPass an icon name and the card renders it.
<Card
  variant="interactive"
  icon="account_tree"
  iconProps={{ color: 'primary', size: '2.25rem' }}
  p={4}
  bg="paper"
  title="System Scalability"
  caption="Pass an icon name and the card renders it."
/>

Interactive

InteractiveHover to fill with the secondary background.
<Card
  variant="interactive"
  p={3}
  bg="paper"
  title="Interactive"
  caption="Hover to fill with the secondary background."
/>

Variants

paperDefault card variant.
bracketBoxCorner bracket variant.
interactiveHover-fill variant.
<Flex flexDirection="row" gap={3} flexWrap="wrap">
  <Card variant="paper" p={3} title="paper" caption="Default card variant." />
  <Card
    variant="bracketBox"
    p={3}
    elevation={0}
    title="bracketBox"
    caption="Corner bracket variant."
  />
  <Card
    variant="interactive"
    p={3}
    bg="paper"
    title="interactive"
    caption="Hover-fill variant."
  />
</Flex>

Title Only

Title Only
<Card p={3} title="Title Only" />

Subtitle Only

Subtitle only - no title above it.
<Card p={3} caption="Subtitle only - no title above it." />

With Children

StackTech in use.
React
TypeScript
Vite
<Card variant="bracketBox" p={3} elevation={0} title="Stack" caption="Tech in use.">
  <View mt={2}>
    {['React', 'TypeScript', 'Vite'].map((item) => (
      <View key={item} p={0.5}>
        {item}
      </View>
    ))}
  </View>
</Card>

Card API reference