Componentdata0.8 KB gzipZero dependencies

Event Card

Event card with perforated date block, venue and time chips.

Preview

Live Preview
Oc
t 14

Tech Conference 2026

21:00
Berlin Arena

Installation

Tokens guide →

Add to your project via CLI (zero dependencies, code you own):

npx bigbullui add event-card

Or install the full npm package:

npm install bigbullui
import { EventCard } from "@/components/ui/event-card";

<EventCard />

Usage guidance

Use Event Card when a ticket stub surface needs Event card with perforated date block, venue and time chips. Keep props minimal and prefer composition with sibling stubs.

Avoid Event Card for long form flows or dense data grids where a dedicated layout block fits better.

Source code

event-card.tsx

Zero dependencies (only React + utils). Copy and paste directly into your project:

"use client";

import * as React from "react";
import { cn } from "./lib/utils";

export interface EventCardProps {
  title: string;
  date?: string;
  venue?: string;
  time?: string;
  className?: string;
}

const FadeInUp = "animate-fade-in-up-0s fade-in-up-1";
const ScaleIn = "event-date-scale-in";
const Pulse = "event-stamp-pulse";

export function EventCard({
  title,
  date = "Oct 14",
  venue = "Berlin Arena",
  time = "21:00",
  className,
}: EventCardProps) {
  return (
    <div
      className={cn(
        "group relative w-full rounded-lg border border-foreground bg-card text-card-foreground p-6 transition-all duration-300 hover:translate-y-1 hover:shadow-lg motion-reduce:transition-none motion-reduce:translate-y-0 motion-reduce:shadow-none",
        className
      )}
    >
      {/* Date block with dashed left edge */}
      <div className="relative flex items-start gap-3">
        <div
          className={cn(
            "group/[.event-active]:translate-y-0 shrink-0 size-8 rounded-full border-2 border-dashed border-border bg-secondary/10 flex flex-col items-center justify-center transition-all duration-300 motion-reduce:transition-none",
            ScaleIn,
            "event-date"
          )}
        >
          <div className="font-mono text-[24px] font-black uppercase tracking-widest">{date.slice(0, 2)}</div>
          <div className="font-mono text-[10px] uppercase tracking-widest">{date.slice(2)}</div>
        </div>

        <div className="group-[.event-active]:translate-x-0 flex-1">
          <h4 className="font-medium line-clamp-1">{title}</h4>
        </div>

        {time && (
          <div className="mt-1 flex items-center gap-1 text-xs uppercase tracking-wider text-muted-foreground">
            <span>{time}</span>
          </div>
        )}
      </div>

      {/* Venue chip */}
      {venue && (
        <div
          className={cn(
            "mt-3 inline-flex items-center rounded border border-dashed border-border bg-secondary/10 px-2.5 py-1 text-xs font-mono uppercase tracking-wider text-muted-foreground",
            Pulse
          )}
        >
          {venue}
        </div>
      )}
    </div>
  );
}

Props

PropTypeDescription
titlestring
date?string
venue?string
time?string
className?string