{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "utm-link",
  "title": "UTM Link",
  "description": "A link component that automatically adds UTM parameters to the href on click",
  "files": [
    {
      "path": "registry/components/ui/utm-link.tsx",
      "content": "\"use client\"\n\nimport Link from \"next/link\"\n\ntype UTMLinkProps = {\n  href: string\n  children: React.ReactNode\n  source?: string\n  medium?: string\n  campaign?: string\n} & React.ComponentProps<typeof Link>\n\nexport default function UTMLink({\n  href,\n  children,\n  source,\n  medium,\n  campaign,\n  onMouseDown,\n  onClick,\n  ...props\n}: UTMLinkProps) {\n  const applySearchParams = (e: React.MouseEvent<HTMLAnchorElement>) => {\n    if (e.defaultPrevented) return\n    if (e.button !== 0 && e.type !== \"click\") return\n    if (!source && !medium && !campaign) return\n\n    const hrefAttr = e.currentTarget.getAttribute(\"href\")\n    if (!hrefAttr || hrefAttr.startsWith(\"#\")) {\n      return\n    }\n\n    const url = new URL(e.currentTarget.href)\n\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return\n\n    if (\n      (!source || url.searchParams.has(\"utm_source\")) &&\n      (!medium || url.searchParams.has(\"utm_medium\")) &&\n      (!campaign || url.searchParams.has(\"utm_campaign\"))\n    ) {\n      return\n    }\n\n    if (source && !url.searchParams.has(\"utm_source\")) {\n      url.searchParams.set(\"utm_source\", source)\n    }\n    if (medium && !url.searchParams.has(\"utm_medium\")) {\n      url.searchParams.set(\"utm_medium\", medium)\n    }\n    if (campaign && !url.searchParams.has(\"utm_campaign\")) {\n      url.searchParams.set(\"utm_campaign\", campaign)\n    }\n\n    e.currentTarget.href = url.toString()\n  }\n\n  return (\n    <Link\n      href={href}\n      onMouseDown={(e) => {\n        onMouseDown?.(e)\n        applySearchParams(e)\n      }}\n      onClick={(e) => {\n        onClick?.(e)\n        if (e.detail === 0) applySearchParams(e)\n      }}\n      {...props}>\n      {children}\n    </Link>\n  )\n}",
      "type": "registry:ui",
      "target": "components/ui/utm-link.tsx"
    }
  ],
  "type": "registry:ui"
}