cookiecraft 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -689,6 +689,13 @@
689
689
  const isModal = this.config.disablePageInteraction;
690
690
  const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';
691
691
  const colorStyle = buildColorStyle(safeColor);
692
+ const titleHtml = translations.title
693
+ ? `<h2 class="cc-banner__title">${escapeHtml(translations.title)}</h2>`
694
+ : '';
695
+ const descriptionHtml = this.getDescriptionHTML();
696
+ const descBlock = descriptionHtml
697
+ ? `<p class="cc-banner__description">${descriptionHtml}</p>`
698
+ : '';
692
699
  const template = `
693
700
  <div
694
701
  class="cc-banner cc-banner--${escapeHtml(position)} cc-banner--${escapeHtml(layout)} ${backdropBlur ? 'cc-backdrop-blur' : ''}"
@@ -701,28 +708,10 @@
701
708
  >
702
709
  <div class="cc-banner__container">
703
710
  <div class="cc-banner__content">
704
- <h2 class="cc-banner__title">
705
- ${escapeHtml(translations.title || 'We use cookies')}
706
- </h2>
707
- <p class="cc-banner__description">
708
- ${this.getDescriptionHTML()}
709
- </p>
711
+ ${titleHtml}
712
+ ${descBlock}
710
713
  </div>
711
714
  <div class="cc-banner__actions">
712
- <button
713
- class="cc-btn cc-btn--ghost"
714
- data-action="reject"
715
- aria-label="${escapeHtml(translations.rejectAll || 'Essentials only')}"
716
- >
717
- ${escapeHtml(translations.rejectAll || 'Essentials only')}
718
- </button>
719
- <button
720
- class="cc-btn cc-btn--tertiary"
721
- data-action="customize"
722
- aria-label="${escapeHtml(translations.customize || 'Customize')}"
723
- >
724
- ${escapeHtml(translations.customize || 'Customize')}
725
- </button>
726
715
  <button
727
716
  class="cc-btn cc-btn--accept"
728
717
  data-action="accept"
@@ -826,16 +815,21 @@
826
815
  */
827
816
  getDescriptionHTML() {
828
817
  const translations = this.config.translations || {};
829
- const defaultDescription = 'We use cookies to improve your experience on our site. You can choose which cookies you accept.';
830
- const description = escapeHtml(translations.description || defaultDescription);
818
+ if (!translations.description)
819
+ return '';
820
+ const description = escapeHtml(translations.description);
821
+ const customizeLabel = escapeHtml(translations.customize || 'Customize');
822
+ let html = description;
831
823
  if (translations.privacyPolicyUrl) {
832
824
  const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);
833
825
  if (safeUrl) {
834
826
  const linkLabel = escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy');
835
- return `${description} <a href="${safeUrl}" target="_blank" rel="noopener noreferrer">${linkLabel}</a>`;
827
+ html += ` <a href="${safeUrl}" target="_blank" rel="noopener noreferrer">${linkLabel}</a>`;
836
828
  }
837
829
  }
838
- return description;
830
+ // Inline customize link at end of description
831
+ html += ` <span class="cc-banner__customize" data-action="customize">${customizeLabel}</span>`;
832
+ return html;
839
833
  }
840
834
  }
841
835
 
@@ -1397,6 +1391,111 @@
1397
1391
  }
1398
1392
  }
1399
1393
 
1394
+ /**
1395
+ * Built-in translations for supported languages
1396
+ * Users can override any string via config.translations
1397
+ */
1398
+ const en = {
1399
+ title: 'We use cookies',
1400
+ description: 'We use cookies to improve your experience on our site. You can choose which cookies you accept.',
1401
+ acceptAll: 'Accept all',
1402
+ rejectAll: 'Essentials only',
1403
+ customize: 'Manage preferences',
1404
+ savePreferences: 'Save preferences',
1405
+ essentialsOnly: 'Essentials only',
1406
+ preferencesTitle: 'Cookie Preferences',
1407
+ cookieSettings: 'Cookie settings',
1408
+ cookies: 'Cookies',
1409
+ privacyPolicyLabel: 'Privacy Policy',
1410
+ };
1411
+ const fr = {
1412
+ title: 'Nous utilisons des cookies',
1413
+ description: 'Ce site utilise des cookies pour améliorer votre expérience de navigation. Vous pouvez choisir les cookies que vous acceptez.',
1414
+ acceptAll: 'Tout accepter',
1415
+ rejectAll: 'Essentiels uniquement',
1416
+ customize: 'Gérer mes préférences',
1417
+ savePreferences: 'Enregistrer',
1418
+ essentialsOnly: 'Essentiels uniquement',
1419
+ preferencesTitle: 'Préférences des cookies',
1420
+ cookieSettings: 'Paramètres des cookies',
1421
+ cookies: 'Cookies',
1422
+ privacyPolicyLabel: 'Politique de confidentialité',
1423
+ };
1424
+ const de = {
1425
+ title: 'Wir verwenden Cookies',
1426
+ description: 'Diese Website verwendet Cookies, um Ihr Erlebnis zu verbessern. Sie können wählen, welche Cookies Sie akzeptieren.',
1427
+ acceptAll: 'Alle akzeptieren',
1428
+ rejectAll: 'Nur essenzielle',
1429
+ customize: 'Einstellungen verwalten',
1430
+ savePreferences: 'Speichern',
1431
+ essentialsOnly: 'Nur essenzielle',
1432
+ preferencesTitle: 'Cookie-Einstellungen',
1433
+ cookieSettings: 'Cookie-Einstellungen',
1434
+ cookies: 'Cookies',
1435
+ privacyPolicyLabel: 'Datenschutzrichtlinie',
1436
+ };
1437
+ const es = {
1438
+ title: 'Usamos cookies',
1439
+ description: 'Este sitio utiliza cookies para mejorar su experiencia. Puede elegir qué cookies acepta.',
1440
+ acceptAll: 'Aceptar todo',
1441
+ rejectAll: 'Solo esenciales',
1442
+ customize: 'Gestionar preferencias',
1443
+ savePreferences: 'Guardar',
1444
+ essentialsOnly: 'Solo esenciales',
1445
+ preferencesTitle: 'Preferencias de cookies',
1446
+ cookieSettings: 'Configuración de cookies',
1447
+ cookies: 'Cookies',
1448
+ privacyPolicyLabel: 'Política de privacidad',
1449
+ };
1450
+ const it = {
1451
+ title: 'Utilizziamo i cookie',
1452
+ description: 'Questo sito utilizza i cookie per migliorare la tua esperienza. Puoi scegliere quali cookie accettare.',
1453
+ acceptAll: 'Accetta tutti',
1454
+ rejectAll: 'Solo essenziali',
1455
+ customize: 'Gestisci preferenze',
1456
+ savePreferences: 'Salva',
1457
+ essentialsOnly: 'Solo essenziali',
1458
+ preferencesTitle: 'Preferenze cookie',
1459
+ cookieSettings: 'Impostazioni cookie',
1460
+ cookies: 'Cookie',
1461
+ privacyPolicyLabel: 'Informativa sulla privacy',
1462
+ };
1463
+ const nl = {
1464
+ title: 'Wij gebruiken cookies',
1465
+ description: 'Deze site maakt gebruik van cookies om uw ervaring te verbeteren. U kunt kiezen welke cookies u accepteert.',
1466
+ acceptAll: 'Alles accepteren',
1467
+ rejectAll: 'Alleen essentieel',
1468
+ customize: 'Voorkeuren beheren',
1469
+ savePreferences: 'Opslaan',
1470
+ essentialsOnly: 'Alleen essentieel',
1471
+ preferencesTitle: 'Cookie-voorkeuren',
1472
+ cookieSettings: 'Cookie-instellingen',
1473
+ cookies: 'Cookies',
1474
+ privacyPolicyLabel: 'Privacybeleid',
1475
+ };
1476
+ const pt = {
1477
+ title: 'Utilizamos cookies',
1478
+ description: 'Este site utiliza cookies para melhorar a sua experiência. Pode escolher quais cookies aceita.',
1479
+ acceptAll: 'Aceitar todos',
1480
+ rejectAll: 'Apenas essenciais',
1481
+ customize: 'Gerir preferências',
1482
+ savePreferences: 'Guardar',
1483
+ essentialsOnly: 'Apenas essenciais',
1484
+ preferencesTitle: 'Preferências de cookies',
1485
+ cookieSettings: 'Definições de cookies',
1486
+ cookies: 'Cookies',
1487
+ privacyPolicyLabel: 'Política de privacidade',
1488
+ };
1489
+ const builtInTranslations = {
1490
+ en,
1491
+ fr,
1492
+ de,
1493
+ es,
1494
+ it,
1495
+ nl,
1496
+ pt,
1497
+ };
1498
+
1400
1499
  /**
1401
1500
  * CookieConsent - Main orchestrator class
1402
1501
  */
@@ -1626,7 +1725,12 @@
1626
1725
  * Validate and set default config values
1627
1726
  */
1628
1727
  validateConfig(config) {
1629
- return Object.assign(Object.assign({}, config), { categories: config.categories || {
1728
+ var _a;
1729
+ // Merge built-in language translations with user overrides
1730
+ const langKey = ((_a = config.language) === null || _a === void 0 ? void 0 : _a.toLowerCase().split('-')[0]) || 'en';
1731
+ const langDefaults = builtInTranslations[langKey] || builtInTranslations['en'];
1732
+ const mergedTranslations = Object.assign(Object.assign({}, langDefaults), config.translations);
1733
+ return Object.assign(Object.assign({}, config), { translations: mergedTranslations, categories: config.categories || {
1630
1734
  necessary: {
1631
1735
  enabled: true,
1632
1736
  readOnly: true,