Multi-City Tour Dates
Lists each tour stop as a hairline-divided row with its city, venue, date, and remaining-seats count; sold-out stops render visually muted with a "Sold out" badge instead of a seat count and no reserve action. Beside the list (stacked on mobile, two columns on desktop), a sticky "Locations" summary card lists every city with a map-pin icon. Perfect for a recurring workshop or roadshow touring multiple cities.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge, button dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/multi-city-tour-dates.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/event/event25.tsx instead.
Usage
The file also exports event25Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Event25, event25Demo } from "@/components/blocks/event/event25"; export default function Page() { return <Event25 {...event25Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| eyebrow | string | undefined | Small label above the heading, e.g. the tour year. |
| heading | ReactNode | none | Section heading. |
| description | string | undefined | Supporting copy under the heading. |
| stops | TourStop[] | none | Every tour stop, rendered both as the main list of rows and, by city, in the sticky Locations card. |
| locationsHeading | string | "Locations" | Heading of the sticky summary card. |
| className | string | none | Extra classes for the outer section element. |
Types
interface TourStop { city: string; venue: string; date: string; seatsLeft?: number; soldOut?: boolean; }
Behavior notes
- This is a static, presentational block: stops render exactly the props given, there is no live seat count and no real reservation flow behind the Reserve button.
- A stop's soldOut flag both mutes its row (reduced opacity, muted-foreground city text) and swaps the seats-left count + Reserve button for a plain "Sold out" badge with no link — a sold-out stop has no clickable element.
- The sticky Locations card is a plain lg:sticky positioned summary, not a real map or interactive location picker.
More Event Blocks
View all →conference-hero-with-image
Conference Hero with Image
Split hero with a featured photo, date badge, location, attendee stat, and dual CTAs.
minimal-event-hero
Minimal Event Hero
Centered, image-free hero with an oversized heading, date/location line, and two CTAs.
event-hero-with-ticket-pricing
Event Hero with Ticket Pricing
Centered hero with an early-bird price, a strikethrough original price, and a deadline note.
event-hero-with-social-proof
Event Hero with Social Proof
Hero with a heading, a 3-stat strip (attendees/speakers/countries), and a trusted-by company row.
personal-schedule-builder
Personal Schedule Builder
Interactive session picker that lets attendees build their own conference agenda.
team-discount-calculator
Team Discount Calculator
Live quantity stepper that applies tiered group discounts to a seat total.