consentric 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -59,7 +59,8 @@ npm run example # opens http://localhost:5173
59
59
  - **Google Consent Mode v2** — pushes `default` (all denied) on mount and `update` on
60
60
  the visitor's choice, mapping the four categories to the right Consent Mode signals.
61
61
  - **Persistent & versioned** — the choice is stored in a cookie for one year and
62
- restored on the next visit; bumping the schema version re-prompts everyone.
62
+ restored on the next visit; the stored value is versioned, so a future release can
63
+ re-prompt everyone after a policy change.
63
64
  - **Familiar tabbed UX** — Consent / Details / About tabs, four categories, a per-cookie
64
65
  accordion. Recognisable to visitors, nothing for you to design.
65
66
  - **10 built-in languages** — English (default), German, French, Spanish, Italian,
package/dist/index.cjs CHANGED
@@ -1015,5 +1015,3 @@ exports.LOCALES = LOCALES;
1015
1015
  exports.SUPPORTED_LOCALES = SUPPORTED_LOCALES;
1016
1016
  exports.default = CookieConsent_default;
1017
1017
  exports.resolveLocale = resolveLocale;
1018
- //# sourceMappingURL=index.cjs.map
1019
- //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1007,5 +1007,3 @@ function CookieConsent({
1007
1007
  var CookieConsent_default = CookieConsent;
1008
1008
 
1009
1009
  export { CookieConsent, LOCALES, SUPPORTED_LOCALES, CookieConsent_default as default, resolveLocale };
