Ballmac UI home

Cookie Consent

A privacy banner with equal-weight Accept all and Reject non-essential, plus a preferences view with a switch per category and locked required ones.

Installation

$ pnpm dlx shadcn@latest add @ballmac/cookie-consent

Usage

import { CookieConsent } from "@/components/ballmac/cookie-consent"

The full example is in the Code tab above.

Examples

No choice yet

API reference

PropTypeDefault
categories*

Cookie categories. Put required ones first.

ConsentCategory[]—
onConsent

Called with the choice when the visitor decides.

(choice: ConsentChoice) => void—
storageKey

localStorage key. When set, the banner stays hidden once a choice is saved there and the choice is saved for you. Leave undefined to manage visibility yourself with `open`.

string—
open

Controlled visibility. Overrides the stored state.

boolean—
title

Banner heading.

string—
description

Short explanation.

React.ReactNode—
policyHref

Link to your cookie or privacy policy.

string—
placement

Where the banner sits.

"bottom-left" | "bottom-right" | "bottom-center""bottom-left"

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
TabButtons and switches are all reachable; the banner never traps focus
FocusOpening preferences moves focus to the new heading
Screen readersA labelled non-modal dialog; switches announce their state

Use with AI

categories[] with {id,label,description,required}. onConsent receives a map of category to boolean. storageKey saves and remembers the choice in localStorage. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Cookie Consent (@ballmac/cookie-consent) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Sites that set non-essential cookies
  • Consent prompts for analytics and marketing

Not for

  • Legal advice: check your own requirements
  • Unrelated notices; use banner

Registry JSON: https://ui.ballmac.com/r/cookie-consent.json

Credits

Free to use in personal and commercial projects.