{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "event-confirmation",
  "version": "2.1.0",
  "category": "events",
  "meta": {
    "preview": "https://ui.manifest.build/previews/event-confirmation.png",
    "version": "2.1.0",
    "changelog": {
      "1.0.0": "Initial release with success message, event details, organizer follow, and social sharing",
      "1.0.2": "Added comprehensive JSDoc documentation",
      "1.0.3": "Updated Props interface with decorative header and sub-parameter JSDoc documentation",
      "2.0.0": "BREAKING: Removed onChangeEmail action and Change email link",
      "2.0.1": "Removed default content data - component only renders explicitly provided data",
      "2.1.0": "Added demo data defaults - component renders demo content when no data prop is provided"
    }
  },
  "changelog": {
    "1.0.0": "Initial release with success message, event details, organizer follow, and social sharing",
    "1.0.2": "Added comprehensive JSDoc documentation",
    "1.0.3": "Updated Props interface with decorative header and sub-parameter JSDoc documentation",
    "2.0.0": "BREAKING: Removed onChangeEmail action and Change email link",
    "2.0.1": "Removed default content data - component only renders explicitly provided data",
    "2.1.0": "Added demo data defaults - component renders demo content when no data prop is provided"
  },
  "title": "Event Confirmation",
  "author": "MNFST, Inc",
  "description": "Order confirmation with event details, ticket delivery info, organizer follow, and social sharing.",
  "dependencies": [
    "lucide-react"
  ],
  "registryDependencies": [
    "button"
  ],
  "files": [
    {
      "path": "registry/events/event-confirmation.tsx",
      "content": "'use client'\n\nimport { Button } from '@/components/ui/button'\nimport {\n  CheckCircle,\n  Facebook,\n  Mail,\n  MessageCircle,\n  Twitter\n} from 'lucide-react'\nimport { demoEventConfirmation } from './demo/events'\n\n/**\n * ═══════════════════════════════════════════════════════════════════════════\n * EventConfirmationProps\n * ═══════════════════════════════════════════════════════════════════════════\n *\n * Props for the EventConfirmation component. Displays booking success message,\n * ticket delivery info, organizer follow card, and social sharing options.\n */\nexport interface EventConfirmationProps {\n  data?: {\n    /** Order/confirmation number. */\n    orderNumber?: string\n    /** Event title. */\n    eventTitle?: string\n    /** Number of tickets purchased. */\n    ticketCount?: number\n    /** Email address where tickets were sent. */\n    recipientEmail?: string\n    /** Event date and time string. */\n    eventDate?: string\n    /** Event location. */\n    eventLocation?: string\n    /** Event organizer information. */\n    organizer?: {\n      name: string\n      image?: string\n    }\n  }\n  actions?: {\n    /** Called when \"Take me to my tickets\" button is clicked. */\n    onViewTickets?: () => void\n    /** Called when \"Follow\" organizer button is clicked. */\n    onFollowOrganizer?: () => void\n    /** Called when a social share button is clicked. */\n    onShare?: (platform: 'facebook' | 'twitter' | 'messenger' | 'email') => void\n  }\n}\n\n/**\n * An event booking confirmation component with order details and sharing.\n * Displays success message, ticket info, and social share options.\n *\n * Features:\n * - Success header with order number\n * - Event details (title, date, location)\n * - Ticket delivery info with change option\n * - Organizer follow card\n * - Social sharing buttons (Facebook, Messenger, Twitter, Email)\n * - View tickets button\n *\n * @component\n * @example\n * ```tsx\n * <EventConfirmation\n *   data={{\n *     orderNumber: \"#14040333743\",\n *     eventTitle: \"Concert Night\",\n *     ticketCount: 2,\n *     recipientEmail: \"user@example.com\",\n *     eventDate: \"Friday, Feb 6 · 8pm PST\",\n *     eventLocation: \"Los Angeles, CA\",\n *     organizer: { name: \"Event Organizer\", image: \"/avatar.jpg\" }\n *   }}\n *   actions={{\n *     onViewTickets: () => console.log(\"View tickets\"),\n *     onFollowOrganizer: () => console.log(\"Follow\"),\n *     onShare: (platform) => console.log(\"Share on:\", platform)\n *   }}\n * />\n * ```\n */\nexport function EventConfirmation({ data, actions }: EventConfirmationProps) {\n  const resolved: NonNullable<EventConfirmationProps['data']> = data ?? demoEventConfirmation\n  const orderNumber = resolved?.orderNumber\n  const eventTitle = resolved?.eventTitle\n  const ticketCount = resolved?.ticketCount\n  const recipientEmail = resolved?.recipientEmail\n  const eventDate = resolved?.eventDate\n  const eventLocation = resolved?.eventLocation\n  const organizer = resolved?.organizer\n  const { onViewTickets, onFollowOrganizer, onShare } =\n    actions ?? {}\n\n  return (\n    <div className=\"rounded-xl border bg-card p-6 \">\n      {/* Success header */}\n      <div className=\"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4 mb-8\">\n        <div className=\"flex items-center gap-3\">\n          <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-green-100\">\n            <CheckCircle className=\"h-6 w-6 text-green-600\" />\n          </div>\n          <div>\n            <h1 className=\"text-xl font-semibold\">Thanks for your order!</h1>\n            {orderNumber && <p className=\"text-sm text-muted-foreground\">{orderNumber}</p>}\n          </div>\n        </div>\n        <Button onClick={onViewTickets} size=\"lg\">\n          Take me to my tickets\n        </Button>\n      </div>\n\n      {/* Event details */}\n      <div className=\"mb-8\">\n        <p className=\"text-xs font-semibold tracking-wider text-muted-foreground uppercase mb-2\">\n          You're going to\n        </p>\n        {eventTitle && <h2 className=\"text-2xl font-bold leading-tight mb-6\">{eventTitle}</h2>}\n\n        <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-6\">\n          {/* Ticket sent to */}\n          {recipientEmail && (\n            <div>\n              <p className=\"text-xs font-semibold tracking-wider text-muted-foreground uppercase mb-1\">\n                {ticketCount ?? 1} Ticket sent to\n              </p>\n              <p className=\"text-sm\">{recipientEmail}</p>\n            </div>\n          )}\n\n          {/* Date */}\n          {eventDate && (\n            <div>\n              <p className=\"text-xs font-semibold tracking-wider text-muted-foreground uppercase mb-1\">\n                Date\n              </p>\n              <p className=\"text-sm\">{eventDate}</p>\n            </div>\n          )}\n\n          {/* Location */}\n          {eventLocation && (\n            <div>\n              <p className=\"text-xs font-semibold tracking-wider text-muted-foreground uppercase mb-1\">\n                Location\n              </p>\n              <p className=\"text-sm\">{eventLocation}</p>\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Organizer follow section */}\n      {organizer && (\n        <div className=\"rounded-lg border bg-muted/30 p-4 mb-8\">\n          <div className=\"flex items-center justify-between\">\n            <div className=\"flex items-center gap-3\">\n              {organizer.image ? (\n                <img\n                  src={organizer.image}\n                  alt={organizer.name}\n                  className=\"h-12 w-12 rounded-full object-cover\"\n                />\n              ) : (\n                <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-orange-100\">\n                  <span className=\"text-lg font-semibold text-orange-600\">\n                    {organizer.name.charAt(0)}\n                  </span>\n                </div>\n              )}\n              <div>\n                <p className=\"text-sm text-muted-foreground\">\n                  Don't miss out on events from\n                </p>\n                <p className=\"font-semibold\">{organizer.name}</p>\n                <p className=\"text-xs text-muted-foreground\">\n                  Created this event\n                </p>\n              </div>\n            </div>\n            <Button variant=\"outline\" onClick={onFollowOrganizer}>\n              Follow\n            </Button>\n          </div>\n        </div>\n      )}\n\n      {/* Social sharing */}\n      <div className=\"flex items-center gap-4\">\n        <button\n          onClick={() => onShare?.('facebook')}\n          className=\"flex h-10 w-10 items-center justify-center rounded-full border hover:bg-muted transition-colors\"\n          aria-label=\"Share on Facebook\"\n        >\n          <Facebook className=\"h-5 w-5\" />\n        </button>\n        <button\n          onClick={() => onShare?.('messenger')}\n          className=\"flex h-10 w-10 items-center justify-center rounded-full border hover:bg-muted transition-colors\"\n          aria-label=\"Share on Messenger\"\n        >\n          <MessageCircle className=\"h-5 w-5\" />\n        </button>\n        <button\n          onClick={() => onShare?.('twitter')}\n          className=\"flex h-10 w-10 items-center justify-center rounded-full border hover:bg-muted transition-colors\"\n          aria-label=\"Share on Twitter\"\n        >\n          <Twitter className=\"h-5 w-5\" />\n        </button>\n        <button\n          onClick={() => onShare?.('email')}\n          className=\"flex h-10 w-10 items-center justify-center rounded-full border hover:bg-muted transition-colors\"\n          aria-label=\"Share via Email\"\n        >\n          <Mail className=\"h-5 w-5\" />\n        </button>\n      </div>\n    </div>\n  )\n}\n",
      "type": "registry:block",
      "target": "components/ui/event-confirmation.tsx"
    },
    {
      "path": "registry/events/demo/events.ts",
      "content": "// Demo data for Events category components\n// This file contains sample data used for component previews and documentation\n\nimport type { Event, EventDetails } from '../types'\n\n// Helper to generate dates relative to today\nfunction getDateAt(daysFromNow: number, hour: number): string {\n  const date = new Date()\n  date.setDate(date.getDate() + daysFromNow)\n  date.setHours(hour, 0, 0, 0)\n  return date.toISOString()\n}\n\n// Single event for EventCard default\nexport const demoEvent: Event = {\n  title: 'NEON Vol. 9',\n  category: 'Music',\n  venue: 'Echoplex',\n  neighborhood: 'Echo Park',\n  city: 'Los Angeles',\n  dateTime: 'Tonight 9:00 PM - 3:00 AM',\n  priceRange: '$45 - $150',\n  image: 'https://images.unsplash.com/photo-1470225620780-dba8ba36b745?w=800',\n  vibeTags: ['High energy', 'Late night', 'Dressy'],\n  vibeDescription:\n    'Immersive electronic experience with world-class DJs and stunning visuals.',\n  aiSummary:\n    \"Immersive electronic night with world-class DJs and stunning visuals at LA's top-rated venue.\",\n  lineup: ['DJ Shadow', 'Bonobo', 'Four Tet', 'Caribou'],\n  ticketTiers: [\n    'General Admission $45',\n    'VIP Access $120',\n    'Backstage Pass $150'\n  ],\n  eventSignal: 'going-fast',\n  organizerRating: 4.8,\n  reviewCount: 12453,\n  venueRating: 4.8,\n  ageRestriction: '21+',\n  hasMultipleDates: true\n}\n\n// 15 events for EventList default\nexport const demoEvents: Event[] = [\n  {\n    title: 'NEON Vol. 9',\n    category: 'Music',\n    venue: 'Echoplex',\n    neighborhood: 'Echo Park',\n    city: 'Los Angeles',\n    dateTime: 'Tonight 9:00 PM - 3:00 AM',\n    priceRange: '$45 - $150',\n    image: 'https://images.unsplash.com/photo-1470225620780-dba8ba36b745?w=800',\n    coordinates: { lat: 34.0781, lng: -118.2606 },\n    vibeTags: ['High energy', 'Late night'],\n    eventSignal: 'going-fast',\n    organizerRating: 4.8,\n    reviewCount: 12453,\n    ageRestriction: '21+'\n  },\n  {\n    title: 'The Midnight Show',\n    category: 'Comedy',\n    venue: 'The Comedy Underground',\n    neighborhood: 'Santa Monica',\n    city: 'Los Angeles',\n    dateTime: 'Tonight 10:00 PM - 12:00 AM',\n    priceRange: '$15 - $35',\n    image: 'https://images.unsplash.com/photo-1585699324551-f6c309eedeca?w=800',\n    coordinates: { lat: 34.0195, lng: -118.4912 },\n    vibeTags: ['Social', 'Late night'],\n    eventSignal: 'popular',\n    organizerRating: 4.7,\n    reviewCount: 3241,\n    discount: 'TONIGHT ONLY - 40% OFF'\n  },\n  {\n    title: 'Salsa Sundays @ Echo Park',\n    category: 'Classes',\n    venue: 'Echo Park Lake',\n    neighborhood: 'Echo Park',\n    city: 'Los Angeles',\n    dateTime: 'Saturday 6:00 PM - 10:00 PM',\n    priceRange: 'Free',\n    image: 'https://images.unsplash.com/photo-1504609813442-a8924e83f76e?w=800',\n    coordinates: { lat: 34.0731, lng: -118.2608 },\n    vibeTags: ['High energy', 'Social'],\n    eventSignal: 'just-added',\n    organizerRating: 4.9,\n    reviewCount: 8764\n  },\n  {\n    title: 'Dawn Flow: Griffith Park',\n    category: 'Classes',\n    venue: 'Griffith Park',\n    neighborhood: 'Los Feliz',\n    city: 'Los Angeles',\n    dateTime: 'Tomorrow 6:00 AM - 8:00 AM',\n    priceRange: 'Free',\n    image: 'https://images.unsplash.com/photo-1545205597-3d9d02c29597?w=800',\n    coordinates: { lat: 34.1365, lng: -118.2943 },\n    vibeTags: ['Chill', 'Wellness', 'Outdoor'],\n    organizerRating: 4.9,\n    reviewCount: 8764,\n    discount: 'FREE - First 50 Only'\n  },\n  {\n    title: 'Lakers vs Celtics',\n    category: 'Sports',\n    venue: 'Crypto.com Arena',\n    neighborhood: 'Downtown',\n    city: 'Los Angeles',\n    dateTime: 'Friday 7:30 PM - 10:30 PM',\n    priceRange: '$125 - $850',\n    image: 'https://images.unsplash.com/photo-1546519638-68e109498ffc?w=800',\n    coordinates: { lat: 34.0430, lng: -118.2673 },\n    vibeTags: ['High energy', 'Social', 'Premium'],\n    eventSignal: 'sales-end-soon',\n    organizerRating: 4.5,\n    reviewCount: 2341\n  },\n  {\n    title: 'Smorgasburg LA: Sunday Market',\n    category: 'Food & Drink',\n    venue: 'ROW DTLA',\n    neighborhood: 'Arts District',\n    city: 'Los Angeles',\n    dateTime: 'Sunday 10:00 AM - 4:00 PM',\n    priceRange: 'Free',\n    image: 'https://images.unsplash.com/photo-1555939594-58d7cb561ad1?w=800',\n    coordinates: { lat: 34.0341, lng: -118.2324 },\n    vibeTags: ['Family-friendly', 'Outdoor', 'Social'],\n    organizerRating: 4.8,\n    reviewCount: 5632\n  },\n  {\n    title: 'LACMA After Hours',\n    category: 'Arts',\n    venue: 'LACMA',\n    neighborhood: 'Miracle Mile',\n    city: 'Los Angeles',\n    dateTime: 'Friday 7:00 PM - 11:00 PM',\n    priceRange: '$35 - $75',\n    image: 'https://images.unsplash.com/photo-1531243269054-5ebf6f34081e?w=800',\n    coordinates: { lat: 34.0639, lng: -118.3592 },\n    vibeTags: ['Chill', 'Date night', 'Sophisticated'],\n    organizerRating: 4.7,\n    reviewCount: 1234,\n    ageRestriction: '21+',\n    discount: 'MEMBER PRICE'\n  },\n  {\n    title: 'Blue Note Under Stars',\n    category: 'Music',\n    venue: 'Hollywood Bowl',\n    neighborhood: 'Hollywood Hills',\n    city: 'Los Angeles',\n    dateTime: 'Saturday 8:00 PM - 11:00 PM',\n    priceRange: '$45 - $200',\n    image: 'https://images.unsplash.com/photo-1514320291840-2e0a9bf2a9ae?w=800',\n    coordinates: { lat: 34.1122, lng: -118.3391 },\n    vibeTags: ['Chill', 'Date night', 'Outdoor'],\n    lineup: ['Kamasi Washington', 'Thundercat', 'Terrace Martin'],\n    organizerRating: 4.8,\n    reviewCount: 12453\n  },\n  {\n    title: 'Meraki: Seth Troxler',\n    category: 'Nightlife',\n    venue: 'Sound Nightclub',\n    neighborhood: 'Hollywood',\n    city: 'Los Angeles',\n    dateTime: 'Saturday 10:00 PM - 4:00 AM',\n    priceRange: '$35 - $65',\n    image: 'https://images.unsplash.com/photo-1571266028243-e4733b0f0bb0?w=800',\n    coordinates: { lat: 34.0928, lng: -118.3287 },\n    vibeTags: ['High energy', 'Late night', 'Underground'],\n    lineup: ['Amelie Lens', 'I Hate Models', 'FJAAK'],\n    organizerRating: 4.6,\n    reviewCount: 1876,\n    ageRestriction: '21+'\n  },\n  {\n    title: 'Whitney Cummings + Friends',\n    category: 'Comedy',\n    venue: 'The Laugh Factory',\n    neighborhood: 'Hollywood',\n    city: 'Los Angeles',\n    dateTime: 'In 2 days 8:00 PM - 11:00 PM',\n    priceRange: '$25 - $55',\n    image: 'https://images.unsplash.com/photo-1527224538127-2104bb71c51b?w=800',\n    coordinates: { lat: 34.0901, lng: -118.3615 },\n    vibeTags: ['Chill', 'Social', 'Date night'],\n    organizerRating: 4.7,\n    reviewCount: 3241,\n    ageRestriction: '18+'\n  },\n  {\n    title: 'Venice Beach Drum Circle',\n    category: 'Music',\n    venue: 'Venice Beach Boardwalk',\n    neighborhood: 'Venice',\n    city: 'Los Angeles',\n    dateTime: 'Sunday 4:00 PM - 8:00 PM',\n    priceRange: 'Free',\n    image: 'https://images.unsplash.com/photo-1506157786151-b8491531f063?w=800',\n    coordinates: { lat: 33.9850, lng: -118.4695 },\n    vibeTags: ['Outdoor', 'Social', 'Chill'],\n    eventSignal: 'popular',\n    organizerRating: 4.6,\n    reviewCount: 2145\n  },\n  {\n    title: 'Rooftop Cinema: Blade Runner',\n    category: 'Film',\n    venue: 'Rooftop Cinema Club',\n    neighborhood: 'DTLA',\n    city: 'Los Angeles',\n    dateTime: 'Friday 8:30 PM - 11:00 PM',\n    priceRange: '$25 - $45',\n    image: 'https://images.unsplash.com/photo-1489599849927-2ee91cede3ba?w=800',\n    coordinates: { lat: 34.0407, lng: -118.2468 },\n    vibeTags: ['Date night', 'Views', 'Chill'],\n    organizerRating: 4.8,\n    reviewCount: 892\n  },\n  {\n    title: 'Dodgers vs Giants',\n    category: 'Sports',\n    venue: 'Dodger Stadium',\n    neighborhood: 'Elysian Park',\n    city: 'Los Angeles',\n    dateTime: 'Saturday 1:10 PM - 4:30 PM',\n    priceRange: '$35 - $350',\n    image: 'https://images.unsplash.com/photo-1566577739112-5180d4bf9390?w=800',\n    coordinates: { lat: 34.0739, lng: -118.2400 },\n    vibeTags: ['Family-friendly', 'Social', 'High energy'],\n    eventSignal: 'few-tickets-left',\n    organizerRating: 4.7,\n    reviewCount: 15678\n  },\n  {\n    title: 'Natural Wine Fair',\n    category: 'Food & Drink',\n    venue: 'Grand Central Market',\n    neighborhood: 'Downtown',\n    city: 'Los Angeles',\n    dateTime: 'Sunday 12:00 PM - 6:00 PM',\n    priceRange: '$45 - $85',\n    image: 'https://images.unsplash.com/photo-1510812431401-41d2bd2722f3?w=800',\n    coordinates: { lat: 34.0508, lng: -118.2490 },\n    vibeTags: ['Tasting', 'Social', 'Sophisticated'],\n    eventSignal: 'just-added',\n    organizerRating: 4.5,\n    reviewCount: 567,\n    ageRestriction: '21+'\n  },\n  {\n    title: 'Meditation in the Gardens',\n    category: 'Wellness',\n    venue: 'The Getty Center',\n    neighborhood: 'Brentwood',\n    city: 'Los Angeles',\n    dateTime: 'Sunday 7:00 AM - 9:00 AM',\n    priceRange: 'Free',\n    image: 'https://images.unsplash.com/photo-1506126613408-eca07ce68773?w=800',\n    coordinates: { lat: 34.0780, lng: -118.4741 },\n    vibeTags: ['Wellness', 'Outdoor', 'Chill'],\n    organizerRating: 4.9,\n    reviewCount: 1234\n  }\n]\n\n// Detailed event for EventDetail default\nexport const demoEventDetails: EventDetails = {\n  title: 'Sunglasses at Night: Underground Techno',\n  category: 'Nightlife',\n  venue: 'The White Rabbit',\n  neighborhood: 'The Woodlands',\n  city: 'Houston, TX',\n  startDateTime: getDateAt(2, 22),\n  endDateTime: getDateAt(3, 4),\n  priceRange: '$15 - $30',\n  images: [\n    'https://images.unsplash.com/photo-1470225620780-dba8ba36b745?w=800',\n    'https://images.unsplash.com/photo-1514525253161-7a46d19cd819?w=800',\n    'https://images.unsplash.com/photo-1533174072545-7a4b6ad7a6c3?w=800'\n  ],\n  vibeTags: ['High energy', 'Late night', 'Underground'],\n  eventSignal: 'going-fast',\n  aiSummary: 'Raw, unfiltered techno in an authentic warehouse setting.',\n  description:\n    'Experience the raw energy of underground techno. Industrial beats, immersive visuals, and a crowd that lives for the music.',\n  lineup: ['Amelie Lens', 'I Hate Models', 'FJAAK'],\n  attendeesCount: 537,\n  friendsGoing: [\n    { name: 'Alex', avatar: 'https://i.pravatar.cc/40?u=alex' },\n    { name: 'Sam', avatar: 'https://i.pravatar.cc/40?u=sam' }\n  ],\n  organizer: {\n    name: 'Midnight Lovers',\n    image: 'https://i.pravatar.cc/80?u=midnight',\n    rating: 4.5,\n    reviewCount: 1067,\n    verified: true,\n    followers: 1200,\n    eventsCount: 154,\n    hostingYears: 8,\n    trackRecord: 'great',\n    responseRate: 'very responsive'\n  },\n  venue_details: {\n    name: 'The White Rabbit',\n    address: '8827 Nasher Ave',\n    city: 'Houston TX',\n    coordinates: { lat: 29.7604, lng: -95.3698 }\n  },\n  tiers: [\n    { name: 'General Admission', price: 15, available: 50 },\n    {\n      name: 'VIP Access',\n      price: 30,\n      available: 20,\n      benefits: ['Skip the line', 'Exclusive lounge']\n    }\n  ],\n  goodToKnow: {\n    duration: '2 hours',\n    doorsOpen: '7:00 PM',\n    showtime: '7:30 PM',\n    ageRestriction: '21+',\n    dressCode: 'Casual',\n    parking: 'Limited, leave early to avoid long queues'\n  },\n  policies: {\n    refund: 'No refunds. Tickets are transferable.',\n    entry: 'Open 2 hours before event',\n    idRequired: true,\n    securityOnSite: true\n  },\n  faq: [\n    {\n      question: 'What is the refund policy?',\n      answer: 'No refunds. Tickets are transferable.'\n    },\n    {\n      question: 'When do doors open?',\n      answer: 'Open 2 hours before event.'\n    },\n    {\n      question: 'Is there parking?',\n      answer: 'Limited, leave early to avoid long queues.'\n    }\n  ],\n  relatedTags: ['Houston Events', 'Texas Nightlife', 'Techno Parties']\n}\n\n// Ticket tiers for TicketTierSelect\nexport const demoTicketTiers = [\n  {\n    id: '1',\n    name: 'General Admission',\n    price: 45,\n    fee: 5,\n    available: 100,\n    maxPerOrder: 10,\n  },\n  {\n    id: '2',\n    name: 'VIP',\n    price: 150,\n    fee: 15,\n    available: 20,\n    maxPerOrder: 4,\n    description: 'Includes backstage access',\n  },\n]\n\n// Event confirmation data\nexport const demoEventConfirmation = {\n  orderNumber: 'EVT-12345',\n  eventTitle: 'Summer Music Festival',\n  ticketCount: 2,\n  recipientEmail: 'customer@example.com',\n  eventDate: 'Jan 20, 2024',\n  eventLocation: 'Central Park, New York',\n  organizer: {\n    name: 'Live Nation',\n  },\n}\n",
      "type": "registry:lib",
      "target": "components/ui/demo/events.ts"
    }
  ],
  "categories": [
    "events"
  ],
  "type": "registry:block"
}