Pre-alphaThe registry and the CLI are not published yet.Roadmap
Compositions

Event Card

Event photo with a date tile, time and place, who's going and a ticket button.

This week

Oct12
Night Owls liveSat · 8:00 PMBrooklyn Steel, New York
124 going
Get tickets
Oct16
Design Systems SummitWed · 9:30 AMPier 27, San Francisco
2 going
RSVP

Event Card is designed for a vertical feed: each card takes the full width of the list, one event per row. There is no width to set.

Installation

npx axiom add event-card
pnpm dlx axiom add event-card
yarn dlx axiom add event-card
bun x axiom add event-card

Also copies: card, avatar, icon, button, title, text and their dependencies. The file lands in components/compositions/event-card.tsx. It brings no tokens of its own.

The detail icons come from your icon registry. Add the ones you use to icons.tsx, for example with expo-symbols:

components/ui/icons.tsx
time: symbol("clock", "schedule"),
location: symbol("mappin.and.ellipse", "location_on"),

Usage

import { EventCard } from "@/components/compositions/event-card";

<EventCard
	title="Night Owls live"
	image={{ uri: event.photo }}
	date={new Date(event.startsAt)}
	details={[
		{ icon: "time", label: "Sat · 8:00 PM" },
		{ icon: "location", label: "Brooklyn Steel, New York" },
	]}
	attendees={event.friendsGoing}
	attendeeCount={event.goingCount}
	onAction={() => router.push(`/events/${event.id}/tickets`)}
	onPress={() => router.push(`/events/${event.id}`)}
/>;

The date tile formats date in the device’s locale: “OCT” and “12” on the photo, and the full date, “Sunday, October 12”, for screen readers. The details are yours to format.

Props

PropTypeDefaultDescription
titlestring—Name of the event, up to two lines.
imageImageSourcePropType—The photo, in 16:9 at the top of the card.
dateDate—Shown as a month and day tile on the photo.
detailsEventDetail[]—{ icon?, label }: time, place. One muted line each, under the title.
attendeesEventAttendee[]—{ name, avatar? }. The first three show as overlapping Avatars.
attendeeCountnumberattendees.lengthThe total in “124 going”, often larger than the avatars shown.
attendeeLabelstring"going"The word after the count.
actionLabelstring"Get tickets"Label of the action button.
onAction() => void—Shows the small button, next to the attendees. Without it, there is no button.
onPress() => void—Makes the whole card pressable, to open the event. The button keeps its own press.
styleStyleProp<ViewStyle>—Extra styles for the card container, for example a margin.

Built with

  • Card: the elevated surface, its media, header and footer.
  • Title: the event name and the day of the date tile.
  • Text: the month, the details and the count.
  • Icon: the detail icons, from your registry.
  • Avatar: Avatar.Group, the people going.
  • Button: the small action.

Used in

No block uses Event Card yet.