{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "manifest-types",
  "title": "Manifest Types",
  "author": "MNFST, Inc",
  "description": "Shared type definitions for Manifest UI components.",
  "files": [
    {
      "path": "registry/shared-types.ts",
      "content": "// Shared type definitions for Manifest UI components\n// This file is installed as components/ui/types.ts via the manifest-types registry item.\n// All category-specific types are unified here to prevent collisions when\n// installing multiple components via shadcn CLI.\n\nimport type { ReactNode } from 'react'\n\n// ---------------------------------------------------------------------------\n// Blogging\n// ---------------------------------------------------------------------------\n\n/**\n * Represents a blog post with metadata.\n * @interface Post\n * @property {string} [title] - Post title\n * @property {string} [excerpt] - Brief description or summary\n * @property {string} [coverImage] - URL of the cover image\n * @property {object} [author] - Author information\n * @property {string} [author.name] - Author's display name\n * @property {string} [author.avatar] - Author's avatar URL\n * @property {string} [publishedAt] - ISO date string of publication\n * @property {string} [readTime] - Estimated read time (e.g., \"5 min read\")\n * @property {string[]} [tags] - Array of tag labels\n * @property {string} [category] - Category name\n * @property {string} [url] - External URL for the post\n */\nexport interface Post {\n  title?: string\n  excerpt?: string\n  coverImage?: string\n  author?: {\n    name?: string\n    avatar?: string\n  }\n  publishedAt?: string\n  readTime?: string\n  tags?: string[]\n  category?: string\n  url?: string\n}\n\n// ---------------------------------------------------------------------------\n// List\n// ---------------------------------------------------------------------------\n\n/**\n * Represents a product with pricing and display information.\n * @interface Product\n */\nexport interface Product {\n  name?: string\n  description?: string\n  price?: number\n  originalPrice?: number\n  image?: string\n  rating?: number\n  badge?: string\n  inStock?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Selection\n// ---------------------------------------------------------------------------\n\n/**\n * Represents a selectable option with label and description.\n * @interface Option\n */\nexport interface Option {\n  label?: string\n  description?: string\n  icon?: ReactNode\n  disabled?: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Messaging\n// ---------------------------------------------------------------------------\n\n/**\n * Represents a chat message with content and metadata.\n * @interface ChatMessage\n */\nexport interface ChatMessage {\n  type?: 'text' | 'image'\n  content?: string\n  image?: string\n  author?: string\n  avatarUrl?: string\n  avatarFallback?: string\n  time?: string\n  isOwn?: boolean\n  status?: 'sent' | 'delivered' | 'read'\n}\n\n// ---------------------------------------------------------------------------\n// Events\n// ---------------------------------------------------------------------------\n\n/**\n * Status indicators for events.\n * @typedef {\"going-fast\" | \"popular\" | \"just-added\" | \"sales-end-soon\" | \"few-tickets-left\" | \"canceled\" | \"ended\" | \"postponed\"} EventSignal\n */\nexport type EventSignal =\n  | 'going-fast'\n  | 'popular'\n  | 'just-added'\n  | 'sales-end-soon'\n  | 'few-tickets-left'\n  | 'canceled'\n  | 'ended'\n  | 'postponed'\n\n/**\n * Descriptive tags for event atmosphere and vibe.\n * @typedef VibeTag\n */\nexport type VibeTag =\n  | 'All night'\n  | 'Beginner-friendly'\n  | 'Casual'\n  | 'Chill'\n  | 'Classic'\n  | 'Cocktails'\n  | 'Creative'\n  | 'Date night'\n  | 'Discover'\n  | 'Dressy'\n  | 'Educational'\n  | 'Exciting'\n  | 'Exclusive'\n  | 'Family-friendly'\n  | 'Fun'\n  | 'Hands-on'\n  | 'High energy'\n  | 'Immersive'\n  | 'Interactive'\n  | 'Intimate'\n  | 'Kids'\n  | 'Late night'\n  | 'Legendary'\n  | 'Outdoor'\n  | 'Premium'\n  | 'Relaxing'\n  | 'Scenic'\n  | 'Social'\n  | 'Sophisticated'\n  | 'Tasting'\n  | 'Underground'\n  | 'Upscale'\n  | 'Views'\n  | 'Wellness'\n\n/**\n * Represents a basic event with essential information.\n * @interface Event\n * @property {string} title - Event title\n * @property {string} category - Event category (Music, Comedy, etc.)\n * @property {string} venue - Venue name\n * @property {string | null} [neighborhood] - Neighborhood/district\n * @property {string} city - City name\n * @property {string} dateTime - Display format date/time\n * @property {string} priceRange - Price display (e.g., \"$45 - $150\", \"Free\")\n * @property {string} [image] - Cover image URL\n * @property {{ lat: number; lng: number }} [coordinates] - Map coordinates\n * @property {VibeTag[]} [vibeTags] - Atmosphere/vibe tags\n * @property {string} [vibeDescription] - Vibe description text\n * @property {string} [aiSummary] - AI-generated summary\n * @property {string[]} [lineup] - Performer lineup\n * @property {string[]} [ticketTiers] - Available ticket tiers\n * @property {EventSignal} [eventSignal] - Status signal\n * @property {number} [organizerRating] - Organizer rating\n * @property {number} [reviewCount] - Number of reviews\n * @property {number} [venueRating] - Venue rating\n * @property {string | null} [ageRestriction] - Age restriction\n * @property {boolean} [hasMultipleDates] - Whether event has multiple dates\n * @property {string} [discount] - Discount text\n */\nexport interface Event {\n  title?: string\n  category?: string // \"Music\", \"Comedy\", \"Classes\", \"Nightlife\", \"Sports\", \"Food & Drink\", \"Arts\", \"Film\", \"Networking\", \"Festivals\", \"Wellness\", \"Social\", \"Games\", \"Gallery\"\n  venue?: string\n  neighborhood?: string | null\n  city?: string\n  dateTime: string // Display format: \"Tonight 9:00 PM - 3:00 AM\", \"Tomorrow 6:00 AM\", \"In 2 days 8:00 PM\"\n  priceRange?: string // \"$45 - $150\", \"Free\", \"Free - $5\"\n  image?: string // Cover image URL for the event\n  coordinates?: { lat: number; lng: number } // For map display in fullscreen mode\n  vibeTags?: VibeTag[]\n  vibeDescription?: string\n  aiSummary?: string // AI-generated match explanation\n  lineup?: string[]\n  ticketTiers?: string[] // [\"General Admission $45\", \"VIP Access $120\"]\n  eventSignal?: EventSignal\n  organizerRating?: number\n  reviewCount?: number\n  venueRating?: number\n  ageRestriction?: string | null // \"21+\", \"18+\", \"Ages 5-12\", null\n  hasMultipleDates?: boolean\n  discount?: string // \"TONIGHT ONLY - 40% OFF\", \"FREE - First 50 Only\"\n}\n\n/**\n * Represents an event organizer.\n * @interface Organizer\n * @property {string} [name] - Organizer name\n * @property {string} [image] - Profile image URL\n * @property {number} rating - Average rating\n * @property {number} reviewCount - Number of reviews\n * @property {boolean} [verified] - Whether organizer is verified\n * @property {number} [followers] - Follower count\n * @property {number} [eventsCount] - Total events hosted\n * @property {number} [hostingYears] - Years hosting events\n * @property {\"very responsive\" | \"responsive\" | \"slow\"} [responseRate] - Response speed\n * @property {\"great\" | \"good\" | \"new\"} [trackRecord] - Track record rating\n */\nexport interface Organizer {\n  name?: string\n  image?: string\n  rating?: number\n  reviewCount?: number\n  verified?: boolean\n  followers?: number\n  eventsCount?: number\n  hostingYears?: number\n  responseRate?: 'very responsive' | 'responsive' | 'slow'\n  trackRecord?: 'great' | 'good' | 'new'\n}\n\n/**\n * Represents a ticket selection with tier and quantity.\n * @interface TicketSelection\n * @property {number} tierIndex - Selected tier index\n * @property {number} quantity - Number of tickets\n */\nexport interface TicketSelection {\n  tierIndex: number\n  quantity: number\n}\n\n/**\n * Represents a completed event booking.\n * @interface EventBooking\n * @property {Event} event - The booked event\n * @property {{ tierName: string; quantity: number; price: number }[]} tickets - Purchased tickets\n * @property {number} total - Total amount paid\n * @property {number} fees - Service fees\n * @property {string} confirmationCode - Confirmation code\n * @property {string} [qrCode] - QR code image URL\n * @property {string} purchaseDate - Purchase date string\n */\nexport interface EventBooking {\n  event: Event\n  tickets?: { tierName: string; quantity: number; price: number }[]\n  total?: number\n  fees?: number\n  confirmationCode?: string\n  qrCode?: string\n  purchaseDate?: string\n}\n\n/**\n * Extended Event with full details for event-detail component.\n * Includes additional fields for comprehensive event display.\n * @interface EventDetails\n * @extends {Omit<Event, 'dateTime'>}\n */\nexport interface EventDetails extends Omit<Event, 'dateTime'> {\n  // Override dateTime with ISO format dates for dynamic formatting\n  startDateTime?: string // ISO format: \"2025-01-11T21:00:00Z\"\n  endDateTime?: string // ISO format: \"2025-01-12T03:00:00Z\"\n  locationType?: 'physical' | 'online' | 'hybrid' // Event location type\n  images?: string[] // Multiple images for carousel\n  description?: string\n  organizer?: Organizer\n  address?: string // Street address for the venue\n  venue_details?: {\n    name: string\n    address: string\n    city: string\n    coordinates?: { lat: number; lng: number }\n  }\n  coordinates?: { lat: number; lng: number } // For map display\n  attendeesCount?: number // \"537 going\"\n  friendsGoing?: { name: string; avatar?: string }[]\n  highlights?: string[] // \"2 hours\", \"In person\"\n  tiers?: {\n    name: string\n    price: number\n    available: number\n    benefits?: string[]\n  }[]\n  goodToKnow?: {\n    accessibility?: string[]\n    dressCode?: string\n    parking?: string\n    duration?: string\n    doorsOpen?: string\n    showtime?: string\n    ageRestriction?: string\n  }\n  amenities?: string[]\n  policies?: {\n    refund?: string\n    entry?: string\n    idRequired?: boolean\n    securityOnSite?: boolean\n    items?: string[]\n  }\n  faq?: { question: string; answer: string }[]\n  relatedEvents?: Event[]\n  relatedTags?: string[] // \"Los Angeles Events\", \"California Nightlife\"\n}\n\n// ---------------------------------------------------------------------------\n// Payment\n// ---------------------------------------------------------------------------\n\n/**\n * Represents an item in an order.\n * @interface OrderItem\n */\nexport interface OrderItem {\n  id: string\n  name?: string\n  quantity?: number\n  price?: number\n  image?: string\n}\n",
      "type": "registry:lib",
      "target": "components/ui/types.ts"
    }
  ],
  "categories": [
    "lib"
  ],
  "type": "registry:lib"
}