<script src="https://<cloudfront>/client-side/xxxx/xxxxxxxxxxxx.js"></script>

necessary
analytics
advertisement
functionality
performance

cc:onFirstConsent { cookie }
cc:onConsent { cookie }
cc:onChange { cookie, changedCategories, changedServices }
cc:onModalShow { modalName }
cc:onModalHide { modalName }
cc:onModalReady { modalName, modal }

{
  "categories": ["necessary", "analytics"],   // categorias aceitas
  "services": {                                // serviços aceitos por categoria
    "necessary": [],
    "analytics": ["p2m8w1c4z6qa"]           // Tag IDs das tags aceitas
  },
  "consentId": "8f3c…-uuid",                   // id único do consentimento
  "consentTimestamp": "2026-06-03T12:00:00.000Z",
  "lastConsentTimestamp": "2026-06-03T12:30:00.000Z",
  "revision": 0,
  "data": null,                                // dados customizados (setCookieData)
  "languageCode": "pt"
}

// Carregar o Google Analytics apenas quando "analytics" for aceito
// (cc:onConsent cobre o load e a primeira decisão; cc:onChange, as alterações).
// A guarda evita carregar de novo quando o visitante desliga e religa a categoria.
let gaCarregado = false;
const carregarSeAceito = ({ detail }) => {
  if (gaCarregado || !detail.cookie.categories.includes("analytics")) return;
  gaCarregado = true;
  carregarGA();
};
document.addEventListener("cc:onConsent", carregarSeAceito);
document.addEventListener("cc:onChange", carregarSeAceito);

// Reagir a mudanças específicas de preferência
document.addEventListener("cc:onChange", ({ detail }) => {
  console.log("Categorias alteradas:", detail.changedCategories);
  console.log("Serviços alterados:", detail.changedServices);
});

acceptedCategory(category) boolean
acceptedService(tagId, category) boolean
getUserPreferences() object
getCookie(field?, cookieName?) any
validConsent() boolean
validCookie(cookieName) boolean
acceptCategory(categories, excluded?) void
acceptService(tagId, category) false | undefined
eraseCookies(cookies, path?, domain?) void
show(createModal?) void
hide() void
showPreferences() void
hidePreferences() void
loadScript(src, attrs?) Promise<boolean>
setCookieData({ value, mode }) boolean
getConfig(field?) any
setLanguage(lang, forceUpdate?) Promise<boolean>

if (CookieConsent.acceptedCategory("analytics")) { /* … */ }

{
  "acceptType": "custom",                       // "all" | "necessary" | "custom"
  "acceptedCategories": ["necessary", "analytics"],
  "rejectedCategories": ["advertisement", "functionality", "performance"],
  "acceptedServices": { "analytics": ["p2m8w1c4z6qa"] },   // Tag IDs
  "rejectedServices": { "advertisement": ["9lvisie45j51"] }
}

const cookie = CookieConsent.getCookie();            // objeto completo
const id     = CookieConsent.getCookie("consentId"); // string

CookieConsent.acceptCategory("all");                    // aceita todas
CookieConsent.acceptCategory([]);                       // só necessary (rejeita o resto)
CookieConsent.acceptCategory(["analytics"]);            // necessary + analytics
CookieConsent.acceptCategory("all", ["advertisement"]); // todas menos advertisement

const ok = await CookieConsent.loadScript("https://example.com/x.js", { async: "true" });

await CookieConsent.setLanguage("en");

CookieConsent.show(true);        // abre o banner; cria se não existir
CookieConsent.showPreferences(); // abre as preferências (ex.: link "Gerenciar cookies")

<!-- Tag pelo Tag ID, na mesma categoria em que está no painel -->
<script
  type="text/plain"
  data-category="advertisement"
  data-service="9lvisie45j51"
  src="https://connect.facebook.net/...">
</script>

<!-- Código inline também funciona -->
<script type="text/plain" data-category="analytics">
  console.log("só roda após aceite de analytics");
</script>

type="text/plain"
data-category
data-service

<!-- Já entregue neutralizado: data-src preenchido, src ausente -->
<iframe
  data-category="functionality"
  data-src="https://www.youtube.com/embed/VIDEO_ID"></iframe>

cmp-consent-ready
cmp-accept-<categoria>
cmp-accept-<Tag ID>

<button onclick="CookieConsent.showPreferences()">Gerenciar cookies</button>

document.addEventListener("cc:onFirstConsent", ({ detail }) => {
  enviarEventoDeOptIn(detail.cookie.consentId);
});

// Use o Tag ID da tag (tela Categorização de Tags); a chave antiga
// só vale em data-service e nos eventos cmp-accept-*.
// A guarda evita injetar o script de novo a cada alteração de preferência.
let hotjarCarregado = false;
const carregarHotjar = () => {
  if (hotjarCarregado) return;
  if (CookieConsent.acceptedService("p2m8w1c4z6qa", "analytics")) {
    hotjarCarregado = true;
    CookieConsent.loadScript("https://static.hotjar.com/c/hotjar-XXXX.js");
  }
};
document.addEventListener("cc:onConsent", carregarHotjar); // load e primeira decisão
document.addEventListener("cc:onChange", carregarHotjar);  // alterações posteriores