{
  "components": [
    {
      "name": "price",
      "title": "Price",
      "description": "Renders a formatted price in the display currency.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "quantity-selector",
      "title": "QuantitySelector",
      "description": "Controlled increment/decrement quantity input.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "variant-selector",
      "title": "VariantSelector",
      "description": "Select product variants via axis chips or direct list.",
      "type": "component",
      "registryDependencies": [
        "price"
      ]
    },
    {
      "name": "add-on-selector",
      "title": "AddOnSelector",
      "description": "Modifier groups with single-select or multi-select options.",
      "type": "component",
      "registryDependencies": [
        "price"
      ]
    },
    {
      "name": "bundle-selector",
      "title": "BundleSelector",
      "description": "Bundle component picker with variant choices and price summary.",
      "type": "component",
      "registryDependencies": [
        "price"
      ]
    },
    {
      "name": "composite-selector",
      "title": "CompositeSelector",
      "description": "Composite product builder with group constraints and live pricing.",
      "type": "component",
      "registryDependencies": [
        "price"
      ]
    },
    {
      "name": "product-customizer",
      "title": "ProductCustomizer",
      "description": "Full product configuration with variants, add-ons, and add-to-cart.",
      "type": "component",
      "registryDependencies": [
        "price",
        "quantity-selector",
        "variant-selector",
        "add-on-selector",
        "composite-selector",
        "bundle-selector"
      ]
    },
    {
      "name": "product-image-gallery",
      "title": "ProductImageGallery",
      "description": "Main image with thumbnail strip for product images.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "store-video",
      "title": "StoreVideo",
      "description": "Autoplay-muted-loop video for storefront heroes / product demos. Lazy-loaded, mobile-safe (playsInline), poster fallback for browsers without video.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "product-model-3d",
      "title": "ProductModel3D",
      "description": "Interactive 3D product viewer wrapping Google's <model-viewer>. Loads the web component on demand; AR mode lights up on iOS (Quick Look) and Android (Scene Viewer) automatically.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "media-gallery",
      "title": "MediaGallery",
      "description": "Like ProductImageGallery but accepts mixed image/video/3D items in one carousel. Thumbnails show a poster + small overlay icon for video/3D.",
      "type": "component",
      "registryDependencies": [
        "store-video",
        "product-model-3d"
      ]
    },
    {
      "name": "cart-summary",
      "title": "CartSummary",
      "description": "Cart line items with quantity controls and totals.",
      "type": "component",
      "registryDependencies": [
        "price",
        "quantity-selector"
      ]
    },
    {
      "name": "availability-badge",
      "title": "AvailabilityBadge",
      "description": "Displays in-stock / out-of-stock status for tracked products.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "sale-badge",
      "title": "SaleBadge",
      "description": "Sale/discount indicator with percentage and original price.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "rich-text",
      "title": "RichText",
      "description": "Renders sanitized merchant-authored HTML (descriptions) with theme-aware prose styling. Edge-safe XSS sanitization via the pure-JS xss library.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "product-sheet",
      "title": "ProductSheet",
      "description": "Full product detail view with gallery, header, and customizer.",
      "type": "component",
      "registryDependencies": [
        "price",
        "product-image-gallery",
        "product-customizer",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "product-card",
      "title": "ProductCard",
      "description": "Product display card with modal or link mode.",
      "type": "component",
      "registryDependencies": [
        "price",
        "product-sheet",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "product-grid",
      "title": "ProductGrid",
      "description": "Responsive CSS grid that renders ProductCards.",
      "type": "component",
      "registryDependencies": [
        "product-card",
        "cn"
      ]
    },
    {
      "name": "cn",
      "title": "cn",
      "description": "Utility that merges Tailwind CSS classes with clsx + tailwind-merge.",
      "type": "utility",
      "registryDependencies": []
    },
    {
      "name": "strip-html",
      "title": "stripHtmlToText",
      "description": "Projects HTML to a single-line plain-text preview for cards and meta descriptions. Not a security boundary — output is rendered as text only.",
      "type": "utility",
      "registryDependencies": []
    },
    {
      "name": "search-input",
      "title": "SearchInput",
      "description": "Search bar with debounced results dropdown.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "category-filter",
      "title": "CategoryFilter",
      "description": "Selectable category chips for filtering products.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "discount-input",
      "title": "DiscountInput",
      "description": "Discount code input with inline validation.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "category-grid",
      "title": "CategoryGrid",
      "description": "Responsive grid of category cards.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "deal-banner",
      "title": "DealBanner",
      "description": "Displays active deals and promotions.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "order-summary",
      "title": "OrderSummary",
      "description": "Single order detail view with line items and totals.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "order-history",
      "title": "OrderHistory",
      "description": "List of past orders with status and totals.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "store-nav",
      "title": "StoreNav",
      "description": "Top navigation bar with brand, categories, cart badge, and search.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "catalogue-page",
      "title": "CataloguePage",
      "description": "Browse all products with category filtering and search.",
      "type": "component",
      "registryDependencies": [
        "product-grid",
        "category-filter",
        "search-input",
        "cn"
      ]
    },
    {
      "name": "product-page",
      "title": "ProductPage",
      "description": "Smart product page resolver with per-slug and per-type template routing.",
      "type": "component",
      "registryDependencies": [
        "default-product-layout",
        "food-product-layout",
        "wholesale-product-layout",
        "service-product-layout",
        "digital-product-layout",
        "cn"
      ]
    },
    {
      "name": "cart-page",
      "title": "CartPage",
      "description": "Full-page cart with summary, discount input, and checkout.",
      "type": "component",
      "registryDependencies": [
        "cart-summary",
        "discount-input",
        "cn"
      ]
    },
    {
      "name": "checkout-page",
      "title": "CheckoutPage",
      "description": "Multi-step checkout with auth, address, and payment.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "collection-page",
      "title": "CollectionPage",
      "description": "Curated product collection with header and grid.",
      "type": "component",
      "registryDependencies": [
        "product-grid",
        "cn"
      ]
    },
    {
      "name": "order-detail-page",
      "title": "OrderDetailPage",
      "description": "Single order detail view with live status polling.",
      "type": "component",
      "registryDependencies": [
        "order-summary",
        "cn"
      ]
    },
    {
      "name": "order-history-page",
      "title": "OrderHistoryPage",
      "description": "Order list with status filtering and inline detail view.",
      "type": "component",
      "registryDependencies": [
        "order-history",
        "order-summary",
        "cn"
      ]
    },
    {
      "name": "search-page",
      "title": "SearchPage",
      "description": "Dedicated search page with input and results grid.",
      "type": "component",
      "registryDependencies": [
        "product-grid",
        "cn"
      ]
    },
    {
      "name": "deals-page",
      "title": "DealsPage",
      "description": "Promotions landing page with deal banners and on-sale products.",
      "type": "component",
      "registryDependencies": [
        "deal-banner",
        "product-grid",
        "sale-badge",
        "product-card",
        "cn"
      ]
    },
    {
      "name": "slot-picker",
      "title": "SlotPicker",
      "description": "Time slot grid for a single day with morning/afternoon/evening grouping.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "date-slot-picker",
      "title": "DateSlotPicker",
      "description": "Horizontal date strip with slot picker for service scheduling.",
      "type": "component",
      "registryDependencies": [
        "slot-picker",
        "cn"
      ]
    },
    {
      "name": "staff-picker",
      "title": "StaffPicker",
      "description": "Staff member selection list with avatar and bio.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "booking-card",
      "title": "BookingCard",
      "description": "Single booking display with status, time, and action buttons.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "booking-list",
      "title": "BookingList",
      "description": "List of booking cards with optional self-fetching.",
      "type": "component",
      "registryDependencies": [
        "booking-card",
        "cn"
      ]
    },
    {
      "name": "booking-page",
      "title": "BookingPage",
      "description": "Multi-step booking flow: service, staff, resource, date/slot, confirmation.",
      "type": "component",
      "registryDependencies": [
        "date-slot-picker",
        "staff-picker",
        "resource-picker",
        "price",
        "cn"
      ]
    },
    {
      "name": "bookings-page",
      "title": "BookingsPage",
      "description": "Account-area page listing a customer's bookings with filters and detail view.",
      "type": "component",
      "registryDependencies": [
        "booking-list",
        "booking-card",
        "cn"
      ]
    },
    {
      "name": "food-product-card",
      "title": "FoodProductCard",
      "description": "Product card for food items with tags, badges, and quick-add.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "retail-product-card",
      "title": "RetailProductCard",
      "description": "Product card for retail with color swatches, sale badge, wishlist, and sold-out overlay.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "wholesale-product-card",
      "title": "WholesaleProductCard",
      "description": "B2B product card with price range, MOQ badge, and stock count.",
      "type": "component",
      "registryDependencies": [
        "price",
        "price-range",
        "cn"
      ]
    },
    {
      "name": "digital-product-card",
      "title": "DigitalProductCard",
      "description": "Digital product card with type badge, file info, and event details.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "standard-service-card",
      "title": "StandardServiceCard",
      "description": "Service card with hero image, duration, deposit, and availability.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "compact-service-card",
      "title": "CompactServiceCard",
      "description": "Horizontal service card with thumbnail for list views.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "schedule-service-card",
      "title": "ScheduleServiceCard",
      "description": "Service card with next available time slot pills.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "rental-service-card",
      "title": "RentalServiceCard",
      "description": "Rental card with per-day/hour pricing, deposit, and availability count.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "accommodation-card",
      "title": "AccommodationCard",
      "description": "Hotel/accommodation card with per-night pricing, amenities, capacity, and cancellation.",
      "type": "component",
      "registryDependencies": [
        "price",
        "volume-pricing",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "lease-service-card",
      "title": "LeaseServiceCard",
      "description": "Long-term lease card with per-month/year pricing, volume tiers, and billing.",
      "type": "component",
      "registryDependencies": [
        "price",
        "volume-pricing",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "subscription-card",
      "title": "SubscriptionCard",
      "description": "Subscription card with billing plan options, trial badge, and setup fee.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn",
        "strip-html"
      ]
    },
    {
      "name": "volume-pricing",
      "title": "VolumePricing",
      "description": "Collapsible volume pricing tier table.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "price-range",
      "title": "PriceRange",
      "description": "Displays min-max price range for products with variants or tiers.",
      "type": "component",
      "registryDependencies": []
    },
    {
      "name": "default-product-layout",
      "title": "DefaultProductLayout",
      "description": "Two-column product layout for retail/physical products with sale badges, specs, and properties.",
      "type": "component",
      "registryDependencies": [
        "product-image-gallery",
        "product-customizer",
        "price",
        "price-range",
        "availability-badge",
        "sale-badge",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "food-product-layout",
      "title": "FoodProductLayout",
      "description": "Restaurant product layout with allergens, ingredients, pairings, and dietary tags.",
      "type": "component",
      "registryDependencies": [
        "product-image-gallery",
        "product-customizer",
        "price",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "wholesale-product-layout",
      "title": "WholesaleProductLayout",
      "description": "B2B wholesale layout with price range, volume pricing, MOQ, and inventory.",
      "type": "component",
      "registryDependencies": [
        "product-image-gallery",
        "product-customizer",
        "price",
        "price-range",
        "volume-pricing",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "service-product-layout",
      "title": "ServiceProductLayout",
      "description": "Service booking layout with duration, deposit, staff requirements, and cancellation policy.",
      "type": "component",
      "registryDependencies": [
        "product-image-gallery",
        "product-customizer",
        "price",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "digital-product-layout",
      "title": "DigitalProductLayout",
      "description": "Digital product layout with file details, download limits, event info, and access passes.",
      "type": "component",
      "registryDependencies": [
        "product-image-gallery",
        "product-customizer",
        "price",
        "rich-text",
        "cn"
      ]
    },
    {
      "name": "chat-widget",
      "title": "ChatWidget",
      "description": "Embeddable chat widget with AI shopping assistant powered by the support channel.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "cart-drawer",
      "title": "CartDrawer",
      "description": "Slide-in side cart drawer with provider context, free-shipping progress, animated subtotal, and empty state. Auto-opens on add-to-cart.",
      "type": "component",
      "registryDependencies": [
        "cart-summary",
        "price",
        "cn"
      ]
    },
    {
      "name": "billing-plan-selector",
      "title": "BillingPlanSelector",
      "description": "Subscription / billing-plan picker — surfaces eligible plans with pricing and trial periods.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "currency-selector",
      "title": "CurrencySelector",
      "description": "Multi-currency switcher backed by the FX provider — locks display currency and quote ID.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "customer-input-fields",
      "title": "CustomerInputFields",
      "description": "Per-product custom input fields — text, number, date, time, file upload, image upload, single/multi-select.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "delivery-estimate",
      "title": "DeliveryEstimate",
      "description": "Delivery fee + ETA preview at the cart/checkout edge, sourced from /delivery/fee with location.",
      "type": "component",
      "registryDependencies": [
        "price",
        "cn"
      ]
    },
    {
      "name": "location-picker",
      "title": "LocationPicker",
      "description": "Branch / pickup-point selector for businesses with multiple locations.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "resource-picker",
      "title": "ResourcePicker",
      "description": "Staff / room / resource picker for bookable services — used by services and restaurant reservation flows.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    },
    {
      "name": "recently-viewed",
      "title": "RecentlyViewed",
      "description": "Horizontally scrollable rail of recently viewed products, hydrated from local activity state.",
      "type": "component",
      "registryDependencies": [
        "product-card",
        "cn"
      ]
    },
    {
      "name": "recommendation-carousel",
      "title": "RecommendationCarousel",
      "description": "Personalized product carousel powered by /activity/recommendations — frequently bought, related, trending.",
      "type": "component",
      "registryDependencies": [
        "product-card",
        "cn"
      ]
    },
    {
      "name": "session-message-banner",
      "title": "SessionMessageBanner",
      "description": "Top-of-page banner for session-scoped messages (promo nudges, abandoned cart prompts, low-stock alerts) with dismiss tracking.",
      "type": "component",
      "registryDependencies": [
        "cn"
      ]
    }
  ]
}
