{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "rewards-ui",
  "homepage": "https://docs.rye.com/rewards",
  "items": [
    {
      "name": "address-form",
      "type": "registry:component",
      "title": "Address form",
      "description": "Compound form for collecting a buyer's shipping/billing address. Renders the canonical `Buyer` shape from `checkout-intents` so the result drops straight into <PaymentSheet.Shipping /> or a checkout intent. Validation is consumer-owned — pass `fieldErrors` and the component handles aria-invalid + error rendering.",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["checkout-intents"],
      "files": [
        {
          "path": "registry/default/components/address-form.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/address-form.tsx"
        }
      ]
    },
    {
      "name": "order-tracking",
      "type": "registry:component",
      "title": "Order tracking",
      "description": "Compound post-purchase tracking layout. Header / StatusCard / InvestigationCard / Timeline / Item / RefundSummary / ActionsCard / InvestigationActions / InvestigationProgress sub-components cover all 8 states (placed, processing, shipped, out-for-delivery, delivered, cancelled, refunded, stuck-under-investigation).",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/order-tracking.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/order-tracking.tsx"
        },
        {
          "path": "registry/default/types/product.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/product.ts"
        },
        {
          "path": "lib/format.ts",
          "type": "registry:lib",
          "target": "lib/format.ts"
        }
      ]
    },
    {
      "name": "payment-sheet",
      "type": "registry:component",
      "title": "Payment sheet",
      "description": "Compound checkout sheet. Header / Alert / Item / Shipping / Section / MemberBenefit / CostBreakdown / Confirm / Actions / Skeleton sub-components compose to handle all three integration patterns (cash + member benefit, mixed tender, full points) plus 5 error variants.",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/payment-sheet.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/payment-sheet.tsx"
        },
        {
          "path": "registry/default/types/product.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/product.ts"
        },
        {
          "path": "lib/format.ts",
          "type": "registry:lib",
          "target": "lib/format.ts"
        }
      ]
    },
    {
      "name": "pay-with-points",
      "type": "registry:component",
      "title": "Pay with points",
      "description": "Composable slot for points-as-tender. Slider + balance pill + toggle + after-redemption preview. Handles mixed-tender, full-points, off, and insufficient-balance states.",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/pay-with-points.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/pay-with-points.tsx"
        },
        {
          "path": "lib/format.ts",
          "type": "registry:lib",
          "target": "lib/format.ts"
        }
      ]
    },
    {
      "name": "product-details",
      "type": "registry:component",
      "title": "Product details (PDP)",
      "description": "Two-column PDP with image gallery, variant pickers (swatches / grid / cards), inline revalidation alert, and redeem CTA. Ships with <ProductDetailsSkeleton /> for loading.",
      "registryDependencies": [
        "https://ui.shadcn.com/r/styles/new-york/utils.json",
        "https://registry.rye.com/r/variant-selector.json"
      ],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/product-details.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/product-details.tsx"
        },
        {
          "path": "registry/default/types/product.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/product.ts"
        },
        {
          "path": "registry/default/types/pdp.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/pdp.ts"
        },
        {
          "path": "lib/format.ts",
          "type": "registry:lib",
          "target": "lib/format.ts"
        }
      ]
    },
    {
      "name": "variant-selector",
      "type": "registry:component",
      "title": "Variant selector",
      "description": "Standalone variant picker (swatches / grid / cards) with revalidation-error state. Used inside <ProductDetails.Variants /> and can be dropped into a PaymentSheet or any flow that needs variant selection separate from the PDP.",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/variant-selector.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/variant-selector.tsx"
        },
        {
          "path": "registry/default/types/pdp.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/pdp.ts"
        }
      ]
    },
    {
      "name": "product-card",
      "type": "registry:component",
      "title": "Product card",
      "description": "Catalog tile: image, vendor, name, subtitle, cash price + optional points-equivalent. Handles out-of-stock, subscription-only, marketplace-down, and image-failed states. Ships with a matching <ProductCardSkeleton /> for loading.",
      "registryDependencies": ["https://ui.shadcn.com/r/styles/new-york/utils.json"],
      "dependencies": ["lucide-react"],
      "files": [
        {
          "path": "registry/default/components/product-card.tsx",
          "type": "registry:component",
          "target": "components/rye-rewards/product-card.tsx"
        },
        {
          "path": "registry/default/types/product.ts",
          "type": "registry:lib",
          "target": "components/rye-rewards/types/product.ts"
        },
        {
          "path": "lib/format.ts",
          "type": "registry:lib",
          "target": "lib/format.ts"
        }
      ]
    }
  ]
}
