{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "pursuit-card",
  "title": "Pursuit card",
  "description": "A quest / bounty pursuit card (the in-game Quests list): a square pursuit icon, the title + step description, an optional reward, and a thin step-progress edge. `tracked` gives it the green pinned-quest highlight.",
  "dependencies": [
    "@engram/core"
  ],
  "registryDependencies": [
    "@engram/bungie-image",
    "@engram/cn",
    "@engram/tokens"
  ],
  "files": [
    {
      "path": "src/components/pursuit-card.tsx",
      "content": "import type { ImageRef } from \"@engram/core\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../lib/cn.js\";\nimport { BungieImage } from \"./bungie-image.js\";\n\nexport interface PursuitCardProps\n  extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n  title: ReactNode;\n  /** Quest/bounty step summary (truncates to two lines). */\n  description?: ReactNode;\n  /** Pursuit icon (square, framed — the in-game quest/bounty icon). */\n  icon?: ImageRef;\n  /** Pinned/tracked → green highlight border + a tracked marker. */\n  tracked?: boolean;\n  /** Step progress 0–1 — the thin bar along the bottom edge. */\n  progress?: number;\n  /** Time-left / expiry readout (bounties). */\n  expiry?: ReactNode;\n  /** Right-aligned reward icon slot. */\n  reward?: ReactNode;\n}\n\n/**\n * A quest / bounty pursuit card (the in-game Quests list): a square pursuit icon,\n * the title + step description, an optional reward, and a thin step-progress edge.\n * `tracked` gives it the green pinned-quest highlight. The pursuit sibling of the\n * triumph {@link RecordCard} (square icon + green tracking vs circular + gold).\n */\nexport function PursuitCard({\n  title,\n  description,\n  icon,\n  tracked = false,\n  progress,\n  expiry,\n  reward,\n  className,\n  ...props\n}: PursuitCardProps) {\n  return (\n    <div\n      className={cn(\n        \"relative flex flex-col overflow-hidden border bg-engram-raised\",\n        tracked\n          ? \"border-engram-ok shadow-[0_0_0_1px_var(--engram-ok),0_0_10px_color-mix(in_oklch,var(--engram-ok)_35%,transparent)]\"\n          : \"border-engram-border\",\n        className,\n      )}\n      {...props}\n    >\n      <div className=\"flex items-start gap-2.5 p-2.5\">\n        {icon ? (\n          <BungieImage\n            src={icon}\n            alt=\"\"\n            aria-hidden\n            className=\"size-11 shrink-0 border border-engram-border-strong bg-engram-bg object-cover\"\n          />\n        ) : (\n          <span\n            aria-hidden\n            className=\"grid size-11 shrink-0 place-items-center border border-engram-border-strong bg-engram-bg\"\n          >\n            <span className=\"size-3 rotate-45 border border-engram-muted\" />\n          </span>\n        )}\n        <div className=\"min-w-0 flex-1\">\n          <div className=\"flex items-center gap-1.5\">\n            <span className=\"min-w-0 flex-1 truncate font-engram-display font-bold text-[13px] text-engram-fg tracking-[0.01em]\">\n              {title}\n            </span>\n            {tracked ? (\n              <span\n                role=\"img\"\n                aria-label=\"Tracked\"\n                className=\"size-2.5 shrink-0 rounded-full bg-engram-ok shadow-[0_0_6px_var(--engram-ok)]\"\n              />\n            ) : null}\n          </div>\n          {description != null ? (\n            <p className=\"mt-1 line-clamp-2 text-[12px] text-engram-muted leading-snug\">\n              {description}\n            </p>\n          ) : null}\n          {expiry != null ? (\n            <p className=\"mt-1 font-engram-display text-[11px] text-engram-faint uppercase tracking-[0.06em]\">\n              {expiry}\n            </p>\n          ) : null}\n        </div>\n        {reward != null ? <div className=\"shrink-0\">{reward}</div> : null}\n      </div>\n\n      {progress != null ? (\n        <div className=\"mt-auto h-[3px] w-full bg-black/35\">\n          <div\n            className=\"h-full\"\n            style={{\n              width: `${Math.max(0, Math.min(1, progress)) * 100}%`,\n              background:\n                \"color-mix(in srgb, var(--engram-fg) 72%, transparent)\",\n            }}\n          />\n        </div>\n      ) : null}\n    </div>\n  );\n}\n",
      "type": "registry:component",
      "target": "components/engram/pursuit-card.tsx"
    }
  ],
  "meta": {
    "level": "component"
  },
  "docs": "Extend without forking: edit the copied source, use `asChild` (Radix Slot) to change the rendered element, pass the typed `annotations` prop for curated data (verdict/tags/per-plug), or use slot / render-prop props for arbitrary content. Requires the @engram/tokens theme (--engram-* CSS variables).",
  "categories": [
    "quest"
  ],
  "type": "registry:component"
}