docs / patterns / entity-card
EntityCard
a card you assemble from parts: media, meta, title, body and actions, in any order. the same parts render a project tile, a list row or a showcase card, depending on the variant.
intensity · structuresrsc · server
provenance
shaped from sisu-pluslayer
core / patternsintensity
structures · organizes a region, stays out of the contentcomposition
stack for tiles in a grid, row for compact lists, showcase for the numbered selected-work cardinteractive on the root puts the arrow on the title and the lift on hovernever an EntityCard inside another cardan interactive card gets one destination, not a pile of competing buttonsa11y
EntityTitle renders anh3 · the hover arrow is decorative · media scaling stops under motion-reducejest-axedependencies
Card from the same packagelive demo · try it out
Project
Aurora tokens
A layered token pipeline that emits Tailwind v4 and DTCG.
customize
variantstack tile, row list, showcase card
interactivehover lift and title arrow
mediathe cover panel
actionsthe button row
titlethe h3 heading
bodythe description
usage
<EntityCard>
<EntityMedia>
<div className="h-full w-full [background:linear-gradient(135deg,color-mix(in_srgb,var(--color-accent)_30%,transparent),transparent)]" />
</EntityMedia>
<EntityMeta>
<Badge tone="accent">Project</Badge>
</EntityMeta>
<EntityTitle>Aurora tokens</EntityTitle>
<EntityBody>A layered token pipeline that emits Tailwind v4 and DTCG.</EntityBody>
<EntityActions>
<Button size="sm">Open</Button>
</EntityActions>
</EntityCard>props
| prop | type | default | notes |
|---|---|---|---|
| variant | "stack" | "row" | "showcase" | "stack" | layout: stack is media on top, row puts the media beside the content, showcase is the big numbered work card. row and showcase need EntityContent around the text parts. |
| className | string | — | merged onto the root Card, which adds a 2xl radius, overflow-hidden, and a flex column. |
| ...Card props | CardProps | — | EntityCard extends the Card primitive, so every Card prop is forwarded. |
get it
bun add @usva-ui/reactusage
import { EntityActions, EntityBody, EntityCard, EntityMedia, EntityMeta, EntityTitle } from "@usva-ui/react/patterns/entity-card";
import { Badge } from "@usva-ui/react/primitives/badge";
import { Button } from "@usva-ui/react/primitives/button";
<EntityCard>
<EntityMedia>
<img src="/cover.jpg" alt="" />
</EntityMedia>
<EntityMeta>
<Badge tone="accent">Design</Badge>
</EntityMeta>
<EntityTitle>Aurora tokens</EntityTitle>
<EntityBody>A layered token pipeline for the kajo theme.</EntityBody>
<EntityActions>
<Button size="sm">Open</Button>
</EntityActions>
</EntityCard>