cookiecraft 1.0.0
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/LICENSE +21 -0
- package/README.md +418 -0
- package/dist/cookiecraft.css +1 -0
- package/dist/cookiecraft.esm.js +1508 -0
- package/dist/cookiecraft.esm.js.map +1 -0
- package/dist/cookiecraft.js +1516 -0
- package/dist/cookiecraft.js.map +1 -0
- package/dist/cookiecraft.min.js +2 -0
- package/dist/cookiecraft.min.js.map +1 -0
- package/dist/stats.html +4949 -0
- package/dist/types/blocking/CategoryManager.d.ts +24 -0
- package/dist/types/blocking/ScriptBlocker.d.ts +54 -0
- package/dist/types/core/ConsentManager.d.ts +33 -0
- package/dist/types/core/CookieConsent.d.ts +76 -0
- package/dist/types/core/EventEmitter.d.ts +26 -0
- package/dist/types/core/StorageManager.d.ts +33 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/integrations/DataLayerManager.d.ts +21 -0
- package/dist/types/integrations/GTMConsentMode.d.ts +29 -0
- package/dist/types/types/index.d.ts +90 -0
- package/dist/types/ui/Banner.d.ts +47 -0
- package/dist/types/ui/FloatingWidget.d.ts +41 -0
- package/dist/types/ui/PreferenceCenter.d.ts +52 -0
- package/dist/types/utils/cookies.d.ts +11 -0
- package/dist/types/utils/sanitize.d.ts +19 -0
- package/package.json +86 -0
|
@@ -0,0 +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/ui/Banner.ts","../src/ui/PreferenceCenter.ts","../src/ui/FloatingWidget.ts","../src/integrations/GTMConsentMode.ts","../src/integrations/DataLayerManager.ts","../src/utils/cookies.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 localStorage.removeItem(StorageManager.STORAGE_KEY);\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 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.userAgent === 'string' &&\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 return {\n version: typeof record.version === 'number' ? record.version : 1,\n timestamp: typeof record.timestamp === 'string' ? record.timestamp : now.toISOString(),\n categories: record.categories as ConsentCategories,\n userAgent: typeof record.userAgent === 'string' ? record.userAgent : navigator.userAgent,\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;\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\n for (const key of Object.keys(categories)) {\n if (!(key in this.config.categories)) {\n return false;\n }\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 === undefined;\n }\n\n /**\n * Check if stored consent needs update due to policy change\n */\n public needsUpdate(storedConsent: ConsentRecord): boolean {\n // Check if policy version has changed\n return storedConsent.version < this.config.revision;\n }\n\n /**\n * Get current consent record\n */\n public getCurrentConsent(): ConsentRecord {\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 userAgent: navigator.userAgent,\n expiresAt: expiryDate.toISOString(),\n };\n }\n}\n","/**\n * EventEmitter - Simple pub/sub pattern for internal and external events\n */\n\nexport class EventEmitter {\n private events: Map<string, Set<Function>> = new Map();\n\n /**\n * Register an event handler\n */\n public on(event: string, callback: Function): 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: Function): 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 // Initialize with common patterns\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 as keyof ConsentCategories] === true;\n }\n\n /**\n * Initialize default URL patterns for common tracking services\n */\n private initializeDefaultPatterns(): void {\n this.categories.set('analytics', [\n 'google-analytics.com',\n 'googletagmanager.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 '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 ]);\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)\n if (/^[a-zA-Z]+$/.test(trimmed)) return trimmed;\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 * Banner - Cookie consent banner component\n */\n\nimport { ConsentConfig, ConsentCategories } from '../types';\nimport { EventEmitter } from '../core/EventEmitter';\nimport { escapeHtml, sanitizeUrl, sanitizeColor } from '../utils/sanitize';\n\nexport class Banner {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\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 if (!this.element) {\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 // Focus first button for accessibility\n const firstButton = this.element?.querySelector('button');\n firstButton?.focus();\n\n // Disable page interaction if configured\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = 'hidden';\n }\n }\n\n /**\n * Hide the banner\n */\n public hide(): void {\n this.element?.classList.remove('is-visible');\n\n // Re-enable page interaction\n if (this.config.disablePageInteraction) {\n document.body.style.overflow = '';\n }\n\n setTimeout(() => {\n this.destroy();\n }, 300); // Match CSS transition\n }\n\n /**\n * Destroy the banner\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 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\n const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';\n const colorStyle = safeColor ? `--cc-primary: ${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=\"region\"\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 || '🍪 Nous utilisons des 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--tertiary\"\n data-action=\"customize\"\n aria-label=\"${escapeHtml(translations.customize || 'Personnaliser')}\"\n >\n ${escapeHtml(translations.customize || 'Personnaliser')}\n </button>\n <button\n class=\"cc-btn cc-btn--reject\"\n data-action=\"reject\"\n aria-label=\"${escapeHtml(translations.rejectAll || 'Tout refuser')}\"\n >\n ${escapeHtml(translations.rejectAll || 'Tout refuser')}\n </button>\n <button\n class=\"cc-btn cc-btn--accept\"\n data-action=\"accept\"\n aria-label=\"${escapeHtml(translations.acceptAll || 'Tout accepter')}\"\n >\n ${escapeHtml(translations.acceptAll || 'Tout accepter')}\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 // Keyboard support\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.config.disablePageInteraction) {\n // Allow ESC to close if page interaction is disabled\n this.handleRejectAll();\n }\n });\n }\n\n /**\n * Handle accept all action\n */\n private handleAcceptAll(): void {\n const allCategories: ConsentCategories = {\n necessary: true,\n analytics: true,\n marketing: true,\n };\n\n // Only add preferences if it's configured\n if (this.config.categories.preferences) {\n allCategories.preferences = true;\n }\n\n this.eventEmitter.emit('consent:accept', allCategories);\n this.config.onAccept?.(allCategories);\n this.hide();\n }\n\n /**\n * Handle reject all action\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = {\n necessary: true,\n analytics: false,\n marketing: false,\n };\n\n // Only add preferences if it's configured\n if (this.config.categories.preferences) {\n necessaryOnly.preferences = false;\n }\n\n this.eventEmitter.emit('consent:reject', necessaryOnly);\n this.config.onReject?.();\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 * Generate description HTML with privacy policy link\n */\n private getDescriptionHTML(): string {\n const translations = this.config.translations || {};\n const defaultDescription = 'Pour améliorer votre expérience sur notre site, nous utilisons des cookies. Vous pouvez choisir les cookies que vous acceptez.';\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 || 'Politique de confidentialité');\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';\n\nexport class PreferenceCenter {\n private config: ConsentConfig;\n private element: HTMLElement | null = null;\n private eventEmitter: EventEmitter;\n private currentConsent: ConsentCategories;\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 if (!this.element) {\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 // Prevent body scroll\n document.body.style.overflow = 'hidden';\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 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 = safeColor\n ? `--cc-primary: ${safeColor}; --cc-primary-hover: ${this.adjustColorBrightness(safeColor, -15)};`\n : '';\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 || 'Politique de confidentialité')}\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\" data-action=\"close\"></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 || 'Préférences de cookies')}\n </h2>\n <button\n class=\"cc-modal__close\"\n aria-label=\"Fermer\"\n data-action=\"close\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n </button>\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 || 'Uniquement les essentiels')}\n </button>\n <button\n class=\"cc-btn cc-btn--primary\"\n data-action=\"save\"\n >\n ${escapeHtml(translations.savePreferences || 'Enregistrer mes choix')}\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 as keyof ConsentCategories];\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 === 'close') {\n this.hide();\n } else if (action === 'save') {\n this.handleSave();\n } else if (action === 'reject') {\n this.handleRejectAll();\n }\n });\n\n // Keyboard shortcuts\n this.element?.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n this.hide();\n }\n });\n }\n\n /**\n * Handle save preferences\n */\n private handleSave(): void {\n const checkboxes = this.element?.querySelectorAll('input[data-category]');\n const categories: ConsentCategories = {\n necessary: true,\n analytics: false,\n marketing: false,\n };\n\n checkboxes?.forEach((checkbox) => {\n if (checkbox instanceof HTMLInputElement) {\n const category = checkbox.getAttribute('data-category');\n if (category) {\n categories[category as keyof ConsentCategories] = checkbox.checked;\n }\n }\n });\n\n this.eventEmitter.emit('consent:update', categories);\n this.config.onChange?.(categories);\n this.hide();\n }\n\n /**\n * Handle reject all\n */\n private handleRejectAll(): void {\n const necessaryOnly: ConsentCategories = {\n necessary: true,\n analytics: false,\n marketing: false,\n };\n\n // Only add preferences if it's configured\n if (this.config.categories.preferences) {\n necessaryOnly.preferences = 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 // Focus first element\n firstFocusable?.focus();\n\n // Trap focus\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 * Adjust color brightness for hover effect\n */\n private adjustColorBrightness(color: string, percent: number): string {\n // Remove # if present\n const hex = color.replace('#', '');\n\n // Convert to RGB\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 // Adjust brightness\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 // Convert back to hex\n const toHex = (value: number) => {\n const hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n\n return `#${toHex(adjust(r))}${toHex(adjust(g))}${toHex(adjust(b))}`;\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';\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 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 /**\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 = safeColor ? `--cc-primary: ${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 || 'Paramètres des cookies')}\"\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=\"none\" stroke=\"currentColor\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"2\"/>\n <circle cx=\"7\" cy=\"7\" r=\"1.5\"/>\n <circle cx=\"17\" cy=\"7\" r=\"1.5\"/>\n <circle cx=\"7\" cy=\"17\" r=\"1.5\"/>\n <circle cx=\"17\" cy=\"17\" r=\"1.5\"/>\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 * Implements all required signals:\n * - ad_storage, ad_user_data, ad_personalization, analytics_storage (core GCM v2)\n * - functionality_storage, personalization_storage, security_storage (non-core)\n * - wait_for_update, url_passthrough, ads_data_redaction (advanced features)\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', // Always granted\n };\n\n // Add wait_for_update to give CMP time to restore returning visitor consent\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 // Set advanced features via gtag('set', ...)\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 * Called both on new consent and on page load for returning visitors\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 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: categories.preferences ? 'granted' : 'denied',\n personalization_storage: categories.preferences ? 'granted' : 'denied',\n security_storage: 'granted', // Always 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 * CookieConsent - Main orchestrator class\n */\n\nimport { ConsentConfig, ConsentCategories } 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';\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\n constructor(config: ConsentConfig) {\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 preference center requests\n this.eventEmitter.on('preferences:show', () => {\n this.showPreferences();\n });\n\n // Listen for consent updates\n this.eventEmitter.on('consent:accept', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n });\n\n this.eventEmitter.on('consent:reject', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n });\n\n this.eventEmitter.on('consent:update', (categories: ConsentCategories) => {\n this.updateConsent(categories);\n });\n }\n\n /**\n * Initialize the cookie consent system\n */\n public init(): void {\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 // Valid consent exists\n if (this.consentManager.needsUpdate(storedConsent)) {\n // Policy updated, show banner again\n if (this.config.autoShow) {\n this.showBanner();\n }\n } else {\n // Apply stored consent\n this.applyConsent(storedConsent.categories);\n\n // Restore GTM consent for returning visitors (within wait_for_update window)\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent(storedConsent.categories);\n }\n\n this.eventEmitter.emit('consent:load', storedConsent);\n\n // Show floating widget if enabled\n if (this.config.showWidget) {\n this.showFloatingWidget();\n }\n }\n } else {\n // No consent or expired\n if (this.config.autoShow) {\n this.showBanner();\n }\n }\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 (user chose to customize)\n const currentConsent = stored || {\n necessary: true,\n analytics: true,\n marketing: true,\n preferences: true,\n };\n\n // Always recreate to get fresh state from storage\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 (delay to let banner hide)\n if (this.config.showWidget) {\n setTimeout(() => {\n this.showFloatingWidget();\n }, 400); // Wait for banner hide animation\n }\n }\n\n /**\n * Get current consent\n */\n public getConsent() {\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 // Clear all non-essential cookies on reset\n clearDeniedCookies({ necessary: true, analytics: false, marketing: false, preferences: false });\n\n // Update GTM to denied state\n if (this.gtmIntegration) {\n this.gtmIntegration.updateConsent({ necessary: true, analytics: false, marketing: false });\n }\n\n this.showBanner();\n }\n\n /**\n * Register event handler\n */\n public on(event: string, callback: Function): void {\n this.eventEmitter.on(event, callback);\n }\n\n /**\n * Unregister event handler\n */\n public off(event: string, callback: Function): void {\n this.eventEmitter.off(event, callback);\n }\n\n /**\n * Destroy and cleanup all UI elements\n */\n public destroy(): void {\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 }\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\n // CNIL/GDPR: actively delete cookies for denied categories\n clearDeniedCookies(categories as unknown as Record<string, boolean>);\n }\n\n /**\n * Validate and set default config values\n */\n private validateConfig(config: ConsentConfig): ConsentConfig {\n return {\n ...config,\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',\n layout: config.layout || 'bar',\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-right',\n widgetStyle: config.widgetStyle || 'full',\n };\n }\n}\n"],"names":[],"mappings":"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"}
|