diff --git a/v3/package-lock.json b/v3/package-lock.json
index 8ea5315..63b9876 100644
--- a/v3/package-lock.json
+++ b/v3/package-lock.json
@@ -18,7 +18,8 @@
"astro-icon": "^1.1.1",
"limax": "4.1.0",
"lodash.merge": "^4.6.2",
- "unpic": "^3.18.0"
+ "unpic": "^3.18.0",
+ "vanilla-cookieconsent": "^3.0.1"
},
"devDependencies": {
"@astrojs/check": "^0.9.3",
@@ -10031,6 +10032,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/vanilla-cookieconsent": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vanilla-cookieconsent/-/vanilla-cookieconsent-3.0.1.tgz",
+ "integrity": "sha512-gqc4x7O9t1I4xWr7x6/jtQWPr4PZK26SmeA0iyTv1WyoECfAGnu5JEOExmMEP+5Fz66AT9OiCBO3GII4wDQHLw==",
+ "license": "MIT"
+ },
"node_modules/vfile": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
diff --git a/v3/package.json b/v3/package.json
index ea6cb8d..ec436f5 100644
--- a/v3/package.json
+++ b/v3/package.json
@@ -32,7 +32,8 @@
"astro-icon": "^1.1.1",
"limax": "4.1.0",
"lodash.merge": "^4.6.2",
- "unpic": "^3.18.0"
+ "unpic": "^3.18.0",
+ "vanilla-cookieconsent": "^3.0.1"
},
"devDependencies": {
"@astrojs/check": "^0.9.3",
diff --git a/v3/src/assets/styles/ccElegantBlack.css b/v3/src/assets/styles/ccElegantBlack.css
new file mode 100644
index 0000000..f8523d8
--- /dev/null
+++ b/v3/src/assets/styles/ccElegantBlack.css
@@ -0,0 +1,52 @@
+.cc--elegant-black {
+ --cc-bg: #000;
+ --cc-primary-color: rgb(239, 244, 246);
+ --cc-secondary-color: #b1bdc3 !important;
+
+ --cc-btn-primary-bg: #ffffff;
+ --cc-btn-primary-color: #000;
+ --cc-btn-primary-hover-bg: #ccd4d8;
+ --cc-btn-primary-hover-color: #000;
+ --cc-btn-primary-border-color: var(--cc-btn-primary-bg);
+
+ --cc-btn-secondary-bg: rgba(255, 255, 255, 0.039);
+ --cc-btn-secondary-color: var(--cc-primary-color);
+ --cc-btn-secondary-border-color: #252729;
+ --cc-btn-secondary-hover-bg: #252729;
+ --cc-btn-secondary-hover-color: #fff;
+ --cc-btn-secondary-hover-border-color: #252729;
+
+ --cc-cookie-category-block-bg: #101111;
+ --cc-cookie-category-block-border: #1d1e1f;
+ --cc-cookie-category-block-hover-bg: #151516;
+ --cc-cookie-category-block-hover-border: #1d1e1f;
+ --cc-cookie-category-expanded-block-hover-bg: #1d1e1f;
+ --cc-cookie-category-expanded-block-bg: #101111;
+ --cc-toggle-readonly-bg: #2f3132;
+ --cc-overlay-bg: rgba(0, 0, 0, 0.9) !important;
+
+ --cc-toggle-on-bg: var(--cc-btn-primary-bg);
+ --cc-toggle-off-bg: #525f6b;
+ --cc-toggle-on-knob-bg: var(--cc-bg);
+ --cc-toggle-off-knob-bg: var(--cc-btn-primary-color);
+ --cc-toggle-readonly-knob-bg: var(--cc-cookie-category-block-bg);
+ --cc-toggle-enabled-icon-color: var(--cc-btn-primary-color);
+ --cc-toggle-disabled-icon-color: var(--cc-btn-primary-color);
+ --cc-toggle-readonly-knob-icon-color: var(--cc-toggle-readonly-bg);
+ --cc-section-category-border: #1e2428;
+
+ --cc-webkit-scrollbar-bg: var(--cc-section-category-border);
+ --cc-webkit-scrollbar-hover-bg: var(--cc-btn-primary-hover-bg);
+
+ --cc-separator-border-color: #252729;
+
+ --cc-footer-bg: #000;
+ --cc-footer-color: var(--cc-secondary-color);
+ --cc-footer-border-color: #212529;
+}
+
+.cc--elegant-black #cc-main .cm,
+.cc--elegant-black #cc-main .pm {
+ color-scheme: dark;
+ border: 1px solid var(--cc-separator-border-color);
+}
diff --git a/v3/src/components/CookieConsent.astro b/v3/src/components/CookieConsent.astro
new file mode 100644
index 0000000..92e11f3
--- /dev/null
+++ b/v3/src/components/CookieConsent.astro
@@ -0,0 +1,16 @@
+---
+import 'vanilla-cookieconsent/dist/cookieconsent.css';
+import '../assets/styles/ccElegantBlack.css';
+---
+
+
+
+
diff --git a/v3/src/components/CookieConsentConfig.ts b/v3/src/components/CookieConsentConfig.ts
new file mode 100644
index 0000000..926cc80
--- /dev/null
+++ b/v3/src/components/CookieConsentConfig.ts
@@ -0,0 +1,102 @@
+import type { CookieConsentConfig } from 'vanilla-cookieconsent';
+
+export const config: CookieConsentConfig = {
+ guiOptions: {
+ consentModal: {
+ layout: 'box inline',
+ position: 'bottom left',
+ },
+ preferencesModal: {
+ layout: 'box',
+ position: 'right',
+ equalWeightButtons: true,
+ flipButtons: false,
+ },
+ },
+ categories: {
+ necessary: {
+ readOnly: true,
+ },
+ functionality: {},
+ analytics: {
+ services: {
+ ga4: {
+ label:
+ 'Google Analytics 4 (dummy)',
+ onAccept: () => {
+ console.log('ga4 accepted');
+ // TODO: load ga4
+ },
+ onReject: () => {
+ console.log('ga4 rejected');
+ },
+ cookies: [
+ {
+ name: /^_ga/,
+ },
+ ],
+ },
+ another: {
+ label: 'Another one (dummy)',
+ },
+ },
+ },
+ },
+ language: {
+ default: 'en',
+ autoDetect: 'browser',
+ translations: {
+ en: {
+ consentModal: {
+ title: "Hello traveller, it's cookie time!",
+ description:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip.',
+ acceptAllBtn: 'Accept all',
+ acceptNecessaryBtn: 'Reject all',
+ showPreferencesBtn: 'Manage preferences',
+ footer:
+ 'Privacy Policy\nTerms and conditions',
+ },
+ preferencesModal: {
+ title: 'Consent Preferences Center',
+ acceptAllBtn: 'Accept all',
+ acceptNecessaryBtn: 'Reject all',
+ savePreferencesBtn: 'Save preferences',
+ closeIconLabel: 'Close modal',
+ serviceCounterLabel: 'Service|Services',
+ sections: [
+ {
+ title: 'Cookie Usage',
+ description:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
+ },
+ {
+ title:
+ 'Strictly Necessary Cookies Always Enabled',
+ description:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
+ linkedCategory: 'necessary',
+ },
+ {
+ title: 'Functionality Cookies',
+ description:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
+ linkedCategory: 'functionality',
+ },
+ {
+ title: 'Analytics Cookies',
+ description:
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
+ linkedCategory: 'analytics',
+ },
+ {
+ title: 'More information',
+ description:
+ 'For any query in relation to my policy on cookies and your choices, please contact me.',
+ },
+ ],
+ },
+ },
+ },
+ },
+};
diff --git a/v3/src/layouts/Layout.astro b/v3/src/layouts/Layout.astro
index 0d07806..3a864fe 100644
--- a/v3/src/layouts/Layout.astro
+++ b/v3/src/layouts/Layout.astro
@@ -11,6 +11,7 @@ import Metadata from '~/components/common/Metadata.astro';
import SiteVerification from '~/components/common/SiteVerification.astro';
import Analytics from '~/components/common/Analytics.astro';
import BasicScripts from '~/components/common/BasicScripts.astro';
+import CookieConsent from '../components/CookieConsent.astro';
// Comment the line below to disable View Transitions
import { ViewTransitions } from 'astro:transitions';
@@ -44,5 +45,6 @@ const { language, textDirection } = I18N;
+