Activity Booking Sidebar

Step-by-step booking sidebar for a single activity. Progressively reveals product option → date (7-day strip + full calendar) → time slot → ticket mix → Book CTA. Manages its own progressive state and emits a complete selection on book.

core/activity-booking-sidebar

Installation

1 · Add registry to components.json

2 · Install component

Examples

Default

Full sidebar with product options, availability strip, slots, and ticket mix.

Activity booking flow

Side-by-side activity card + booking sidebar. Use this as the visual reference for activity detail pages.

API Reference

PropTypeDescription
activityTitlereq
stringActivity name shown in the sidebar header.
basePrice
MoneyBase price displayed before ticket selection.
productOptions
ProductOption[]Product variants (e.g. Private / Shared).
selectedOptionId
stringSelected product option ID.
onOptionChange
(optionId: string) => voidCalled when product option changes.
availability
AvailabilityDate[]7-day availability data for the date strip.
selectedDate
stringSelected date (ISO).
onDateChange
(date: string) => voidCalled when the date changes.
slots
TimeSlot[]Time slots for the selected date.
slotsLoading
booleanShows slot loading skeleton.
selectedSlotId
stringSelected slot ID.
onSlotChange
(slotId: string) => voidCalled when slot changes.
ticketTypes
TicketType[]Available ticket types.
tickets
TicketSelection[]Current ticket mix.
onTicketsChange
(tickets: TicketSelection[]) => voidCalled when ticket quantities change.
onBook
(selection: { optionId?, date?, slotId?, tickets }) => voidCalled when the user clicks Book.
ctaLabel
stringBook button label.
loading
booleanShows a loading skeleton.