{"version":3,"sources":["mod::digiconsent/js/internal/consent-mode.ts","mod::digiconsent/js/internal/gtm-config.ts","mod::digiconsent/js/internal/consent-contract.ts","mod::digiconsent/js/consent.ts","mod::digiconsent/js/consent-mode.ts","mod::digiconsent/js/digiconsent.ts","mod::digiconsent/js/bootstrap.ts","/entrypoint.js"],"sourcesContent":["export const CONSENT_CATEGORIES = [\"analytics\", \"marketing\", \"external_media\"] as const;\n\nexport type ConsentCategory = typeof CONSENT_CATEGORIES[number];\nexport type ConsentValue = \"granted\" | \"denied\";\n\nexport interface GoogleConsentState {\n  analytics_storage: ConsentValue;\n  ad_storage: ConsentValue;\n  ad_user_data: ConsentValue;\n  ad_personalization: ConsentValue;\n  functionality_storage: ConsentValue;\n  personalization_storage: ConsentValue;\n  security_storage: ConsentValue;\n}\n\nexport interface ConsentPolicy {\n  analyticsByDefault: boolean;\n}\n\nexport const DEFAULT_POLICY: Readonly<ConsentPolicy> = Object.freeze({\n  analyticsByDefault: false\n});\n\nexport function getDefaultGoogleConsent(policy: ConsentPolicy = DEFAULT_POLICY): GoogleConsentState {\n  return {\n    analytics_storage: policy.analyticsByDefault ? \"granted\" : \"denied\",\n    ad_storage: \"denied\",\n    ad_user_data: \"denied\",\n    ad_personalization: \"denied\",\n    functionality_storage: \"denied\",\n    personalization_storage: \"denied\",\n    security_storage: \"granted\"\n  };\n}\n\nexport function mapCategoriesToGoogleConsent(categories: readonly string[]): GoogleConsentState {\n  const selected = new Set(categories);\n  const all = selected.has(\"all\");\n  const marketing = all || selected.has(\"marketing\");\n\n  return {\n    analytics_storage: all || selected.has(\"analytics\") ? \"granted\" : \"denied\",\n    ad_storage: marketing ? \"granted\" : \"denied\",\n    ad_user_data: marketing ? \"granted\" : \"denied\",\n    ad_personalization: marketing ? \"granted\" : \"denied\",\n    functionality_storage: \"denied\",\n    personalization_storage: \"denied\",\n    security_storage: \"granted\"\n  };\n}\n\nexport function normalizeCategories(categories: readonly string[]): ConsentCategory[] {\n  if (categories.includes(\"all\"))\n    return [...CONSENT_CATEGORIES];\n  const known = new Set<ConsentCategory>(CONSENT_CATEGORIES);\n  return [...new Set(categories)]\n    .filter((category): category is ConsentCategory => known.has(category as ConsentCategory))\n    .sort();\n}\n\nexport function getPolicyCookieName(cookieName: string, policyVersion: string): string {\n  const safeVersion = policyVersion.toLowerCase().replace(/[^a-z0-9_-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n  if (!safeVersion)\n    throw new Error(\"DigiConsent policyVersion must contain at least one letter or number\");\n  return `${cookieName}-v${safeVersion}`;\n}\n\nexport type GTMLaunch = \"off\" | \"after-consent\" | \"immediately\";\n\n/** When DigiConsent starts GTM. Gated (the default) waits for analytics or\n * marketing consent. Ungated starts GTM at once, after the denied Consent Mode\n * default is queued, so Google tags run but respect the consent state. */\nexport function getGTMLaunch(options: { startGTM?: boolean; gateGTM?: boolean }): GTMLaunch {\n  if (!(options.startGTM ?? true))\n    return \"off\";\n  return (options.gateGTM ?? true) ? \"after-consent\" : \"immediately\";\n}\n","/** Only start a configured manual container; shared-template placeholders stay dark. */\nexport function canStartNativeGTM(config: unknown): boolean {\n  if (!config || typeof config !== \"object\")\n    return false;\n  const { a, m } = config as { a?: unknown; m?: unknown };\n  return m === true && typeof a === \"string\"\n    && /^GTM-[A-Z0-9]+$/.test(a) && !/^GTM-X+$/.test(a);\n}\n","import { CONSENT_CATEGORIES, normalizeCategories, type ConsentCategory } from \"./consent-mode.js\";\n\nexport const CONSENT_ENVELOPE_VERSION = 1 as const;\n\n/**\n * `Symbol.for` key under which the page's latest snapshot is published on\n * `window`. Every asset bundle bundles its own module state (including its own\n * copy of WebHare's consenthandler), so a module-level store cannot replay to\n * other bundles. A registered symbol is shared by all bundles on the page.\n */\nexport const SHARED_SNAPSHOT_KEY = \"digismederij.digiconsent.snapshot.v1\";\n\ntype SnapshotHost = Record<symbol, unknown>;\n\nexport function publishSharedSnapshot(host: object, snapshot: ConsentSnapshot): void {\n  (host as SnapshotHost)[Symbol.for(SHARED_SNAPSHOT_KEY)] = snapshot;\n}\n\nexport function readSharedSnapshot(host: object): ConsentSnapshot | undefined {\n  const value = (host as SnapshotHost)[Symbol.for(SHARED_SNAPSHOT_KEY)] as Partial<ConsentSnapshot> | undefined;\n  if (!value || typeof value !== \"object\" || value.version !== CONSENT_ENVELOPE_VERSION ||\n      typeof value.policyVersion !== \"string\" || !value.grants || typeof value.grants !== \"object\" ||\n      ![\"unknown\", \"implicit\", \"explicit\"].includes(value.decision as string))\n    return undefined;\n  return value as ConsentSnapshot;\n}\n\nexport type ConsentDecision = \"unknown\" | \"implicit\" | \"explicit\";\n\nexport interface ConsentSnapshot {\n  version: typeof CONSENT_ENVELOPE_VERSION;\n  policyVersion: string;\n  decision: ConsentDecision;\n  observedAt: string;\n  grants: Readonly<Record<ConsentCategory, boolean>>;\n}\n\nexport interface NativeConsentSnapshot {\n  isdefault: boolean;\n  consent?: readonly string[];\n}\n\nexport type ConsentListener = (snapshot: ConsentSnapshot) => void;\nexport type ConsentLoader = () => void;\n\nexport function createConsentSnapshot(\n  policyVersion: string,\n  settings: NativeConsentSnapshot,\n  observedAt = new Date().toISOString()\n): ConsentSnapshot {\n  const normalized = normalizeCategories(settings.consent ?? []);\n  const selected = new Set(normalized);\n  const grants = Object.fromEntries(\n    CONSENT_CATEGORIES.map(category => [category, selected.has(category)])\n  ) as Record<ConsentCategory, boolean>;\n\n  return Object.freeze({\n    version: CONSENT_ENVELOPE_VERSION,\n    policyVersion,\n    decision: settings.isdefault ? \"implicit\" : settings.consent === undefined ? \"unknown\" : \"explicit\",\n    observedAt,\n    grants: Object.freeze(grants)\n  });\n}\n\nexport class ConsentStateStore {\n  readonly #listeners = new Set<ConsentListener>();\n  #snapshot: ConsentSnapshot | undefined;\n\n  getSnapshot(): ConsentSnapshot | undefined {\n    return this.#snapshot;\n  }\n\n  update(snapshot: ConsentSnapshot): void {\n    this.#snapshot = snapshot;\n    for (const listener of this.#listeners) {\n      try {\n        listener(snapshot);\n      } catch (error) {\n        console.error(\"DigiConsent listener failed\", error);\n      }\n    }\n  }\n\n  subscribe(listener: ConsentListener, options: { replay?: boolean } = {}): () => void {\n    this.#listeners.add(listener);\n    if ((options.replay ?? true) && this.#snapshot)\n      listener(this.#snapshot);\n    return () => this.#listeners.delete(listener);\n  }\n\n  loadWhenGranted(scopes: readonly ConsentCategory[], loader: ConsentLoader): () => void {\n    if (!scopes.length)\n      throw new Error(\"DigiConsent loadWhenGranted requires at least one scope\");\n    let started = false;\n    return this.subscribe(snapshot => {\n      if (!started && snapshot.decision === \"explicit\" && scopes.some(scope => snapshot.grants[scope])) {\n        started = true;\n        loader();\n      }\n    });\n  }\n}\n","import * as consenthandler from \"@mod-publisher/js/analytics/consenthandler\";\nimport {\n  ConsentStateStore,\n  createConsentSnapshot,\n  publishSharedSnapshot,\n  readSharedSnapshot,\n  type ConsentListener,\n  type ConsentLoader,\n  type ConsentSnapshot\n} from \"./internal/consent-contract.js\";\nimport type { ConsentCategory } from \"./internal/consent-mode.js\";\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"digi:consent-change\": CustomEvent<ConsentSnapshot>;\n  }\n}\n\nconst store = new ConsentStateStore();\nlet installedPolicy: string | undefined;\n\n// A bundle that only consumes the contract (no setupConsentContract call of its\n// own) mirrors the page-level state: replay what was published before this\n// bundle ran, then follow the window event.\n{\n  const existing = readSharedSnapshot(window);\n  if (existing)\n    store.update(existing);\n  window.addEventListener(\"digi:consent-change\", event => {\n    if (!installedPolicy && readSharedSnapshot(window) === event.detail)\n      store.update(event.detail);\n  });\n}\n\n/** Internal setup shared by the banner and bridge-only integrations. */\nexport function setupConsentContract(policyVersion: string): void {\n  if (installedPolicy) {\n    if (installedPolicy !== policyVersion)\n      throw new Error(`DigiConsent contract is already initialized with policy ${installedPolicy}`);\n    return;\n  }\n  installedPolicy = policyVersion;\n  consenthandler.onConsentChange(settings => {\n    const snapshot = createConsentSnapshot(policyVersion, settings);\n    publishSharedSnapshot(window, snapshot);\n    store.update(snapshot);\n    window.dispatchEvent(new CustomEvent(\"digi:consent-change\", { detail: snapshot }));\n  });\n}\n\n/** Returns the last observed state, or undefined before WebHare consent setup. */\nexport function getConsentSnapshot(): ConsentSnapshot | undefined {\n  return store.getSnapshot();\n}\n\n/** Subscribes to changes and replays the current state by default. */\nexport function onDigiConsentChange(listener: ConsentListener, options?: { replay?: boolean }): () => void {\n  return store.subscribe(listener, options);\n}\n\n/** Runs a loader once after an explicit grant for any requested scope. */\nexport function loadWhenGranted(\n  scopes: ConsentCategory | readonly ConsentCategory[],\n  loader: ConsentLoader\n): () => void {\n  return store.loadWhenGranted(typeof scopes === \"string\" ? [scopes] : scopes, loader);\n}\n\nexport type { ConsentCategory, ConsentListener, ConsentSnapshot };\n","import { getFrontendData } from \"@webhare/frontend/src/init\";\nimport { canStartNativeGTM } from \"./internal/gtm-config.js\";\nimport * as consenthandler from \"@mod-publisher/js/analytics/consenthandler\";\nimport {\n  DEFAULT_POLICY,\n  getDefaultGoogleConsent,\n  mapCategoriesToGoogleConsent,\n  normalizeCategories,\n  getGTMLaunch,\n  type ConsentPolicy\n} from \"./internal/consent-mode.js\";\nimport { loadWhenGranted, setupConsentContract } from \"./consent.js\";\n\nexport interface ConsentModeOptions {\n  policyVersion: string;\n  analyticsByDefault?: boolean;\n  waitForUpdate?: number;\n  startGTM?: boolean;\n  /** false: start GTM immediately instead of after consent (Consent Mode still applies). */\n  gateGTM?: boolean;\n}\n\ntype DataLayerWindow = Window & {\n  dataLayer?: unknown[];\n  gtag?: (...args: unknown[]) => void;\n};\n\nlet installedPolicy: string | undefined;\nlet gtmStart: Promise<boolean> | undefined;\n\nfunction getGtag(): (...args: unknown[]) => void {\n  const target = window as DataLayerWindow;\n  target.dataLayer ??= [];\n  target.gtag ??= (...args: unknown[]) => target.dataLayer!.push(args);\n  return target.gtag;\n}\n\nfunction sendDefaultConsent(policy: ConsentPolicy, waitForUpdate: number, policyVersion: string): void {\n  const state = getDefaultGoogleConsent(policy);\n  getGtag()(\"consent\", \"default\", { ...state, wait_for_update: waitForUpdate });\n  getGtag()(\"set\", \"ads_data_redaction\", true);\n  getGtag()(\"set\", \"url_passthrough\", true);\n  (window as DataLayerWindow).dataLayer!.push({\n    event: \"digi_consent_default\",\n    \"digi.consent_policy_version\": policyVersion,\n    \"digi.consent_default\": state\n  });\n}\n\nfunction sendConsentUpdate(categories: readonly string[], policyVersion: string): void {\n  const normalized = normalizeCategories(categories);\n  getGtag()(\"consent\", \"update\", mapCategoriesToGoogleConsent(normalized));\n  (window as DataLayerWindow).dataLayer!.push({\n    event: \"digi_consent_update\",\n    \"digi.consent\": normalized.join(\" \") || \"denied\",\n    \"digi.consent_policy_version\": policyVersion\n  });\n}\n\nexport async function startNativeGTM(): Promise<boolean> {\n  // Validate before importing: the native module can itself auto-initialize.\n  if (!canStartNativeGTM(getFrontendData(\"socialite:gtm\", { allowMissing: true })))\n    return false;\n  gtmStart ??= import(\"@mod-publisher/js/analytics/gtm\").then(gtm => gtm.init());\n  return await gtmStart;\n}\n\n/**\n * Queue Google Consent Mode v2 before GTM and bridge WebHare consent changes.\n * Call this before importing/starting the native WebHare GTM module.\n */\nexport function setupConsentMode(options: ConsentModeOptions): void {\n  if (!options.policyVersion.trim())\n    throw new Error(\"DigiConsent requires a policyVersion\");\n  if (installedPolicy) {\n    if (installedPolicy !== options.policyVersion)\n      throw new Error(`DigiConsent is already initialized with policy ${installedPolicy}`);\n    return;\n  }\n  installedPolicy = options.policyVersion;\n  setupConsentContract(options.policyVersion);\n\n  const policy: ConsentPolicy = {\n    ...DEFAULT_POLICY,\n    analyticsByDefault: options.analyticsByDefault ?? DEFAULT_POLICY.analyticsByDefault\n  };\n  sendDefaultConsent(policy, options.waitForUpdate ?? 500, options.policyVersion);\n  consenthandler.onConsentChange(settings => sendConsentUpdate(settings.consent ?? [], options.policyVersion));\n\n  const launch = getGTMLaunch(options);\n  if (launch === \"after-consent\")\n    loadWhenGranted([\"analytics\", \"marketing\"], () => void startNativeGTM());\n  else if (launch === \"immediately\")\n    void startNativeGTM();\n}\n","import * as consenthandler from \"@mod-publisher/js/analytics/consenthandler\";\nimport \"./digiconsent.css\";\nimport {\n  DEFAULT_POLICY,\n  getPolicyCookieName,\n  type ConsentCategory,\n  type ConsentPolicy\n} from \"./internal/consent-mode.js\";\nimport { setupConsentMode } from \"./consent-mode.js\";\n\nexport interface DigiConsentLabels {\n  title: string;\n  introduction: string;\n  necessary: string;\n  necessaryDescription: string;\n  analytics: string;\n  analyticsDescription: string;\n  marketing: string;\n  marketingDescription: string;\n  externalMedia: string;\n  externalMediaDescription: string;\n  acceptAll: string;\n  rejectOptional: string;\n  preferences: string;\n  save: string;\n  privacy: string;\n  manage: string;\n}\n\nexport interface DigiConsentOptions {\n  cookieName: string;\n  policyVersion: string;\n  privacyUrl: string;\n  language?: \"nl\" | \"en\";\n  labels?: Partial<DigiConsentLabels>;\n  cookieDomain?: string;\n  cookieDuration?: number;\n  analyticsByDefault?: boolean;\n  waitForUpdate?: number;\n  startGTM?: boolean;\n  gateGTM?: boolean;\n  showManageButton?: boolean;\n}\n\nconst COPY: Record<\"nl\" | \"en\", DigiConsentLabels> = {\n  nl: {\n    title: \"Jouw privacykeuzes\",\n    introduction: \"We gebruiken noodzakelijke cookies om de site te laten werken. Je kiest zelf of we ook analyse, marketing en externe media mogen gebruiken.\",\n    necessary: \"Noodzakelijk\",\n    necessaryDescription: \"Nodig voor beveiliging, formulieren en de basiswerking van de website.\",\n    analytics: \"Analyse\",\n    analyticsDescription: \"Helpt ons begrijpen hoe de website wordt gebruikt en verbeterd kan worden.\",\n    marketing: \"Marketing\",\n    marketingDescription: \"Maakt advertentiemeting en relevantere advertenties mogelijk.\",\n    externalMedia: \"Externe media\",\n    externalMediaDescription: \"Staat inhoud toe van diensten zoals YouTube, Vimeo en kaarten.\",\n    acceptAll: \"Alles toestaan\",\n    rejectOptional: \"Alleen noodzakelijk\",\n    preferences: \"Voorkeuren\",\n    save: \"Keuzes opslaan\",\n    privacy: \"Privacyverklaring\",\n    manage: \"Cookievoorkeuren\"\n  },\n  en: {\n    title: \"Your privacy choices\",\n    introduction: \"We use necessary cookies to make the site work. You decide whether we may also use analytics, marketing and external media.\",\n    necessary: \"Necessary\",\n    necessaryDescription: \"Required for security, forms and the basic operation of the website.\",\n    analytics: \"Analytics\",\n    analyticsDescription: \"Helps us understand how the website is used and can be improved.\",\n    marketing: \"Marketing\",\n    marketingDescription: \"Enables advertising measurement and more relevant advertising.\",\n    externalMedia: \"External media\",\n    externalMediaDescription: \"Allows content from services such as YouTube, Vimeo and maps.\",\n    acceptAll: \"Allow all\",\n    rejectOptional: \"Necessary only\",\n    preferences: \"Preferences\",\n    save: \"Save choices\",\n    privacy: \"Privacy statement\",\n    manage: \"Cookie preferences\"\n  }\n};\n\nlet activeDialog: HTMLDialogElement | undefined;\nlet manageButton: HTMLButtonElement | undefined;\nlet preferencesListener: (() => void) | undefined;\n\nfunction releaseDialog(dialog: HTMLDialogElement): void {\n  if (activeDialog === dialog)\n    activeDialog = undefined;\n  dialog.remove();\n  if (manageButton)\n    manageButton.hidden = false;\n}\n\nfunction closeDialog(): void {\n  const dialog = activeDialog;\n  if (!dialog)\n    return;\n  if (dialog.open)\n    dialog.close();\n  releaseDialog(dialog);\n}\n\nfunction row(name: string, description: string, value?: ConsentCategory, checked = false): HTMLLabelElement {\n  const label = document.createElement(\"label\");\n  label.className = \"digi-consent__option\";\n  const checkbox = document.createElement(\"input\");\n  checkbox.type = \"checkbox\";\n  checkbox.checked = value ? checked : true;\n  checkbox.disabled = !value;\n  if (value)\n    checkbox.value = value;\n  const copy = document.createElement(\"span\");\n  copy.innerHTML = `<strong></strong><small></small>`;\n  copy.querySelector(\"strong\")!.textContent = name;\n  copy.querySelector(\"small\")!.textContent = description;\n  label.append(checkbox, copy);\n  return label;\n}\n\nfunction showConsentDialog(options: DigiConsentOptions, preferences = false): void {\n  closeDialog();\n  const language = options.language ?? (document.documentElement.lang.startsWith(\"nl\") ? \"nl\" : \"en\");\n  const labels = { ...COPY[language], ...options.labels };\n  if (manageButton)\n    manageButton.hidden = true;\n  const dialog = document.createElement(\"dialog\");\n  dialog.className = `digi-consent digi-consent--${preferences ? \"preferences\" : \"notice\"}`;\n  dialog.setAttribute(\"aria-labelledby\", \"digi-consent-title\");\n  dialog.addEventListener(\"close\", () => releaseDialog(dialog), { once: true });\n\n  const content = document.createElement(\"div\");\n  content.className = \"digi-consent__content\";\n  const heading = document.createElement(\"h2\");\n  heading.id = \"digi-consent-title\";\n  heading.textContent = labels.title;\n  const intro = document.createElement(\"p\");\n  intro.textContent = labels.introduction;\n  const optionsNode = document.createElement(\"div\");\n  optionsNode.className = \"digi-consent__options\";\n  optionsNode.hidden = !preferences;\n  const hadStoredChoice = preferences;\n  const hasChoice = (category: ConsentCategory, fallback = false) => hadStoredChoice\n    ? consenthandler.hasConsent(category) || consenthandler.hasConsent(\"all\")\n    : fallback;\n  optionsNode.append(\n    row(labels.necessary, labels.necessaryDescription),\n    row(labels.analytics, labels.analyticsDescription, \"analytics\", hasChoice(\"analytics\", options.analyticsByDefault ?? false)),\n    row(labels.marketing, labels.marketingDescription, \"marketing\", hasChoice(\"marketing\")),\n    row(labels.externalMedia, labels.externalMediaDescription, \"external_media\", hasChoice(\"external_media\"))\n  );\n\n  const privacy = document.createElement(\"a\");\n  privacy.href = options.privacyUrl;\n  privacy.textContent = labels.privacy;\n  privacy.className = \"digi-consent__privacy\";\n\n  const actions = document.createElement(\"div\");\n  actions.className = \"digi-consent__actions\";\n  const accept = document.createElement(\"button\");\n  accept.type = \"button\";\n  accept.className = \"digi-consent__primary\";\n  accept.textContent = labels.acceptAll;\n  accept.addEventListener(\"click\", () => {\n    consenthandler.setConsent([\"analytics\", \"external_media\", \"marketing\"]);\n    closeDialog();\n  });\n  const reject = document.createElement(\"button\");\n  reject.type = \"button\";\n  reject.textContent = labels.rejectOptional;\n  reject.addEventListener(\"click\", () => {\n    consenthandler.setConsent([]);\n    closeDialog();\n  });\n  const configure = document.createElement(\"button\");\n  configure.type = \"button\";\n  configure.textContent = preferences ? labels.save : labels.preferences;\n  configure.addEventListener(\"click\", () => {\n    if (!preferences) {\n      showConsentDialog(options, true);\n      return;\n    }\n    const selected = [...optionsNode.querySelectorAll<HTMLInputElement>('input[value]:checked')]\n      .map(input => input.value as ConsentCategory);\n    consenthandler.setConsent(selected);\n    closeDialog();\n  });\n  actions.append(reject, configure, accept);\n  content.append(heading, intro, optionsNode, privacy, actions);\n  dialog.append(content);\n  document.body.append(dialog);\n  activeDialog = dialog;\n  if (preferences)\n    dialog.showModal();\n  else\n    dialog.show();\n}\n\n/** Opens the same preferences UI from a privacy page or footer link. */\nexport function openConsentPreferences(options: DigiConsentOptions): void {\n  showConsentDialog(options, true);\n}\n\n/**\n * Initializes WebHare's first-party consent cookie and Google Consent Mode v2.\n * Configure the native WebHare <gtm> integration with launch=\"manual\" so this\n * function can queue the default consent state before GTM starts.\n */\nexport function setupDigiConsent(options: DigiConsentOptions): void {\n  if (!options.cookieName.trim())\n    throw new Error(\"DigiConsent requires a site-specific cookieName\");\n  if (!options.policyVersion.trim())\n    throw new Error(\"DigiConsent requires a policyVersion\");\n  if (!options.privacyUrl)\n    throw new Error(\"DigiConsent requires a privacyUrl\");\n\n  const policy: ConsentPolicy = {\n    ...DEFAULT_POLICY,\n    analyticsByDefault: options.analyticsByDefault ?? DEFAULT_POLICY.analyticsByDefault\n  };\n\n  setupConsentMode({\n    policyVersion: options.policyVersion,\n    analyticsByDefault: policy.analyticsByDefault,\n    waitForUpdate: options.waitForUpdate,\n    startGTM: options.startGTM ?? true,\n    gateGTM: options.gateGTM ?? true\n  });\n  consenthandler.setup(\n    getPolicyCookieName(options.cookieName, options.policyVersion),\n    () => showConsentDialog(options),\n    {\n      cookiedomain: options.cookieDomain,\n      cookieduration: options.cookieDuration ?? 365,\n      defaultconsent: policy.analyticsByDefault ? [\"analytics\"] : []\n    }\n  );\n\n  // Public DOM contract for host webdesigns without a bundled module dependency.\n  if (preferencesListener)\n    window.removeEventListener(\"digi:consent-open\", preferencesListener);\n  preferencesListener = () => openConsentPreferences(options);\n  window.addEventListener(\"digi:consent-open\", preferencesListener);\n\n  if ((options.showManageButton ?? true) && !manageButton) {\n    const language = options.language ?? (document.documentElement.lang.startsWith(\"nl\") ? \"nl\" : \"en\");\n    const labels = { ...COPY[language], ...options.labels };\n    manageButton = document.createElement(\"button\");\n    manageButton.type = \"button\";\n    manageButton.className = \"digi-consent-manage\";\n    manageButton.textContent = labels.manage;\n    manageButton.addEventListener(\"click\", () => openConsentPreferences(options));\n    manageButton.hidden = Boolean(activeDialog);\n    document.body.append(manageButton);\n  }\n}\n\nexport { getPolicyCookieName };\n","import { getFrontendData } from \"@webhare/frontend/src/init\";\nimport { setupDigiConsent, type DigiConsentOptions } from \"./digiconsent.js\";\n\ninterface DigiConsentFrontendConfig {\n  cookiename: string;\n  policyversion: string;\n  privacyurl: string;\n  language: \"\" | \"nl\" | \"en\";\n  cookiedomain: string;\n  cookieduration: number;\n  analyticsbydefault: boolean;\n  waitforupdate: number;\n  startgtm: boolean;\n  gategtm: boolean;\n  showmanagebutton: boolean;\n}\n\nconst config = getFrontendData<DigiConsentFrontendConfig>(\"digiconsent:config\", { allowMissing: true });\n\nif (config) {\n  const options: DigiConsentOptions = {\n    cookieName: config.cookiename,\n    policyVersion: config.policyversion,\n    privacyUrl: config.privacyurl,\n    cookieDuration: config.cookieduration,\n    analyticsByDefault: config.analyticsbydefault,\n    waitForUpdate: config.waitforupdate,\n    startGTM: config.startgtm,\n    gateGTM: config.gategtm,\n    showManageButton: config.showmanagebutton,\n  };\n  if (config.language)\n    options.language = config.language;\n  if (config.cookiedomain)\n    options.cookieDomain = config.cookiedomain;\n  setupDigiConsent(options);\n}\n","import \"@webhare/frontend/src/init\";import \"/opt/whdata/installedmodules/digiconsent.20261012T073216.752Z/js/bootstrap.ts\";const aps = globalThis.whAssetPacks ||= {}; aps[\"digiconsent:frontend\"]=\"2026-10-12T07:32:20.039Z\";"],"mappings":"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","names":["CONSENT_CATEGORIES","DEFAULT_POLICY","getDefaultGoogleConsent","policy","mapCategoriesToGoogleConsent","categories","selected","all","marketing","normalizeCategories","known","category","getPolicyCookieName","cookieName","policyVersion","safeVersion","getGTMLaunch","options","canStartNativeGTM","config","a","m","CONSENT_ENVELOPE_VERSION","SHARED_SNAPSHOT_KEY","publishSharedSnapshot","host","snapshot","readSharedSnapshot","value","createConsentSnapshot","policyVersion","settings","observedAt","normalized","normalizeCategories","selected","grants","CONSENT_CATEGORIES","category","ConsentStateStore","#listeners","#snapshot","listener","error","options","scopes","loader","started","scope","store","ConsentStateStore","installedPolicy","existing","readSharedSnapshot","event","setupConsentContract","policyVersion","onConsentChange","settings","snapshot","createConsentSnapshot","publishSharedSnapshot","loadWhenGranted","scopes","loader","store","installedPolicy","gtmStart","getGtag","target","args","sendDefaultConsent","policy","waitForUpdate","policyVersion","state","getDefaultGoogleConsent","sendConsentUpdate","categories","normalized","normalizeCategories","mapCategoriesToGoogleConsent","startNativeGTM","canStartNativeGTM","getFrontendData","gtm","setupConsentMode","options","setupConsentContract","DEFAULT_POLICY","onConsentChange","settings","launch","getGTMLaunch","loadWhenGranted","COPY","activeDialog","manageButton","preferencesListener","releaseDialog","dialog","closeDialog","row","name","description","value","checked","label","checkbox","copy","showConsentDialog","options","preferences","language","labels","content","heading","intro","optionsNode","hadStoredChoice","hasChoice","category","fallback","hasConsent","privacy","actions","accept","setConsent","reject","configure","selected","input","openConsentPreferences","setupDigiConsent","policy","DEFAULT_POLICY","setupConsentMode","setup","getPolicyCookieName","config","getFrontendData","options","setupDigiConsent","aps"]}