GitHub

ExpandableCard

A card that expands into a modal with smooth layout animations.

Loading...

Basic Usage

import {
  ExpandableCard,
  ExpandableCardTrigger,
  ExpandableCardContent,
  ExpandableCardHeader,
  ExpandableCardTitle,
  ExpandableCardDescription,
  ExpandableCardBody,
} from "@corew500/ui"

<ExpandableCard>
  <ExpandableCardTrigger>
    <ExpandableCardHeader>
      <ExpandableCardTitle>Card Title</ExpandableCardTitle>
      <ExpandableCardDescription>Click to expand</ExpandableCardDescription>
    </ExpandableCardHeader>
  </ExpandableCardTrigger>

  <ExpandableCardContent>
    <ExpandableCardHeader>
      <ExpandableCardTitle>Expanded View</ExpandableCardTitle>
    </ExpandableCardHeader>
    <ExpandableCardBody>
      <p>Full content shown when expanded...</p>
    </ExpandableCardBody>
  </ExpandableCardContent>
</ExpandableCard>

Controlled State

const [expanded, setExpanded] = useState(false)

<ExpandableCard expanded={expanded} onExpandedChange={setExpanded}>
  <ExpandableCardTrigger>...</ExpandableCardTrigger>
  <ExpandableCardContent>...</ExpandableCardContent>
</ExpandableCard>

Variants

// Default with shadow
<ExpandableCard variant="default">...</ExpandableCard>

// Outline style
<ExpandableCard variant="outline">...</ExpandableCard>

Sizes

<ExpandableCard size="sm">Small card</ExpandableCard>
<ExpandableCard size="default">Default card</ExpandableCard>
<ExpandableCard size="lg">Large card</ExpandableCard>

Custom Close Button

Hide the default close button or add a custom one:

<ExpandableCardContent showCloseButton={false}>
  <ExpandableCardBody>
    <p>Content here</p>
    <ExpandableCardClose>
      <Button variant="outline">Close</Button>
    </ExpandableCardClose>
  </ExpandableCardBody>
</ExpandableCardContent>

With Footer

<ExpandableCardContent>
  <ExpandableCardBody>Content</ExpandableCardBody>
  <ExpandableCardFooter>
    <Button variant="outline">Cancel</Button>
    <Button>Save</Button>
  </ExpandableCardFooter>
</ExpandableCardContent>

Sub-components

| Component | Description | |-----------|-------------| | ExpandableCard | Root container with context | | ExpandableCardTrigger | Clickable card that triggers expansion | | ExpandableCardContent | Expanded modal content | | ExpandableCardClose | Close button/trigger | | ExpandableCardHeader | Header section | | ExpandableCardTitle | Title text | | ExpandableCardDescription | Description text | | ExpandableCardBody | Main content area | | ExpandableCardFooter | Footer with actions |

Props

ExpandableCard

PropTypeDefaultDescription
expandedenumControlled expanded state
onExpandedChange(expanded: boolean) => voidCallback when expanded state changes
defaultExpandedenumfalseDefault expanded state for uncontrolled usage
variantenumdefault
sizeenumdefault

ExpandableCardContent

PropTypeDefaultDescription
showCloseButtonenumtrueShow close button in expanded view
classNamestring

Accessibility

  • Escape key closes the expanded card
  • Focus is trapped within expanded content
  • Focus returns to trigger on close
  • Uses role="dialog" and aria-modal="true"
  • Trigger is keyboard accessible (Enter/Space)