@prenta/plugin-consent
v0.4.0
Published
Cookie consent banner, `am_cookie_consent` storage, and `am-consent` events for Prenta CMS public sites. Gates GA4, Google Ads, and Meta Pixel until the visitor chooses **Accept all**.
Readme
@prenta/plugin-consent
Cookie consent banner, am_cookie_consent storage, and am-consent events for Prenta CMS public sites. Gates GA4, Google Ads, and Meta Pixel until the visitor chooses Accept all.
Quick start
// app/(site)/layout.tsx
import { ConsentRoot } from '@prenta/plugin-consent'
import { consentAnalyticsConfig, consentLinks } from '@/src/consent/config'
export default function SiteLayout({ children }) {
return (
<html lang="en">
<body>
{children}
<ConsentRoot analytics={consentAnalyticsConfig} {...consentLinks} />
</body>
</html>
)
}// src/consent/config.ts
import type { ConsentAnalyticsConfig } from '@prenta/plugin-consent'
export const consentAnalyticsConfig: ConsentAnalyticsConfig = {
ga4MeasurementId: process.env.NEXT_PUBLIC_GA4_MEASUREMENT_ID,
googleAdsId: process.env.NEXT_PUBLIC_GOOGLE_ADS_ID,
metaPixelId: process.env.NEXT_PUBLIC_META_PIXEL_ID,
}
export const consentLinks = {
privacyUrl: '/privacy-policy',
termsUrl: '/terms',
}Scaffold with --plugins consent (or select Consent in the CLI) to generate the config file and layout wiring automatically.
Sticky CTA / custom widgets
'use client'
import { useConsent, waitForConsent } from '@prenta/plugin-consent'
export function StickyCta() {
const { allowsAnalytics, ready } = useConsent()
if (!ready || !allowsAnalytics) return null
return <button type="button">Track me</button>
}
// Or await before firing a pixel manually:
await waitForConsent()API
| Export | Purpose |
| ----------------------------------- | -------------------------------------- |
| ConsentRoot | Banner + analytics loader (mount once) |
| ConsentBanner | Banner only |
| useConsent() | React hook for gated UI |
| onConsent(fn) | Subscribe to am-consent |
| waitForConsent() | Promise when user has chosen |
| setConsent('all' \| 'essential') | Save + dispatch event |
| readConsent() | Read localStorage value |
| loadConsentGatedAnalytics(config) | Inject tags when 'all' |
Storage key: am_cookie_consent. Event: am-consent with { detail: { level } }.
