{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "consent-manager",
  "title": "Consent Manager",
  "author": "nghia.ly <physicalmeans@gmail.com>",
  "description": "Cookie and tracking consent banner for Next.js, built on c15t.",
  "dependencies": [
    "@c15t/nextjs"
  ],
  "registryDependencies": [
    "button"
  ],
  "files": [
    {
      "path": "src/registry/components/consent-manager/consent-manager.tsx",
      "content": "import {\n  ConsentManagerDialog,\n  ConsentManagerProvider,\n  CookieBanner,\n} from \"@c15t/nextjs\"\n\nimport { buttonVariants } from \"@/components/ui/button\"\nimport { cn } from \"@/lib/utils\"\n\nexport function ConsentManager({ children }: { children: React.ReactNode }) {\n  return (\n    <ConsentManagerProvider\n      options={{\n        mode: \"offline\",\n        consentCategories: [\"necessary\", \"measurement\"],\n        // ignoreGeoLocation: process.env.NODE_ENV === \"development\", // Useful for development to always view the banner.\n      }}\n    >\n      <CookieBanner\n        theme={{\n          \"banner.card\": {\n            noStyle: true,\n            className: cn(\n              \"relative w-full max-w-(--banner-max-width) divide-y overflow-hidden rounded-2xl\",\n              \"bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/10 dark:ring-foreground/20\"\n            ),\n          },\n          \"banner.header.title\": {\n            noStyle: true,\n            className: \"text-base leading-none font-medium text-foreground\",\n          },\n          \"banner.header.description\": {\n            noStyle: true,\n            className: \"text-sm text-muted-foreground\",\n          },\n          \"banner.footer\": {\n            style: {\n              \"--banner-footer-background-color\": \"transparent\",\n              \"--banner-footer-background-color-dark\": \"transparent\",\n            },\n          },\n          \"banner.footer.reject-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"secondary\" }),\n          },\n          \"banner.footer.accept-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"secondary\" }),\n          },\n          \"banner.footer.customize-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"default\" }),\n          },\n        }}\n      />\n\n      <ConsentManagerDialog\n        theme={{\n          \"dialog.root\": {\n            style: {\n              \"--dialog-height\": \"100%\",\n              \"--dialog-font-family\": \"var(--font-sans)\",\n\n              \"--dialog-background-color\": \"var(--background)\",\n              \"--dialog-background-color-dark\": \"var(--background)\",\n\n              \"--dialog-border-width\": \"0\",\n              \"--dialog-border-color\": \"var(--border)\",\n              \"--dialog-border-color-dark\": \"var(--border)\",\n\n              \"--dialog-card-radius\": \"1rem\",\n              \"--dialog-card-shadow\":\n                \"0 0 0 1px var(--dialog-card-shadow-color)\",\n            },\n            className:\n              \"[--dialog-card-shadow-color:var(--foreground)]/10 dark:[--dialog-card-shadow-color:var(--border)]\",\n          },\n          \"dialog.overlay\": {\n            style: {\n              \"--dialog-overlay-background-color\": \"lab(0% 0 0 / 0.2)\",\n              \"--dialog-overlay-background-color-dark\": \"lab(0% 0 0 / 0.4)\",\n            },\n          },\n          \"dialog.title\": {\n            noStyle: true,\n            className:\n              \"text-base leading-none font-medium tracking-tight text-foreground\",\n          },\n          \"dialog.description\": {\n            noStyle: true,\n            className: \"text-sm text-muted-foreground\",\n          },\n          \"dialog.header\": {\n            style: {\n              \"--dialog-header-gap\": \"0.5rem\",\n              \"--dialog-card-gap\": \"0\",\n            },\n          },\n          \"dialog.footer\": {\n            style: {\n              \"--dialog-border-width\": \"1px\",\n\n              \"--dialog-stroke-color\": \"var(--border)\",\n              \"--dialog-stroke-color-dark\": \"var(--border)\",\n\n              \"--dialog-branding-icon-height\": \"1.125rem\",\n              \"--dialog-branding-font-size\": \"0.875rem\",\n\n              \"--dialog-branding-focus-color\":\n                \"color-mix(in oklab, var(--ring) 50%, transparent)\",\n              \"--dialog-branding-focus-color-dark\":\n                \"color-mix(in oklab, var(--ring) 50%, transparent)\",\n\n              \"--dialog-foreground-color\": \"var(--muted-foreground)\",\n              \"--dialog-foreground-color-dark\": \"var(--muted-foreground)\",\n            },\n          },\n          \"widget.accordion.item\": {\n            noStyle: true,\n            className: \"rounded-lg border\",\n          },\n          \"widget.accordion.trigger\": {\n            noStyle: true,\n            className: \"flex items-center gap-3 pr-3\",\n          },\n          \"widget.accordion.trigger-inner\": {\n            noStyle: true,\n            className: cn(\n              \"flex flex-1 items-center rounded-lg px-4 py-3 text-sm font-medium text-foreground **:[svg]:hidden\",\n              \"outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n            ),\n          },\n          \"widget.accordion.content\": {\n            noStyle: true,\n            className:\n              \"overflow-hidden px-4 data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\",\n          },\n          \"widget.accordion.content-inner\": {\n            noStyle: true,\n            className: \"pb-4 text-sm text-muted-foreground\",\n          },\n          \"widget.switch\": {\n            noStyle: true,\n            className: cn(\n              \"inline-flex h-4.5 w-8 shrink-0 items-center rounded-full transition-all\",\n              \"border border-transparent\",\n              \"outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n              \"disabled:cursor-not-allowed disabled:opacity-50\",\n              \"data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\"\n            ),\n          },\n          \"widget.switch.track\": {\n            noStyle: true,\n          },\n          \"widget.switch.thumb\": {\n            noStyle: true,\n            className: cn(\n              \"pointer-events-none block size-4 rounded-full bg-background ring-0 transition-[translate,background-color]\",\n              \"data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n            ),\n          },\n          \"widget.footer.sub-group\": {\n            noStyle: true,\n            className: \"grid grid-cols-2 gap-4 sm:flex\",\n          },\n          \"widget.footer.reject-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"secondary\" }),\n          },\n          \"widget.footer.accept-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"secondary\" }),\n          },\n          \"widget.footer.save-button\": {\n            noStyle: true,\n            className: buttonVariants({ variant: \"default\" }),\n          },\n        }}\n      />\n\n      {children}\n    </ConsentManagerProvider>\n  )\n}\n",
      "type": "registry:component"
    }
  ],
  "type": "registry:component"
}