Skip to main content

Card Component

Introduction​

The Card Component wraps content in a styled MUI Card surface. It supports an optional click handler (onClick) that makes the card interactive — clicking it triggers an action sequence (e.g., navigation, dialog, mutation). Without onClick, the card renders as a static, non-interactive surface.

YAML Structure​

component: card
name: <string>
props:
options:
variant: <"elevation" | "outlined">
elevation: <number>
className: <string>
bgcolor: <string>
color: <string>
style:
light: <CSSProperties>
dark: <CSSProperties>
header:
title: <string | localized object>
subheader: <string | localized object>
icon: <string>
iconColor: <string>
sx: <SxProps>
actions:
sx: <SxProps>
disableContentWrapper: <boolean>
contentSx: <SxProps>
contentClassName: <string>
contentProps: <CardContentProps>
sx: <SxProps>
onClick: <action_sequence>
className: <string>
children:
- <component>

Structure Breakdown​

ElementTypeDescription
componentstringAlways card
namestringUnique identifier for the card instance
props.optionsobjectStyling and layout options
props.onClickarrayActions fired when the card is clicked; presence makes the card interactive
classNamestringAdditional CSS classes on the card root
childrenarrayChild components rendered inside the card

Attribute Description​

props.options​

Sub-propTypeDescription
variantstringMUI card variant: elevation (default) or outlined
elevationnumberShadow depth when variant: elevation
classNamestringAdditional CSS classes for the card root
bgcolorstringBackground color
colorstringText color
styleobjectTheme-aware root styles. style.light applies in light mode and style.dark applies in dark mode. These styles are applied after sx and can override it.
headerobjectOptional CardHeader with title, subheader, icon, iconColor, and sx; title/subheader support localized values and all three display fields support templates
actionsobjectOptional CardActions with sx
disableContentWrapperbooleanIf true, children are rendered directly without CardContent
contentSxobjectMUI sx props applied to the CardContent element
contentClassNamestringCSS class applied to CardContent (default: card-content)
contentPropsobjectAdditional props spread onto CardContent
sxobjectMUI sx props applied to the card root

props.onClick​

  • Type: array (actions list)
  • Description: When present, the card becomes an accessible interactive surface. Clicking it or pressing Enter/Space while it is focused executes the action sequence. It receives the card's name as sender and the parent's variables as context. Keyboard events from nested controls do not trigger the card action.

Examples​

Static Card (non-interactive)​

component: card
props:
options:
variant: outlined
header:
title: "Order Summary"
subheader: "Shipment #12345"
disableContentWrapper: false
children:
- component: text
props:
value: "Package delivered successfully."

Interactive Card with onClick​

component: card
props:
options:
variant: elevation
elevation: 2
bgcolor: "#f5f5f5"
header:
title: "Customer Details"
onClick:
- navigate: "/customers/{{ customerId }}"
className: "customer-card"
children:
- component: text
props:
value: "{{ customerName }}"

Card with Actions Toolbar​

component: card
name: orderCard
props:
options:
header:
title:
en-US: "Order #{{ orderId }}"
icon: "{{ orderIcon }}"
actions:
sx:
justifyContent: flex-end
onClick:
- dialog:
name: orderDetailsDialog
component:
component: Orders/Detail
props:
id: "{{ orderId }}"
children:
- component: layout
props:
cols: 2
children:
- component: text
props:
label: "Status"
value: "{{ orderStatus }}"
- component: text
props:
label: "Total"
value: "{{ orderTotal | currency }}"

Styled Card with Content Props​

component: card
props:
options:
variant: outlined
contentSx:
padding: 2
contentProps:
dividers: true
contentClassName: "order-card-content"
children:
- component: text
props:
value: "Card content with dividers between children."

Theme-Aware Card Styling​

component: card
name: metricCard
props:
options:
variant: outlined
sx:
borderRadius: 2
style:
light:
backgroundColor: "#ffffff"
borderColor: "#d7dee8"
dark:
backgroundColor: "#121826"
borderColor: "#344054"
color: "#f8fafc"
children:
- component: text
props:
value: "Card root styles change with the active theme."