cookiecraft 1.0.9 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cookiecraft.css +1 -1
- package/dist/cookiecraft.esm.js +25 -31
- package/dist/cookiecraft.esm.js.map +1 -1
- package/dist/cookiecraft.js +25 -31
- package/dist/cookiecraft.js.map +1 -1
- package/dist/cookiecraft.min.js +1 -1
- package/dist/cookiecraft.min.js.map +1 -1
- package/dist/stats.html +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookiecraft.esm.js","sources":["../src/core/StorageManager.ts","../src/core/ConsentManager.ts","../src/core/EventEmitter.ts","../src/blocking/ScriptBlocker.ts","../src/blocking/CategoryManager.ts","../src/utils/sanitize.ts","../src/utils/color.ts","../src/ui/Banner.ts","../src/ui/PreferenceCenter.ts","../src/ui/FloatingWidget.ts","../src/integrations/GTMConsentMode.ts","../src/integrations/DataLayerManager.ts","../src/utils/cookies.ts","../src/i18n/translations.ts","../src/core/CookieConsent.ts"],"sourcesContent":["/**\n * StorageManager - Manages localStorage persistence for consent records\n */\n\nimport { ConsentCategories, ConsentRecord } from '../types';\n\nexport class StorageManager {\n private static readonly STORAGE_KEY = 'cookiecraft_consent';\n public static readonly EXPIRY_MONTHS = 13;\n\n /**\n * Save consent record to localStorage\n */\n public save(consent: ConsentRecord): void {\n try {\n localStorage.setItem(\n StorageManager.STORAGE_KEY,\n JSON.stringify(consent)\n );\n } catch (e) {\n console.error('Failed to save consent:', e);\n }\n }\n\n /**\n * Load consent record from localStorage\n */\n public load(): ConsentRecord | null {\n try {\n const data = localStorage.getItem(StorageManager.STORAGE_KEY);\n if (!data) return null;\n\n const parsed = JSON.parse(data);\n\n // Validate schema\n if (!this.validateSchema(parsed)) {\n // Try migration\n const migrated = this.migrate(parsed);\n if (migrated) {\n this.save(migrated);\n return migrated;\n }\n return null;\n }\n\n return parsed;\n } catch (e) {\n console.error('Failed to load consent:', e);\n return null;\n }\n }\n\n /**\n * Clear consent record from localStorage\n */\n public clear(): void {\n try {\n localStorage.removeItem(StorageManager.STORAGE_KEY);\n } catch (e) {\n console.error('Failed to clear consent:', e);\n }\n }\n\n /**\n * Check if consent record has expired\n */\n public isExpired(consent: ConsentRecord): boolean {\n const expiry = new Date(consent.expiresAt);\n if (isNaN(expiry.getTime())) return true;\n return expiry < new Date();\n }\n\n /**\n * Validate consent record schema\n */\n private validateSchema(data: any): boolean {\n return (\n data &&\n typeof data.version === 'number' &&\n typeof data.timestamp === 'string' &&\n typeof data.categories === 'object' &&\n typeof data.expiresAt === 'string'\n );\n }\n\n /**\n * Migrate old consent format to new format\n * Returns null if migration fails\n */\n private migrate(data: unknown): ConsentRecord | null {\n if (!data || typeof data !== 'object') return null;\n\n const record = data as Record<string, unknown>;\n\n // Attempt to reconstruct a valid record from partial data\n if (record.categories && typeof record.categories === 'object') {\n const now = new Date();\n const expiryDate = new Date(now);\n expiryDate.setMonth(expiryDate.getMonth() + StorageManager.EXPIRY_MONTHS);\n\n // Coerce category values to booleans\n const rawCategories = record.categories as Record<string, unknown>;\n const categories: ConsentCategories = {\n necessary: rawCategories.necessary === true,\n analytics: rawCategories.analytics === true,\n marketing: rawCategories.marketing === true,\n };\n if ('preferences' in rawCategories) {\n categories.preferences = rawCategories.preferences === true;\n }\n\n return {\n version: typeof record.version === 'number' ? record.version : 1,\n timestamp: typeof record.timestamp === 'string' ? record.timestamp : now.toISOString(),\n categories,\n expiresAt: typeof record.expiresAt === 'string' ? record.expiresAt : expiryDate.toISOString(),\n };\n }\n\n return null;\n }\n}\n","/**\n * ConsentManager - Handles consent logic and validation\n */\n\nimport { ConsentConfig, ConsentCategories, ConsentRecord } from '../types';\nimport { StorageManager } from './StorageManager';\n\nexport class ConsentManager {\n private consent: ConsentRecord | null = null;\n private config: ConsentConfig;\n\n constructor(config: ConsentConfig) {\n this.config = config;\n }\n\n /**\n * Validate consent categories\n */\n public validateConsent(categories: ConsentCategories): boolean {\n // Necessary cookies must always be enabled\n if (!categories.necessary) {\n return false;\n }\n\n // Validate against config (skip if no categories configured)\n if (this.config.categories && Object.keys(this.config.categories).length > 0) {\n for (const key of Object.keys(categories)) {\n if (!(key in this.config.categories)) {\n return false;\n }\n }\n }\n\n // Coerce all values to booleans\n for (const key of Object.keys(categories)) {\n categories[key] = categories[key] === true;\n }\n\n return true;\n }\n\n /**\n * Update consent with new categories\n */\n public updateConsent(categories: ConsentCategories): ConsentRecord {\n if (!this.validateConsent(categories)) {\n throw new Error('Invalid consent categories');\n }\n\n this.consent = this.createConsentRecord(categories);\n return this.consent;\n }\n\n /**\n * Check if user needs to give consent\n */\n public needsConsent(): boolean {\n return this.consent === null;\n }\n\n /**\n * Check if stored consent needs update due to policy change\n */\n public needsUpdate(storedConsent: ConsentRecord): boolean {\n return storedConsent.version < this.config.revision;\n }\n\n /**\n * Get current consent record\n */\n public getCurrentConsent(): ConsentRecord | null {\n return this.consent;\n }\n\n /**\n * Create a new consent record\n */\n private createConsentRecord(categories: ConsentCategories): ConsentRecord {\n const now = new Date();\n const expiryDate = new Date(now);\n expiryDate.setMonth(expiryDate.getMonth() + StorageManager.EXPIRY_MONTHS);\n\n return {\n version: this.config.revision,\n timestamp: now.toISOString(),\n categories: { ...categories },\n expiresAt: expiryDate.toISOString(),\n };\n }\n}\n","/**\n * EventEmitter - Simple pub/sub pattern for internal and external events\n */\n\nimport { EventCallback } from '../types';\n\nexport class EventEmitter {\n private events: Map<string, Set<EventCallback>> = new Map();\n\n /**\n * Register an event handler\n */\n public on(event: string, callback: EventCallback): void {\n if (!this.events.has(event)) {\n this.events.set(event, new Set());\n }\n this.events.get(event)!.add(callback);\n }\n\n /**\n * Unregister an event handler\n */\n public off(event: string, callback: EventCallback): void {\n if (this.events.has(event)) {\n this.events.get(event)!.delete(callback);\n }\n }\n\n /**\n * Emit an event with optional data\n */\n public emit(event: string, data?: any): void {\n if (this.events.has(event)) {\n this.events.get(event)!.forEach((callback) => {\n try {\n callback(data);\n } catch (e) {\n console.error(`Error in event handler for ${event}:`, e);\n }\n });\n }\n }\n\n /**\n * Clear all event handlers\n */\n public clear(): void {\n this.events.clear();\n }\n\n /**\n * Clear handlers for a specific event\n */\n public clearEvent(event: string): void {\n this.events.delete(event);\n }\n}\n","/**\n * ScriptBlocker - Prevents scripts from executing before consent using MutationObserver\n */\n\nimport { ConsentCategories } from '../types';\nimport { CategoryManager } from './CategoryManager';\nimport { EventEmitter } from '../core/EventEmitter';\n\nexport class ScriptBlocker {\n private observer: MutationObserver | null = null;\n private blockedScripts: Map<string, HTMLScriptElement> = new Map();\n private categoryManager: CategoryManager;\n private eventEmitter: EventEmitter;\n private currentConsent: ConsentCategories | null = null;\n\n constructor(categoryManager: CategoryManager, eventEmitter: EventEmitter) {\n this.categoryManager = categoryManager;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Initialize script blocking\n */\n public init(): void {\n // Block all existing scripts\n this.blockExistingScripts();\n\n // Watch for dynamically added scripts (GTM, etc.)\n this.observeDOM();\n }\n\n /**\n * Block all scripts (reset consent)\n */\n public block(): void {\n this.currentConsent = null;\n this.blockedScripts.clear();\n this.blockExistingScripts();\n }\n\n /**\n * Unblock scripts based on consent categories\n */\n public unblock(categories: ConsentCategories): void {\n this.currentConsent = categories;\n\n // Reactivate blocked scripts based on consent\n const toRemove: string[] = [];\n this.blockedScripts.forEach((script, id) => {\n const category = this.categoryManager.getCategoryForScript(script);\n if (category && this.categoryManager.isAllowed(category, categories)) {\n this.reactivateScript(script);\n toRemove.push(id);\n }\n });\n\n // Remove after iteration to avoid modifying map during forEach\n toRemove.forEach((id) => this.blockedScripts.delete(id));\n }\n\n /**\n * Destroy the blocker and stop observing\n */\n public destroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n\n /**\n * Block all existing scripts with data-cookieconsent attribute\n */\n private blockExistingScripts(): void {\n const scripts = document.querySelectorAll('script[data-cookieconsent]');\n scripts.forEach((script) => {\n if (script instanceof HTMLScriptElement) {\n this.processScript(script);\n }\n });\n }\n\n /**\n * Observe DOM for dynamically added scripts\n */\n private observeDOM(): void {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (\n node instanceof HTMLScriptElement &&\n node.hasAttribute('data-cookieconsent')\n ) {\n this.processScript(node);\n }\n });\n });\n });\n\n this.observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n }\n\n /**\n * Process a script element - block or allow based on consent\n */\n private processScript(script: HTMLScriptElement): void {\n const category = this.categoryManager.getCategoryForScript(script);\n\n if (!category) return;\n\n // Check if consent allows this category\n if (\n this.currentConsent &&\n this.categoryManager.isAllowed(category, this.currentConsent)\n ) {\n // Already have consent, don't block\n return;\n }\n\n // Block the script by changing its type\n if (script.type !== 'text/plain') {\n const id = this.generateScriptId(script);\n\n // Don't re-block scripts we already know about\n if (this.blockedScripts.has(id)) return;\n\n // Store original type if it exists\n const originalType = script.type || 'text/javascript';\n script.setAttribute('data-original-type', originalType);\n\n script.type = 'text/plain';\n this.blockedScripts.set(id, script);\n }\n }\n\n /**\n * Reactivate a blocked script by creating a new one with correct type\n */\n private reactivateScript(script: HTMLScriptElement): void {\n // Clone script and change type to execute it\n const newScript = document.createElement('script');\n\n // Copy attributes\n Array.from(script.attributes).forEach((attr) => {\n if (attr.name !== 'type' && attr.name !== 'data-original-type') {\n newScript.setAttribute(attr.name, attr.value);\n }\n });\n\n // Set correct type\n const originalType = script.getAttribute('data-original-type') || 'text/javascript';\n newScript.type = originalType;\n\n // Copy content\n if (script.src) {\n newScript.src = script.src;\n } else {\n newScript.textContent = script.textContent;\n }\n\n // Replace old script\n if (script.parentNode) {\n script.parentNode.insertBefore(newScript, script);\n script.parentNode.removeChild(script);\n }\n\n this.eventEmitter.emit('script:activated', {\n category: script.getAttribute('data-cookieconsent'),\n src: script.src || 'inline',\n });\n }\n\n /**\n * Generate a stable, deterministic ID for a script element\n */\n private generateScriptId(script: HTMLScriptElement): string {\n // Use src for external scripts (stable across calls)\n if (script.src) {\n return `src:${script.src}`;\n }\n\n // For inline scripts, use a hash of the content for stability\n const content = script.textContent || '';\n const category = script.getAttribute('data-cookieconsent') || '';\n\n // Use existing data-cc-id if present (allows reset/re-block)\n const existingId = script.getAttribute('data-cc-id');\n if (existingId) return existingId;\n\n // Generate deterministic ID from content + category\n const id = `inline:${category}:${this.simpleHash(content)}`;\n script.setAttribute('data-cc-id', id);\n return id;\n }\n\n /**\n * Simple hash function for content-based script identification\n */\n private simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n}\n","/**\n * CategoryManager - Maps scripts to consent categories and manages patterns\n */\n\nimport { ConsentCategories } from '../types';\n\nexport class CategoryManager {\n private categories: Map<string, string[]> = new Map();\n\n constructor() {\n this.initializeDefaultPatterns();\n }\n\n /**\n * Register a category with URL patterns\n */\n public registerCategory(name: string, patterns: string[]): void {\n this.categories.set(name, patterns);\n }\n\n /**\n * Get category for a script element\n */\n public getCategoryForScript(script: HTMLScriptElement): string | null {\n // Explicit category attribute takes precedence\n const explicitCategory = script.getAttribute('data-cookieconsent');\n if (explicitCategory) {\n return explicitCategory;\n }\n\n // Try to match by src pattern\n const src = script.src;\n if (!src) return null;\n\n for (const [category, patterns] of this.categories) {\n if (patterns.some((pattern) => src.includes(pattern))) {\n return category;\n }\n }\n\n return null;\n }\n\n /**\n * Check if a category is allowed based on consent\n */\n public isAllowed(category: string, consent: ConsentCategories): boolean {\n return consent[category] === true;\n }\n\n /**\n * Initialize default URL patterns for common tracking services\n * Note: GTM is NOT auto-categorized — it should be managed via GTM Consent Mode v2\n */\n private initializeDefaultPatterns(): void {\n this.categories.set('analytics', [\n 'google-analytics.com',\n 'analytics.google.com',\n 'plausible.io',\n 'matomo.org',\n 'hotjar.com',\n 'mixpanel.com',\n 'segment.com',\n 'amplitude.com',\n ]);\n\n this.categories.set('marketing', [\n 'googletagmanager.com',\n 'facebook.net',\n 'facebook.com/tr',\n 'connect.facebook.net',\n 'doubleclick.net',\n 'ads.google.com',\n 'linkedin.com/analytics',\n 'twitter.com/i/adsct',\n 'pinterest.com/ct',\n 'adroll.com',\n 'taboola.com',\n 'outbrain.com',\n 'tiktok.com',\n ]);\n\n this.categories.set('necessary', []);\n }\n}\n","/**\n * Sanitization utilities to prevent XSS in HTML templates\n */\n\nconst HTML_ESCAPE_MAP: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n};\n\nconst HTML_ESCAPE_RE = /[&<>\"'`]/g;\n\n/**\n * Escape HTML entities in a string to prevent XSS\n */\nexport function escapeHtml(str: string): string {\n return str.replace(HTML_ESCAPE_RE, (char) => HTML_ESCAPE_MAP[char] || char);\n}\n\n/**\n * Sanitize a URL - only allow http(s) and relative URLs\n */\nexport function sanitizeUrl(url: string): string {\n const trimmed = url.trim();\n if (\n trimmed.startsWith('https://') ||\n trimmed.startsWith('http://') ||\n trimmed.startsWith('/') ||\n trimmed.startsWith('./')\n ) {\n return escapeHtml(trimmed);\n }\n return '';\n}\n\n/**\n * Sanitize a CSS color value - only allow valid hex, rgb, hsl, named colors\n */\nexport function sanitizeColor(color: string): string {\n const trimmed = color.trim();\n // Allow hex colors\n if (/^#[0-9a-fA-F]{3,8}$/.test(trimmed)) return trimmed;\n // Allow rgb/rgba\n if (/^rgba?\\(\\s*[\\d\\s,./%]+\\)$/.test(trimmed)) return trimmed;\n // Allow hsl/hsla\n if (/^hsla?\\(\\s*[\\d\\s,./%deg]+\\)$/.test(trimmed)) return trimmed;\n // Allow CSS named colors (basic set) but block CSS keywords that could be abused\n const CSS_KEYWORDS = ['inherit', 'initial', 'unset', 'revert', 'revert-layer'];\n if (/^[a-zA-Z]+$/.test(trimmed) && !CSS_KEYWORDS.includes(trimmed.toLowerCase())) {\n return trimmed;\n }\n return '';\n}\n\n/**\n * Sanitize a CSS property value to prevent injection\n */\nexport function sanitizeCssValue(value: string): string {\n // Strip anything that could break out of CSS context\n return value.replace(/[;{}]/g, '').replace(/url\\s*\\(/gi, '').trim();\n}\n","/**\n * Normalize any supported color format to 6-digit hex\n * Supports: #RGB, #RRGGBB, #RRGGBBAA, named colors\n * Returns null if conversion fails\n */\nfunction normalizeToHex6(color: string): string | null {\n const trimmed = color.trim();\n\n // Already 6-digit hex\n if (/^#[0-9a-fA-F]{6}$/.test(trimmed)) {\n return trimmed;\n }\n\n // 3-digit hex → expand to 6-digit\n if (/^#[0-9a-fA-F]{3}$/.test(trimmed)) {\n const r = trimmed[1];\n const g = trimmed[2];\n const b = trimmed[3];\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n\n // 8-digit hex (with alpha) → strip alpha\n if (/^#[0-9a-fA-F]{8}$/.test(trimmed)) {\n return trimmed.substring(0, 7);\n }\n\n return null;\n}\n\n/**\n * Adjust a hex color brightness by a percentage\n * Negative = darker, positive = lighter\n */\nexport function adjustColorBrightness(color: string, percent: number): string {\n const hex6 = normalizeToHex6(color);\n if (!hex6) return color;\n\n const hex = hex6.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const adjust = (value: number) => {\n const adjusted = value + (value * percent / 100);\n return Math.max(0, Math.min(255, Math.round(adjusted)));\n };\n\n const toHex = (value: number) => {\n const h = value.toString(16);\n return h.length === 1 ? '0' + h : h;\n };\n\n return `#${toHex(adjust(r))}${toHex(adjust(g))}${toHex(adjust(b))}`;\n}\n\n/**\n * Build inline CSS custom properties for a primary color\n */\nexport function buildColorStyle(safeColor: string): string {\n if (!safeColor) return '';\n\n // Only generate hover color for hex colors\n const hex6 = normalizeToHex6(safeColor);\n if (!hex6) {\n return `--cc-primary: ${safeColor};`;\n }\n\n const hover = adjustColorBrightness(hex6, -15);\n return `--cc-primary: ${hex6}; --cc-primary-hover: ${hover};`;\n}\n","/**\n * Banner - Cookie consent banner component\n */\n\nimport { ConsentConfig, ConsentCategories } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeUrl, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class Banner {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private previousActiveElement: HTMLElement | null = null;\n\n constructor(config: ConsentConfig, eventEmitter: EventEmitter) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Show the banner\n */\n public show(): void {\n // Clear any pending hide timeout\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n\n const append = () => {\n if (!this.element) {\n this.previousActiveElement = document.activeElement as HTMLElement | null;\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n // Trigger animation\n requestAnimationFrame(() => {\n this.element?.classList.add('is-visible');\n });\n\n // Disable page interaction if configured\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = 'hidden';\n this.trapFocus();\n }\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n\n append();\n }\n\n /**\n * Hide the banner\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = '';\n }\n\n this.hideTimeout = setTimeout(() => {\n this.destroy();\n }, 300);\n }\n\n /**\n * Destroy the banner\n */\n public destroy(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n // Restore focus\n if (this.previousActiveElement && document.contains(this.previousActiveElement)) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n }\n\n /**\n * Create DOM structure for banner\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const position = this.config.position || 'bottom';\n const layout = this.config.layout || 'bar';\n const backdropBlur = this.config.backdropBlur !== false;\n const isModal = this.config.disablePageInteraction;\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const template = `\n <div\n class=\"cc-banner cc-banner--${escapeHtml(position)} cc-banner--${escapeHtml(layout)} ${backdropBlur ? 'cc-backdrop-blur' : ''}\"\n role=\"${isModal ? 'dialog' : 'region'}\"\n ${isModal ? 'aria-modal=\"true\"' : ''}\n aria-label=\"Cookie consent\"\n aria-live=\"polite\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <div class=\"cc-banner__container\">\n <div class=\"cc-banner__content\">\n <h2 class=\"cc-banner__title\">\n ${escapeHtml(translations.title || 'We use cookies')}\n </h2>\n <p class=\"cc-banner__description\">\n ${this.getDescriptionHTML()}\n </p>\n </div>\n <div class=\"cc-banner__actions\">\n <button\n class=\"cc-btn cc-btn--ghost\"\n data-action=\"reject\"\n aria-label=\"${escapeHtml(translations.rejectAll || 'Essentials only')}\"\n >\n ${escapeHtml(translations.rejectAll || 'Essentials only')}\n </button>\n <button\n class=\"cc-btn cc-btn--tertiary\"\n data-action=\"customize\"\n aria-label=\"${escapeHtml(translations.customize || 'Customize')}\"\n >\n ${escapeHtml(translations.customize || 'Customize')}\n </button>\n <button\n class=\"cc-btn cc-btn--accept\"\n data-action=\"accept\"\n aria-label=\"${escapeHtml(translations.acceptAll || 'Accept all')}\"\n >\n ${escapeHtml(translations.acceptAll || 'Accept all')}\n </button>\n </div>\n </div>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('[data-action]') as HTMLElement | null;\n if (!target) return;\n const action = target.getAttribute('data-action');\n\n switch (action) {\n case 'accept':\n this.handleAcceptAll();\n break;\n case 'reject':\n this.handleRejectAll();\n break;\n case 'customize':\n this.handleCustomize();\n break;\n }\n });\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.config.disablePageInteraction) {\n this.handleRejectAll();\n }\n });\n }\n\n /**\n * Handle accept all action\n */\n private handleAcceptAll(): void {\n const allCategories: ConsentCategories = { necessary: true, analytics: true, marketing: true };\n\n // Add all configured categories\n for (const key of Object.keys(this.config.categories)) {\n allCategories[key] = true;\n }\n\n this.eventEmitter.emit('consent:accept', allCategories);\n this.hide();\n }\n\n /**\n * Handle reject all action\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') necessaryOnly[key] = false;\n }\n\n this.eventEmitter.emit('consent:reject', necessaryOnly);\n this.hide();\n }\n\n /**\n * Handle customize action\n */\n private handleCustomize(): void {\n this.eventEmitter.emit('preferences:show');\n this.hide();\n }\n\n /**\n * Trap focus within banner (when disablePageInteraction is true)\n */\n private trapFocus(): void {\n const focusableElements = this.element?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (!focusableElements || focusableElements.length === 0) return;\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n firstFocusable?.focus();\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n } else if (!e.shiftKey && document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n });\n }\n\n /**\n * Generate description HTML with privacy policy link\n */\n private getDescriptionHTML(): string {\n const translations = this.config.translations || {};\n const defaultDescription = 'We use cookies to improve your experience on our site. You can choose which cookies you accept.';\n const description = escapeHtml(translations.description || defaultDescription);\n\n if (translations.privacyPolicyUrl) {\n const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);\n if (safeUrl) {\n const linkLabel = escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy');\n return `${description} <a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${linkLabel}</a>`;\n }\n }\n\n return description;\n }\n}\n","/**\n * PreferenceCenter - Modal for granular cookie preferences\n */\n\nimport { ConsentConfig, ConsentCategories } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeUrl, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class PreferenceCenter {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private currentConsent: ConsentCategories;\n private previousActiveElement: HTMLElement | null = null;\n\n constructor(\n config: ConsentConfig,\n eventEmitter: EventEmitter,\n currentConsent: ConsentCategories\n ) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n this.currentConsent = currentConsent;\n }\n\n /**\n * Show the preference center\n */\n public show(): void {\n const append = () => {\n if (!this.element) {\n this.previousActiveElement = document.activeElement as HTMLElement | null;\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n this.element.classList.add('is-visible');\n this.trapFocus();\n\n document.body.style.overflow = 'hidden';\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n append();\n }\n\n /**\n * Hide the preference center\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n document.body.style.overflow = '';\n\n // Restore focus to triggering element\n if (this.previousActiveElement && document.contains(this.previousActiveElement)) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n\n setTimeout(() => {\n this.destroy();\n }, 300);\n }\n\n /**\n * Destroy the preference center\n */\n public destroy(): void {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n\n /**\n * Create DOM structure for preference center\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const position = this.config.preferencesPosition || 'center';\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const privacyLinkHtml = translations.privacyPolicyUrl\n ? (() => {\n const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);\n if (!safeUrl) return '';\n return `\n <a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"cc-privacy-link\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>\n <polyline points=\"15 3 21 3 21 9\"/>\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/>\n </svg>\n ${escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy')}\n </a>\n `;\n })()\n : '';\n\n const template = `\n <div\n class=\"cc-modal cc-modal--${escapeHtml(position)}\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"cc-modal-title\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <div class=\"cc-modal__overlay\"></div>\n <div class=\"cc-modal__content\">\n <div class=\"cc-modal__header\">\n <h2 id=\"cc-modal-title\">\n ${escapeHtml(translations.preferencesTitle || translations.title || 'Cookie Preferences')}\n </h2>\n </div>\n\n <div class=\"cc-modal__body\">\n ${this.renderCategories()}\n </div>\n\n <div class=\"cc-modal__footer\">\n <div class=\"cc-modal__footer-links\">\n ${privacyLinkHtml}\n </div>\n <div class=\"cc-modal__footer-actions\">\n <button\n class=\"cc-btn cc-btn--secondary\"\n data-action=\"reject\"\n >\n ${escapeHtml(translations.essentialsOnly || 'Essentials only')}\n </button>\n <button\n class=\"cc-btn cc-btn--primary\"\n data-action=\"save\"\n >\n ${escapeHtml(translations.savePreferences || 'Save preferences')}\n </button>\n </div>\n </div>\n </div>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Render category toggles\n */\n private renderCategories(): string {\n const categories = Object.entries(this.config.categories);\n\n return categories\n .map(([key, config]) => {\n const checked = this.currentConsent[key] === true;\n const disabled = config.readOnly;\n\n return `\n <div class=\"cc-category\">\n <div class=\"cc-category__header\">\n <label class=\"cc-toggle ${disabled ? 'cc-toggle--disabled' : ''}\">\n <input\n type=\"checkbox\"\n data-category=\"${escapeHtml(key)}\"\n ${checked ? 'checked' : ''}\n ${disabled ? 'disabled' : ''}\n aria-label=\"${escapeHtml(config.label)} cookies\"\n >\n <span class=\"cc-toggle__slider\"></span>\n </label>\n <div class=\"cc-category__info\">\n <h3>${escapeHtml(config.label)}</h3>\n <p>${escapeHtml(config.description)}</p>\n </div>\n </div>\n </div>\n `;\n })\n .join('');\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('[data-action]') as HTMLElement | null;\n if (!target) return;\n const action = target.getAttribute('data-action');\n\n if (action === 'save') {\n this.handleSave();\n } else if (action === 'reject') {\n this.handleRejectAll();\n }\n });\n }\n\n /**\n * Handle save preferences\n */\n private handleSave(): void {\n const checkboxes = this.element?.querySelectorAll('input[data-category]');\n\n // Initialize all configured categories to false\n const categories: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') {\n categories[key] = false;\n }\n }\n\n // Override with actual checkbox values\n checkboxes?.forEach((checkbox) => {\n if (checkbox instanceof HTMLInputElement) {\n const category = checkbox.getAttribute('data-category');\n if (category) {\n categories[category] = checkbox.checked;\n }\n }\n });\n\n this.eventEmitter.emit('consent:update', categories);\n this.hide();\n }\n\n /**\n * Handle reject all\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') necessaryOnly[key] = false;\n }\n\n this.eventEmitter.emit('consent:reject', necessaryOnly);\n this.hide();\n }\n\n /**\n * Trap focus within modal\n */\n private trapFocus(): void {\n const focusableElements = this.element?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (!focusableElements || focusableElements.length === 0) return;\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n firstFocusable?.focus();\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n } else if (!e.shiftKey && document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n });\n }\n}\n","/**\n * FloatingWidget - Permanent cookie settings button\n * Stays visible at all times for easy access to preferences\n */\n\nimport { ConsentConfig } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class FloatingWidget {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private isVisible: boolean = false;\n\n constructor(config: ConsentConfig, eventEmitter: EventEmitter) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Show the floating widget\n */\n public show(): void {\n const append = () => {\n if (!this.element) {\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n // Delay to allow for transition\n requestAnimationFrame(() => {\n this.element?.classList.add('is-visible');\n this.isVisible = true;\n });\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n append();\n }\n\n /**\n * Hide the floating widget\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n this.isVisible = false;\n }\n\n /**\n * Destroy the widget\n */\n public destroy(): void {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n this.isVisible = false;\n }\n\n /**\n * Check if widget is visible\n */\n public getIsVisible(): boolean {\n return this.isVisible;\n }\n\n /**\n * Create DOM structure for floating widget\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const widgetPosition = this.config.widgetPosition || 'bottom-right';\n const widgetStyle = this.config.widgetStyle || 'full';\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const template = `\n <div\n class=\"cc-widget cc-widget--${escapeHtml(widgetPosition)} cc-widget--${escapeHtml(widgetStyle)}\"\n role=\"button\"\n aria-label=\"${escapeHtml(translations.cookieSettings || 'Cookie settings')}\"\n tabindex=\"0\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <svg class=\"cc-widget__icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <path id=\"cc-ck-a\" d=\"M6,9 C5.448,9 5,8.552 5,8 C5,7.448 5.448,7 6,7 C6.552,7 7,7.448 7,8 C7,8.552 6.552,9 6,9 Z M0.5,5 C0.776,5 1,5.224 1,5.5 C1,5.776 0.776,6 0.5,6 C0.224,6 0,5.776 0,5.5 C0,5.224 0.224,5 0.5,5 Z M1.5,0 C1.776,0 2,0.224 2,0.5 C2,0.776 1.776,1 1.5,1 C1.224,1 1,0.776 1,0.5 C1,0.224 1.224,0 1.5,0 Z\"/>\n <path id=\"cc-ck-c\" d=\"M16.899,14.984 C14.727,14.802 12.991,13.088 12.773,10.927 C10.117,10.808 8,8.617 8,5.932 C8,4.837 8.352,3.824 8.949,3 C5.027,3.515 2,6.87 2,10.932 C2,15.35 5.582,18.932 10,18.932 C12.939,18.932 15.509,17.346 16.899,14.984 Z M18.623,15.998 C16.839,19.029 13.583,20.932 10,20.932 C4.477,20.932 0,16.454 0,10.932 C0,5.897 3.74,1.666 8.689,1.017 C10.429,0.789 11.599,2.753 10.568,4.174 C10.2,4.682 10,5.289 10,5.932 C10,7.537 11.265,8.857 12.862,8.929 C13.854,8.973 14.663,9.738 14.763,10.726 C14.884,11.932 15.857,12.889 17.067,12.991 C18.535,13.114 19.37,14.729 18.623,15.998 Z M10,18 C8.343,18 7,16.657 7,15 C7,13.343 8.343,12 10,12 C11.657,12 13,13.343 13,15 C13,16.657 11.657,18 10,18 Z M10,16 C10.552,16 11,15.552 11,15 C11,14.448 10.552,14 10,14 C9.448,14 9,14.448 9,15 C9,15.552 9.448,16 10,16 Z M4.5,14 C3.672,14 3,13.328 3,12.5 C3,11.672 3.672,11 4.5,11 C5.328,11 6,11.672 6,12.5 C6,13.328 5.328,14 4.5,14 Z M4.5,12 C4.224,12 4,12.224 4,12.5 C4,12.776 4.224,13 4.5,13 C4.776,13 5,12.776 5,12.5 C5,12.224 4.776,12 4.5,12 Z M5.5,9 C4.672,9 4,8.328 4,7.5 C4,6.672 4.672,6 5.5,6 C6.328,6 7,6.672 7,7.5 C7,8.328 6.328,9 5.5,9 Z M5.5,7 C5.224,7 5,7.224 5,7.5 C5,7.776 5.224,8 5.5,8 C5.776,8 6,7.776 6,7.5 C6,7.224 5.776,7 5.5,7 Z\"/>\n </defs>\n <g fill=\"currentColor\" fill-rule=\"evenodd\" transform=\"translate(3 1)\">\n <g transform=\"translate(4 7)\">\n <use href=\"#cc-ck-a\"/>\n </g>\n <use href=\"#cc-ck-c\"/>\n </g>\n </svg>\n <span class=\"cc-widget__text\">\n ${escapeHtml(translations.cookies || 'Cookies')}\n </span>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', () => {\n this.handleClick();\n });\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleClick();\n }\n });\n }\n\n /**\n * Handle widget click\n */\n private handleClick(): void {\n this.eventEmitter.emit('preferences:show');\n }\n}\n","/**\n * GTMConsentMode - Full integration with Google Consent Mode v2\n */\n\nimport { ConsentCategories, ConsentConfig, GTMConsent } from '../types';\nimport { DataLayerManager } from './DataLayerManager';\n\nexport class GTMConsentMode {\n private dataLayerManager: DataLayerManager;\n private config: ConsentConfig;\n\n constructor(dataLayerManager: DataLayerManager, config: ConsentConfig) {\n this.dataLayerManager = dataLayerManager;\n this.config = config;\n }\n\n /**\n * Set default consent state (MUST be called BEFORE GTM loads)\n * All non-essential consent types default to 'denied' per GDPR\n */\n public setDefaultConsent(): void {\n const defaults: Record<string, string> = {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n functionality_storage: 'denied',\n personalization_storage: 'denied',\n security_storage: 'granted',\n };\n\n const waitForUpdate = this.config.gtmWaitForUpdate ?? 500;\n if (waitForUpdate > 0) {\n (defaults as Record<string, string | number>)['wait_for_update'] = waitForUpdate;\n }\n\n this.dataLayerManager.pushConsent('default', defaults);\n\n if (this.config.gtmUrlPassthrough) {\n this.dataLayerManager.pushSet('url_passthrough', true);\n }\n\n if (this.config.gtmAdsDataRedaction) {\n this.dataLayerManager.pushSet('ads_data_redaction', true);\n }\n }\n\n /**\n * Update consent state based on user choices\n */\n public updateConsent(categories: ConsentCategories): void {\n const gtmConsent = this.mapCategoriesToGTM(categories);\n this.dataLayerManager.pushConsent('update', gtmConsent);\n }\n\n /**\n * Map consent categories to GTM Consent Mode v2 format\n */\n private mapCategoriesToGTM(categories: ConsentCategories): GTMConsent {\n // When preferences category is not configured, default functionality to granted\n const hasPreferencesCategory = 'preferences' in this.config.categories;\n const preferencesGranted = hasPreferencesCategory\n ? categories.preferences === true\n : true;\n\n return {\n ad_storage: categories.marketing ? 'granted' : 'denied',\n ad_user_data: categories.marketing ? 'granted' : 'denied',\n ad_personalization: categories.marketing ? 'granted' : 'denied',\n analytics_storage: categories.analytics ? 'granted' : 'denied',\n functionality_storage: preferencesGranted ? 'granted' : 'denied',\n personalization_storage: preferencesGranted ? 'granted' : 'denied',\n security_storage: 'granted',\n };\n }\n}\n","/**\n * DataLayerManager - Manages Google Tag Manager dataLayer communication\n * Implements Google Consent Mode v2 correctly via gtag() API\n */\n\nexport class DataLayerManager {\n /**\n * Initialize gtag function if not already present\n * This must be called before GTM loads for consent defaults to work\n */\n private ensureGtag(): void {\n window.dataLayer = window.dataLayer || [];\n\n if (typeof window.gtag !== 'function') {\n window.gtag = function () {\n window.dataLayer!.push(arguments);\n };\n }\n }\n\n /**\n * Push consent command via gtag (correct format for Google Consent Mode v2)\n * Usage: pushConsent('default', {...}) or pushConsent('update', {...})\n */\n public pushConsent(action: string, params: Record<string, string | number>): void {\n this.ensureGtag();\n window.gtag!('consent', action, params);\n }\n\n /**\n * Push a 'set' command via gtag for advanced features\n * Usage: pushSet('url_passthrough', true) or pushSet('ads_data_redaction', true)\n */\n public pushSet(key: string, value: boolean | string | number): void {\n this.ensureGtag();\n window.gtag!('set', key, value);\n }\n}\n","/**\n * Cookie utilities for clearing non-essential cookies on rejection/withdrawal\n */\n\n/** Known analytics cookie name patterns */\nconst ANALYTICS_COOKIE_PATTERNS = [\n /^_ga/, // Google Analytics\n /^_gid/, // Google Analytics\n /^_gat/, // Google Analytics\n /^_gcl/, // Google Ads conversion linker\n /^_hj/, // Hotjar\n /^_pk_/, // Matomo/Piwik\n /^mp_/, // Mixpanel\n /^ajs_/, // Segment\n /^amplitude/, // Amplitude\n /^plausible/, // Plausible\n];\n\n/** Known marketing cookie name patterns */\nconst MARKETING_COOKIE_PATTERNS = [\n /^_fbp/, // Facebook Pixel\n /^_fbc/, // Facebook click\n /^fr$/, // Facebook\n /^_pin_/, // Pinterest\n /^_tt_/, // TikTok\n /^li_/, // LinkedIn\n /^_uet/, // Microsoft/Bing Ads\n /^IDE$/, // DoubleClick\n /^test_cookie/, // DoubleClick\n /^MUID$/, // Microsoft\n /^NID$/, // Google Ads\n];\n\n/** Known preferences cookie name patterns */\nconst PREFERENCES_COOKIE_PATTERNS = [\n /^lang$/,\n /^locale$/,\n /^i18n/,\n];\n\nconst CATEGORY_PATTERNS: Record<string, RegExp[]> = {\n analytics: ANALYTICS_COOKIE_PATTERNS,\n marketing: MARKETING_COOKIE_PATTERNS,\n preferences: PREFERENCES_COOKIE_PATTERNS,\n};\n\n/**\n * Get all cookies as name/value pairs\n */\nfunction getAllCookies(): string[] {\n return document.cookie.split(';').map(c => c.trim().split('=')[0]).filter(Boolean);\n}\n\n/**\n * Delete a cookie by name, trying all common path/domain combinations\n */\nfunction deleteCookie(name: string): void {\n const hostname = window.location.hostname;\n const paths = ['/', window.location.pathname];\n\n // Build domain variants: current domain + parent domains\n const domains = ['', hostname];\n const parts = hostname.split('.');\n if (parts.length > 2) {\n // Add parent domain (e.g., .example.com for sub.example.com)\n domains.push('.' + parts.slice(-2).join('.'));\n }\n domains.push('.' + hostname);\n\n for (const domain of domains) {\n for (const path of paths) {\n const domainPart = domain ? `; domain=${domain}` : '';\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; secure`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; samesite=lax`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; samesite=none; secure`;\n }\n }\n}\n\n/**\n * Clear cookies matching patterns for denied categories\n */\nexport function clearCookiesForCategory(category: string): void {\n const patterns = CATEGORY_PATTERNS[category];\n if (!patterns) return;\n\n const cookies = getAllCookies();\n for (const name of cookies) {\n if (patterns.some(pattern => pattern.test(name))) {\n deleteCookie(name);\n }\n }\n}\n\n/**\n * Clear all non-essential cookies based on consent categories\n */\nexport function clearDeniedCookies(categories: Record<string, boolean>): void {\n for (const [category, allowed] of Object.entries(categories)) {\n if (!allowed && category !== 'necessary') {\n clearCookiesForCategory(category);\n }\n }\n}\n","/**\n * Built-in translations for supported languages\n * Users can override any string via config.translations\n */\n\nimport { Translation } from '../types';\n\nconst en: Translation = {\n title: 'We use cookies',\n description: 'We use cookies to improve your experience on our site. You can choose which cookies you accept.',\n acceptAll: 'Accept all',\n rejectAll: 'Essentials only',\n customize: 'Customize',\n savePreferences: 'Save preferences',\n essentialsOnly: 'Essentials only',\n preferencesTitle: 'Cookie Preferences',\n cookieSettings: 'Cookie settings',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Privacy Policy',\n};\n\nconst fr: Translation = {\n title: 'Nous utilisons des cookies',\n description: 'Ce site utilise des cookies pour améliorer votre expérience de navigation. Vous pouvez choisir les cookies que vous acceptez.',\n acceptAll: 'Tout accepter',\n rejectAll: 'Essentiels uniquement',\n customize: 'Personnaliser',\n savePreferences: 'Enregistrer',\n essentialsOnly: 'Essentiels uniquement',\n preferencesTitle: 'Préférences des cookies',\n cookieSettings: 'Paramètres des cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Politique de confidentialité',\n};\n\nconst de: Translation = {\n title: 'Wir verwenden Cookies',\n description: 'Diese Website verwendet Cookies, um Ihr Erlebnis zu verbessern. Sie können wählen, welche Cookies Sie akzeptieren.',\n acceptAll: 'Alle akzeptieren',\n rejectAll: 'Nur essenzielle',\n customize: 'Anpassen',\n savePreferences: 'Speichern',\n essentialsOnly: 'Nur essenzielle',\n preferencesTitle: 'Cookie-Einstellungen',\n cookieSettings: 'Cookie-Einstellungen',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Datenschutzrichtlinie',\n};\n\nconst es: Translation = {\n title: 'Usamos cookies',\n description: 'Este sitio utiliza cookies para mejorar su experiencia. Puede elegir qué cookies acepta.',\n acceptAll: 'Aceptar todo',\n rejectAll: 'Solo esenciales',\n customize: 'Personalizar',\n savePreferences: 'Guardar',\n essentialsOnly: 'Solo esenciales',\n preferencesTitle: 'Preferencias de cookies',\n cookieSettings: 'Configuración de cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Política de privacidad',\n};\n\nconst it: Translation = {\n title: 'Utilizziamo i cookie',\n description: 'Questo sito utilizza i cookie per migliorare la tua esperienza. Puoi scegliere quali cookie accettare.',\n acceptAll: 'Accetta tutti',\n rejectAll: 'Solo essenziali',\n customize: 'Personalizza',\n savePreferences: 'Salva',\n essentialsOnly: 'Solo essenziali',\n preferencesTitle: 'Preferenze cookie',\n cookieSettings: 'Impostazioni cookie',\n cookies: 'Cookie',\n privacyPolicyLabel: 'Informativa sulla privacy',\n};\n\nconst nl: Translation = {\n title: 'Wij gebruiken cookies',\n description: 'Deze site maakt gebruik van cookies om uw ervaring te verbeteren. U kunt kiezen welke cookies u accepteert.',\n acceptAll: 'Alles accepteren',\n rejectAll: 'Alleen essentieel',\n customize: 'Aanpassen',\n savePreferences: 'Opslaan',\n essentialsOnly: 'Alleen essentieel',\n preferencesTitle: 'Cookie-voorkeuren',\n cookieSettings: 'Cookie-instellingen',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Privacybeleid',\n};\n\nconst pt: Translation = {\n title: 'Utilizamos cookies',\n description: 'Este site utiliza cookies para melhorar a sua experiência. Pode escolher quais cookies aceita.',\n acceptAll: 'Aceitar todos',\n rejectAll: 'Apenas essenciais',\n customize: 'Personalizar',\n savePreferences: 'Guardar',\n essentialsOnly: 'Apenas essenciais',\n preferencesTitle: 'Preferências de cookies',\n cookieSettings: 'Definições de cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Política de privacidade',\n};\n\nexport const builtInTranslations: Record<string, Translation> = {\n en,\n fr,\n de,\n es,\n it,\n nl,\n pt,\n};\n","/**\n * CookieConsent - Main orchestrator class\n */\n\nimport { ConsentConfig, ConsentCategories, ConsentRecord, ConsentEvent, EventCallback } from '../types';\nimport { ConsentManager } from './ConsentManager';\nimport { StorageManager } from './StorageManager';\nimport { EventEmitter } from './EventEmitter';\nimport { ScriptBlocker } from '../blocking/ScriptBlocker';\nimport { CategoryManager } from '../blocking/CategoryManager';\nimport { Banner } from '../ui/Banner';\nimport { PreferenceCenter } from '../ui/PreferenceCenter';\nimport { FloatingWidget } from '../ui/FloatingWidget';\nimport { GTMConsentMode } from '../integrations/GTMConsentMode';\nimport { DataLayerManager } from '../integrations/DataLayerManager';\nimport { clearDeniedCookies } from '../utils/cookies';\nimport { builtInTranslations } from '../i18n/translations';\n\n// Import CSS\nimport '../styles/banner.css';\nimport '../styles/animations.css';\nimport '../styles/preferences.css';\nimport '../styles/widget.css';\n\nexport class CookieConsent {\n private config: ConsentConfig;\n private consentManager: ConsentManager;\n private storageManager: StorageManager;\n private scriptBlocker: ScriptBlocker;\n private eventEmitter: EventEmitter;\n private banner: Banner | null = null;\n private preferenceCenter: PreferenceCenter | null = null;\n private floatingWidget: FloatingWidget | null = null;\n private gtmIntegration: GTMConsentMode | null = null;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor(config: ConsentConfig) {\n // SSR guard\n if (typeof window === 'undefined') {\n this.config = config as ConsentConfig;\n this.consentManager = null as any;\n this.storageManager = null as any;\n this.eventEmitter = null as any;\n this.scriptBlocker = null as any;\n return;\n }\n\n this.config = this.validateConfig(config);\n this.consentManager = new ConsentManager(this.config);\n this.storageManager = new StorageManager();\n this.eventEmitter = new EventEmitter();\n this.scriptBlocker = new ScriptBlocker(\n new CategoryManager(),\n this.eventEmitter\n );\n\n if (this.config.gtmConsentMode) {\n this.gtmIntegration = new GTMConsentMode(new DataLayerManager(), this.config);\n }\n\n // Listen for consent events — callbacks are fired AFTER consent is persisted\n this.eventEmitter.on('consent:accept', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onAccept?.(categories);\n });\n\n this.eventEmitter.on('consent:reject', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onReject?.();\n });\n\n this.eventEmitter.on('consent:update', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onChange?.(categories);\n });\n\n this.eventEmitter.on('preferences:show', () => {\n this.showPreferences();\n });\n }\n\n /**\n * Initialize the cookie consent system\n */\n public init(): void {\n if (typeof window === 'undefined') return;\n\n // 1. Start blocking scripts immediately\n this.scriptBlocker.init();\n\n // 2. Set GTM default consent BEFORE checking storage\n if (this.gtmIntegration) {\n this.gtmIntegration.setDefaultConsent();\n }\n\n // 3. Check for existing consent\n const storedConsent = this.storageManager.load();\n\n if (storedConsent && !this.storageManager.isExpired(storedConsent)) {\n if (this.consentManager.needsUpdate(storedConsent)) {\n if (this.config.autoShow) {\n this.showBanner();\n }\n } else {\n this.applyConsent(storedConsent.categories);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(storedConsent.categories);\n }\n\n this.eventEmitter.emit('consent:load', storedConsent);\n\n if (this.config.showWidget) {\n this.showFloatingWidget();\n }\n }\n } else {\n if (this.config.autoShow) {\n this.showBanner();\n }\n }\n\n // Store instance globally\n window.cookieConsent = this;\n\n this.eventEmitter.emit('consent:init');\n }\n\n /**\n * Show the banner\n */\n public show(): void {\n this.showBanner();\n }\n\n /**\n * Hide the banner\n */\n public hide(): void {\n this.banner?.hide();\n }\n\n /**\n * Show preferences modal\n */\n public showPreferences(): void {\n const stored = this.storageManager.load()?.categories;\n // Default to all ON when no prior consent\n const currentConsent: ConsentCategories = stored || {\n necessary: true,\n analytics: true,\n marketing: true,\n };\n\n // Add any configured categories not in current consent\n for (const key of Object.keys(this.config.categories)) {\n if (!(key in currentConsent)) {\n currentConsent[key] = key === 'necessary';\n }\n }\n\n if (this.preferenceCenter) {\n this.preferenceCenter.destroy();\n }\n\n this.preferenceCenter = new PreferenceCenter(\n this.config,\n this.eventEmitter,\n currentConsent\n );\n this.preferenceCenter.show();\n }\n\n /**\n * Update consent with new categories\n */\n public updateConsent(categories: ConsentCategories): void {\n const consentRecord = this.consentManager.updateConsent(categories);\n this.storageManager.save(consentRecord);\n this.applyConsent(categories);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(categories);\n }\n\n // Show floating widget after consent is given\n if (this.config.showWidget) {\n setTimeout(() => {\n this.showFloatingWidget();\n }, 400);\n }\n }\n\n /**\n * Get current consent\n */\n public getConsent(): ConsentRecord | null {\n return this.storageManager.load();\n }\n\n /**\n * Reset consent (clear stored data and show banner)\n */\n public reset(): void {\n this.storageManager.clear();\n this.scriptBlocker.block();\n\n const denied: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') denied[key] = false;\n }\n\n clearDeniedCookies(denied as Record<string, boolean>);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(denied);\n }\n\n this.config.onReject?.();\n this.showBanner();\n }\n\n /**\n * Register event handler\n */\n public on(event: ConsentEvent, callback: EventCallback): void {\n this.eventEmitter.on(event, callback);\n }\n\n /**\n * Unregister event handler\n */\n public off(event: ConsentEvent, callback: EventCallback): void {\n this.eventEmitter.off(event, callback);\n }\n\n /**\n * Destroy and cleanup all UI elements\n */\n public destroy(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n this.banner?.destroy();\n this.banner = null;\n this.preferenceCenter?.destroy();\n this.preferenceCenter = null;\n this.floatingWidget?.destroy();\n this.floatingWidget = null;\n this.scriptBlocker?.destroy();\n this.eventEmitter.clear();\n if (window.cookieConsent === this) {\n window.cookieConsent = undefined;\n }\n }\n\n /**\n * Show the banner\n */\n private showBanner(): void {\n if (!this.banner) {\n this.banner = new Banner(this.config, this.eventEmitter);\n }\n this.banner.show();\n this.eventEmitter.emit('consent:show');\n }\n\n /**\n * Show the floating widget\n */\n private showFloatingWidget(): void {\n if (!this.floatingWidget) {\n this.floatingWidget = new FloatingWidget(this.config, this.eventEmitter);\n }\n this.floatingWidget.show();\n }\n\n /**\n * Apply consent by unblocking allowed scripts and clearing denied cookies\n */\n private applyConsent(categories: ConsentCategories): void {\n this.scriptBlocker.unblock(categories);\n clearDeniedCookies(categories as Record<string, boolean>);\n }\n\n /**\n * Validate and set default config values\n */\n private validateConfig(config: ConsentConfig): ConsentConfig {\n // Merge built-in language translations with user overrides\n const langKey = config.language?.toLowerCase().split('-')[0] || 'en';\n const langDefaults = builtInTranslations[langKey] || builtInTranslations['en'];\n const mergedTranslations = { ...langDefaults, ...config.translations };\n\n return {\n ...config,\n translations: mergedTranslations,\n categories: config.categories || {\n necessary: {\n enabled: true,\n readOnly: true,\n label: 'Essential',\n description: 'Required for the website to function properly.',\n },\n analytics: {\n enabled: true,\n readOnly: false,\n label: 'Analytics',\n description: 'Help us understand how you use our site.',\n },\n marketing: {\n enabled: true,\n readOnly: false,\n label: 'Marketing',\n description: 'Used to deliver relevant advertisements.',\n },\n },\n mode: config.mode || 'opt-in',\n autoShow: config.autoShow !== undefined ? config.autoShow : true,\n revision: config.revision || 1,\n gtmConsentMode: config.gtmConsentMode || false,\n disablePageInteraction: config.disablePageInteraction || false,\n theme: config.theme || 'light',\n position: config.position || 'bottom-left',\n layout: config.layout || 'box',\n backdropBlur: config.backdropBlur !== false,\n animationStyle: config.animationStyle || 'smooth',\n preferencesPosition: config.preferencesPosition || 'center',\n showWidget: config.showWidget !== undefined ? config.showWidget : true,\n widgetPosition: config.widgetPosition || 'bottom-left',\n widgetStyle: config.widgetStyle || 'compact',\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cookiecraft.esm.js","sources":["../src/core/StorageManager.ts","../src/core/ConsentManager.ts","../src/core/EventEmitter.ts","../src/blocking/ScriptBlocker.ts","../src/blocking/CategoryManager.ts","../src/utils/sanitize.ts","../src/utils/color.ts","../src/ui/Banner.ts","../src/ui/PreferenceCenter.ts","../src/ui/FloatingWidget.ts","../src/integrations/GTMConsentMode.ts","../src/integrations/DataLayerManager.ts","../src/utils/cookies.ts","../src/i18n/translations.ts","../src/core/CookieConsent.ts"],"sourcesContent":["/**\n * StorageManager - Manages localStorage persistence for consent records\n */\n\nimport { ConsentCategories, ConsentRecord } from '../types';\n\nexport class StorageManager {\n private static readonly STORAGE_KEY = 'cookiecraft_consent';\n public static readonly EXPIRY_MONTHS = 13;\n\n /**\n * Save consent record to localStorage\n */\n public save(consent: ConsentRecord): void {\n try {\n localStorage.setItem(\n StorageManager.STORAGE_KEY,\n JSON.stringify(consent)\n );\n } catch (e) {\n console.error('Failed to save consent:', e);\n }\n }\n\n /**\n * Load consent record from localStorage\n */\n public load(): ConsentRecord | null {\n try {\n const data = localStorage.getItem(StorageManager.STORAGE_KEY);\n if (!data) return null;\n\n const parsed = JSON.parse(data);\n\n // Validate schema\n if (!this.validateSchema(parsed)) {\n // Try migration\n const migrated = this.migrate(parsed);\n if (migrated) {\n this.save(migrated);\n return migrated;\n }\n return null;\n }\n\n return parsed;\n } catch (e) {\n console.error('Failed to load consent:', e);\n return null;\n }\n }\n\n /**\n * Clear consent record from localStorage\n */\n public clear(): void {\n try {\n localStorage.removeItem(StorageManager.STORAGE_KEY);\n } catch (e) {\n console.error('Failed to clear consent:', e);\n }\n }\n\n /**\n * Check if consent record has expired\n */\n public isExpired(consent: ConsentRecord): boolean {\n const expiry = new Date(consent.expiresAt);\n if (isNaN(expiry.getTime())) return true;\n return expiry < new Date();\n }\n\n /**\n * Validate consent record schema\n */\n private validateSchema(data: any): boolean {\n return (\n data &&\n typeof data.version === 'number' &&\n typeof data.timestamp === 'string' &&\n typeof data.categories === 'object' &&\n typeof data.expiresAt === 'string'\n );\n }\n\n /**\n * Migrate old consent format to new format\n * Returns null if migration fails\n */\n private migrate(data: unknown): ConsentRecord | null {\n if (!data || typeof data !== 'object') return null;\n\n const record = data as Record<string, unknown>;\n\n // Attempt to reconstruct a valid record from partial data\n if (record.categories && typeof record.categories === 'object') {\n const now = new Date();\n const expiryDate = new Date(now);\n expiryDate.setMonth(expiryDate.getMonth() + StorageManager.EXPIRY_MONTHS);\n\n // Coerce category values to booleans\n const rawCategories = record.categories as Record<string, unknown>;\n const categories: ConsentCategories = {\n necessary: rawCategories.necessary === true,\n analytics: rawCategories.analytics === true,\n marketing: rawCategories.marketing === true,\n };\n if ('preferences' in rawCategories) {\n categories.preferences = rawCategories.preferences === true;\n }\n\n return {\n version: typeof record.version === 'number' ? record.version : 1,\n timestamp: typeof record.timestamp === 'string' ? record.timestamp : now.toISOString(),\n categories,\n expiresAt: typeof record.expiresAt === 'string' ? record.expiresAt : expiryDate.toISOString(),\n };\n }\n\n return null;\n }\n}\n","/**\n * ConsentManager - Handles consent logic and validation\n */\n\nimport { ConsentConfig, ConsentCategories, ConsentRecord } from '../types';\nimport { StorageManager } from './StorageManager';\n\nexport class ConsentManager {\n private consent: ConsentRecord | null = null;\n private config: ConsentConfig;\n\n constructor(config: ConsentConfig) {\n this.config = config;\n }\n\n /**\n * Validate consent categories\n */\n public validateConsent(categories: ConsentCategories): boolean {\n // Necessary cookies must always be enabled\n if (!categories.necessary) {\n return false;\n }\n\n // Validate against config (skip if no categories configured)\n if (this.config.categories && Object.keys(this.config.categories).length > 0) {\n for (const key of Object.keys(categories)) {\n if (!(key in this.config.categories)) {\n return false;\n }\n }\n }\n\n // Coerce all values to booleans\n for (const key of Object.keys(categories)) {\n categories[key] = categories[key] === true;\n }\n\n return true;\n }\n\n /**\n * Update consent with new categories\n */\n public updateConsent(categories: ConsentCategories): ConsentRecord {\n if (!this.validateConsent(categories)) {\n throw new Error('Invalid consent categories');\n }\n\n this.consent = this.createConsentRecord(categories);\n return this.consent;\n }\n\n /**\n * Check if user needs to give consent\n */\n public needsConsent(): boolean {\n return this.consent === null;\n }\n\n /**\n * Check if stored consent needs update due to policy change\n */\n public needsUpdate(storedConsent: ConsentRecord): boolean {\n return storedConsent.version < this.config.revision;\n }\n\n /**\n * Get current consent record\n */\n public getCurrentConsent(): ConsentRecord | null {\n return this.consent;\n }\n\n /**\n * Create a new consent record\n */\n private createConsentRecord(categories: ConsentCategories): ConsentRecord {\n const now = new Date();\n const expiryDate = new Date(now);\n expiryDate.setMonth(expiryDate.getMonth() + StorageManager.EXPIRY_MONTHS);\n\n return {\n version: this.config.revision,\n timestamp: now.toISOString(),\n categories: { ...categories },\n expiresAt: expiryDate.toISOString(),\n };\n }\n}\n","/**\n * EventEmitter - Simple pub/sub pattern for internal and external events\n */\n\nimport { EventCallback } from '../types';\n\nexport class EventEmitter {\n private events: Map<string, Set<EventCallback>> = new Map();\n\n /**\n * Register an event handler\n */\n public on(event: string, callback: EventCallback): void {\n if (!this.events.has(event)) {\n this.events.set(event, new Set());\n }\n this.events.get(event)!.add(callback);\n }\n\n /**\n * Unregister an event handler\n */\n public off(event: string, callback: EventCallback): void {\n if (this.events.has(event)) {\n this.events.get(event)!.delete(callback);\n }\n }\n\n /**\n * Emit an event with optional data\n */\n public emit(event: string, data?: any): void {\n if (this.events.has(event)) {\n this.events.get(event)!.forEach((callback) => {\n try {\n callback(data);\n } catch (e) {\n console.error(`Error in event handler for ${event}:`, e);\n }\n });\n }\n }\n\n /**\n * Clear all event handlers\n */\n public clear(): void {\n this.events.clear();\n }\n\n /**\n * Clear handlers for a specific event\n */\n public clearEvent(event: string): void {\n this.events.delete(event);\n }\n}\n","/**\n * ScriptBlocker - Prevents scripts from executing before consent using MutationObserver\n */\n\nimport { ConsentCategories } from '../types';\nimport { CategoryManager } from './CategoryManager';\nimport { EventEmitter } from '../core/EventEmitter';\n\nexport class ScriptBlocker {\n private observer: MutationObserver | null = null;\n private blockedScripts: Map<string, HTMLScriptElement> = new Map();\n private categoryManager: CategoryManager;\n private eventEmitter: EventEmitter;\n private currentConsent: ConsentCategories | null = null;\n\n constructor(categoryManager: CategoryManager, eventEmitter: EventEmitter) {\n this.categoryManager = categoryManager;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Initialize script blocking\n */\n public init(): void {\n // Block all existing scripts\n this.blockExistingScripts();\n\n // Watch for dynamically added scripts (GTM, etc.)\n this.observeDOM();\n }\n\n /**\n * Block all scripts (reset consent)\n */\n public block(): void {\n this.currentConsent = null;\n this.blockedScripts.clear();\n this.blockExistingScripts();\n }\n\n /**\n * Unblock scripts based on consent categories\n */\n public unblock(categories: ConsentCategories): void {\n this.currentConsent = categories;\n\n // Reactivate blocked scripts based on consent\n const toRemove: string[] = [];\n this.blockedScripts.forEach((script, id) => {\n const category = this.categoryManager.getCategoryForScript(script);\n if (category && this.categoryManager.isAllowed(category, categories)) {\n this.reactivateScript(script);\n toRemove.push(id);\n }\n });\n\n // Remove after iteration to avoid modifying map during forEach\n toRemove.forEach((id) => this.blockedScripts.delete(id));\n }\n\n /**\n * Destroy the blocker and stop observing\n */\n public destroy(): void {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n\n /**\n * Block all existing scripts with data-cookieconsent attribute\n */\n private blockExistingScripts(): void {\n const scripts = document.querySelectorAll('script[data-cookieconsent]');\n scripts.forEach((script) => {\n if (script instanceof HTMLScriptElement) {\n this.processScript(script);\n }\n });\n }\n\n /**\n * Observe DOM for dynamically added scripts\n */\n private observeDOM(): void {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (\n node instanceof HTMLScriptElement &&\n node.hasAttribute('data-cookieconsent')\n ) {\n this.processScript(node);\n }\n });\n });\n });\n\n this.observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n }\n\n /**\n * Process a script element - block or allow based on consent\n */\n private processScript(script: HTMLScriptElement): void {\n const category = this.categoryManager.getCategoryForScript(script);\n\n if (!category) return;\n\n // Check if consent allows this category\n if (\n this.currentConsent &&\n this.categoryManager.isAllowed(category, this.currentConsent)\n ) {\n // Already have consent, don't block\n return;\n }\n\n // Block the script by changing its type\n if (script.type !== 'text/plain') {\n const id = this.generateScriptId(script);\n\n // Don't re-block scripts we already know about\n if (this.blockedScripts.has(id)) return;\n\n // Store original type if it exists\n const originalType = script.type || 'text/javascript';\n script.setAttribute('data-original-type', originalType);\n\n script.type = 'text/plain';\n this.blockedScripts.set(id, script);\n }\n }\n\n /**\n * Reactivate a blocked script by creating a new one with correct type\n */\n private reactivateScript(script: HTMLScriptElement): void {\n // Clone script and change type to execute it\n const newScript = document.createElement('script');\n\n // Copy attributes\n Array.from(script.attributes).forEach((attr) => {\n if (attr.name !== 'type' && attr.name !== 'data-original-type') {\n newScript.setAttribute(attr.name, attr.value);\n }\n });\n\n // Set correct type\n const originalType = script.getAttribute('data-original-type') || 'text/javascript';\n newScript.type = originalType;\n\n // Copy content\n if (script.src) {\n newScript.src = script.src;\n } else {\n newScript.textContent = script.textContent;\n }\n\n // Replace old script\n if (script.parentNode) {\n script.parentNode.insertBefore(newScript, script);\n script.parentNode.removeChild(script);\n }\n\n this.eventEmitter.emit('script:activated', {\n category: script.getAttribute('data-cookieconsent'),\n src: script.src || 'inline',\n });\n }\n\n /**\n * Generate a stable, deterministic ID for a script element\n */\n private generateScriptId(script: HTMLScriptElement): string {\n // Use src for external scripts (stable across calls)\n if (script.src) {\n return `src:${script.src}`;\n }\n\n // For inline scripts, use a hash of the content for stability\n const content = script.textContent || '';\n const category = script.getAttribute('data-cookieconsent') || '';\n\n // Use existing data-cc-id if present (allows reset/re-block)\n const existingId = script.getAttribute('data-cc-id');\n if (existingId) return existingId;\n\n // Generate deterministic ID from content + category\n const id = `inline:${category}:${this.simpleHash(content)}`;\n script.setAttribute('data-cc-id', id);\n return id;\n }\n\n /**\n * Simple hash function for content-based script identification\n */\n private simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return hash.toString(36);\n }\n}\n","/**\n * CategoryManager - Maps scripts to consent categories and manages patterns\n */\n\nimport { ConsentCategories } from '../types';\n\nexport class CategoryManager {\n private categories: Map<string, string[]> = new Map();\n\n constructor() {\n this.initializeDefaultPatterns();\n }\n\n /**\n * Register a category with URL patterns\n */\n public registerCategory(name: string, patterns: string[]): void {\n this.categories.set(name, patterns);\n }\n\n /**\n * Get category for a script element\n */\n public getCategoryForScript(script: HTMLScriptElement): string | null {\n // Explicit category attribute takes precedence\n const explicitCategory = script.getAttribute('data-cookieconsent');\n if (explicitCategory) {\n return explicitCategory;\n }\n\n // Try to match by src pattern\n const src = script.src;\n if (!src) return null;\n\n for (const [category, patterns] of this.categories) {\n if (patterns.some((pattern) => src.includes(pattern))) {\n return category;\n }\n }\n\n return null;\n }\n\n /**\n * Check if a category is allowed based on consent\n */\n public isAllowed(category: string, consent: ConsentCategories): boolean {\n return consent[category] === true;\n }\n\n /**\n * Initialize default URL patterns for common tracking services\n * Note: GTM is NOT auto-categorized — it should be managed via GTM Consent Mode v2\n */\n private initializeDefaultPatterns(): void {\n this.categories.set('analytics', [\n 'google-analytics.com',\n 'analytics.google.com',\n 'plausible.io',\n 'matomo.org',\n 'hotjar.com',\n 'mixpanel.com',\n 'segment.com',\n 'amplitude.com',\n ]);\n\n this.categories.set('marketing', [\n 'googletagmanager.com',\n 'facebook.net',\n 'facebook.com/tr',\n 'connect.facebook.net',\n 'doubleclick.net',\n 'ads.google.com',\n 'linkedin.com/analytics',\n 'twitter.com/i/adsct',\n 'pinterest.com/ct',\n 'adroll.com',\n 'taboola.com',\n 'outbrain.com',\n 'tiktok.com',\n ]);\n\n this.categories.set('necessary', []);\n }\n}\n","/**\n * Sanitization utilities to prevent XSS in HTML templates\n */\n\nconst HTML_ESCAPE_MAP: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n};\n\nconst HTML_ESCAPE_RE = /[&<>\"'`]/g;\n\n/**\n * Escape HTML entities in a string to prevent XSS\n */\nexport function escapeHtml(str: string): string {\n return str.replace(HTML_ESCAPE_RE, (char) => HTML_ESCAPE_MAP[char] || char);\n}\n\n/**\n * Sanitize a URL - only allow http(s) and relative URLs\n */\nexport function sanitizeUrl(url: string): string {\n const trimmed = url.trim();\n if (\n trimmed.startsWith('https://') ||\n trimmed.startsWith('http://') ||\n trimmed.startsWith('/') ||\n trimmed.startsWith('./')\n ) {\n return escapeHtml(trimmed);\n }\n return '';\n}\n\n/**\n * Sanitize a CSS color value - only allow valid hex, rgb, hsl, named colors\n */\nexport function sanitizeColor(color: string): string {\n const trimmed = color.trim();\n // Allow hex colors\n if (/^#[0-9a-fA-F]{3,8}$/.test(trimmed)) return trimmed;\n // Allow rgb/rgba\n if (/^rgba?\\(\\s*[\\d\\s,./%]+\\)$/.test(trimmed)) return trimmed;\n // Allow hsl/hsla\n if (/^hsla?\\(\\s*[\\d\\s,./%deg]+\\)$/.test(trimmed)) return trimmed;\n // Allow CSS named colors (basic set) but block CSS keywords that could be abused\n const CSS_KEYWORDS = ['inherit', 'initial', 'unset', 'revert', 'revert-layer'];\n if (/^[a-zA-Z]+$/.test(trimmed) && !CSS_KEYWORDS.includes(trimmed.toLowerCase())) {\n return trimmed;\n }\n return '';\n}\n\n/**\n * Sanitize a CSS property value to prevent injection\n */\nexport function sanitizeCssValue(value: string): string {\n // Strip anything that could break out of CSS context\n return value.replace(/[;{}]/g, '').replace(/url\\s*\\(/gi, '').trim();\n}\n","/**\n * Normalize any supported color format to 6-digit hex\n * Supports: #RGB, #RRGGBB, #RRGGBBAA, named colors\n * Returns null if conversion fails\n */\nfunction normalizeToHex6(color: string): string | null {\n const trimmed = color.trim();\n\n // Already 6-digit hex\n if (/^#[0-9a-fA-F]{6}$/.test(trimmed)) {\n return trimmed;\n }\n\n // 3-digit hex → expand to 6-digit\n if (/^#[0-9a-fA-F]{3}$/.test(trimmed)) {\n const r = trimmed[1];\n const g = trimmed[2];\n const b = trimmed[3];\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n\n // 8-digit hex (with alpha) → strip alpha\n if (/^#[0-9a-fA-F]{8}$/.test(trimmed)) {\n return trimmed.substring(0, 7);\n }\n\n return null;\n}\n\n/**\n * Adjust a hex color brightness by a percentage\n * Negative = darker, positive = lighter\n */\nexport function adjustColorBrightness(color: string, percent: number): string {\n const hex6 = normalizeToHex6(color);\n if (!hex6) return color;\n\n const hex = hex6.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const adjust = (value: number) => {\n const adjusted = value + (value * percent / 100);\n return Math.max(0, Math.min(255, Math.round(adjusted)));\n };\n\n const toHex = (value: number) => {\n const h = value.toString(16);\n return h.length === 1 ? '0' + h : h;\n };\n\n return `#${toHex(adjust(r))}${toHex(adjust(g))}${toHex(adjust(b))}`;\n}\n\n/**\n * Build inline CSS custom properties for a primary color\n */\nexport function buildColorStyle(safeColor: string): string {\n if (!safeColor) return '';\n\n // Only generate hover color for hex colors\n const hex6 = normalizeToHex6(safeColor);\n if (!hex6) {\n return `--cc-primary: ${safeColor};`;\n }\n\n const hover = adjustColorBrightness(hex6, -15);\n return `--cc-primary: ${hex6}; --cc-primary-hover: ${hover};`;\n}\n","/**\n * Banner - Cookie consent banner component\n */\n\nimport { ConsentConfig, ConsentCategories } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeUrl, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class Banner {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private previousActiveElement: HTMLElement | null = null;\n\n constructor(config: ConsentConfig, eventEmitter: EventEmitter) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Show the banner\n */\n public show(): void {\n // Clear any pending hide timeout\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n\n const append = () => {\n if (!this.element) {\n this.previousActiveElement = document.activeElement as HTMLElement | null;\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n // Trigger animation\n requestAnimationFrame(() => {\n this.element?.classList.add('is-visible');\n });\n\n // Disable page interaction if configured\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = 'hidden';\n this.trapFocus();\n }\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n\n append();\n }\n\n /**\n * Hide the banner\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = '';\n }\n\n this.hideTimeout = setTimeout(() => {\n this.destroy();\n }, 300);\n }\n\n /**\n * Destroy the banner\n */\n public destroy(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n // Restore focus\n if (this.previousActiveElement && document.contains(this.previousActiveElement)) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n }\n\n /**\n * Create DOM structure for banner\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const position = this.config.position || 'bottom';\n const layout = this.config.layout || 'bar';\n const backdropBlur = this.config.backdropBlur !== false;\n const isModal = this.config.disablePageInteraction;\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const titleHtml = translations.title\n ? `<h2 class=\"cc-banner__title\">${escapeHtml(translations.title)}</h2>`\n : '';\n\n const descriptionHtml = this.getDescriptionHTML();\n const descBlock = descriptionHtml\n ? `<p class=\"cc-banner__description\">${descriptionHtml}</p>`\n : '';\n\n const template = `\n <div\n class=\"cc-banner cc-banner--${escapeHtml(position)} cc-banner--${escapeHtml(layout)} ${backdropBlur ? 'cc-backdrop-blur' : ''}\"\n role=\"${isModal ? 'dialog' : 'region'}\"\n ${isModal ? 'aria-modal=\"true\"' : ''}\n aria-label=\"Cookie consent\"\n aria-live=\"polite\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <div class=\"cc-banner__container\">\n <div class=\"cc-banner__content\">\n ${titleHtml}\n ${descBlock}\n </div>\n <div class=\"cc-banner__actions\">\n <button\n class=\"cc-btn cc-btn--accept\"\n data-action=\"accept\"\n aria-label=\"${escapeHtml(translations.acceptAll || 'Accept all')}\"\n >\n ${escapeHtml(translations.acceptAll || 'Accept all')}\n </button>\n </div>\n </div>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('[data-action]') as HTMLElement | null;\n if (!target) return;\n const action = target.getAttribute('data-action');\n\n switch (action) {\n case 'accept':\n this.handleAcceptAll();\n break;\n case 'reject':\n this.handleRejectAll();\n break;\n case 'customize':\n this.handleCustomize();\n break;\n }\n });\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.config.disablePageInteraction) {\n this.handleRejectAll();\n }\n });\n }\n\n /**\n * Handle accept all action\n */\n private handleAcceptAll(): void {\n const allCategories: ConsentCategories = { necessary: true, analytics: true, marketing: true };\n\n // Add all configured categories\n for (const key of Object.keys(this.config.categories)) {\n allCategories[key] = true;\n }\n\n this.eventEmitter.emit('consent:accept', allCategories);\n this.hide();\n }\n\n /**\n * Handle reject all action\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') necessaryOnly[key] = false;\n }\n\n this.eventEmitter.emit('consent:reject', necessaryOnly);\n this.hide();\n }\n\n /**\n * Handle customize action\n */\n private handleCustomize(): void {\n this.eventEmitter.emit('preferences:show');\n this.hide();\n }\n\n /**\n * Trap focus within banner (when disablePageInteraction is true)\n */\n private trapFocus(): void {\n const focusableElements = this.element?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (!focusableElements || focusableElements.length === 0) return;\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n firstFocusable?.focus();\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n } else if (!e.shiftKey && document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n });\n }\n\n /**\n * Generate description HTML with privacy policy link\n */\n private getDescriptionHTML(): string {\n const translations = this.config.translations || {};\n\n if (!translations.description) return '';\n\n const description = escapeHtml(translations.description);\n const customizeLabel = escapeHtml(translations.customize || 'Customize');\n\n let html = description;\n\n if (translations.privacyPolicyUrl) {\n const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);\n if (safeUrl) {\n const linkLabel = escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy');\n html += ` <a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">${linkLabel}</a>`;\n }\n }\n\n // Inline customize link at end of description\n html += ` <span class=\"cc-banner__customize\" data-action=\"customize\">${customizeLabel}</span>`;\n\n return html;\n }\n}\n","/**\n * PreferenceCenter - Modal for granular cookie preferences\n */\n\nimport { ConsentConfig, ConsentCategories } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeUrl, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class PreferenceCenter {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private currentConsent: ConsentCategories;\n private previousActiveElement: HTMLElement | null = null;\n\n constructor(\n config: ConsentConfig,\n eventEmitter: EventEmitter,\n currentConsent: ConsentCategories\n ) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n this.currentConsent = currentConsent;\n }\n\n /**\n * Show the preference center\n */\n public show(): void {\n const append = () => {\n if (!this.element) {\n this.previousActiveElement = document.activeElement as HTMLElement | null;\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n this.element.classList.add('is-visible');\n this.trapFocus();\n\n document.body.style.overflow = 'hidden';\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n append();\n }\n\n /**\n * Hide the preference center\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n document.body.style.overflow = '';\n\n // Restore focus to triggering element\n if (this.previousActiveElement && document.contains(this.previousActiveElement)) {\n this.previousActiveElement.focus();\n this.previousActiveElement = null;\n }\n\n setTimeout(() => {\n this.destroy();\n }, 300);\n }\n\n /**\n * Destroy the preference center\n */\n public destroy(): void {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n\n /**\n * Create DOM structure for preference center\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const position = this.config.preferencesPosition || 'center';\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const privacyLinkHtml = translations.privacyPolicyUrl\n ? (() => {\n const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);\n if (!safeUrl) return '';\n return `\n <a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"cc-privacy-link\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>\n <polyline points=\"15 3 21 3 21 9\"/>\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"/>\n </svg>\n ${escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy')}\n </a>\n `;\n })()\n : '';\n\n const template = `\n <div\n class=\"cc-modal cc-modal--${escapeHtml(position)}\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"cc-modal-title\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <div class=\"cc-modal__overlay\"></div>\n <div class=\"cc-modal__content\">\n <div class=\"cc-modal__header\">\n <h2 id=\"cc-modal-title\">\n ${escapeHtml(translations.preferencesTitle || translations.title || 'Cookie Preferences')}\n </h2>\n </div>\n\n <div class=\"cc-modal__body\">\n ${this.renderCategories()}\n </div>\n\n <div class=\"cc-modal__footer\">\n <div class=\"cc-modal__footer-links\">\n ${privacyLinkHtml}\n </div>\n <div class=\"cc-modal__footer-actions\">\n <button\n class=\"cc-btn cc-btn--secondary\"\n data-action=\"reject\"\n >\n ${escapeHtml(translations.essentialsOnly || 'Essentials only')}\n </button>\n <button\n class=\"cc-btn cc-btn--primary\"\n data-action=\"save\"\n >\n ${escapeHtml(translations.savePreferences || 'Save preferences')}\n </button>\n </div>\n </div>\n </div>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Render category toggles\n */\n private renderCategories(): string {\n const categories = Object.entries(this.config.categories);\n\n return categories\n .map(([key, config]) => {\n const checked = this.currentConsent[key] === true;\n const disabled = config.readOnly;\n\n return `\n <div class=\"cc-category\">\n <div class=\"cc-category__header\">\n <label class=\"cc-toggle ${disabled ? 'cc-toggle--disabled' : ''}\">\n <input\n type=\"checkbox\"\n data-category=\"${escapeHtml(key)}\"\n ${checked ? 'checked' : ''}\n ${disabled ? 'disabled' : ''}\n aria-label=\"${escapeHtml(config.label)} cookies\"\n >\n <span class=\"cc-toggle__slider\"></span>\n </label>\n <div class=\"cc-category__info\">\n <h3>${escapeHtml(config.label)}</h3>\n <p>${escapeHtml(config.description)}</p>\n </div>\n </div>\n </div>\n `;\n })\n .join('');\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('[data-action]') as HTMLElement | null;\n if (!target) return;\n const action = target.getAttribute('data-action');\n\n if (action === 'save') {\n this.handleSave();\n } else if (action === 'reject') {\n this.handleRejectAll();\n }\n });\n }\n\n /**\n * Handle save preferences\n */\n private handleSave(): void {\n const checkboxes = this.element?.querySelectorAll('input[data-category]');\n\n // Initialize all configured categories to false\n const categories: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') {\n categories[key] = false;\n }\n }\n\n // Override with actual checkbox values\n checkboxes?.forEach((checkbox) => {\n if (checkbox instanceof HTMLInputElement) {\n const category = checkbox.getAttribute('data-category');\n if (category) {\n categories[category] = checkbox.checked;\n }\n }\n });\n\n this.eventEmitter.emit('consent:update', categories);\n this.hide();\n }\n\n /**\n * Handle reject all\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') necessaryOnly[key] = false;\n }\n\n this.eventEmitter.emit('consent:reject', necessaryOnly);\n this.hide();\n }\n\n /**\n * Trap focus within modal\n */\n private trapFocus(): void {\n const focusableElements = this.element?.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n\n if (!focusableElements || focusableElements.length === 0) return;\n\n const firstFocusable = focusableElements[0] as HTMLElement;\n const lastFocusable = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n firstFocusable?.focus();\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n } else if (!e.shiftKey && document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n });\n }\n}\n","/**\n * FloatingWidget - Permanent cookie settings button\n * Stays visible at all times for easy access to preferences\n */\n\nimport { ConsentConfig } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeColor } from '../utils/sanitize';\nimport { buildColorStyle } from '../utils/color';\n\nexport class FloatingWidget {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private isVisible: boolean = false;\n\n constructor(config: ConsentConfig, eventEmitter: EventEmitter) {\n this.config = config;\n this.eventEmitter = eventEmitter;\n }\n\n /**\n * Show the floating widget\n */\n public show(): void {\n const append = () => {\n if (!this.element) {\n this.element = this.createDOM();\n document.body.appendChild(this.element);\n this.attachListeners();\n }\n\n // Delay to allow for transition\n requestAnimationFrame(() => {\n this.element?.classList.add('is-visible');\n this.isVisible = true;\n });\n };\n\n if (!document.body) {\n document.addEventListener('DOMContentLoaded', append);\n return;\n }\n append();\n }\n\n /**\n * Hide the floating widget\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n this.isVisible = false;\n }\n\n /**\n * Destroy the widget\n */\n public destroy(): void {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n this.isVisible = false;\n }\n\n /**\n * Check if widget is visible\n */\n public getIsVisible(): boolean {\n return this.isVisible;\n }\n\n /**\n * Create DOM structure for floating widget\n */\n private createDOM(): HTMLElement {\n const translations = this.config.translations || {};\n const theme = this.config.theme || 'light';\n const widgetPosition = this.config.widgetPosition || 'bottom-right';\n const widgetStyle = this.config.widgetStyle || 'full';\n\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = buildColorStyle(safeColor);\n\n const template = `\n <div\n class=\"cc-widget cc-widget--${escapeHtml(widgetPosition)} cc-widget--${escapeHtml(widgetStyle)}\"\n role=\"button\"\n aria-label=\"${escapeHtml(translations.cookieSettings || 'Cookie settings')}\"\n tabindex=\"0\"\n data-theme=\"${escapeHtml(theme)}\"\n style=\"${colorStyle}\"\n >\n <svg class=\"cc-widget__icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <path id=\"cc-ck-a\" d=\"M6,9 C5.448,9 5,8.552 5,8 C5,7.448 5.448,7 6,7 C6.552,7 7,7.448 7,8 C7,8.552 6.552,9 6,9 Z M0.5,5 C0.776,5 1,5.224 1,5.5 C1,5.776 0.776,6 0.5,6 C0.224,6 0,5.776 0,5.5 C0,5.224 0.224,5 0.5,5 Z M1.5,0 C1.776,0 2,0.224 2,0.5 C2,0.776 1.776,1 1.5,1 C1.224,1 1,0.776 1,0.5 C1,0.224 1.224,0 1.5,0 Z\"/>\n <path id=\"cc-ck-c\" d=\"M16.899,14.984 C14.727,14.802 12.991,13.088 12.773,10.927 C10.117,10.808 8,8.617 8,5.932 C8,4.837 8.352,3.824 8.949,3 C5.027,3.515 2,6.87 2,10.932 C2,15.35 5.582,18.932 10,18.932 C12.939,18.932 15.509,17.346 16.899,14.984 Z M18.623,15.998 C16.839,19.029 13.583,20.932 10,20.932 C4.477,20.932 0,16.454 0,10.932 C0,5.897 3.74,1.666 8.689,1.017 C10.429,0.789 11.599,2.753 10.568,4.174 C10.2,4.682 10,5.289 10,5.932 C10,7.537 11.265,8.857 12.862,8.929 C13.854,8.973 14.663,9.738 14.763,10.726 C14.884,11.932 15.857,12.889 17.067,12.991 C18.535,13.114 19.37,14.729 18.623,15.998 Z M10,18 C8.343,18 7,16.657 7,15 C7,13.343 8.343,12 10,12 C11.657,12 13,13.343 13,15 C13,16.657 11.657,18 10,18 Z M10,16 C10.552,16 11,15.552 11,15 C11,14.448 10.552,14 10,14 C9.448,14 9,14.448 9,15 C9,15.552 9.448,16 10,16 Z M4.5,14 C3.672,14 3,13.328 3,12.5 C3,11.672 3.672,11 4.5,11 C5.328,11 6,11.672 6,12.5 C6,13.328 5.328,14 4.5,14 Z M4.5,12 C4.224,12 4,12.224 4,12.5 C4,12.776 4.224,13 4.5,13 C4.776,13 5,12.776 5,12.5 C5,12.224 4.776,12 4.5,12 Z M5.5,9 C4.672,9 4,8.328 4,7.5 C4,6.672 4.672,6 5.5,6 C6.328,6 7,6.672 7,7.5 C7,8.328 6.328,9 5.5,9 Z M5.5,7 C5.224,7 5,7.224 5,7.5 C5,7.776 5.224,8 5.5,8 C5.776,8 6,7.776 6,7.5 C6,7.224 5.776,7 5.5,7 Z\"/>\n </defs>\n <g fill=\"currentColor\" fill-rule=\"evenodd\" transform=\"translate(3 1)\">\n <g transform=\"translate(4 7)\">\n <use href=\"#cc-ck-a\"/>\n </g>\n <use href=\"#cc-ck-c\"/>\n </g>\n </svg>\n <span class=\"cc-widget__text\">\n ${escapeHtml(translations.cookies || 'Cookies')}\n </span>\n </div>\n `;\n\n const wrapper = document.createElement('div');\n wrapper.innerHTML = template.trim();\n return wrapper.firstChild as HTMLElement;\n }\n\n /**\n * Attach event listeners\n */\n private attachListeners(): void {\n this.element?.addEventListener('click', () => {\n this.handleClick();\n });\n\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.handleClick();\n }\n });\n }\n\n /**\n * Handle widget click\n */\n private handleClick(): void {\n this.eventEmitter.emit('preferences:show');\n }\n}\n","/**\n * GTMConsentMode - Full integration with Google Consent Mode v2\n */\n\nimport { ConsentCategories, ConsentConfig, GTMConsent } from '../types';\nimport { DataLayerManager } from './DataLayerManager';\n\nexport class GTMConsentMode {\n private dataLayerManager: DataLayerManager;\n private config: ConsentConfig;\n\n constructor(dataLayerManager: DataLayerManager, config: ConsentConfig) {\n this.dataLayerManager = dataLayerManager;\n this.config = config;\n }\n\n /**\n * Set default consent state (MUST be called BEFORE GTM loads)\n * All non-essential consent types default to 'denied' per GDPR\n */\n public setDefaultConsent(): void {\n const defaults: Record<string, string> = {\n ad_storage: 'denied',\n ad_user_data: 'denied',\n ad_personalization: 'denied',\n analytics_storage: 'denied',\n functionality_storage: 'denied',\n personalization_storage: 'denied',\n security_storage: 'granted',\n };\n\n const waitForUpdate = this.config.gtmWaitForUpdate ?? 500;\n if (waitForUpdate > 0) {\n (defaults as Record<string, string | number>)['wait_for_update'] = waitForUpdate;\n }\n\n this.dataLayerManager.pushConsent('default', defaults);\n\n if (this.config.gtmUrlPassthrough) {\n this.dataLayerManager.pushSet('url_passthrough', true);\n }\n\n if (this.config.gtmAdsDataRedaction) {\n this.dataLayerManager.pushSet('ads_data_redaction', true);\n }\n }\n\n /**\n * Update consent state based on user choices\n */\n public updateConsent(categories: ConsentCategories): void {\n const gtmConsent = this.mapCategoriesToGTM(categories);\n this.dataLayerManager.pushConsent('update', gtmConsent);\n }\n\n /**\n * Map consent categories to GTM Consent Mode v2 format\n */\n private mapCategoriesToGTM(categories: ConsentCategories): GTMConsent {\n // When preferences category is not configured, default functionality to granted\n const hasPreferencesCategory = 'preferences' in this.config.categories;\n const preferencesGranted = hasPreferencesCategory\n ? categories.preferences === true\n : true;\n\n return {\n ad_storage: categories.marketing ? 'granted' : 'denied',\n ad_user_data: categories.marketing ? 'granted' : 'denied',\n ad_personalization: categories.marketing ? 'granted' : 'denied',\n analytics_storage: categories.analytics ? 'granted' : 'denied',\n functionality_storage: preferencesGranted ? 'granted' : 'denied',\n personalization_storage: preferencesGranted ? 'granted' : 'denied',\n security_storage: 'granted',\n };\n }\n}\n","/**\n * DataLayerManager - Manages Google Tag Manager dataLayer communication\n * Implements Google Consent Mode v2 correctly via gtag() API\n */\n\nexport class DataLayerManager {\n /**\n * Initialize gtag function if not already present\n * This must be called before GTM loads for consent defaults to work\n */\n private ensureGtag(): void {\n window.dataLayer = window.dataLayer || [];\n\n if (typeof window.gtag !== 'function') {\n window.gtag = function () {\n window.dataLayer!.push(arguments);\n };\n }\n }\n\n /**\n * Push consent command via gtag (correct format for Google Consent Mode v2)\n * Usage: pushConsent('default', {...}) or pushConsent('update', {...})\n */\n public pushConsent(action: string, params: Record<string, string | number>): void {\n this.ensureGtag();\n window.gtag!('consent', action, params);\n }\n\n /**\n * Push a 'set' command via gtag for advanced features\n * Usage: pushSet('url_passthrough', true) or pushSet('ads_data_redaction', true)\n */\n public pushSet(key: string, value: boolean | string | number): void {\n this.ensureGtag();\n window.gtag!('set', key, value);\n }\n}\n","/**\n * Cookie utilities for clearing non-essential cookies on rejection/withdrawal\n */\n\n/** Known analytics cookie name patterns */\nconst ANALYTICS_COOKIE_PATTERNS = [\n /^_ga/, // Google Analytics\n /^_gid/, // Google Analytics\n /^_gat/, // Google Analytics\n /^_gcl/, // Google Ads conversion linker\n /^_hj/, // Hotjar\n /^_pk_/, // Matomo/Piwik\n /^mp_/, // Mixpanel\n /^ajs_/, // Segment\n /^amplitude/, // Amplitude\n /^plausible/, // Plausible\n];\n\n/** Known marketing cookie name patterns */\nconst MARKETING_COOKIE_PATTERNS = [\n /^_fbp/, // Facebook Pixel\n /^_fbc/, // Facebook click\n /^fr$/, // Facebook\n /^_pin_/, // Pinterest\n /^_tt_/, // TikTok\n /^li_/, // LinkedIn\n /^_uet/, // Microsoft/Bing Ads\n /^IDE$/, // DoubleClick\n /^test_cookie/, // DoubleClick\n /^MUID$/, // Microsoft\n /^NID$/, // Google Ads\n];\n\n/** Known preferences cookie name patterns */\nconst PREFERENCES_COOKIE_PATTERNS = [\n /^lang$/,\n /^locale$/,\n /^i18n/,\n];\n\nconst CATEGORY_PATTERNS: Record<string, RegExp[]> = {\n analytics: ANALYTICS_COOKIE_PATTERNS,\n marketing: MARKETING_COOKIE_PATTERNS,\n preferences: PREFERENCES_COOKIE_PATTERNS,\n};\n\n/**\n * Get all cookies as name/value pairs\n */\nfunction getAllCookies(): string[] {\n return document.cookie.split(';').map(c => c.trim().split('=')[0]).filter(Boolean);\n}\n\n/**\n * Delete a cookie by name, trying all common path/domain combinations\n */\nfunction deleteCookie(name: string): void {\n const hostname = window.location.hostname;\n const paths = ['/', window.location.pathname];\n\n // Build domain variants: current domain + parent domains\n const domains = ['', hostname];\n const parts = hostname.split('.');\n if (parts.length > 2) {\n // Add parent domain (e.g., .example.com for sub.example.com)\n domains.push('.' + parts.slice(-2).join('.'));\n }\n domains.push('.' + hostname);\n\n for (const domain of domains) {\n for (const path of paths) {\n const domainPart = domain ? `; domain=${domain}` : '';\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; secure`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; samesite=lax`;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}${domainPart}; samesite=none; secure`;\n }\n }\n}\n\n/**\n * Clear cookies matching patterns for denied categories\n */\nexport function clearCookiesForCategory(category: string): void {\n const patterns = CATEGORY_PATTERNS[category];\n if (!patterns) return;\n\n const cookies = getAllCookies();\n for (const name of cookies) {\n if (patterns.some(pattern => pattern.test(name))) {\n deleteCookie(name);\n }\n }\n}\n\n/**\n * Clear all non-essential cookies based on consent categories\n */\nexport function clearDeniedCookies(categories: Record<string, boolean>): void {\n for (const [category, allowed] of Object.entries(categories)) {\n if (!allowed && category !== 'necessary') {\n clearCookiesForCategory(category);\n }\n }\n}\n","/**\n * Built-in translations for supported languages\n * Users can override any string via config.translations\n */\n\nimport { Translation } from '../types';\n\nconst en: Translation = {\n title: 'We use cookies',\n description: 'We use cookies to improve your experience on our site. You can choose which cookies you accept.',\n acceptAll: 'Accept all',\n rejectAll: 'Essentials only',\n customize: 'Manage preferences',\n savePreferences: 'Save preferences',\n essentialsOnly: 'Essentials only',\n preferencesTitle: 'Cookie Preferences',\n cookieSettings: 'Cookie settings',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Privacy Policy',\n};\n\nconst fr: Translation = {\n title: 'Nous utilisons des cookies',\n description: 'Ce site utilise des cookies pour améliorer votre expérience de navigation. Vous pouvez choisir les cookies que vous acceptez.',\n acceptAll: 'Tout accepter',\n rejectAll: 'Essentiels uniquement',\n customize: 'Gérer mes préférences',\n savePreferences: 'Enregistrer',\n essentialsOnly: 'Essentiels uniquement',\n preferencesTitle: 'Préférences des cookies',\n cookieSettings: 'Paramètres des cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Politique de confidentialité',\n};\n\nconst de: Translation = {\n title: 'Wir verwenden Cookies',\n description: 'Diese Website verwendet Cookies, um Ihr Erlebnis zu verbessern. Sie können wählen, welche Cookies Sie akzeptieren.',\n acceptAll: 'Alle akzeptieren',\n rejectAll: 'Nur essenzielle',\n customize: 'Einstellungen verwalten',\n savePreferences: 'Speichern',\n essentialsOnly: 'Nur essenzielle',\n preferencesTitle: 'Cookie-Einstellungen',\n cookieSettings: 'Cookie-Einstellungen',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Datenschutzrichtlinie',\n};\n\nconst es: Translation = {\n title: 'Usamos cookies',\n description: 'Este sitio utiliza cookies para mejorar su experiencia. Puede elegir qué cookies acepta.',\n acceptAll: 'Aceptar todo',\n rejectAll: 'Solo esenciales',\n customize: 'Gestionar preferencias',\n savePreferences: 'Guardar',\n essentialsOnly: 'Solo esenciales',\n preferencesTitle: 'Preferencias de cookies',\n cookieSettings: 'Configuración de cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Política de privacidad',\n};\n\nconst it: Translation = {\n title: 'Utilizziamo i cookie',\n description: 'Questo sito utilizza i cookie per migliorare la tua esperienza. Puoi scegliere quali cookie accettare.',\n acceptAll: 'Accetta tutti',\n rejectAll: 'Solo essenziali',\n customize: 'Gestisci preferenze',\n savePreferences: 'Salva',\n essentialsOnly: 'Solo essenziali',\n preferencesTitle: 'Preferenze cookie',\n cookieSettings: 'Impostazioni cookie',\n cookies: 'Cookie',\n privacyPolicyLabel: 'Informativa sulla privacy',\n};\n\nconst nl: Translation = {\n title: 'Wij gebruiken cookies',\n description: 'Deze site maakt gebruik van cookies om uw ervaring te verbeteren. U kunt kiezen welke cookies u accepteert.',\n acceptAll: 'Alles accepteren',\n rejectAll: 'Alleen essentieel',\n customize: 'Voorkeuren beheren',\n savePreferences: 'Opslaan',\n essentialsOnly: 'Alleen essentieel',\n preferencesTitle: 'Cookie-voorkeuren',\n cookieSettings: 'Cookie-instellingen',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Privacybeleid',\n};\n\nconst pt: Translation = {\n title: 'Utilizamos cookies',\n description: 'Este site utiliza cookies para melhorar a sua experiência. Pode escolher quais cookies aceita.',\n acceptAll: 'Aceitar todos',\n rejectAll: 'Apenas essenciais',\n customize: 'Gerir preferências',\n savePreferences: 'Guardar',\n essentialsOnly: 'Apenas essenciais',\n preferencesTitle: 'Preferências de cookies',\n cookieSettings: 'Definições de cookies',\n cookies: 'Cookies',\n privacyPolicyLabel: 'Política de privacidade',\n};\n\nexport const builtInTranslations: Record<string, Translation> = {\n en,\n fr,\n de,\n es,\n it,\n nl,\n pt,\n};\n","/**\n * CookieConsent - Main orchestrator class\n */\n\nimport { ConsentConfig, ConsentCategories, ConsentRecord, ConsentEvent, EventCallback } from '../types';\nimport { ConsentManager } from './ConsentManager';\nimport { StorageManager } from './StorageManager';\nimport { EventEmitter } from './EventEmitter';\nimport { ScriptBlocker } from '../blocking/ScriptBlocker';\nimport { CategoryManager } from '../blocking/CategoryManager';\nimport { Banner } from '../ui/Banner';\nimport { PreferenceCenter } from '../ui/PreferenceCenter';\nimport { FloatingWidget } from '../ui/FloatingWidget';\nimport { GTMConsentMode } from '../integrations/GTMConsentMode';\nimport { DataLayerManager } from '../integrations/DataLayerManager';\nimport { clearDeniedCookies } from '../utils/cookies';\nimport { builtInTranslations } from '../i18n/translations';\n\n// Import CSS\nimport '../styles/banner.css';\nimport '../styles/animations.css';\nimport '../styles/preferences.css';\nimport '../styles/widget.css';\n\nexport class CookieConsent {\n private config: ConsentConfig;\n private consentManager: ConsentManager;\n private storageManager: StorageManager;\n private scriptBlocker: ScriptBlocker;\n private eventEmitter: EventEmitter;\n private banner: Banner | null = null;\n private preferenceCenter: PreferenceCenter | null = null;\n private floatingWidget: FloatingWidget | null = null;\n private gtmIntegration: GTMConsentMode | null = null;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor(config: ConsentConfig) {\n // SSR guard\n if (typeof window === 'undefined') {\n this.config = config as ConsentConfig;\n this.consentManager = null as any;\n this.storageManager = null as any;\n this.eventEmitter = null as any;\n this.scriptBlocker = null as any;\n return;\n }\n\n this.config = this.validateConfig(config);\n this.consentManager = new ConsentManager(this.config);\n this.storageManager = new StorageManager();\n this.eventEmitter = new EventEmitter();\n this.scriptBlocker = new ScriptBlocker(\n new CategoryManager(),\n this.eventEmitter\n );\n\n if (this.config.gtmConsentMode) {\n this.gtmIntegration = new GTMConsentMode(new DataLayerManager(), this.config);\n }\n\n // Listen for consent events — callbacks are fired AFTER consent is persisted\n this.eventEmitter.on('consent:accept', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onAccept?.(categories);\n });\n\n this.eventEmitter.on('consent:reject', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onReject?.();\n });\n\n this.eventEmitter.on('consent:update', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n this.config.onChange?.(categories);\n });\n\n this.eventEmitter.on('preferences:show', () => {\n this.showPreferences();\n });\n }\n\n /**\n * Initialize the cookie consent system\n */\n public init(): void {\n if (typeof window === 'undefined') return;\n\n // 1. Start blocking scripts immediately\n this.scriptBlocker.init();\n\n // 2. Set GTM default consent BEFORE checking storage\n if (this.gtmIntegration) {\n this.gtmIntegration.setDefaultConsent();\n }\n\n // 3. Check for existing consent\n const storedConsent = this.storageManager.load();\n\n if (storedConsent && !this.storageManager.isExpired(storedConsent)) {\n if (this.consentManager.needsUpdate(storedConsent)) {\n if (this.config.autoShow) {\n this.showBanner();\n }\n } else {\n this.applyConsent(storedConsent.categories);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(storedConsent.categories);\n }\n\n this.eventEmitter.emit('consent:load', storedConsent);\n\n if (this.config.showWidget) {\n this.showFloatingWidget();\n }\n }\n } else {\n if (this.config.autoShow) {\n this.showBanner();\n }\n }\n\n // Store instance globally\n window.cookieConsent = this;\n\n this.eventEmitter.emit('consent:init');\n }\n\n /**\n * Show the banner\n */\n public show(): void {\n this.showBanner();\n }\n\n /**\n * Hide the banner\n */\n public hide(): void {\n this.banner?.hide();\n }\n\n /**\n * Show preferences modal\n */\n public showPreferences(): void {\n const stored = this.storageManager.load()?.categories;\n // Default to all ON when no prior consent\n const currentConsent: ConsentCategories = stored || {\n necessary: true,\n analytics: true,\n marketing: true,\n };\n\n // Add any configured categories not in current consent\n for (const key of Object.keys(this.config.categories)) {\n if (!(key in currentConsent)) {\n currentConsent[key] = key === 'necessary';\n }\n }\n\n if (this.preferenceCenter) {\n this.preferenceCenter.destroy();\n }\n\n this.preferenceCenter = new PreferenceCenter(\n this.config,\n this.eventEmitter,\n currentConsent\n );\n this.preferenceCenter.show();\n }\n\n /**\n * Update consent with new categories\n */\n public updateConsent(categories: ConsentCategories): void {\n const consentRecord = this.consentManager.updateConsent(categories);\n this.storageManager.save(consentRecord);\n this.applyConsent(categories);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(categories);\n }\n\n // Show floating widget after consent is given\n if (this.config.showWidget) {\n setTimeout(() => {\n this.showFloatingWidget();\n }, 400);\n }\n }\n\n /**\n * Get current consent\n */\n public getConsent(): ConsentRecord | null {\n return this.storageManager.load();\n }\n\n /**\n * Reset consent (clear stored data and show banner)\n */\n public reset(): void {\n this.storageManager.clear();\n this.scriptBlocker.block();\n\n const denied: ConsentCategories = { necessary: true, analytics: false, marketing: false };\n for (const key of Object.keys(this.config.categories)) {\n if (key !== 'necessary') denied[key] = false;\n }\n\n clearDeniedCookies(denied as Record<string, boolean>);\n\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(denied);\n }\n\n this.config.onReject?.();\n this.showBanner();\n }\n\n /**\n * Register event handler\n */\n public on(event: ConsentEvent, callback: EventCallback): void {\n this.eventEmitter.on(event, callback);\n }\n\n /**\n * Unregister event handler\n */\n public off(event: ConsentEvent, callback: EventCallback): void {\n this.eventEmitter.off(event, callback);\n }\n\n /**\n * Destroy and cleanup all UI elements\n */\n public destroy(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n this.banner?.destroy();\n this.banner = null;\n this.preferenceCenter?.destroy();\n this.preferenceCenter = null;\n this.floatingWidget?.destroy();\n this.floatingWidget = null;\n this.scriptBlocker?.destroy();\n this.eventEmitter.clear();\n if (window.cookieConsent === this) {\n window.cookieConsent = undefined;\n }\n }\n\n /**\n * Show the banner\n */\n private showBanner(): void {\n if (!this.banner) {\n this.banner = new Banner(this.config, this.eventEmitter);\n }\n this.banner.show();\n this.eventEmitter.emit('consent:show');\n }\n\n /**\n * Show the floating widget\n */\n private showFloatingWidget(): void {\n if (!this.floatingWidget) {\n this.floatingWidget = new FloatingWidget(this.config, this.eventEmitter);\n }\n this.floatingWidget.show();\n }\n\n /**\n * Apply consent by unblocking allowed scripts and clearing denied cookies\n */\n private applyConsent(categories: ConsentCategories): void {\n this.scriptBlocker.unblock(categories);\n clearDeniedCookies(categories as Record<string, boolean>);\n }\n\n /**\n * Validate and set default config values\n */\n private validateConfig(config: ConsentConfig): ConsentConfig {\n // Merge built-in language translations with user overrides\n const langKey = config.language?.toLowerCase().split('-')[0] || 'en';\n const langDefaults = builtInTranslations[langKey] || builtInTranslations['en'];\n const mergedTranslations = { ...langDefaults, ...config.translations };\n\n return {\n ...config,\n translations: mergedTranslations,\n categories: config.categories || {\n necessary: {\n enabled: true,\n readOnly: true,\n label: 'Essential',\n description: 'Required for the website to function properly.',\n },\n analytics: {\n enabled: true,\n readOnly: false,\n label: 'Analytics',\n description: 'Help us understand how you use our site.',\n },\n marketing: {\n enabled: true,\n readOnly: false,\n label: 'Marketing',\n description: 'Used to deliver relevant advertisements.',\n },\n },\n mode: config.mode || 'opt-in',\n autoShow: config.autoShow !== undefined ? config.autoShow : true,\n revision: config.revision || 1,\n gtmConsentMode: config.gtmConsentMode || false,\n disablePageInteraction: config.disablePageInteraction || false,\n theme: config.theme || 'light',\n position: config.position || 'bottom-left',\n layout: config.layout || 'box',\n backdropBlur: config.backdropBlur !== false,\n animationStyle: config.animationStyle || 'smooth',\n preferencesPosition: config.preferencesPosition || 'center',\n showWidget: config.showWidget !== undefined ? config.showWidget : true,\n widgetPosition: config.widgetPosition || 'bottom-left',\n widgetStyle: config.widgetStyle || 'compact',\n };\n }\n}\n"],"names":[],"mappings":"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"}
|