Skip to content

2 variants

Cards

Compact standalone cards with clear information hierarchy, purposeful actions, and polished motion.

Balance card

A stacked, two layer balance card with overlapping linked account marks, a large animated total, and a footer holding two actions.

CheckingSavingsBusinessShared
Total balance
$12,481
+$62.10 today

Install

$ bunx --bun shadcn add @easeui-pro/balance-card

Props

accounts{ label: string; color: string }[]Default four sample accounts

Linked accounts, drawn as overlapping marks above the total. color is a Tailwind background class.

balancenumberDefault 12480.62

The total, rolled into place by the ticker whenever it changes.

changeTodaynumberDefault 62.1

Change so far today, in dollars. A negative value prints in the destructive color.

tone"violet" | "neon" | "warning" | "accent"Default "violet"

Color of the panel peeking out behind the card.

onMove() => void

Called when Move is pressed.

onSend() => void

Called when Send is pressed.

classNamestring

Merged last, so anything passed here wins over the component's own classes.

Profile card

A two layer profile card with a color banner, a live looking availability dot, avatar led identity, and two contact actions.

Jordan LeeDesign engineer · Northline StudioAvailable for work

Install

$ bunx --bun shadcn add @easeui-pro/profile-card

Props

namestringDefault "Jordan Lee"

Shown under the avatar.

jobTitlestringDefault "Design engineer"

Not called role, because that is the ARIA attribute and every a11y linter flags it on the way past.

companystringDefault "Northline Studio"

Printed after the job title.

avatarSrcstringDefault a placeholder photo

Photo for the avatar circle.

availablebooleanDefault true

Drives both the status dot and the line of text under the name.

localTimestring

Already formatted, such as 9:41 PM. Left off, the corner pill is not drawn at all.

tone"violet" | "neon" | "warning" | "accent"Default "neon"

Color of the panel peeking out behind the card.

onMessage() => void

Called when Message is pressed.

onEmail() => void

Called when Email is pressed.

classNamestring

Merged last, so anything passed here wins over the component's own classes.