1010
- //# sourceMappingURL=index.js.map
1011
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "consentric",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Self-contained, configurable GDPR cookie consent for React. Google Consent Mode v2, 10 built-in languages, zero dependencies, zero Tailwind.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cookies.ts","../src/locales/de.ts","../src/locales/fr.ts","../src/locales/es.ts","../src/locales/it.ts","../src/locales/pt.ts","../src/locales/nl.ts","../src/locales/pl.ts","../src/locales/cs.ts","../src/locales/sk.ts","../src/locales/index.ts","../src/styles.ts","../src/CookieConsent.tsx"],"names":["jsx","jsxs","useState","useRef","useMemo","useEffect","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Cookie storage + Google Consent Mode plumbing.\n *\n * Keeps the browser/`document.cookie` side of the component in one place: the\n * gtag bridge, persisting/restoring the visitor's choice, and deleting a denied\n * category's declared cookies on withdrawal.\n */\n\nimport type { CatId, Choices, CookieInfo } from './types';\n\n/** Stored-choice schema version. Bumping it re-prompts everyone on next visit. */\nexport const VERSION = 2;\n\n/** gtag() pushes the live `arguments` object, exactly what Consent Mode expects. */\nexport const gtag: (...args: unknown[]) => void = function () {\n const w = window as unknown as { dataLayer?: unknown[] };\n w.dataLayer = w.dataLayer || [];\n // eslint-disable-next-line prefer-rest-params\n w.dataLayer.push(arguments);\n};\n\n/** Map the visitor's choice to the six Consent Mode signals we manage. */\nexport function applyConsent(ch: Choices): void {\n gtag('consent', 'update', {\n functionality_storage: ch.preferences ? 'granted' : 'denied',\n personalization_storage: ch.preferences ? 'granted' : 'denied',\n analytics_storage: ch.statistics ? 'granted' : 'denied',\n ad_storage: ch.marketing ? 'granted' : 'denied',\n ad_user_data: ch.marketing ? 'granted' : 'denied',\n ad_personalization: ch.marketing ? 'granted' : 'denied',\n });\n}\n\nexport function readCookie(name: string): Choices | null {\n try {\n const m = document.cookie.match(new RegExp('(?:^|;\\\\s*)' + name + '=([^;]+)'));\n if (!m) return null;\n const c = JSON.parse(decodeURIComponent(m[1]));\n return c && c.v === VERSION && c.choices ? (c.choices as Choices) : null;\n } catch {\n return null;\n }\n}\n\nexport function writeCookie(name: string, ch: Choices): void {\n const val = encodeURIComponent(JSON.stringify({ v: VERSION, ts: Date.now(), choices: ch }));\n const secure = typeof location !== 'undefined' && location.protocol === 'https:' ? '; Secure' : '';\n document.cookie = name + '=' + val + '; path=/; max-age=31536000; SameSite=Lax' + secure;\n}\n\n/** Compile a cookie-table name to a matcher. A `*` is a wildcard, so `_ga_*`\n * matches `_ga_ABC123`; everything else is matched literally. */\nfunction cookieNameMatcher(pattern: string): RegExp {\n const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\*/g, '.*');\n return new RegExp('^' + escaped + '$');\n}\n\n/** Candidate `domain=` values to try when deleting a cookie: host-only, then each\n * parent domain (dotted and undotted), so we hit wherever it was actually set —\n * including the registrable domain (e.g. `.example.com`) that GA-style cookies use. */\nfunction domainCandidates(): string[] {\n const out = [''];\n const host = location.hostname;\n if (!host || host === 'localhost' || /^[\\d.]+$/.test(host)) return out;\n const parts = host.split('.');\n for (let i = 0; i <= parts.length - 2; i++) {\n const d = parts.slice(i).join('.');\n out.push(d, '.' + d);\n }\n return out;\n}\n\n/** `/` plus each ancestor of the current path, since cookies may be path-scoped. */\nfunction pathCandidates(): string[] {\n const out = ['/'];\n let acc = '';\n for (const seg of location.pathname.split('/').filter(Boolean)) {\n acc += '/' + seg;\n out.push(acc);\n }\n return out;\n}\n\n/** Expire a cookie across every plausible path/domain it might have been set on. */\nfunction expireCookie(name: string): void {\n for (const path of pathCandidates()) {\n for (const domain of domainCandidates()) {\n document.cookie =\n name + '=; path=' + path + (domain ? '; domain=' + domain : '') +\n '; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0';\n }\n }\n}\n\n/** Delete the declared cookies of every denied category. Only removes cookies that\n * currently exist and match a name in that category's table; never touches the\n * consent cookie or the always-granted `necessary` category. */\nexport function clearDeniedCookies(\n cats: { id: CatId; locked: boolean; cookies: CookieInfo[] }[],\n choices: Choices,\n consentCookie: string,\n): void {\n if (typeof document === 'undefined') return;\n const present = document.cookie\n .split(';')\n .map((c) => c.split('=')[0].trim())\n .filter(Boolean);\n if (!present.length) return;\n for (const cat of cats) {\n if (cat.locked || choices[cat.id as keyof Choices]) continue;\n const matchers = cat.cookies.map((c) => cookieNameMatcher(c.name));\n for (const name of present) {\n if (name === consentCookie) continue;\n if (matchers.some((re) => re.test(name))) expireCookie(name);\n }\n }\n}\n","import type { LocalePack } from './types';\n\n/** German (Deutsch). */\nexport const de: LocalePack = {\n labels: {\n tabConsent: 'Einwilligung',\n tabDetails: 'Details',\n tabAbout: 'Über Cookies',\n heading: 'Diese Website verwendet Cookies',\n lead: 'Wir verwenden Cookies, um diese Website zu betreiben und – wenn Sie zustimmen – um Zugriffe zu messen und für Marketing. Nicht notwendige Cookies bleiben deaktiviert, bis Sie sich entscheiden.',\n deny: 'Ablehnen',\n save: 'Auswahl speichern',\n allowAll: 'Alle zulassen',\n noCookies: 'Keine Cookies in dieser Kategorie.',\n aboutParagraphs: [\n 'Cookies sind kleine Textdateien, die Websites verwenden, um Ihr Nutzungserlebnis effizienter zu gestalten.',\n 'Das Gesetz erlaubt uns, Cookies zu speichern, die für den Betrieb dieser Website unbedingt erforderlich sind. Für alles andere benötigen wir Ihre Einwilligung – deshalb sehen Sie dieses Banner.',\n 'Sie können Ihre Einwilligung jederzeit über die Cookie-Schaltfläche unten links auf dem Bildschirm ändern oder widerrufen.',\n ],\n operatedBy: 'Betrieben von {company}. ',\n readMore: 'Mehr in unserer {privacy} und {cookie}.',\n privacyLabel: 'Datenschutzerklärung',\n cookieLabel: 'Cookie-Richtlinie',\n fabLabel: 'Cookie-Einstellungen',\n dialogLabel: 'Cookie-Einwilligung',\n },\n categories: {\n necessary: {\n name: 'Notwendig',\n short: 'Erforderlich, um die Website zu laden und Ihre Auswahl zu speichern.',\n about: 'Notwendige Cookies machen die Website nutzbar, indem sie grundlegende Funktionen wie das Speichern Ihrer Cookie-Auswahl ermöglichen. Ohne sie kann die Website nicht richtig funktionieren.',\n },\n preferences: {\n name: 'Präferenzen',\n short: 'Speichert Einstellungen wie Ihre Region.',\n about: 'Präferenz-Cookies ermöglichen es der Website, sich Informationen zu merken, die ihr Verhalten oder Aussehen verändern, wie etwa Ihre Region.',\n },\n statistics: {\n name: 'Statistiken',\n short: 'Anonyme Nutzungsstatistiken zur Verbesserung der Website.',\n about: 'Statistik-Cookies helfen uns zu verstehen, wie Besucher die Website nutzen, indem Informationen anonym erfasst werden (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Werbung und Kampagnenmessung.',\n about: 'Marketing-Cookies verfolgen Besucher über Websites hinweg, um relevante Anzeigen zu zeigen. Es werden keine gesetzt, sofern kein Marketing-Tag aktiviert ist.',\n },\n },\n cookies: {\n selfProvider: 'diese Website',\n consentPurpose: 'Speichert Ihre Cookie-Einwilligung.',\n consentMeta: 'HTTP · 1 Jahr',\n gaPurpose: 'Unterscheidet Besucher, um die Websitenutzung zu messen.',\n gaStatePurpose: 'Hält den Analyse-Sitzungsstatus aufrecht.',\n gaMeta: 'HTTP · 2 Jahre',\n },\n};\n","import type { LocalePack } from './types';\n\n/** French (Français). */\nexport const fr: LocalePack = {\n labels: {\n tabConsent: 'Consentement',\n tabDetails: 'Détails',\n tabAbout: 'À propos',\n heading: 'Ce site utilise des cookies',\n lead: 'Nous utilisons des cookies pour faire fonctionner ce site et, si vous l’autorisez, pour mesurer l’audience et à des fins marketing. Les cookies non essentiels restent désactivés jusqu’à votre choix.',\n deny: 'Refuser',\n save: 'Enregistrer les choix',\n allowAll: 'Tout autoriser',\n noCookies: 'Aucun cookie dans cette catégorie.',\n aboutParagraphs: [\n 'Les cookies sont de petits fichiers texte que les sites web utilisent pour rendre votre expérience plus efficace.',\n 'La loi nous autorise à stocker les cookies strictement nécessaires au fonctionnement de ce site. Pour tout le reste, nous avons besoin de votre autorisation, c’est pourquoi vous voyez cette bannière.',\n 'Vous pouvez modifier ou retirer votre consentement à tout moment à l’aide du bouton cookies en bas à gauche de l’écran.',\n ],\n operatedBy: 'Exploité par {company}. ',\n readMore: 'En savoir plus dans notre {privacy} et notre {cookie}.',\n privacyLabel: 'politique de confidentialité',\n cookieLabel: 'politique relative aux cookies',\n fabLabel: 'Paramètres des cookies',\n dialogLabel: 'Consentement aux cookies',\n },\n categories: {\n necessary: {\n name: 'Nécessaires',\n short: 'Nécessaires pour charger le site et mémoriser votre choix.',\n about: 'Les cookies nécessaires rendent le site utilisable en activant des fonctions de base comme la mémorisation de votre choix de cookies. Le site ne peut pas fonctionner correctement sans eux.',\n },\n preferences: {\n name: 'Préférences',\n short: 'Mémorise des réglages comme votre région.',\n about: 'Les cookies de préférences permettent au site de mémoriser des informations qui modifient son comportement ou son apparence, comme votre région.',\n },\n statistics: {\n name: 'Statistiques',\n short: 'Statistiques d’utilisation anonymes pour améliorer le site.',\n about: 'Les cookies statistiques nous aident à comprendre comment les visiteurs utilisent le site en collectant des informations de manière anonyme (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicité et mesure des campagnes.',\n about: 'Les cookies marketing suivent les visiteurs à travers les sites pour afficher des publicités pertinentes. Aucun n’est déposé sauf si une balise marketing est activée.',\n },\n },\n cookies: {\n selfProvider: 'ce site',\n consentPurpose: 'Enregistre votre consentement aux cookies.',\n consentMeta: 'HTTP · 1 an',\n gaPurpose: 'Distingue les visiteurs pour mesurer l’utilisation du site.',\n gaStatePurpose: 'Maintient l’état de la session d’analyse.',\n gaMeta: 'HTTP · 2 ans',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Spanish (Español). */\nexport const es: LocalePack = {\n labels: {\n tabConsent: 'Consentimiento',\n tabDetails: 'Detalles',\n tabAbout: 'Acerca de',\n heading: 'Este sitio web utiliza cookies',\n lead: 'Utilizamos cookies para hacer funcionar este sitio y, si lo permite, para medir el tráfico y con fines de marketing. Las cookies no esenciales permanecen desactivadas hasta que usted elija.',\n deny: 'Rechazar',\n save: 'Guardar elección',\n allowAll: 'Permitir todas',\n noCookies: 'No hay cookies en esta categoría.',\n aboutParagraphs: [\n 'Las cookies son pequeños archivos de texto que los sitios web utilizan para hacer su experiencia más eficiente.',\n 'La ley nos permite almacenar cookies estrictamente necesarias para el funcionamiento de este sitio. Para todo lo demás necesitamos su permiso, por eso ve este aviso.',\n 'Puede cambiar o retirar su consentimiento en cualquier momento mediante el botón de cookies en la esquina inferior izquierda de la pantalla.',\n ],\n operatedBy: 'Operado por {company}. ',\n readMore: 'Más información en nuestra {privacy} y {cookie}.',\n privacyLabel: 'política de privacidad',\n cookieLabel: 'política de cookies',\n fabLabel: 'Configuración de cookies',\n dialogLabel: 'Consentimiento de cookies',\n },\n categories: {\n necessary: {\n name: 'Necesarias',\n short: 'Necesarias para cargar el sitio y recordar su elección.',\n about: 'Las cookies necesarias hacen que el sitio sea utilizable al habilitar funciones básicas como recordar su elección de cookies. El sitio no puede funcionar correctamente sin ellas.',\n },\n preferences: {\n name: 'Preferencias',\n short: 'Recuerda ajustes como su región.',\n about: 'Las cookies de preferencias permiten que el sitio recuerde información que cambia su comportamiento o aspecto, como su región.',\n },\n statistics: {\n name: 'Estadísticas',\n short: 'Estadísticas de uso anónimas para mejorar el sitio.',\n about: 'Las cookies estadísticas nos ayudan a entender cómo los visitantes usan el sitio recopilando información de forma anónima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicidad y medición de campañas.',\n about: 'Las cookies de marketing rastrean a los visitantes a través de los sitios para mostrar anuncios relevantes. No se establece ninguna a menos que se active una etiqueta de marketing.',\n },\n },\n cookies: {\n selfProvider: 'este sitio',\n consentPurpose: 'Almacena su consentimiento de cookies.',\n consentMeta: 'HTTP · 1 año',\n gaPurpose: 'Distingue a los visitantes para medir el uso del sitio.',\n gaStatePurpose: 'Mantiene el estado de la sesión de analítica.',\n gaMeta: 'HTTP · 2 años',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Italian (Italiano). */\nexport const it: LocalePack = {\n labels: {\n tabConsent: 'Consenso',\n tabDetails: 'Dettagli',\n tabAbout: 'Informazioni',\n heading: 'Questo sito web utilizza i cookie',\n lead: 'Utilizziamo i cookie per far funzionare questo sito e, se lo consenti, per misurare il traffico e per il marketing. I cookie non essenziali restano disattivati finché non scegli.',\n deny: 'Rifiuta',\n save: 'Salva scelte',\n allowAll: 'Consenti tutti',\n noCookies: 'Nessun cookie in questa categoria.',\n aboutParagraphs: [\n 'I cookie sono piccoli file di testo che i siti web utilizzano per rendere la tua esperienza più efficiente.',\n 'La legge ci consente di memorizzare i cookie strettamente necessari al funzionamento di questo sito. Per tutto il resto abbiamo bisogno del tuo permesso, motivo per cui vedi questo banner.',\n 'Puoi modificare o revocare il tuo consenso in qualsiasi momento tramite il pulsante dei cookie in basso a sinistra dello schermo.',\n ],\n operatedBy: 'Gestito da {company}. ',\n readMore: 'Maggiori informazioni nella nostra {privacy} e nella nostra {cookie}.',\n privacyLabel: 'informativa sulla privacy',\n cookieLabel: 'informativa sui cookie',\n fabLabel: 'Impostazioni cookie',\n dialogLabel: 'Consenso ai cookie',\n },\n categories: {\n necessary: {\n name: 'Necessari',\n short: 'Necessari per caricare il sito e ricordare la tua scelta.',\n about: 'I cookie necessari rendono il sito utilizzabile abilitando funzioni di base come ricordare la tua scelta sui cookie. Il sito non può funzionare correttamente senza di essi.',\n },\n preferences: {\n name: 'Preferenze',\n short: 'Ricorda impostazioni come la tua regione.',\n about: 'I cookie di preferenza consentono al sito di ricordare informazioni che ne modificano il comportamento o l’aspetto, come la tua regione.',\n },\n statistics: {\n name: 'Statistiche',\n short: 'Statistiche di utilizzo anonime per migliorare il sito.',\n about: 'I cookie statistici ci aiutano a capire come i visitatori utilizzano il sito raccogliendo informazioni in forma anonima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Pubblicità e misurazione delle campagne.',\n about: 'I cookie di marketing tracciano i visitatori tra i siti per mostrare annunci pertinenti. Nessuno viene impostato a meno che non sia attivato un tag di marketing.',\n },\n },\n cookies: {\n selfProvider: 'questo sito',\n consentPurpose: 'Memorizza il tuo consenso ai cookie.',\n consentMeta: 'HTTP · 1 anno',\n gaPurpose: 'Distingue i visitatori per misurare l’utilizzo del sito.',\n gaStatePurpose: 'Mantiene lo stato della sessione di analisi.',\n gaMeta: 'HTTP · 2 anni',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Portuguese (Português). */\nexport const pt: LocalePack = {\n labels: {\n tabConsent: 'Consentimento',\n tabDetails: 'Detalhes',\n tabAbout: 'Sobre',\n heading: 'Este site utiliza cookies',\n lead: 'Utilizamos cookies para executar este site e, se permitir, para medir o tráfego e para marketing. Os cookies não essenciais permanecem desativados até que escolha.',\n deny: 'Recusar',\n save: 'Guardar escolhas',\n allowAll: 'Permitir todos',\n noCookies: 'Nenhum cookie nesta categoria.',\n aboutParagraphs: [\n 'Os cookies são pequenos ficheiros de texto que os sites utilizam para tornar a sua experiência mais eficiente.',\n 'A lei permite-nos armazenar cookies estritamente necessários ao funcionamento deste site. Para tudo o resto precisamos da sua permissão, e é por isso que vê este aviso.',\n 'Pode alterar ou retirar o seu consentimento a qualquer momento através do botão de cookies no canto inferior esquerdo do ecrã.',\n ],\n operatedBy: 'Operado por {company}. ',\n readMore: 'Saiba mais na nossa {privacy} e {cookie}.',\n privacyLabel: 'política de privacidade',\n cookieLabel: 'política de cookies',\n fabLabel: 'Definições de cookies',\n dialogLabel: 'Consentimento de cookies',\n },\n categories: {\n necessary: {\n name: 'Necessários',\n short: 'Necessários para carregar o site e lembrar a sua escolha.',\n about: 'Os cookies necessários tornam o site utilizável ao ativar funções básicas como lembrar a sua escolha de cookies. O site não pode funcionar corretamente sem eles.',\n },\n preferences: {\n name: 'Preferências',\n short: 'Lembra definições como a sua região.',\n about: 'Os cookies de preferências permitem que o site se lembre de informações que alteram o seu comportamento ou aparência, como a sua região.',\n },\n statistics: {\n name: 'Estatísticas',\n short: 'Estatísticas de utilização anónimas para melhorar o site.',\n about: 'Os cookies estatísticos ajudam-nos a perceber como os visitantes utilizam o site, recolhendo informações de forma anónima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicidade e medição de campanhas.',\n about: 'Os cookies de marketing seguem os visitantes através dos sites para mostrar anúncios relevantes. Nenhum é definido a menos que uma tag de marketing esteja ativada.',\n },\n },\n cookies: {\n selfProvider: 'este site',\n consentPurpose: 'Armazena o seu consentimento de cookies.',\n consentMeta: 'HTTP · 1 ano',\n gaPurpose: 'Distingue os visitantes para medir a utilização do site.',\n gaStatePurpose: 'Mantém o estado da sessão de análise.',\n gaMeta: 'HTTP · 2 anos',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Dutch (Nederlands). */\nexport const nl: LocalePack = {\n labels: {\n tabConsent: 'Toestemming',\n tabDetails: 'Details',\n tabAbout: 'Over cookies',\n heading: 'Deze website gebruikt cookies',\n lead: 'We gebruiken cookies om deze site te laten werken en, als u dat toestaat, om verkeer te meten en voor marketing. Niet-essentiële cookies blijven uitgeschakeld totdat u kiest.',\n deny: 'Weigeren',\n save: 'Keuzes opslaan',\n allowAll: 'Alles toestaan',\n noCookies: 'Geen cookies in deze categorie.',\n aboutParagraphs: [\n 'Cookies zijn kleine tekstbestanden die websites gebruiken om uw ervaring efficiënter te maken.',\n 'De wet staat ons toe cookies op te slaan die strikt noodzakelijk zijn om deze site te laten werken. Voor al het andere hebben we uw toestemming nodig, daarom ziet u deze melding.',\n 'U kunt uw toestemming op elk moment wijzigen of intrekken via de cookieknop linksonder op het scherm.',\n ],\n operatedBy: 'Beheerd door {company}. ',\n readMore: 'Lees meer in ons {privacy} en {cookie}.',\n privacyLabel: 'privacybeleid',\n cookieLabel: 'cookiebeleid',\n fabLabel: 'Cookie-instellingen',\n dialogLabel: 'Cookietoestemming',\n },\n categories: {\n necessary: {\n name: 'Noodzakelijk',\n short: 'Nodig om de site te laden en uw keuze te onthouden.',\n about: 'Noodzakelijke cookies maken de site bruikbaar door basisfuncties mogelijk te maken, zoals het onthouden van uw cookiekeuze. De site kan zonder deze cookies niet goed werken.',\n },\n preferences: {\n name: 'Voorkeuren',\n short: 'Onthoudt instellingen zoals uw regio.',\n about: 'Voorkeurscookies laten de site informatie onthouden die het gedrag of uiterlijk verandert, zoals uw regio.',\n },\n statistics: {\n name: 'Statistieken',\n short: 'Anonieme gebruiksstatistieken om de site te verbeteren.',\n about: 'Statistiekcookies helpen ons te begrijpen hoe bezoekers de site gebruiken door anoniem informatie te verzamelen (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Advertenties en campagnemeting.',\n about: 'Marketingcookies volgen bezoekers over verschillende sites om relevante advertenties te tonen. Er worden er geen geplaatst tenzij een marketingtag is ingeschakeld.',\n },\n },\n cookies: {\n selfProvider: 'deze site',\n consentPurpose: 'Slaat uw cookietoestemming op.',\n consentMeta: 'HTTP · 1 jaar',\n gaPurpose: 'Onderscheidt bezoekers om het sitegebruik te meten.',\n gaStatePurpose: 'Houdt de status van de analysesessie bij.',\n gaMeta: 'HTTP · 2 jaar',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Polish (Polski). */\nexport const pl: LocalePack = {\n labels: {\n tabConsent: 'Zgoda',\n tabDetails: 'Szczegóły',\n tabAbout: 'O plikach cookie',\n heading: 'Ta strona używa plików cookie',\n lead: 'Używamy plików cookie, aby prowadzić tę stronę oraz – jeśli wyrazisz zgodę – mierzyć ruch i prowadzić działania marketingowe. Pliki cookie inne niż niezbędne pozostają wyłączone, dopóki nie dokonasz wyboru.',\n deny: 'Odrzuć',\n save: 'Zapisz wybór',\n allowAll: 'Zezwól na wszystkie',\n noCookies: 'Brak plików cookie w tej kategorii.',\n aboutParagraphs: [\n 'Pliki cookie to małe pliki tekstowe, których strony internetowe używają, aby usprawnić korzystanie z nich.',\n 'Prawo pozwala nam przechowywać pliki cookie ściśle niezbędne do działania tej strony. We wszystkich innych przypadkach potrzebujemy Twojej zgody – dlatego widzisz ten baner.',\n 'W każdej chwili możesz zmienić lub wycofać swoją zgodę za pomocą przycisku cookie w lewym dolnym rogu ekranu.',\n ],\n operatedBy: 'Prowadzone przez {company}. ',\n readMore: 'Więcej informacji w naszej {privacy} i {cookie}.',\n privacyLabel: 'Polityce prywatności',\n cookieLabel: 'Polityce cookie',\n fabLabel: 'Ustawienia plików cookie',\n dialogLabel: 'Zgoda na pliki cookie',\n },\n categories: {\n necessary: {\n name: 'Niezbędne',\n short: 'Potrzebne do załadowania strony i zapamiętania Twojego wyboru.',\n about: 'Niezbędne pliki cookie umożliwiają korzystanie ze strony, udostępniając podstawowe funkcje, takie jak zapamiętanie Twojego wyboru dotyczącego plików cookie. Bez nich strona nie może działać prawidłowo.',\n },\n preferences: {\n name: 'Preferencje',\n short: 'Zapamiętuje ustawienia, takie jak Twój region.',\n about: 'Pliki cookie preferencji pozwalają stronie zapamiętać informacje, które zmieniają jej zachowanie lub wygląd, takie jak Twój region.',\n },\n statistics: {\n name: 'Statystyczne',\n short: 'Anonimowe statystyki użytkowania w celu ulepszenia strony.',\n about: 'Statystyczne pliki cookie pomagają nam zrozumieć, w jaki sposób odwiedzający korzystają ze strony, zbierając informacje anonimowo (Google Analytics).',\n },\n marketing: {\n name: 'Marketingowe',\n short: 'Reklamy i pomiar skuteczności kampanii.',\n about: 'Marketingowe pliki cookie śledzą odwiedzających na różnych stronach, aby wyświetlać trafne reklamy. Żaden nie jest ustawiany, o ile nie włączono tagu marketingowego.',\n },\n },\n cookies: {\n selfProvider: 'ta strona',\n consentPurpose: 'Przechowuje Twoją zgodę na pliki cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozróżnia odwiedzających, aby mierzyć korzystanie ze strony.',\n gaStatePurpose: 'Utrzymuje stan sesji analitycznej.',\n gaMeta: 'HTTP · 2 lata',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Czech (Čeština). */\nexport const cs: LocalePack = {\n labels: {\n tabConsent: 'Souhlas',\n tabDetails: 'Podrobnosti',\n tabAbout: 'O souborech cookie',\n heading: 'Tento web používá soubory cookie',\n lead: 'Soubory cookie používáme k provozu tohoto webu a – pokud to povolíte – k měření návštěvnosti a pro marketing. Soubory cookie, které nejsou nezbytné, zůstávají vypnuté, dokud se nerozhodnete.',\n deny: 'Odmítnout',\n save: 'Uložit volby',\n allowAll: 'Povolit vše',\n noCookies: 'V této kategorii nejsou žádné soubory cookie.',\n aboutParagraphs: [\n 'Soubory cookie jsou malé textové soubory, které weby používají k tomu, aby vaše používání bylo efektivnější.',\n 'Zákon nám umožňuje ukládat soubory cookie, které jsou nezbytně nutné k provozu tohoto webu. Pro vše ostatní potřebujeme váš souhlas, a proto vidíte tento banner.',\n 'Svůj souhlas můžete kdykoli změnit nebo odvolat pomocí tlačítka cookie v levém dolním rohu obrazovky.',\n ],\n operatedBy: 'Provozuje {company}. ',\n readMore: 'Více informací najdete v našich {privacy} a {cookie}.',\n privacyLabel: 'zásadách ochrany osobních údajů',\n cookieLabel: 'zásadách používání souborů cookie',\n fabLabel: 'Nastavení souborů cookie',\n dialogLabel: 'Souhlas se soubory cookie',\n },\n categories: {\n necessary: {\n name: 'Nezbytné',\n short: 'Potřebné k načtení webu a zapamatování vaší volby.',\n about: 'Nezbytné soubory cookie umožňují používání webu tím, že zajišťují základní funkce, jako je zapamatování vaší volby cookie. Bez nich web nemůže správně fungovat.',\n },\n preferences: {\n name: 'Předvolby',\n short: 'Zapamatuje si nastavení, jako je váš region.',\n about: 'Soubory cookie předvoleb umožňují webu zapamatovat si informace, které mění jeho chování nebo vzhled, například váš region.',\n },\n statistics: {\n name: 'Statistické',\n short: 'Anonymní statistiky používání pro vylepšení webu.',\n about: 'Statistické soubory cookie nám pomáhají pochopit, jak návštěvníci web používají, a to anonymním sběrem informací (Google Analytics).',\n },\n marketing: {\n name: 'Marketingové',\n short: 'Reklama a měření kampaní.',\n about: 'Marketingové soubory cookie sledují návštěvníky napříč weby a zobrazují relevantní reklamy. Žádné se nenastaví, pokud není povolena marketingová značka.',\n },\n },\n cookies: {\n selfProvider: 'tento web',\n consentPurpose: 'Ukládá váš souhlas se soubory cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozlišuje návštěvníky pro měření používání webu.',\n gaStatePurpose: 'Udržuje stav analytické relace.',\n gaMeta: 'HTTP · 2 roky',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Slovak (Slovenčina). */\nexport const sk: LocalePack = {\n labels: {\n tabConsent: 'Súhlas',\n tabDetails: 'Podrobnosti',\n tabAbout: 'O súboroch cookie',\n heading: 'Táto webová stránka používa súbory cookie',\n lead: 'Súbory cookie používame na prevádzku tejto stránky a – ak to povolíte – na meranie návštevnosti a na marketing. Súbory cookie, ktoré nie sú nevyhnutné, zostávajú vypnuté, kým sa nerozhodnete.',\n deny: 'Odmietnuť',\n save: 'Uložiť voľby',\n allowAll: 'Povoliť všetky',\n noCookies: 'V tejto kategórii nie sú žiadne súbory cookie.',\n aboutParagraphs: [\n 'Súbory cookie sú malé textové súbory, ktoré webové stránky používajú na to, aby bolo vaše používanie efektívnejšie.',\n 'Zákon nám umožňuje ukladať súbory cookie, ktoré sú nevyhnutne potrebné na prevádzku tejto stránky. Pre všetko ostatné potrebujeme váš súhlas, a preto vidíte tento banner.',\n 'Svoj súhlas môžete kedykoľvek zmeniť alebo odvolať pomocou tlačidla cookie v ľavom dolnom rohu obrazovky.',\n ],\n operatedBy: 'Prevádzkuje {company}. ',\n readMore: 'Viac informácií nájdete v našich {privacy} a {cookie}.',\n privacyLabel: 'zásadách ochrany osobných údajov',\n cookieLabel: 'zásadách používania súborov cookie',\n fabLabel: 'Nastavenia súborov cookie',\n dialogLabel: 'Súhlas so súbormi cookie',\n },\n categories: {\n necessary: {\n name: 'Nevyhnutné',\n short: 'Potrebné na načítanie stránky a zapamätanie vašej voľby.',\n about: 'Nevyhnutné súbory cookie umožňujú používanie stránky tým, že zabezpečujú základné funkcie, ako je zapamätanie vašej voľby cookie. Bez nich stránka nemôže správne fungovať.',\n },\n preferences: {\n name: 'Predvoľby',\n short: 'Zapamätá si nastavenia, ako je váš región.',\n about: 'Súbory cookie predvolieb umožňujú stránke zapamätať si informácie, ktoré menia jej správanie alebo vzhľad, napríklad váš región.',\n },\n statistics: {\n name: 'Štatistické',\n short: 'Anonymné štatistiky používania na zlepšenie stránky.',\n about: 'Štatistické súbory cookie nám pomáhajú pochopiť, ako návštevníci stránku používajú, prostredníctvom anonymného zberu informácií (Google Analytics).',\n },\n marketing: {\n name: 'Marketingové',\n short: 'Reklama a meranie kampaní.',\n about: 'Marketingové súbory cookie sledujú návštevníkov naprieč stránkami a zobrazujú relevantné reklamy. Žiadne sa nenastavia, pokiaľ nie je povolená marketingová značka.',\n },\n },\n cookies: {\n selfProvider: 'táto stránka',\n consentPurpose: 'Ukladá váš súhlas so súbormi cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozlišuje návštevníkov na meranie používania stránky.',\n gaStatePurpose: 'Udržiava stav analytickej relácie.',\n gaMeta: 'HTTP · 2 roky',\n },\n};\n","/**\n * Built-in language packs. English is the baseline and the fallback for every\n * string, so it needs no pack here. Select a language with the `locale` prop.\n */\n\nimport type { LocalePack } from './types';\nimport { de } from './de';\nimport { fr } from './fr';\nimport { es } from './es';\nimport { it } from './it';\nimport { pt } from './pt';\nimport { nl } from './nl';\nimport { pl } from './pl';\nimport { cs } from './cs';\nimport { sk } from './sk';\n\nexport type { LocalePack, LocaleCategoryText, LocaleCookieText } from './types';\n\n/** Locale code → translation. English ('en') is intentionally absent: it is the\n * built-in default and fallback. */\nexport const LOCALES: Record<string, LocalePack> = { de, fr, es, it, pt, nl, pl, cs, sk };\n\n/** Every locale the component understands, including the built-in default `en`. */\nexport const SUPPORTED_LOCALES = ['en', 'de', 'fr', 'es', 'it', 'pt', 'nl', 'pl', 'cs', 'sk'] as const;\n\n/** Resolve a `locale` prop to a pack, or `undefined` to use the English default.\n * Case-insensitive and region-tolerant: 'pt-BR' falls back to 'pt'. */\nexport function resolveLocale(locale?: string): LocalePack | undefined {\n if (!locale) return undefined;\n const l = locale.toLowerCase();\n return LOCALES[l] ?? LOCALES[l.split('-')[0]];\n}\n","/** Scoped, self-injected styles. All colours come from CSS variables set by the\n * component from `colors`, so the banner looks identical in any host project. */\nexport const CSS = `\n.tc-root,.tc-fab{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;box-sizing:border-box}\n.tc-root *,.tc-fab *{box-sizing:border-box}\n.tc-root{position:fixed;inset:0;z-index:2147483600;display:flex;align-items:center;justify-content:center;padding:0}\n.tc-backdrop{position:absolute;inset:0;background:var(--tc-backdrop);backdrop-filter:blur(4px)}\n.tc-card{position:relative;display:flex;flex-direction:column;width:100%;height:100dvh;overflow:hidden;background:var(--tc-surface);box-shadow:0 30px 80px -20px rgba(0,0,0,.7);opacity:0;transform:translateY(18px);transition:opacity .26s ease,transform .26s cubic-bezier(.22,1,.36,1)}\n.tc-card:focus{outline:none}\n.tc-card.tc-shown{opacity:1;transform:none}\n.tc-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem 0}\n.tc-tabs{display:flex;gap:1rem}\n.tc-tab{position:relative;padding:0 0 1rem;font-size:13px;font-weight:600;color:var(--tc-text-muted);background:none;border:0;cursor:pointer;transition:color .15s}\n.tc-tab:hover{color:var(--tc-text)}\n.tc-tab.tc-active{color:var(--tc-text)}\n.tc-tab.tc-active::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--tc-brand)}\n.tc-logo{flex-shrink:0;color:var(--tc-text);font-weight:700;font-size:15px}\n.tc-hr{border:0;border-top:1px solid rgba(255,255,255,.07);margin:0}\n.tc-body{flex:1;min-height:0;overflow-y:auto}\n.tc-panel{padding:1.75rem 1.5rem}\n.tc-h2{margin:0;font-size:1rem;font-weight:600;color:var(--tc-text)}\n.tc-lead{margin:.5rem 0 0;font-size:13.5px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;margin-top:1.75rem}\n.tc-cat{display:flex;flex-direction:column;align-items:center;text-align:center;border-radius:1rem;background:var(--tc-surface-alt);padding:1.25rem .75rem}\n.tc-cat-name{margin:0;font-size:.875rem;font-weight:600;color:var(--tc-text)}\n.tc-cat-desc{margin:.375rem 0 0;flex:1;font-size:11.5px;line-height:1.35;color:var(--tc-text-muted)}\n.tc-switch{position:relative;display:inline-flex;align-items:center;margin-top:1rem;cursor:pointer}\n.tc-switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0}\n.tc-track{width:2.75rem;height:1.5rem;border-radius:999px;background:rgba(255,255,255,.15);transition:background .2s}\n.tc-thumb{position:absolute;left:2px;top:2px;width:1.25rem;height:1.25rem;border-radius:999px;background:var(--tc-text);transition:transform .2s}\n.tc-switch input:checked~.tc-track{background:var(--tc-brand)}\n.tc-switch input:checked~.tc-thumb{transform:translateX(1.25rem);background:var(--tc-on-brand)}\n.tc-switch input:disabled{cursor:default}\n.tc-switch input:focus-visible~.tc-track{outline:2px solid var(--tc-brand);outline-offset:2px}\n.tc-acc{padding:1.25rem 0;border-top:1px solid rgba(255,255,255,.07)}\n.tc-acc:first-child{border-top:0}\n.tc-acc-head{display:flex;align-items:center;gap:.75rem}\n.tc-acc-btn{display:flex;flex:1;align-items:center;gap:.625rem;text-align:left;background:none;border:0;color:var(--tc-text);cursor:pointer;font:inherit}\n.tc-acc-name{font-size:.875rem;font-weight:600}\n.tc-badge{display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .375rem;border-radius:999px;background:rgba(255,255,255,.1);font-size:10px;color:var(--tc-text-muted);font-family:ui-monospace,monospace}\n.tc-chev{flex-shrink:0;color:var(--tc-text-muted);transition:transform .2s}\n.tc-acc.tc-open .tc-chev{transform:rotate(180deg)}\n.tc-acc-about{margin:.75rem 0 0;padding-left:1.625rem;font-size:13px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-acc-panel{padding-left:1.625rem;display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}\n.tc-acc.tc-open .tc-acc-panel{grid-template-rows:1fr}\n.tc-acc-inner{overflow:hidden;min-height:0;display:flex;flex-direction:column;gap:.5rem}\n.tc-acc.tc-open .tc-acc-inner{padding-top:.75rem}\n.tc-cookie{border-radius:.75rem;background:rgba(255,255,255,.03);padding:.75rem}\n.tc-cookie-name{margin:0;font-family:ui-monospace,monospace;font-size:12px;color:var(--tc-text)}\n.tc-cookie-purpose{margin:.25rem 0 0;font-size:12px;color:var(--tc-text-muted)}\n.tc-cookie-meta{margin:.25rem 0 0;font-family:ui-monospace,monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--tc-text-muted)}\n.tc-cookie-empty{font-size:12px;font-style:italic;color:var(--tc-text-muted)}\n.tc-about p{margin:0 0 .75rem;font-size:13.5px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-link{color:var(--tc-brand);text-decoration:underline;text-underline-offset:2px}\n.tc-actions{display:flex;flex-direction:column;gap:.625rem;padding:1.25rem 1.5rem}\n.tc-btn{flex:1;padding:.8rem 1.25rem;border-radius:999px;font-size:.875rem;font-weight:600;cursor:pointer;border:1px solid rgba(255,255,255,.14);background:transparent;color:var(--tc-text);transition:background .15s,border-color .15s}\n.tc-btn:hover{background:rgba(255,255,255,.05)}\n.tc-btn-primary{border-color:transparent;background:var(--tc-brand);color:var(--tc-on-brand)}\n.tc-btn-primary:hover{background:var(--tc-brand-deep)}\n.tc-fab{position:fixed;bottom:1.25rem;left:1.25rem;z-index:2147483600;display:grid;place-items:center;width:2.75rem;height:2.75rem;border-radius:999px;border:0;cursor:pointer;background:var(--tc-brand);color:var(--tc-text);box-shadow:0 12px 30px -8px rgba(0,0,0,.6);transition:background .15s}\n.tc-fab:hover{background:var(--tc-brand-deep)}\n@media (min-width:640px){\n .tc-root{padding:1rem}\n .tc-card{height:auto;max-height:92dvh;min-height:460px;max-width:48rem;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);transform:translateY(10px) scale(.985)}\n .tc-card.tc-shown{transform:none}\n .tc-head{padding:1.5rem 2.75rem 0}\n .tc-tabs{gap:1.75rem}\n .tc-tab{font-size:14px}\n .tc-panel{padding:2.75rem}\n .tc-grid{grid-template-columns:repeat(4,1fr)}\n .tc-actions{flex-direction:row;padding:1.25rem 2.75rem}\n}\n@media (prefers-reduced-motion:reduce){\n .tc-card,.tc-acc-panel,.tc-chev,.tc-track,.tc-thumb{transition:none}\n}\n`;\n","/**\n * CookieConsent — self-contained GDPR cookie consent for React (consentric).\n *\n * Google Consent Mode v2 (default denied, update on choice), cookie-persisted,\n * familiar tabbed UX (Consent / Details / About tabs, 4 categories, accordion).\n * ZERO dependencies, ZERO Tailwind: all styles are scoped and injected, colours\n * come from props via CSS variables, so it drops into ANY React project and\n * looks identical regardless of the host's styling setup.\n *\n * Everything user-facing is overridable: copy via `labels`, categories and their\n * cookie tables via `categories` — so the same component fits any site or language.\n * It also ships built-in language packs (the `locale` prop); English is always the\n * default and the fallback for anything a pack or your overrides omit.\n *\n * On deny/withdrawal it deletes the denied categories' declared cookies from the\n * browser (`autoClearCookies`, on by default), not just the Consent Mode signal.\n *\n * ── Usage ─────────────────────────────────────────────────────────────────\n * import { CookieConsent } from 'consentric';\n * <CookieConsent\n * company=\"salecki.digital\"\n * locale=\"de\"\n * privacyUrl=\"/privacy\"\n * termsUrl=\"/privacy#cookies\"\n * colors={{ brand: '#ff5c3a', surface: '#0c0814', text: '#f4ede3' }}\n * />\n *\n * ── Strict Consent Mode timing (recommended) ──────────────────────────────\n * For tags to be gated BEFORE GTM loads, set the default in <head>, before the\n * GTM snippet, and pass `manageDefault={false}` to this component:\n *\n * <script>\n * window.dataLayer = window.dataLayer || [];\n * function gtag(){dataLayer.push(arguments);}\n * gtag('consent','default',{\n * ad_storage:'denied', ad_user_data:'denied', ad_personalization:'denied',\n * analytics_storage:'denied', functionality_storage:'denied',\n * personalization_storage:'denied', security_storage:'granted',\n * wait_for_update:500\n * });\n * try { var m=document.cookie.match(/(?:^|;\\s*)site_consent=([^;]+)/);\n * var c=m?JSON.parse(decodeURIComponent(m[1])):null;\n * if(c&&c.v===2&&c.choices) gtag('consent','update',{\n * functionality_storage:c.choices.preferences?'granted':'denied',\n * personalization_storage:c.choices.preferences?'granted':'denied',\n * analytics_storage:c.choices.statistics?'granted':'denied',\n * ad_storage:c.choices.marketing?'granted':'denied',\n * ad_user_data:c.choices.marketing?'granted':'denied',\n * ad_personalization:c.choices.marketing?'granted':'denied'});\n * } catch(e){}\n * </script>\n *\n * ── Or set the default via GTM (no HTML edit) ─────────────────────────────\n * Put the SAME script above into a GTM Custom HTML tag and fire it on the\n * \"Consent Initialization - All Pages\" trigger (NOT \"All Pages\" — Consent\n * Initialization is guaranteed to run before every other tag). Then pass\n * `manageDefault={false}`. The cookie name in the snippet MUST match `cookieName`.\n *\n * If you skip both, leave `manageDefault` on (default) — the component pushes the\n * default on mount. Good enough for simple setups; the head/GTM versions are stricter.\n */\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { CatId, CategoryContent, Choices, ConsentLabels, CookieConsentProps } from './types';\nimport { applyConsent, clearDeniedCookies, gtag, readCookie, writeCookie } from './cookies';\nimport { resolveLocale } from './locales';\nimport type { LocalePack } from './locales';\nimport { CSS } from './styles';\n\ntype TabId = 'consent' | 'details' | 'about';\n\nconst TABS: readonly TabId[] = ['consent', 'details', 'about'];\nconst EMPTY: Choices = { preferences: false, statistics: false, marketing: false };\n\nconst DEFAULT_LABELS: Required<ConsentLabels> = {\n tabConsent: 'Consent',\n tabDetails: 'Details',\n tabAbout: 'About',\n heading: 'This website uses cookies',\n lead: 'We use cookies to run this site and, if you allow it, to measure traffic and for marketing. Non-essential cookies stay off until you choose.',\n deny: 'Deny',\n save: 'Save choices',\n allowAll: 'Allow all',\n noCookies: 'No cookies in this category.',\n aboutParagraphs: [\n 'Cookies are small text files websites use to make your experience more efficient.',\n 'The law lets us store cookies that are strictly necessary to run this site. For everything else we need your permission, which is why you see this banner.',\n 'You can change or withdraw your consent anytime using the cookie button in the bottom-left corner of the screen.',\n ],\n operatedBy: 'Operated by {company}. ',\n readMore: 'Read more in our {privacy} and {cookie}.',\n privacyLabel: 'Privacy policy',\n cookieLabel: 'Cookie policy',\n fabLabel: 'Cookie settings',\n dialogLabel: 'Cookie consent',\n};\n\n/** Build the default categories in English, overlaying a locale pack when given.\n * The consent cookie's name always comes from `cookieName`; only its surrounding\n * copy is localised. */\nfunction defaultCategories(\n cookieName: string,\n pack?: LocalePack,\n): Record<CatId, Required<CategoryContent> & { locked?: boolean }> {\n const c = pack?.categories;\n const k = pack?.cookies;\n return {\n necessary: {\n name: c?.necessary.name ?? 'Necessary',\n locked: true,\n short: c?.necessary.short ?? 'Needed to load the site and remember your choice.',\n about: c?.necessary.about ?? 'Necessary cookies make the site usable by enabling basic functions like remembering your cookie choice. The site cannot work properly without them.',\n cookies: [\n {\n name: cookieName,\n provider: k?.selfProvider ?? 'this site',\n purpose: k?.consentPurpose ?? 'Stores your cookie consent choice.',\n meta: k?.consentMeta ?? 'HTTP · 1 year',\n },\n ],\n },\n preferences: {\n name: c?.preferences.name ?? 'Preferences',\n short: c?.preferences.short ?? 'Remembers settings like your region.',\n about: c?.preferences.about ?? 'Preference cookies let the site remember information that changes how it behaves or looks, like your region.',\n cookies: [],\n },\n statistics: {\n name: c?.statistics.name ?? 'Statistics',\n short: c?.statistics.short ?? 'Anonymous usage stats to improve the site.',\n about: c?.statistics.about ?? 'Statistics cookies help us understand how visitors use the site by collecting information anonymously (Google Analytics).',\n cookies: [\n { name: '_ga', provider: 'Google', purpose: k?.gaPurpose ?? 'Distinguishes visitors to measure site usage.', meta: k?.gaMeta ?? 'HTTP · 2 years' },\n { name: '_ga_*', provider: 'Google', purpose: k?.gaStatePurpose ?? 'Maintains analytics session state.', meta: k?.gaMeta ?? 'HTTP · 2 years' },\n ],\n },\n marketing: {\n name: c?.marketing.name ?? 'Marketing',\n short: c?.marketing.short ?? 'Advertising and campaign measurement.',\n about: c?.marketing.about ?? 'Marketing cookies track visitors across sites to show relevant ads. None are set unless a marketing tag is enabled.',\n cookies: [],\n },\n };\n}\n\n/** Render a \"{a} … {b} …\" template with named nodes (e.g. policy links) spliced in. */\nfunction renderTemplate(tmpl: string, slots: Record<string, ReactNode>): ReactNode[] {\n const out: ReactNode[] = [];\n const re = /\\{(\\w+)\\}/g;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = re.exec(tmpl)) !== null) {\n if (m.index > last) out.push(tmpl.slice(last, m.index));\n out.push(slots[m[1]] ?? m[0]);\n last = m.index + m[0].length;\n }\n if (last < tmpl.length) out.push(tmpl.slice(last));\n return out.map((node, idx) => <span key={idx}>{node}</span>);\n}\n\nconst FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nfunction Toggle({\n id,\n on,\n locked,\n label,\n onToggle,\n}: {\n id: CatId;\n on: boolean;\n locked?: boolean;\n label: string;\n onToggle: (id: CatId) => void;\n}) {\n return (\n <label className=\"tc-switch\">\n <input type=\"checkbox\" checked={on} disabled={locked} aria-label={label} onChange={() => onToggle(id)} />\n <span className=\"tc-track\" />\n <span className=\"tc-thumb\" />\n </label>\n );\n}\n\nexport function CookieConsent({\n manageDefault = true,\n cookieName = 'site_consent',\n company,\n logo,\n privacyUrl = '/privacy',\n termsUrl = '/privacy#cookies',\n locale,\n defaultOpen = false,\n defaultTab,\n colors,\n categories,\n labels,\n onChange,\n autoClearCookies = true,\n}: CookieConsentProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [shown, setShown] = useState(defaultOpen);\n const [decided, setDecided] = useState(false);\n const [tab, setTab] = useState<TabId>(defaultTab ?? 'consent');\n const [choices, setChoices] = useState<Choices>(EMPTY);\n const [accOpen, setAccOpen] = useState<Record<string, boolean>>({});\n const cardRef = useRef<HTMLDivElement>(null);\n const fabRef = useRef<HTMLButtonElement>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n\n const pack = useMemo(() => resolveLocale(locale), [locale]);\n const L = useMemo<Required<ConsentLabels>>(() => ({ ...DEFAULT_LABELS, ...pack?.labels, ...labels }), [pack, labels]);\n\n const cats = useMemo(() => {\n const base = defaultCategories(cookieName, pack);\n return (['necessary', 'preferences', 'statistics', 'marketing'] as CatId[]).map((id) => {\n const d = base[id];\n const o = categories?.[id];\n const cookies = o?.cookies ?? d.cookies;\n return {\n id,\n locked: id === 'necessary',\n name: o?.name ?? d.name,\n short: o?.short ?? d.short,\n about: o?.about ?? d.about,\n cookies,\n count: cookies.length,\n };\n });\n }, [cookieName, categories, pack]);\n\n // Mount: set default (optional) + restore a prior choice.\n useEffect(() => {\n if (manageDefault) {\n gtag('consent', 'default', {\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 wait_for_update: 500,\n });\n }\n const saved = readCookie(cookieName);\n if (saved) {\n setChoices(saved);\n applyConsent(saved);\n setDecided(true);\n }\n if (!saved || defaultOpen) setOpen(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Enter animation + body scroll lock.\n useEffect(() => {\n if (!open) {\n setShown(false);\n document.body.style.overflow = '';\n return;\n }\n document.body.style.overflow = 'hidden';\n const r = requestAnimationFrame(() => setShown(true));\n return () => cancelAnimationFrame(r);\n }, [open]);\n\n // Focus management + trap while the dialog is open; restore focus on close.\n useEffect(() => {\n if (!open) return;\n restoreFocusRef.current = (document.activeElement as HTMLElement) ?? null;\n const card = cardRef.current;\n card?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || !card) return;\n const nodes = Array.from(card.querySelectorAll<HTMLElement>(FOCUSABLE)).filter((el) => el.offsetParent !== null);\n if (!nodes.length) return;\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n const active = document.activeElement;\n if (e.shiftKey && (active === first || active === card)) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('keydown', onKey);\n // After close the settings button is the persistent control, so prefer it;\n // fall back to whatever was focused when the dialog opened.\n const restore = restoreFocusRef.current;\n requestAnimationFrame(() => {\n const target = fabRef.current ?? (restore && restore.isConnected ? restore : null);\n target?.focus();\n });\n };\n }, [open]);\n\n // Escape closes once a choice exists.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && decided) setOpen(false);\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [decided]);\n\n const commit = (ch: Choices) => {\n writeCookie(cookieName, ch);\n applyConsent(ch);\n if (autoClearCookies) clearDeniedCookies(cats, ch, cookieName);\n setChoices(ch);\n setDecided(true);\n setOpen(false);\n onChange?.(ch);\n };\n const acceptAll = () => commit({ preferences: true, statistics: true, marketing: true });\n const denyAll = () => commit(EMPTY);\n const saveChoices = () => commit(choices);\n const toggleCat = (id: CatId) => {\n if (id === 'necessary') return;\n setChoices((ch) => ({ ...ch, [id]: !ch[id as keyof Choices] }));\n };\n const openSettings = () => {\n setChoices(readCookie(cookieName) ?? EMPTY);\n setTab('consent');\n setOpen(true);\n };\n const onTabKey = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;\n e.preventDefault();\n const idx = TABS.indexOf(tab);\n const next = e.key === 'ArrowRight' ? (idx + 1) % TABS.length : (idx + TABS.length - 1) % TABS.length;\n const id = TABS[next];\n setTab(id);\n requestAnimationFrame(() => document.getElementById('tc-tab-' + id)?.focus());\n };\n\n const palette = {\n brand: colors?.brand ?? '#ff5c3a',\n brandDeep: colors?.brandDeep ?? '#eb5535',\n surface: colors?.surface ?? '#0c0814',\n surfaceAlt: colors?.surfaceAlt ?? 'rgba(255,255,255,0.035)',\n text: colors?.text ?? '#f4ede3',\n textMuted: colors?.textMuted ?? '#a89cb8',\n backdrop: colors?.backdrop ?? 'rgba(7,5,13,0.8)',\n onBrand: colors?.onBrand ?? colors?.surface ?? '#0c0814',\n };\n const vars = {\n '--tc-brand': palette.brand,\n '--tc-brand-deep': palette.brandDeep,\n '--tc-surface': palette.surface,\n '--tc-surface-alt': palette.surfaceAlt,\n '--tc-text': palette.text,\n '--tc-text-muted': palette.textMuted,\n '--tc-backdrop': palette.backdrop,\n '--tc-on-brand': palette.onBrand,\n } as CSSProperties;\n\n const tabLabel = (t: TabId) => (t === 'consent' ? L.tabConsent : t === 'details' ? L.tabDetails : L.tabAbout);\n // Highlight \"Save choices\" only when there's actually an optional category on —\n // deselecting everything makes it equivalent to \"Deny\", so it stops being primary.\n const hasSelection = choices.preferences || choices.statistics || choices.marketing;\n\n return (\n <>\n <style>{CSS}</style>\n\n {open && (\n <div className=\"tc-root\" style={vars} role=\"dialog\" aria-modal=\"true\" aria-label={L.dialogLabel}>\n <div className=\"tc-backdrop\" onClick={() => decided && setOpen(false)} />\n <div ref={cardRef} tabIndex={-1} className={'tc-card' + (shown ? ' tc-shown' : '')}>\n <div className=\"tc-head\">\n <div className=\"tc-tabs\" role=\"tablist\" aria-label={L.dialogLabel}>\n {TABS.map((t) => (\n <button\n key={t}\n id={'tc-tab-' + t}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab === t}\n aria-controls={'tc-panel-' + t}\n tabIndex={tab === t ? 0 : -1}\n className={'tc-tab' + (tab === t ? ' tc-active' : '')}\n onClick={() => setTab(t)}\n onKeyDown={onTabKey}\n >\n {tabLabel(t)}\n </button>\n ))}\n </div>\n {logo ?? (company ? <span className=\"tc-logo\">{company}</span> : null)}\n </div>\n <hr className=\"tc-hr\" />\n\n <div className=\"tc-body\">\n {tab === 'consent' && (\n <div id=\"tc-panel-consent\" role=\"tabpanel\" aria-labelledby=\"tc-tab-consent\" className=\"tc-panel\">\n <h2 className=\"tc-h2\">{L.heading}</h2>\n <p className=\"tc-lead\">{L.lead}</p>\n <div className=\"tc-grid\">\n {cats.map((cat) => (\n <div className=\"tc-cat\" key={cat.id}>\n <p className=\"tc-cat-name\">{cat.name}</p>\n <p className=\"tc-cat-desc\">{cat.short}</p>\n <Toggle id={cat.id} label={cat.name} on={cat.locked ? true : choices[cat.id as keyof Choices]} locked={cat.locked} onToggle={toggleCat} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {tab === 'details' && (\n <div id=\"tc-panel-details\" role=\"tabpanel\" aria-labelledby=\"tc-tab-details\" className=\"tc-panel tc-details\">\n {cats.map((cat) => {\n const isOpen = !!accOpen[cat.id];\n return (\n <div className={'tc-acc' + (isOpen ? ' tc-open' : '')} key={cat.id}>\n <div className=\"tc-acc-head\">\n <button type=\"button\" className=\"tc-acc-btn\" aria-expanded={isOpen} onClick={() => setAccOpen((s) => ({ ...s, [cat.id]: !s[cat.id] }))}>\n <svg className=\"tc-chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className=\"tc-acc-name\">{cat.name}</span>\n <span className=\"tc-badge\">{cat.count}</span>\n </button>\n <Toggle id={cat.id} label={cat.name} on={cat.locked ? true : choices[cat.id as keyof Choices]} locked={cat.locked} onToggle={toggleCat} />\n </div>\n <p className=\"tc-acc-about\">{cat.about}</p>\n <div className=\"tc-acc-panel\">\n <div className=\"tc-acc-inner\">\n {cat.cookies.length ? (\n cat.cookies.map((k) => (\n <div className=\"tc-cookie\" key={k.name}>\n <p className=\"tc-cookie-name\">{k.name}</p>\n {k.purpose ? <p className=\"tc-cookie-purpose\">{k.purpose}</p> : null}\n <p className=\"tc-cookie-meta\">{[k.provider, k.meta].filter(Boolean).join(' · ')}</p>\n </div>\n ))\n ) : (\n <p className=\"tc-cookie-empty\">{L.noCookies}</p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {tab === 'about' && (\n <div id=\"tc-panel-about\" role=\"tabpanel\" aria-labelledby=\"tc-tab-about\" className=\"tc-panel tc-about\">\n {L.aboutParagraphs.map((p, i) => (\n <p key={i}>{p}</p>\n ))}\n <p>\n {company ? L.operatedBy.replace('{company}', company) : ''}\n {renderTemplate(L.readMore, {\n privacy: (\n <a className=\"tc-link\" href={privacyUrl}>\n {L.privacyLabel}\n </a>\n ),\n cookie: (\n <a className=\"tc-link\" href={termsUrl}>\n {L.cookieLabel}\n </a>\n ),\n })}\n </p>\n </div>\n )}\n </div>\n\n <hr className=\"tc-hr\" />\n <div className=\"tc-actions\">\n <button type=\"button\" className=\"tc-btn\" onClick={denyAll}>\n {L.deny}\n </button>\n <button type=\"button\" className={'tc-btn' + (hasSelection ? ' tc-btn-primary' : '')} onClick={saveChoices}>\n {L.save}\n </button>\n <button type=\"button\" className=\"tc-btn\" onClick={acceptAll}>\n {L.allowAll}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {decided && !open && (\n <button ref={fabRef} type=\"button\" className=\"tc-fab\" style={vars} aria-label={L.fabLabel} onClick={openSettings}>\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5z\" />\n <path d=\"M8.5 8.5h.01M16 15.5h.01M12 12h.01M11 17h.01M7 14h.01\" />\n </svg>\n </button>\n )}\n </>\n );\n}\n\nexport default CookieConsent;\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cookies.ts","../src/locales/de.ts","../src/locales/fr.ts","../src/locales/es.ts","../src/locales/it.ts","../src/locales/pt.ts","../src/locales/nl.ts","../src/locales/pl.ts","../src/locales/cs.ts","../src/locales/sk.ts","../src/locales/index.ts","../src/styles.ts","../src/CookieConsent.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Cookie storage + Google Consent Mode plumbing.\n *\n * Keeps the browser/`document.cookie` side of the component in one place: the\n * gtag bridge, persisting/restoring the visitor's choice, and deleting a denied\n * category's declared cookies on withdrawal.\n */\n\nimport type { CatId, Choices, CookieInfo } from './types';\n\n/** Stored-choice schema version. Bumping it re-prompts everyone on next visit. */\nexport const VERSION = 2;\n\n/** gtag() pushes the live `arguments` object, exactly what Consent Mode expects. */\nexport const gtag: (...args: unknown[]) => void = function () {\n const w = window as unknown as { dataLayer?: unknown[] };\n w.dataLayer = w.dataLayer || [];\n // eslint-disable-next-line prefer-rest-params\n w.dataLayer.push(arguments);\n};\n\n/** Map the visitor's choice to the six Consent Mode signals we manage. */\nexport function applyConsent(ch: Choices): void {\n gtag('consent', 'update', {\n functionality_storage: ch.preferences ? 'granted' : 'denied',\n personalization_storage: ch.preferences ? 'granted' : 'denied',\n analytics_storage: ch.statistics ? 'granted' : 'denied',\n ad_storage: ch.marketing ? 'granted' : 'denied',\n ad_user_data: ch.marketing ? 'granted' : 'denied',\n ad_personalization: ch.marketing ? 'granted' : 'denied',\n });\n}\n\nexport function readCookie(name: string): Choices | null {\n try {\n const m = document.cookie.match(new RegExp('(?:^|;\\\\s*)' + name + '=([^;]+)'));\n if (!m) return null;\n const c = JSON.parse(decodeURIComponent(m[1]));\n return c && c.v === VERSION && c.choices ? (c.choices as Choices) : null;\n } catch {\n return null;\n }\n}\n\nexport function writeCookie(name: string, ch: Choices): void {\n const val = encodeURIComponent(JSON.stringify({ v: VERSION, ts: Date.now(), choices: ch }));\n const secure = typeof location !== 'undefined' && location.protocol === 'https:' ? '; Secure' : '';\n document.cookie = name + '=' + val + '; path=/; max-age=31536000; SameSite=Lax' + secure;\n}\n\n/** Compile a cookie-table name to a matcher. A `*` is a wildcard, so `_ga_*`\n * matches `_ga_ABC123`; everything else is matched literally. */\nfunction cookieNameMatcher(pattern: string): RegExp {\n const escaped = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\*/g, '.*');\n return new RegExp('^' + escaped + '$');\n}\n\n/** Candidate `domain=` values to try when deleting a cookie: host-only, then each\n * parent domain (dotted and undotted), so we hit wherever it was actually set —\n * including the registrable domain (e.g. `.example.com`) that GA-style cookies use. */\nfunction domainCandidates(): string[] {\n const out = [''];\n const host = location.hostname;\n if (!host || host === 'localhost' || /^[\\d.]+$/.test(host)) return out;\n const parts = host.split('.');\n for (let i = 0; i <= parts.length - 2; i++) {\n const d = parts.slice(i).join('.');\n out.push(d, '.' + d);\n }\n return out;\n}\n\n/** `/` plus each ancestor of the current path, since cookies may be path-scoped. */\nfunction pathCandidates(): string[] {\n const out = ['/'];\n let acc = '';\n for (const seg of location.pathname.split('/').filter(Boolean)) {\n acc += '/' + seg;\n out.push(acc);\n }\n return out;\n}\n\n/** Expire a cookie across every plausible path/domain it might have been set on. */\nfunction expireCookie(name: string): void {\n for (const path of pathCandidates()) {\n for (const domain of domainCandidates()) {\n document.cookie =\n name + '=; path=' + path + (domain ? '; domain=' + domain : '') +\n '; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0';\n }\n }\n}\n\n/** Delete the declared cookies of every denied category. Only removes cookies that\n * currently exist and match a name in that category's table; never touches the\n * consent cookie or the always-granted `necessary` category. */\nexport function clearDeniedCookies(\n cats: { id: CatId; locked: boolean; cookies: CookieInfo[] }[],\n choices: Choices,\n consentCookie: string,\n): void {\n if (typeof document === 'undefined') return;\n const present = document.cookie\n .split(';')\n .map((c) => c.split('=')[0].trim())\n .filter(Boolean);\n if (!present.length) return;\n for (const cat of cats) {\n if (cat.locked || choices[cat.id as keyof Choices]) continue;\n const matchers = cat.cookies.map((c) => cookieNameMatcher(c.name));\n for (const name of present) {\n if (name === consentCookie) continue;\n if (matchers.some((re) => re.test(name))) expireCookie(name);\n }\n }\n}\n","import type { LocalePack } from './types';\n\n/** German (Deutsch). */\nexport const de: LocalePack = {\n labels: {\n tabConsent: 'Einwilligung',\n tabDetails: 'Details',\n tabAbout: 'Über Cookies',\n heading: 'Diese Website verwendet Cookies',\n lead: 'Wir verwenden Cookies, um diese Website zu betreiben und – wenn Sie zustimmen – um Zugriffe zu messen und für Marketing. Nicht notwendige Cookies bleiben deaktiviert, bis Sie sich entscheiden.',\n deny: 'Ablehnen',\n save: 'Auswahl speichern',\n allowAll: 'Alle zulassen',\n noCookies: 'Keine Cookies in dieser Kategorie.',\n aboutParagraphs: [\n 'Cookies sind kleine Textdateien, die Websites verwenden, um Ihr Nutzungserlebnis effizienter zu gestalten.',\n 'Das Gesetz erlaubt uns, Cookies zu speichern, die für den Betrieb dieser Website unbedingt erforderlich sind. Für alles andere benötigen wir Ihre Einwilligung – deshalb sehen Sie dieses Banner.',\n 'Sie können Ihre Einwilligung jederzeit über die Cookie-Schaltfläche unten links auf dem Bildschirm ändern oder widerrufen.',\n ],\n operatedBy: 'Betrieben von {company}. ',\n readMore: 'Mehr in unserer {privacy} und {cookie}.',\n privacyLabel: 'Datenschutzerklärung',\n cookieLabel: 'Cookie-Richtlinie',\n fabLabel: 'Cookie-Einstellungen',\n dialogLabel: 'Cookie-Einwilligung',\n },\n categories: {\n necessary: {\n name: 'Notwendig',\n short: 'Erforderlich, um die Website zu laden und Ihre Auswahl zu speichern.',\n about: 'Notwendige Cookies machen die Website nutzbar, indem sie grundlegende Funktionen wie das Speichern Ihrer Cookie-Auswahl ermöglichen. Ohne sie kann die Website nicht richtig funktionieren.',\n },\n preferences: {\n name: 'Präferenzen',\n short: 'Speichert Einstellungen wie Ihre Region.',\n about: 'Präferenz-Cookies ermöglichen es der Website, sich Informationen zu merken, die ihr Verhalten oder Aussehen verändern, wie etwa Ihre Region.',\n },\n statistics: {\n name: 'Statistiken',\n short: 'Anonyme Nutzungsstatistiken zur Verbesserung der Website.',\n about: 'Statistik-Cookies helfen uns zu verstehen, wie Besucher die Website nutzen, indem Informationen anonym erfasst werden (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Werbung und Kampagnenmessung.',\n about: 'Marketing-Cookies verfolgen Besucher über Websites hinweg, um relevante Anzeigen zu zeigen. Es werden keine gesetzt, sofern kein Marketing-Tag aktiviert ist.',\n },\n },\n cookies: {\n selfProvider: 'diese Website',\n consentPurpose: 'Speichert Ihre Cookie-Einwilligung.',\n consentMeta: 'HTTP · 1 Jahr',\n gaPurpose: 'Unterscheidet Besucher, um die Websitenutzung zu messen.',\n gaStatePurpose: 'Hält den Analyse-Sitzungsstatus aufrecht.',\n gaMeta: 'HTTP · 2 Jahre',\n },\n};\n","import type { LocalePack } from './types';\n\n/** French (Français). */\nexport const fr: LocalePack = {\n labels: {\n tabConsent: 'Consentement',\n tabDetails: 'Détails',\n tabAbout: 'À propos',\n heading: 'Ce site utilise des cookies',\n lead: 'Nous utilisons des cookies pour faire fonctionner ce site et, si vous l’autorisez, pour mesurer l’audience et à des fins marketing. Les cookies non essentiels restent désactivés jusqu’à votre choix.',\n deny: 'Refuser',\n save: 'Enregistrer les choix',\n allowAll: 'Tout autoriser',\n noCookies: 'Aucun cookie dans cette catégorie.',\n aboutParagraphs: [\n 'Les cookies sont de petits fichiers texte que les sites web utilisent pour rendre votre expérience plus efficace.',\n 'La loi nous autorise à stocker les cookies strictement nécessaires au fonctionnement de ce site. Pour tout le reste, nous avons besoin de votre autorisation, c’est pourquoi vous voyez cette bannière.',\n 'Vous pouvez modifier ou retirer votre consentement à tout moment à l’aide du bouton cookies en bas à gauche de l’écran.',\n ],\n operatedBy: 'Exploité par {company}. ',\n readMore: 'En savoir plus dans notre {privacy} et notre {cookie}.',\n privacyLabel: 'politique de confidentialité',\n cookieLabel: 'politique relative aux cookies',\n fabLabel: 'Paramètres des cookies',\n dialogLabel: 'Consentement aux cookies',\n },\n categories: {\n necessary: {\n name: 'Nécessaires',\n short: 'Nécessaires pour charger le site et mémoriser votre choix.',\n about: 'Les cookies nécessaires rendent le site utilisable en activant des fonctions de base comme la mémorisation de votre choix de cookies. Le site ne peut pas fonctionner correctement sans eux.',\n },\n preferences: {\n name: 'Préférences',\n short: 'Mémorise des réglages comme votre région.',\n about: 'Les cookies de préférences permettent au site de mémoriser des informations qui modifient son comportement ou son apparence, comme votre région.',\n },\n statistics: {\n name: 'Statistiques',\n short: 'Statistiques d’utilisation anonymes pour améliorer le site.',\n about: 'Les cookies statistiques nous aident à comprendre comment les visiteurs utilisent le site en collectant des informations de manière anonyme (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicité et mesure des campagnes.',\n about: 'Les cookies marketing suivent les visiteurs à travers les sites pour afficher des publicités pertinentes. Aucun n’est déposé sauf si une balise marketing est activée.',\n },\n },\n cookies: {\n selfProvider: 'ce site',\n consentPurpose: 'Enregistre votre consentement aux cookies.',\n consentMeta: 'HTTP · 1 an',\n gaPurpose: 'Distingue les visiteurs pour mesurer l’utilisation du site.',\n gaStatePurpose: 'Maintient l’état de la session d’analyse.',\n gaMeta: 'HTTP · 2 ans',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Spanish (Español). */\nexport const es: LocalePack = {\n labels: {\n tabConsent: 'Consentimiento',\n tabDetails: 'Detalles',\n tabAbout: 'Acerca de',\n heading: 'Este sitio web utiliza cookies',\n lead: 'Utilizamos cookies para hacer funcionar este sitio y, si lo permite, para medir el tráfico y con fines de marketing. Las cookies no esenciales permanecen desactivadas hasta que usted elija.',\n deny: 'Rechazar',\n save: 'Guardar elección',\n allowAll: 'Permitir todas',\n noCookies: 'No hay cookies en esta categoría.',\n aboutParagraphs: [\n 'Las cookies son pequeños archivos de texto que los sitios web utilizan para hacer su experiencia más eficiente.',\n 'La ley nos permite almacenar cookies estrictamente necesarias para el funcionamiento de este sitio. Para todo lo demás necesitamos su permiso, por eso ve este aviso.',\n 'Puede cambiar o retirar su consentimiento en cualquier momento mediante el botón de cookies en la esquina inferior izquierda de la pantalla.',\n ],\n operatedBy: 'Operado por {company}. ',\n readMore: 'Más información en nuestra {privacy} y {cookie}.',\n privacyLabel: 'política de privacidad',\n cookieLabel: 'política de cookies',\n fabLabel: 'Configuración de cookies',\n dialogLabel: 'Consentimiento de cookies',\n },\n categories: {\n necessary: {\n name: 'Necesarias',\n short: 'Necesarias para cargar el sitio y recordar su elección.',\n about: 'Las cookies necesarias hacen que el sitio sea utilizable al habilitar funciones básicas como recordar su elección de cookies. El sitio no puede funcionar correctamente sin ellas.',\n },\n preferences: {\n name: 'Preferencias',\n short: 'Recuerda ajustes como su región.',\n about: 'Las cookies de preferencias permiten que el sitio recuerde información que cambia su comportamiento o aspecto, como su región.',\n },\n statistics: {\n name: 'Estadísticas',\n short: 'Estadísticas de uso anónimas para mejorar el sitio.',\n about: 'Las cookies estadísticas nos ayudan a entender cómo los visitantes usan el sitio recopilando información de forma anónima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicidad y medición de campañas.',\n about: 'Las cookies de marketing rastrean a los visitantes a través de los sitios para mostrar anuncios relevantes. No se establece ninguna a menos que se active una etiqueta de marketing.',\n },\n },\n cookies: {\n selfProvider: 'este sitio',\n consentPurpose: 'Almacena su consentimiento de cookies.',\n consentMeta: 'HTTP · 1 año',\n gaPurpose: 'Distingue a los visitantes para medir el uso del sitio.',\n gaStatePurpose: 'Mantiene el estado de la sesión de analítica.',\n gaMeta: 'HTTP · 2 años',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Italian (Italiano). */\nexport const it: LocalePack = {\n labels: {\n tabConsent: 'Consenso',\n tabDetails: 'Dettagli',\n tabAbout: 'Informazioni',\n heading: 'Questo sito web utilizza i cookie',\n lead: 'Utilizziamo i cookie per far funzionare questo sito e, se lo consenti, per misurare il traffico e per il marketing. I cookie non essenziali restano disattivati finché non scegli.',\n deny: 'Rifiuta',\n save: 'Salva scelte',\n allowAll: 'Consenti tutti',\n noCookies: 'Nessun cookie in questa categoria.',\n aboutParagraphs: [\n 'I cookie sono piccoli file di testo che i siti web utilizzano per rendere la tua esperienza più efficiente.',\n 'La legge ci consente di memorizzare i cookie strettamente necessari al funzionamento di questo sito. Per tutto il resto abbiamo bisogno del tuo permesso, motivo per cui vedi questo banner.',\n 'Puoi modificare o revocare il tuo consenso in qualsiasi momento tramite il pulsante dei cookie in basso a sinistra dello schermo.',\n ],\n operatedBy: 'Gestito da {company}. ',\n readMore: 'Maggiori informazioni nella nostra {privacy} e nella nostra {cookie}.',\n privacyLabel: 'informativa sulla privacy',\n cookieLabel: 'informativa sui cookie',\n fabLabel: 'Impostazioni cookie',\n dialogLabel: 'Consenso ai cookie',\n },\n categories: {\n necessary: {\n name: 'Necessari',\n short: 'Necessari per caricare il sito e ricordare la tua scelta.',\n about: 'I cookie necessari rendono il sito utilizzabile abilitando funzioni di base come ricordare la tua scelta sui cookie. Il sito non può funzionare correttamente senza di essi.',\n },\n preferences: {\n name: 'Preferenze',\n short: 'Ricorda impostazioni come la tua regione.',\n about: 'I cookie di preferenza consentono al sito di ricordare informazioni che ne modificano il comportamento o l’aspetto, come la tua regione.',\n },\n statistics: {\n name: 'Statistiche',\n short: 'Statistiche di utilizzo anonime per migliorare il sito.',\n about: 'I cookie statistici ci aiutano a capire come i visitatori utilizzano il sito raccogliendo informazioni in forma anonima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Pubblicità e misurazione delle campagne.',\n about: 'I cookie di marketing tracciano i visitatori tra i siti per mostrare annunci pertinenti. Nessuno viene impostato a meno che non sia attivato un tag di marketing.',\n },\n },\n cookies: {\n selfProvider: 'questo sito',\n consentPurpose: 'Memorizza il tuo consenso ai cookie.',\n consentMeta: 'HTTP · 1 anno',\n gaPurpose: 'Distingue i visitatori per misurare l’utilizzo del sito.',\n gaStatePurpose: 'Mantiene lo stato della sessione di analisi.',\n gaMeta: 'HTTP · 2 anni',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Portuguese (Português). */\nexport const pt: LocalePack = {\n labels: {\n tabConsent: 'Consentimento',\n tabDetails: 'Detalhes',\n tabAbout: 'Sobre',\n heading: 'Este site utiliza cookies',\n lead: 'Utilizamos cookies para executar este site e, se permitir, para medir o tráfego e para marketing. Os cookies não essenciais permanecem desativados até que escolha.',\n deny: 'Recusar',\n save: 'Guardar escolhas',\n allowAll: 'Permitir todos',\n noCookies: 'Nenhum cookie nesta categoria.',\n aboutParagraphs: [\n 'Os cookies são pequenos ficheiros de texto que os sites utilizam para tornar a sua experiência mais eficiente.',\n 'A lei permite-nos armazenar cookies estritamente necessários ao funcionamento deste site. Para tudo o resto precisamos da sua permissão, e é por isso que vê este aviso.',\n 'Pode alterar ou retirar o seu consentimento a qualquer momento através do botão de cookies no canto inferior esquerdo do ecrã.',\n ],\n operatedBy: 'Operado por {company}. ',\n readMore: 'Saiba mais na nossa {privacy} e {cookie}.',\n privacyLabel: 'política de privacidade',\n cookieLabel: 'política de cookies',\n fabLabel: 'Definições de cookies',\n dialogLabel: 'Consentimento de cookies',\n },\n categories: {\n necessary: {\n name: 'Necessários',\n short: 'Necessários para carregar o site e lembrar a sua escolha.',\n about: 'Os cookies necessários tornam o site utilizável ao ativar funções básicas como lembrar a sua escolha de cookies. O site não pode funcionar corretamente sem eles.',\n },\n preferences: {\n name: 'Preferências',\n short: 'Lembra definições como a sua região.',\n about: 'Os cookies de preferências permitem que o site se lembre de informações que alteram o seu comportamento ou aparência, como a sua região.',\n },\n statistics: {\n name: 'Estatísticas',\n short: 'Estatísticas de utilização anónimas para melhorar o site.',\n about: 'Os cookies estatísticos ajudam-nos a perceber como os visitantes utilizam o site, recolhendo informações de forma anónima (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Publicidade e medição de campanhas.',\n about: 'Os cookies de marketing seguem os visitantes através dos sites para mostrar anúncios relevantes. Nenhum é definido a menos que uma tag de marketing esteja ativada.',\n },\n },\n cookies: {\n selfProvider: 'este site',\n consentPurpose: 'Armazena o seu consentimento de cookies.',\n consentMeta: 'HTTP · 1 ano',\n gaPurpose: 'Distingue os visitantes para medir a utilização do site.',\n gaStatePurpose: 'Mantém o estado da sessão de análise.',\n gaMeta: 'HTTP · 2 anos',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Dutch (Nederlands). */\nexport const nl: LocalePack = {\n labels: {\n tabConsent: 'Toestemming',\n tabDetails: 'Details',\n tabAbout: 'Over cookies',\n heading: 'Deze website gebruikt cookies',\n lead: 'We gebruiken cookies om deze site te laten werken en, als u dat toestaat, om verkeer te meten en voor marketing. Niet-essentiële cookies blijven uitgeschakeld totdat u kiest.',\n deny: 'Weigeren',\n save: 'Keuzes opslaan',\n allowAll: 'Alles toestaan',\n noCookies: 'Geen cookies in deze categorie.',\n aboutParagraphs: [\n 'Cookies zijn kleine tekstbestanden die websites gebruiken om uw ervaring efficiënter te maken.',\n 'De wet staat ons toe cookies op te slaan die strikt noodzakelijk zijn om deze site te laten werken. Voor al het andere hebben we uw toestemming nodig, daarom ziet u deze melding.',\n 'U kunt uw toestemming op elk moment wijzigen of intrekken via de cookieknop linksonder op het scherm.',\n ],\n operatedBy: 'Beheerd door {company}. ',\n readMore: 'Lees meer in ons {privacy} en {cookie}.',\n privacyLabel: 'privacybeleid',\n cookieLabel: 'cookiebeleid',\n fabLabel: 'Cookie-instellingen',\n dialogLabel: 'Cookietoestemming',\n },\n categories: {\n necessary: {\n name: 'Noodzakelijk',\n short: 'Nodig om de site te laden en uw keuze te onthouden.',\n about: 'Noodzakelijke cookies maken de site bruikbaar door basisfuncties mogelijk te maken, zoals het onthouden van uw cookiekeuze. De site kan zonder deze cookies niet goed werken.',\n },\n preferences: {\n name: 'Voorkeuren',\n short: 'Onthoudt instellingen zoals uw regio.',\n about: 'Voorkeurscookies laten de site informatie onthouden die het gedrag of uiterlijk verandert, zoals uw regio.',\n },\n statistics: {\n name: 'Statistieken',\n short: 'Anonieme gebruiksstatistieken om de site te verbeteren.',\n about: 'Statistiekcookies helpen ons te begrijpen hoe bezoekers de site gebruiken door anoniem informatie te verzamelen (Google Analytics).',\n },\n marketing: {\n name: 'Marketing',\n short: 'Advertenties en campagnemeting.',\n about: 'Marketingcookies volgen bezoekers over verschillende sites om relevante advertenties te tonen. Er worden er geen geplaatst tenzij een marketingtag is ingeschakeld.',\n },\n },\n cookies: {\n selfProvider: 'deze site',\n consentPurpose: 'Slaat uw cookietoestemming op.',\n consentMeta: 'HTTP · 1 jaar',\n gaPurpose: 'Onderscheidt bezoekers om het sitegebruik te meten.',\n gaStatePurpose: 'Houdt de status van de analysesessie bij.',\n gaMeta: 'HTTP · 2 jaar',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Polish (Polski). */\nexport const pl: LocalePack = {\n labels: {\n tabConsent: 'Zgoda',\n tabDetails: 'Szczegóły',\n tabAbout: 'O plikach cookie',\n heading: 'Ta strona używa plików cookie',\n lead: 'Używamy plików cookie, aby prowadzić tę stronę oraz – jeśli wyrazisz zgodę – mierzyć ruch i prowadzić działania marketingowe. Pliki cookie inne niż niezbędne pozostają wyłączone, dopóki nie dokonasz wyboru.',\n deny: 'Odrzuć',\n save: 'Zapisz wybór',\n allowAll: 'Zezwól na wszystkie',\n noCookies: 'Brak plików cookie w tej kategorii.',\n aboutParagraphs: [\n 'Pliki cookie to małe pliki tekstowe, których strony internetowe używają, aby usprawnić korzystanie z nich.',\n 'Prawo pozwala nam przechowywać pliki cookie ściśle niezbędne do działania tej strony. We wszystkich innych przypadkach potrzebujemy Twojej zgody – dlatego widzisz ten baner.',\n 'W każdej chwili możesz zmienić lub wycofać swoją zgodę za pomocą przycisku cookie w lewym dolnym rogu ekranu.',\n ],\n operatedBy: 'Prowadzone przez {company}. ',\n readMore: 'Więcej informacji w naszej {privacy} i {cookie}.',\n privacyLabel: 'Polityce prywatności',\n cookieLabel: 'Polityce cookie',\n fabLabel: 'Ustawienia plików cookie',\n dialogLabel: 'Zgoda na pliki cookie',\n },\n categories: {\n necessary: {\n name: 'Niezbędne',\n short: 'Potrzebne do załadowania strony i zapamiętania Twojego wyboru.',\n about: 'Niezbędne pliki cookie umożliwiają korzystanie ze strony, udostępniając podstawowe funkcje, takie jak zapamiętanie Twojego wyboru dotyczącego plików cookie. Bez nich strona nie może działać prawidłowo.',\n },\n preferences: {\n name: 'Preferencje',\n short: 'Zapamiętuje ustawienia, takie jak Twój region.',\n about: 'Pliki cookie preferencji pozwalają stronie zapamiętać informacje, które zmieniają jej zachowanie lub wygląd, takie jak Twój region.',\n },\n statistics: {\n name: 'Statystyczne',\n short: 'Anonimowe statystyki użytkowania w celu ulepszenia strony.',\n about: 'Statystyczne pliki cookie pomagają nam zrozumieć, w jaki sposób odwiedzający korzystają ze strony, zbierając informacje anonimowo (Google Analytics).',\n },\n marketing: {\n name: 'Marketingowe',\n short: 'Reklamy i pomiar skuteczności kampanii.',\n about: 'Marketingowe pliki cookie śledzą odwiedzających na różnych stronach, aby wyświetlać trafne reklamy. Żaden nie jest ustawiany, o ile nie włączono tagu marketingowego.',\n },\n },\n cookies: {\n selfProvider: 'ta strona',\n consentPurpose: 'Przechowuje Twoją zgodę na pliki cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozróżnia odwiedzających, aby mierzyć korzystanie ze strony.',\n gaStatePurpose: 'Utrzymuje stan sesji analitycznej.',\n gaMeta: 'HTTP · 2 lata',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Czech (Čeština). */\nexport const cs: LocalePack = {\n labels: {\n tabConsent: 'Souhlas',\n tabDetails: 'Podrobnosti',\n tabAbout: 'O souborech cookie',\n heading: 'Tento web používá soubory cookie',\n lead: 'Soubory cookie používáme k provozu tohoto webu a – pokud to povolíte – k měření návštěvnosti a pro marketing. Soubory cookie, které nejsou nezbytné, zůstávají vypnuté, dokud se nerozhodnete.',\n deny: 'Odmítnout',\n save: 'Uložit volby',\n allowAll: 'Povolit vše',\n noCookies: 'V této kategorii nejsou žádné soubory cookie.',\n aboutParagraphs: [\n 'Soubory cookie jsou malé textové soubory, které weby používají k tomu, aby vaše používání bylo efektivnější.',\n 'Zákon nám umožňuje ukládat soubory cookie, které jsou nezbytně nutné k provozu tohoto webu. Pro vše ostatní potřebujeme váš souhlas, a proto vidíte tento banner.',\n 'Svůj souhlas můžete kdykoli změnit nebo odvolat pomocí tlačítka cookie v levém dolním rohu obrazovky.',\n ],\n operatedBy: 'Provozuje {company}. ',\n readMore: 'Více informací najdete v našich {privacy} a {cookie}.',\n privacyLabel: 'zásadách ochrany osobních údajů',\n cookieLabel: 'zásadách používání souborů cookie',\n fabLabel: 'Nastavení souborů cookie',\n dialogLabel: 'Souhlas se soubory cookie',\n },\n categories: {\n necessary: {\n name: 'Nezbytné',\n short: 'Potřebné k načtení webu a zapamatování vaší volby.',\n about: 'Nezbytné soubory cookie umožňují používání webu tím, že zajišťují základní funkce, jako je zapamatování vaší volby cookie. Bez nich web nemůže správně fungovat.',\n },\n preferences: {\n name: 'Předvolby',\n short: 'Zapamatuje si nastavení, jako je váš region.',\n about: 'Soubory cookie předvoleb umožňují webu zapamatovat si informace, které mění jeho chování nebo vzhled, například váš region.',\n },\n statistics: {\n name: 'Statistické',\n short: 'Anonymní statistiky používání pro vylepšení webu.',\n about: 'Statistické soubory cookie nám pomáhají pochopit, jak návštěvníci web používají, a to anonymním sběrem informací (Google Analytics).',\n },\n marketing: {\n name: 'Marketingové',\n short: 'Reklama a měření kampaní.',\n about: 'Marketingové soubory cookie sledují návštěvníky napříč weby a zobrazují relevantní reklamy. Žádné se nenastaví, pokud není povolena marketingová značka.',\n },\n },\n cookies: {\n selfProvider: 'tento web',\n consentPurpose: 'Ukládá váš souhlas se soubory cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozlišuje návštěvníky pro měření používání webu.',\n gaStatePurpose: 'Udržuje stav analytické relace.',\n gaMeta: 'HTTP · 2 roky',\n },\n};\n","import type { LocalePack } from './types';\n\n/** Slovak (Slovenčina). */\nexport const sk: LocalePack = {\n labels: {\n tabConsent: 'Súhlas',\n tabDetails: 'Podrobnosti',\n tabAbout: 'O súboroch cookie',\n heading: 'Táto webová stránka používa súbory cookie',\n lead: 'Súbory cookie používame na prevádzku tejto stránky a – ak to povolíte – na meranie návštevnosti a na marketing. Súbory cookie, ktoré nie sú nevyhnutné, zostávajú vypnuté, kým sa nerozhodnete.',\n deny: 'Odmietnuť',\n save: 'Uložiť voľby',\n allowAll: 'Povoliť všetky',\n noCookies: 'V tejto kategórii nie sú žiadne súbory cookie.',\n aboutParagraphs: [\n 'Súbory cookie sú malé textové súbory, ktoré webové stránky používajú na to, aby bolo vaše používanie efektívnejšie.',\n 'Zákon nám umožňuje ukladať súbory cookie, ktoré sú nevyhnutne potrebné na prevádzku tejto stránky. Pre všetko ostatné potrebujeme váš súhlas, a preto vidíte tento banner.',\n 'Svoj súhlas môžete kedykoľvek zmeniť alebo odvolať pomocou tlačidla cookie v ľavom dolnom rohu obrazovky.',\n ],\n operatedBy: 'Prevádzkuje {company}. ',\n readMore: 'Viac informácií nájdete v našich {privacy} a {cookie}.',\n privacyLabel: 'zásadách ochrany osobných údajov',\n cookieLabel: 'zásadách používania súborov cookie',\n fabLabel: 'Nastavenia súborov cookie',\n dialogLabel: 'Súhlas so súbormi cookie',\n },\n categories: {\n necessary: {\n name: 'Nevyhnutné',\n short: 'Potrebné na načítanie stránky a zapamätanie vašej voľby.',\n about: 'Nevyhnutné súbory cookie umožňujú používanie stránky tým, že zabezpečujú základné funkcie, ako je zapamätanie vašej voľby cookie. Bez nich stránka nemôže správne fungovať.',\n },\n preferences: {\n name: 'Predvoľby',\n short: 'Zapamätá si nastavenia, ako je váš región.',\n about: 'Súbory cookie predvolieb umožňujú stránke zapamätať si informácie, ktoré menia jej správanie alebo vzhľad, napríklad váš región.',\n },\n statistics: {\n name: 'Štatistické',\n short: 'Anonymné štatistiky používania na zlepšenie stránky.',\n about: 'Štatistické súbory cookie nám pomáhajú pochopiť, ako návštevníci stránku používajú, prostredníctvom anonymného zberu informácií (Google Analytics).',\n },\n marketing: {\n name: 'Marketingové',\n short: 'Reklama a meranie kampaní.',\n about: 'Marketingové súbory cookie sledujú návštevníkov naprieč stránkami a zobrazujú relevantné reklamy. Žiadne sa nenastavia, pokiaľ nie je povolená marketingová značka.',\n },\n },\n cookies: {\n selfProvider: 'táto stránka',\n consentPurpose: 'Ukladá váš súhlas so súbormi cookie.',\n consentMeta: 'HTTP · 1 rok',\n gaPurpose: 'Rozlišuje návštevníkov na meranie používania stránky.',\n gaStatePurpose: 'Udržiava stav analytickej relácie.',\n gaMeta: 'HTTP · 2 roky',\n },\n};\n","/**\n * Built-in language packs. English is the baseline and the fallback for every\n * string, so it needs no pack here. Select a language with the `locale` prop.\n */\n\nimport type { LocalePack } from './types';\nimport { de } from './de';\nimport { fr } from './fr';\nimport { es } from './es';\nimport { it } from './it';\nimport { pt } from './pt';\nimport { nl } from './nl';\nimport { pl } from './pl';\nimport { cs } from './cs';\nimport { sk } from './sk';\n\nexport type { LocalePack, LocaleCategoryText, LocaleCookieText } from './types';\n\n/** Locale code → translation. English ('en') is intentionally absent: it is the\n * built-in default and fallback. */\nexport const LOCALES: Record<string, LocalePack> = { de, fr, es, it, pt, nl, pl, cs, sk };\n\n/** Every locale the component understands, including the built-in default `en`. */\nexport const SUPPORTED_LOCALES = ['en', 'de', 'fr', 'es', 'it', 'pt', 'nl', 'pl', 'cs', 'sk'] as const;\n\n/** Resolve a `locale` prop to a pack, or `undefined` to use the English default.\n * Case-insensitive and region-tolerant: 'pt-BR' falls back to 'pt'. */\nexport function resolveLocale(locale?: string): LocalePack | undefined {\n if (!locale) return undefined;\n const l = locale.toLowerCase();\n return LOCALES[l] ?? LOCALES[l.split('-')[0]];\n}\n","/** Scoped, self-injected styles. All colours come from CSS variables set by the\n * component from `colors`, so the banner looks identical in any host project. */\nexport const CSS = `\n.tc-root,.tc-fab{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;box-sizing:border-box}\n.tc-root *,.tc-fab *{box-sizing:border-box}\n.tc-root{position:fixed;inset:0;z-index:2147483600;display:flex;align-items:center;justify-content:center;padding:0}\n.tc-backdrop{position:absolute;inset:0;background:var(--tc-backdrop);backdrop-filter:blur(4px)}\n.tc-card{position:relative;display:flex;flex-direction:column;width:100%;height:100dvh;overflow:hidden;background:var(--tc-surface);box-shadow:0 30px 80px -20px rgba(0,0,0,.7);opacity:0;transform:translateY(18px);transition:opacity .26s ease,transform .26s cubic-bezier(.22,1,.36,1)}\n.tc-card:focus{outline:none}\n.tc-card.tc-shown{opacity:1;transform:none}\n.tc-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:1.25rem 1.5rem 0}\n.tc-tabs{display:flex;gap:1rem}\n.tc-tab{position:relative;padding:0 0 1rem;font-size:13px;font-weight:600;color:var(--tc-text-muted);background:none;border:0;cursor:pointer;transition:color .15s}\n.tc-tab:hover{color:var(--tc-text)}\n.tc-tab.tc-active{color:var(--tc-text)}\n.tc-tab.tc-active::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--tc-brand)}\n.tc-logo{flex-shrink:0;color:var(--tc-text);font-weight:700;font-size:15px}\n.tc-hr{border:0;border-top:1px solid rgba(255,255,255,.07);margin:0}\n.tc-body{flex:1;min-height:0;overflow-y:auto}\n.tc-panel{padding:1.75rem 1.5rem}\n.tc-h2{margin:0;font-size:1rem;font-weight:600;color:var(--tc-text)}\n.tc-lead{margin:.5rem 0 0;font-size:13.5px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;margin-top:1.75rem}\n.tc-cat{display:flex;flex-direction:column;align-items:center;text-align:center;border-radius:1rem;background:var(--tc-surface-alt);padding:1.25rem .75rem}\n.tc-cat-name{margin:0;font-size:.875rem;font-weight:600;color:var(--tc-text)}\n.tc-cat-desc{margin:.375rem 0 0;flex:1;font-size:11.5px;line-height:1.35;color:var(--tc-text-muted)}\n.tc-switch{position:relative;display:inline-flex;align-items:center;margin-top:1rem;cursor:pointer}\n.tc-switch input{position:absolute;width:1px;height:1px;opacity:0;margin:0}\n.tc-track{width:2.75rem;height:1.5rem;border-radius:999px;background:rgba(255,255,255,.15);transition:background .2s}\n.tc-thumb{position:absolute;left:2px;top:2px;width:1.25rem;height:1.25rem;border-radius:999px;background:var(--tc-text);transition:transform .2s}\n.tc-switch input:checked~.tc-track{background:var(--tc-brand)}\n.tc-switch input:checked~.tc-thumb{transform:translateX(1.25rem);background:var(--tc-on-brand)}\n.tc-switch input:disabled{cursor:default}\n.tc-switch input:focus-visible~.tc-track{outline:2px solid var(--tc-brand);outline-offset:2px}\n.tc-acc{padding:1.25rem 0;border-top:1px solid rgba(255,255,255,.07)}\n.tc-acc:first-child{border-top:0}\n.tc-acc-head{display:flex;align-items:center;gap:.75rem}\n.tc-acc-btn{display:flex;flex:1;align-items:center;gap:.625rem;text-align:left;background:none;border:0;color:var(--tc-text);cursor:pointer;font:inherit}\n.tc-acc-name{font-size:.875rem;font-weight:600}\n.tc-badge{display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .375rem;border-radius:999px;background:rgba(255,255,255,.1);font-size:10px;color:var(--tc-text-muted);font-family:ui-monospace,monospace}\n.tc-chev{flex-shrink:0;color:var(--tc-text-muted);transition:transform .2s}\n.tc-acc.tc-open .tc-chev{transform:rotate(180deg)}\n.tc-acc-about{margin:.75rem 0 0;padding-left:1.625rem;font-size:13px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-acc-panel{padding-left:1.625rem;display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}\n.tc-acc.tc-open .tc-acc-panel{grid-template-rows:1fr}\n.tc-acc-inner{overflow:hidden;min-height:0;display:flex;flex-direction:column;gap:.5rem}\n.tc-acc.tc-open .tc-acc-inner{padding-top:.75rem}\n.tc-cookie{border-radius:.75rem;background:rgba(255,255,255,.03);padding:.75rem}\n.tc-cookie-name{margin:0;font-family:ui-monospace,monospace;font-size:12px;color:var(--tc-text)}\n.tc-cookie-purpose{margin:.25rem 0 0;font-size:12px;color:var(--tc-text-muted)}\n.tc-cookie-meta{margin:.25rem 0 0;font-family:ui-monospace,monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--tc-text-muted)}\n.tc-cookie-empty{font-size:12px;font-style:italic;color:var(--tc-text-muted)}\n.tc-about p{margin:0 0 .75rem;font-size:13.5px;line-height:1.6;color:var(--tc-text-muted)}\n.tc-link{color:var(--tc-brand);text-decoration:underline;text-underline-offset:2px}\n.tc-actions{display:flex;flex-direction:column;gap:.625rem;padding:1.25rem 1.5rem}\n.tc-btn{flex:1;padding:.8rem 1.25rem;border-radius:999px;font-size:.875rem;font-weight:600;cursor:pointer;border:1px solid rgba(255,255,255,.14);background:transparent;color:var(--tc-text);transition:background .15s,border-color .15s}\n.tc-btn:hover{background:rgba(255,255,255,.05)}\n.tc-btn-primary{border-color:transparent;background:var(--tc-brand);color:var(--tc-on-brand)}\n.tc-btn-primary:hover{background:var(--tc-brand-deep)}\n.tc-fab{position:fixed;bottom:1.25rem;left:1.25rem;z-index:2147483600;display:grid;place-items:center;width:2.75rem;height:2.75rem;border-radius:999px;border:0;cursor:pointer;background:var(--tc-brand);color:var(--tc-text);box-shadow:0 12px 30px -8px rgba(0,0,0,.6);transition:background .15s}\n.tc-fab:hover{background:var(--tc-brand-deep)}\n@media (min-width:640px){\n .tc-root{padding:1rem}\n .tc-card{height:auto;max-height:92dvh;min-height:460px;max-width:48rem;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);transform:translateY(10px) scale(.985)}\n .tc-card.tc-shown{transform:none}\n .tc-head{padding:1.5rem 2.75rem 0}\n .tc-tabs{gap:1.75rem}\n .tc-tab{font-size:14px}\n .tc-panel{padding:2.75rem}\n .tc-grid{grid-template-columns:repeat(4,1fr)}\n .tc-actions{flex-direction:row;padding:1.25rem 2.75rem}\n}\n@media (prefers-reduced-motion:reduce){\n .tc-card,.tc-acc-panel,.tc-chev,.tc-track,.tc-thumb{transition:none}\n}\n`;\n","/**\n * CookieConsent — self-contained GDPR cookie consent for React (consentric).\n *\n * Google Consent Mode v2 (default denied, update on choice), cookie-persisted,\n * familiar tabbed UX (Consent / Details / About tabs, 4 categories, accordion).\n * ZERO dependencies, ZERO Tailwind: all styles are scoped and injected, colours\n * come from props via CSS variables, so it drops into ANY React project and\n * looks identical regardless of the host's styling setup.\n *\n * Everything user-facing is overridable: copy via `labels`, categories and their\n * cookie tables via `categories` — so the same component fits any site or language.\n * It also ships built-in language packs (the `locale` prop); English is always the\n * default and the fallback for anything a pack or your overrides omit.\n *\n * On deny/withdrawal it deletes the denied categories' declared cookies from the\n * browser (`autoClearCookies`, on by default), not just the Consent Mode signal.\n *\n * ── Usage ─────────────────────────────────────────────────────────────────\n * import { CookieConsent } from 'consentric';\n * <CookieConsent\n * company=\"salecki.digital\"\n * locale=\"de\"\n * privacyUrl=\"/privacy\"\n * termsUrl=\"/privacy#cookies\"\n * colors={{ brand: '#ff5c3a', surface: '#0c0814', text: '#f4ede3' }}\n * />\n *\n * ── Strict Consent Mode timing (recommended) ──────────────────────────────\n * For tags to be gated BEFORE GTM loads, set the default in <head>, before the\n * GTM snippet, and pass `manageDefault={false}` to this component:\n *\n * <script>\n * window.dataLayer = window.dataLayer || [];\n * function gtag(){dataLayer.push(arguments);}\n * gtag('consent','default',{\n * ad_storage:'denied', ad_user_data:'denied', ad_personalization:'denied',\n * analytics_storage:'denied', functionality_storage:'denied',\n * personalization_storage:'denied', security_storage:'granted',\n * wait_for_update:500\n * });\n * try { var m=document.cookie.match(/(?:^|;\\s*)site_consent=([^;]+)/);\n * var c=m?JSON.parse(decodeURIComponent(m[1])):null;\n * if(c&&c.v===2&&c.choices) gtag('consent','update',{\n * functionality_storage:c.choices.preferences?'granted':'denied',\n * personalization_storage:c.choices.preferences?'granted':'denied',\n * analytics_storage:c.choices.statistics?'granted':'denied',\n * ad_storage:c.choices.marketing?'granted':'denied',\n * ad_user_data:c.choices.marketing?'granted':'denied',\n * ad_personalization:c.choices.marketing?'granted':'denied'});\n * } catch(e){}\n * </script>\n *\n * ── Or set the default via GTM (no HTML edit) ─────────────────────────────\n * Put the SAME script above into a GTM Custom HTML tag and fire it on the\n * \"Consent Initialization - All Pages\" trigger (NOT \"All Pages\" — Consent\n * Initialization is guaranteed to run before every other tag). Then pass\n * `manageDefault={false}`. The cookie name in the snippet MUST match `cookieName`.\n *\n * If you skip both, leave `manageDefault` on (default) — the component pushes the\n * default on mount. Good enough for simple setups; the head/GTM versions are stricter.\n */\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { CatId, CategoryContent, Choices, ConsentLabels, CookieConsentProps } from './types';\nimport { applyConsent, clearDeniedCookies, gtag, readCookie, writeCookie } from './cookies';\nimport { resolveLocale } from './locales';\nimport type { LocalePack } from './locales';\nimport { CSS } from './styles';\n\ntype TabId = 'consent' | 'details' | 'about';\n\nconst TABS: readonly TabId[] = ['consent', 'details', 'about'];\nconst EMPTY: Choices = { preferences: false, statistics: false, marketing: false };\n\nconst DEFAULT_LABELS: Required<ConsentLabels> = {\n tabConsent: 'Consent',\n tabDetails: 'Details',\n tabAbout: 'About',\n heading: 'This website uses cookies',\n lead: 'We use cookies to run this site and, if you allow it, to measure traffic and for marketing. Non-essential cookies stay off until you choose.',\n deny: 'Deny',\n save: 'Save choices',\n allowAll: 'Allow all',\n noCookies: 'No cookies in this category.',\n aboutParagraphs: [\n 'Cookies are small text files websites use to make your experience more efficient.',\n 'The law lets us store cookies that are strictly necessary to run this site. For everything else we need your permission, which is why you see this banner.',\n 'You can change or withdraw your consent anytime using the cookie button in the bottom-left corner of the screen.',\n ],\n operatedBy: 'Operated by {company}. ',\n readMore: 'Read more in our {privacy} and {cookie}.',\n privacyLabel: 'Privacy policy',\n cookieLabel: 'Cookie policy',\n fabLabel: 'Cookie settings',\n dialogLabel: 'Cookie consent',\n};\n\n/** Build the default categories in English, overlaying a locale pack when given.\n * The consent cookie's name always comes from `cookieName`; only its surrounding\n * copy is localised. */\nfunction defaultCategories(\n cookieName: string,\n pack?: LocalePack,\n): Record<CatId, Required<CategoryContent> & { locked?: boolean }> {\n const c = pack?.categories;\n const k = pack?.cookies;\n return {\n necessary: {\n name: c?.necessary.name ?? 'Necessary',\n locked: true,\n short: c?.necessary.short ?? 'Needed to load the site and remember your choice.',\n about: c?.necessary.about ?? 'Necessary cookies make the site usable by enabling basic functions like remembering your cookie choice. The site cannot work properly without them.',\n cookies: [\n {\n name: cookieName,\n provider: k?.selfProvider ?? 'this site',\n purpose: k?.consentPurpose ?? 'Stores your cookie consent choice.',\n meta: k?.consentMeta ?? 'HTTP · 1 year',\n },\n ],\n },\n preferences: {\n name: c?.preferences.name ?? 'Preferences',\n short: c?.preferences.short ?? 'Remembers settings like your region.',\n about: c?.preferences.about ?? 'Preference cookies let the site remember information that changes how it behaves or looks, like your region.',\n cookies: [],\n },\n statistics: {\n name: c?.statistics.name ?? 'Statistics',\n short: c?.statistics.short ?? 'Anonymous usage stats to improve the site.',\n about: c?.statistics.about ?? 'Statistics cookies help us understand how visitors use the site by collecting information anonymously (Google Analytics).',\n cookies: [\n { name: '_ga', provider: 'Google', purpose: k?.gaPurpose ?? 'Distinguishes visitors to measure site usage.', meta: k?.gaMeta ?? 'HTTP · 2 years' },\n { name: '_ga_*', provider: 'Google', purpose: k?.gaStatePurpose ?? 'Maintains analytics session state.', meta: k?.gaMeta ?? 'HTTP · 2 years' },\n ],\n },\n marketing: {\n name: c?.marketing.name ?? 'Marketing',\n short: c?.marketing.short ?? 'Advertising and campaign measurement.',\n about: c?.marketing.about ?? 'Marketing cookies track visitors across sites to show relevant ads. None are set unless a marketing tag is enabled.',\n cookies: [],\n },\n };\n}\n\n/** Render a \"{a} … {b} …\" template with named nodes (e.g. policy links) spliced in. */\nfunction renderTemplate(tmpl: string, slots: Record<string, ReactNode>): ReactNode[] {\n const out: ReactNode[] = [];\n const re = /\\{(\\w+)\\}/g;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = re.exec(tmpl)) !== null) {\n if (m.index > last) out.push(tmpl.slice(last, m.index));\n out.push(slots[m[1]] ?? m[0]);\n last = m.index + m[0].length;\n }\n if (last < tmpl.length) out.push(tmpl.slice(last));\n return out.map((node, idx) => <span key={idx}>{node}</span>);\n}\n\nconst FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nfunction Toggle({\n id,\n on,\n locked,\n label,\n onToggle,\n}: {\n id: CatId;\n on: boolean;\n locked?: boolean;\n label: string;\n onToggle: (id: CatId) => void;\n}) {\n return (\n <label className=\"tc-switch\">\n <input type=\"checkbox\" checked={on} disabled={locked} aria-label={label} onChange={() => onToggle(id)} />\n <span className=\"tc-track\" />\n <span className=\"tc-thumb\" />\n </label>\n );\n}\n\nexport function CookieConsent({\n manageDefault = true,\n cookieName = 'site_consent',\n company,\n logo,\n privacyUrl = '/privacy',\n termsUrl = '/privacy#cookies',\n locale,\n defaultOpen = false,\n defaultTab,\n colors,\n categories,\n labels,\n onChange,\n autoClearCookies = true,\n}: CookieConsentProps) {\n const [open, setOpen] = useState(defaultOpen);\n const [shown, setShown] = useState(defaultOpen);\n const [decided, setDecided] = useState(false);\n const [tab, setTab] = useState<TabId>(defaultTab ?? 'consent');\n const [choices, setChoices] = useState<Choices>(EMPTY);\n const [accOpen, setAccOpen] = useState<Record<string, boolean>>({});\n const cardRef = useRef<HTMLDivElement>(null);\n const fabRef = useRef<HTMLButtonElement>(null);\n const restoreFocusRef = useRef<HTMLElement | null>(null);\n\n const pack = useMemo(() => resolveLocale(locale), [locale]);\n const L = useMemo<Required<ConsentLabels>>(() => ({ ...DEFAULT_LABELS, ...pack?.labels, ...labels }), [pack, labels]);\n\n const cats = useMemo(() => {\n const base = defaultCategories(cookieName, pack);\n return (['necessary', 'preferences', 'statistics', 'marketing'] as CatId[]).map((id) => {\n const d = base[id];\n const o = categories?.[id];\n const cookies = o?.cookies ?? d.cookies;\n return {\n id,\n locked: id === 'necessary',\n name: o?.name ?? d.name,\n short: o?.short ?? d.short,\n about: o?.about ?? d.about,\n cookies,\n count: cookies.length,\n };\n });\n }, [cookieName, categories, pack]);\n\n // Mount: set default (optional) + restore a prior choice.\n useEffect(() => {\n if (manageDefault) {\n gtag('consent', 'default', {\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 wait_for_update: 500,\n });\n }\n const saved = readCookie(cookieName);\n if (saved) {\n setChoices(saved);\n applyConsent(saved);\n setDecided(true);\n }\n if (!saved || defaultOpen) setOpen(true);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Enter animation + body scroll lock.\n useEffect(() => {\n if (!open) {\n setShown(false);\n document.body.style.overflow = '';\n return;\n }\n document.body.style.overflow = 'hidden';\n const r = requestAnimationFrame(() => setShown(true));\n return () => cancelAnimationFrame(r);\n }, [open]);\n\n // Focus management + trap while the dialog is open; restore focus on close.\n useEffect(() => {\n if (!open) return;\n restoreFocusRef.current = (document.activeElement as HTMLElement) ?? null;\n const card = cardRef.current;\n card?.focus();\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || !card) return;\n const nodes = Array.from(card.querySelectorAll<HTMLElement>(FOCUSABLE)).filter((el) => el.offsetParent !== null);\n if (!nodes.length) return;\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n const active = document.activeElement;\n if (e.shiftKey && (active === first || active === card)) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('keydown', onKey);\n // After close the settings button is the persistent control, so prefer it;\n // fall back to whatever was focused when the dialog opened.\n const restore = restoreFocusRef.current;\n requestAnimationFrame(() => {\n const target = fabRef.current ?? (restore && restore.isConnected ? restore : null);\n target?.focus();\n });\n };\n }, [open]);\n\n // Escape closes once a choice exists.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && decided) setOpen(false);\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [decided]);\n\n const commit = (ch: Choices) => {\n writeCookie(cookieName, ch);\n applyConsent(ch);\n if (autoClearCookies) clearDeniedCookies(cats, ch, cookieName);\n setChoices(ch);\n setDecided(true);\n setOpen(false);\n onChange?.(ch);\n };\n const acceptAll = () => commit({ preferences: true, statistics: true, marketing: true });\n const denyAll = () => commit(EMPTY);\n const saveChoices = () => commit(choices);\n const toggleCat = (id: CatId) => {\n if (id === 'necessary') return;\n setChoices((ch) => ({ ...ch, [id]: !ch[id as keyof Choices] }));\n };\n const openSettings = () => {\n setChoices(readCookie(cookieName) ?? EMPTY);\n setTab('consent');\n setOpen(true);\n };\n const onTabKey = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;\n e.preventDefault();\n const idx = TABS.indexOf(tab);\n const next = e.key === 'ArrowRight' ? (idx + 1) % TABS.length : (idx + TABS.length - 1) % TABS.length;\n const id = TABS[next];\n setTab(id);\n requestAnimationFrame(() => document.getElementById('tc-tab-' + id)?.focus());\n };\n\n const palette = {\n brand: colors?.brand ?? '#ff5c3a',\n brandDeep: colors?.brandDeep ?? '#eb5535',\n surface: colors?.surface ?? '#0c0814',\n surfaceAlt: colors?.surfaceAlt ?? 'rgba(255,255,255,0.035)',\n text: colors?.text ?? '#f4ede3',\n textMuted: colors?.textMuted ?? '#a89cb8',\n backdrop: colors?.backdrop ?? 'rgba(7,5,13,0.8)',\n onBrand: colors?.onBrand ?? colors?.surface ?? '#0c0814',\n };\n const vars = {\n '--tc-brand': palette.brand,\n '--tc-brand-deep': palette.brandDeep,\n '--tc-surface': palette.surface,\n '--tc-surface-alt': palette.surfaceAlt,\n '--tc-text': palette.text,\n '--tc-text-muted': palette.textMuted,\n '--tc-backdrop': palette.backdrop,\n '--tc-on-brand': palette.onBrand,\n } as CSSProperties;\n\n const tabLabel = (t: TabId) => (t === 'consent' ? L.tabConsent : t === 'details' ? L.tabDetails : L.tabAbout);\n // Highlight \"Save choices\" only when there's actually an optional category on —\n // deselecting everything makes it equivalent to \"Deny\", so it stops being primary.\n const hasSelection = choices.preferences || choices.statistics || choices.marketing;\n\n return (\n <>\n <style>{CSS}</style>\n\n {open && (\n <div className=\"tc-root\" style={vars} role=\"dialog\" aria-modal=\"true\" aria-label={L.dialogLabel}>\n <div className=\"tc-backdrop\" onClick={() => decided && setOpen(false)} />\n <div ref={cardRef} tabIndex={-1} className={'tc-card' + (shown ? ' tc-shown' : '')}>\n <div className=\"tc-head\">\n <div className=\"tc-tabs\" role=\"tablist\" aria-label={L.dialogLabel}>\n {TABS.map((t) => (\n <button\n key={t}\n id={'tc-tab-' + t}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab === t}\n aria-controls={'tc-panel-' + t}\n tabIndex={tab === t ? 0 : -1}\n className={'tc-tab' + (tab === t ? ' tc-active' : '')}\n onClick={() => setTab(t)}\n onKeyDown={onTabKey}\n >\n {tabLabel(t)}\n </button>\n ))}\n </div>\n {logo ?? (company ? <span className=\"tc-logo\">{company}</span> : null)}\n </div>\n <hr className=\"tc-hr\" />\n\n <div className=\"tc-body\">\n {tab === 'consent' && (\n <div id=\"tc-panel-consent\" role=\"tabpanel\" aria-labelledby=\"tc-tab-consent\" className=\"tc-panel\">\n <h2 className=\"tc-h2\">{L.heading}</h2>\n <p className=\"tc-lead\">{L.lead}</p>\n <div className=\"tc-grid\">\n {cats.map((cat) => (\n <div className=\"tc-cat\" key={cat.id}>\n <p className=\"tc-cat-name\">{cat.name}</p>\n <p className=\"tc-cat-desc\">{cat.short}</p>\n <Toggle id={cat.id} label={cat.name} on={cat.locked ? true : choices[cat.id as keyof Choices]} locked={cat.locked} onToggle={toggleCat} />\n </div>\n ))}\n </div>\n </div>\n )}\n\n {tab === 'details' && (\n <div id=\"tc-panel-details\" role=\"tabpanel\" aria-labelledby=\"tc-tab-details\" className=\"tc-panel tc-details\">\n {cats.map((cat) => {\n const isOpen = !!accOpen[cat.id];\n return (\n <div className={'tc-acc' + (isOpen ? ' tc-open' : '')} key={cat.id}>\n <div className=\"tc-acc-head\">\n <button type=\"button\" className=\"tc-acc-btn\" aria-expanded={isOpen} onClick={() => setAccOpen((s) => ({ ...s, [cat.id]: !s[cat.id] }))}>\n <svg className=\"tc-chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" aria-hidden=\"true\">\n <path d=\"M6 9l6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className=\"tc-acc-name\">{cat.name}</span>\n <span className=\"tc-badge\">{cat.count}</span>\n </button>\n <Toggle id={cat.id} label={cat.name} on={cat.locked ? true : choices[cat.id as keyof Choices]} locked={cat.locked} onToggle={toggleCat} />\n </div>\n <p className=\"tc-acc-about\">{cat.about}</p>\n <div className=\"tc-acc-panel\">\n <div className=\"tc-acc-inner\">\n {cat.cookies.length ? (\n cat.cookies.map((k) => (\n <div className=\"tc-cookie\" key={k.name}>\n <p className=\"tc-cookie-name\">{k.name}</p>\n {k.purpose ? <p className=\"tc-cookie-purpose\">{k.purpose}</p> : null}\n <p className=\"tc-cookie-meta\">{[k.provider, k.meta].filter(Boolean).join(' · ')}</p>\n </div>\n ))\n ) : (\n <p className=\"tc-cookie-empty\">{L.noCookies}</p>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {tab === 'about' && (\n <div id=\"tc-panel-about\" role=\"tabpanel\" aria-labelledby=\"tc-tab-about\" className=\"tc-panel tc-about\">\n {L.aboutParagraphs.map((p, i) => (\n <p key={i}>{p}</p>\n ))}\n <p>\n {company ? L.operatedBy.replace('{company}', company) : ''}\n {renderTemplate(L.readMore, {\n privacy: (\n <a className=\"tc-link\" href={privacyUrl}>\n {L.privacyLabel}\n </a>\n ),\n cookie: (\n <a className=\"tc-link\" href={termsUrl}>\n {L.cookieLabel}\n </a>\n ),\n })}\n </p>\n </div>\n )}\n </div>\n\n <hr className=\"tc-hr\" />\n <div className=\"tc-actions\">\n <button type=\"button\" className=\"tc-btn\" onClick={denyAll}>\n {L.deny}\n </button>\n <button type=\"button\" className={'tc-btn' + (hasSelection ? ' tc-btn-primary' : '')} onClick={saveChoices}>\n {L.save}\n </button>\n <button type=\"button\" className=\"tc-btn\" onClick={acceptAll}>\n {L.allowAll}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {decided && !open && (\n <button ref={fabRef} type=\"button\" className=\"tc-fab\" style={vars} aria-label={L.fabLabel} onClick={openSettings}>\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5z\" />\n <path d=\"M8.5 8.5h.01M16 15.5h.01M12 12h.01M11 17h.01M7 14h.01\" />\n </svg>\n </button>\n )}\n </>\n );\n}\n\nexport default CookieConsent;\n"]}