@blakfy/cookie 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +186 -0
- package/CHANGELOG.md +107 -0
- package/COMPLIANCE.md +191 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +156 -0
- package/README.md +480 -0
- package/TCF-CERTIFICATION.md +106 -0
- package/dist/cookie-defaults.js +76 -0
- package/dist/cookie-defaults.js.LEGAL.txt +0 -0
- package/dist/cookie-defaults.min.js +10 -0
- package/dist/cookie-defaults.min.js.LEGAL.txt +0 -0
- package/dist/cookie.js +3998 -0
- package/dist/cookie.js.LEGAL.txt +0 -0
- package/dist/cookie.js.map +7 -0
- package/dist/cookie.min.js +10 -0
- package/dist/cookie.min.js.LEGAL.txt +0 -0
- package/package.json +60 -0
package/dist/cookie.js
ADDED
|
@@ -0,0 +1,3998 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Blakfy Cookie Widget v2.1.0
|
|
3
|
+
* https://github.com/tariktunc/blakfy-cookie
|
|
4
|
+
* MIT License | (c) Blakfy Studio
|
|
5
|
+
*
|
|
6
|
+
* KVKK + GDPR + CCPA + Google CMv2 + Microsoft UET + Yandex + TCF v2.2 + GPC + DNT
|
|
7
|
+
* 23 languages | 18 presets | Tag-gating | Powered by Blakfy Studio
|
|
8
|
+
*/
|
|
9
|
+
(() => {
|
|
10
|
+
// src/core/config.js
|
|
11
|
+
var CDN_BASE = "https://cdn.jsdelivr.net/gh/tariktunc/blakfy-cookie@v2";
|
|
12
|
+
var DEFAULTS = {
|
|
13
|
+
locale: "auto",
|
|
14
|
+
mainLang: null,
|
|
15
|
+
policyUrl: "/cerez-politikasi",
|
|
16
|
+
policyVersion: "1.0",
|
|
17
|
+
auditEndpoint: null,
|
|
18
|
+
position: "bottom-center",
|
|
19
|
+
theme: "auto",
|
|
20
|
+
accent: "#3E5C3A",
|
|
21
|
+
presets: null,
|
|
22
|
+
tcf: "false",
|
|
23
|
+
cmpId: "0",
|
|
24
|
+
ccpa: "auto",
|
|
25
|
+
gpc: "respect",
|
|
26
|
+
dnt: "respect",
|
|
27
|
+
statusUrl: CDN_BASE + "/status.json",
|
|
28
|
+
statusEnabled: true
|
|
29
|
+
};
|
|
30
|
+
var getScriptEl = () => {
|
|
31
|
+
if (document.currentScript) return document.currentScript;
|
|
32
|
+
const all = document.getElementsByTagName("script");
|
|
33
|
+
return all[all.length - 1] || null;
|
|
34
|
+
};
|
|
35
|
+
var readConfig = (scriptEl) => {
|
|
36
|
+
const el2 = scriptEl || getScriptEl();
|
|
37
|
+
const attr = (name, fallback) => {
|
|
38
|
+
if (!el2) return fallback;
|
|
39
|
+
const v = el2.getAttribute(name);
|
|
40
|
+
return v == null ? fallback : v;
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
locale: attr("data-blakfy-locale", DEFAULTS.locale),
|
|
44
|
+
mainLang: attr("data-blakfy-main-lang", DEFAULTS.mainLang),
|
|
45
|
+
policyUrl: attr("data-blakfy-policy-url", DEFAULTS.policyUrl),
|
|
46
|
+
policyVersion: attr("data-blakfy-version", DEFAULTS.policyVersion),
|
|
47
|
+
auditEndpoint: attr("data-blakfy-audit-endpoint", DEFAULTS.auditEndpoint),
|
|
48
|
+
position: attr("data-blakfy-position", DEFAULTS.position),
|
|
49
|
+
theme: attr("data-blakfy-theme", DEFAULTS.theme),
|
|
50
|
+
accent: attr("data-blakfy-accent", DEFAULTS.accent),
|
|
51
|
+
presets: attr("data-blakfy-presets", DEFAULTS.presets),
|
|
52
|
+
tcf: attr("data-blakfy-tcf", DEFAULTS.tcf),
|
|
53
|
+
cmpId: attr("data-blakfy-cmp-id", DEFAULTS.cmpId),
|
|
54
|
+
ccpa: attr("data-blakfy-ccpa", DEFAULTS.ccpa),
|
|
55
|
+
gpc: attr("data-blakfy-gpc", DEFAULTS.gpc),
|
|
56
|
+
dnt: attr("data-blakfy-dnt", DEFAULTS.dnt),
|
|
57
|
+
statusUrl: attr("data-blakfy-status-url", DEFAULTS.statusUrl),
|
|
58
|
+
statusEnabled: attr("data-blakfy-status", "true") !== "false"
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// src/core/consent-store.js
|
|
63
|
+
var COOKIE_NAME = "blakfy_consent";
|
|
64
|
+
var COOKIE_TTL_DAYS = 365;
|
|
65
|
+
var readCookie = (policyVersion) => {
|
|
66
|
+
const match = document.cookie.match(new RegExp("(^| )" + COOKIE_NAME + "=([^;]+)"));
|
|
67
|
+
if (!match) return null;
|
|
68
|
+
try {
|
|
69
|
+
const s = JSON.parse(decodeURIComponent(match[2]));
|
|
70
|
+
if (s.version !== policyVersion) return null;
|
|
71
|
+
return s;
|
|
72
|
+
} catch (e) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
var writeCookie = (state) => {
|
|
77
|
+
const expires = new Date(Date.now() + COOKIE_TTL_DAYS * 864e5).toUTCString();
|
|
78
|
+
const secure = window.location.protocol === "https:" ? "; Secure" : "";
|
|
79
|
+
document.cookie = COOKIE_NAME + "=" + encodeURIComponent(JSON.stringify(state)) + "; expires=" + expires + "; path=/; SameSite=Strict" + secure;
|
|
80
|
+
};
|
|
81
|
+
var newId = () => {
|
|
82
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
83
|
+
return crypto.randomUUID();
|
|
84
|
+
}
|
|
85
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
86
|
+
const r = Math.random() * 16 | 0;
|
|
87
|
+
const v = c === "x" ? r : r & 3 | 8;
|
|
88
|
+
return v.toString(16);
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
var buildState = ({
|
|
92
|
+
prefs,
|
|
93
|
+
currentLocale,
|
|
94
|
+
mainLang,
|
|
95
|
+
policyVersion,
|
|
96
|
+
jurisdiction,
|
|
97
|
+
tcString,
|
|
98
|
+
uspString,
|
|
99
|
+
prevId
|
|
100
|
+
}) => ({
|
|
101
|
+
id: prevId || newId(),
|
|
102
|
+
essential: true,
|
|
103
|
+
analytics: !!(prefs && prefs.analytics),
|
|
104
|
+
marketing: !!(prefs && prefs.marketing),
|
|
105
|
+
functional: !!(prefs && prefs.functional),
|
|
106
|
+
recording: !!(prefs && prefs.recording),
|
|
107
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
108
|
+
version: policyVersion,
|
|
109
|
+
locale: currentLocale,
|
|
110
|
+
mainLang,
|
|
111
|
+
jurisdiction: jurisdiction || "default",
|
|
112
|
+
tcString: tcString || null,
|
|
113
|
+
uspString: uspString || null
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// src/core/events.js
|
|
117
|
+
var createEmitter = () => {
|
|
118
|
+
const listeners2 = /* @__PURE__ */ Object.create(null);
|
|
119
|
+
const on = (event, fn) => {
|
|
120
|
+
if (typeof fn !== "function") return;
|
|
121
|
+
if (!listeners2[event]) listeners2[event] = [];
|
|
122
|
+
listeners2[event].push(fn);
|
|
123
|
+
};
|
|
124
|
+
const off = (event, fn) => {
|
|
125
|
+
const arr = listeners2[event];
|
|
126
|
+
if (!arr) return;
|
|
127
|
+
const i = arr.indexOf(fn);
|
|
128
|
+
if (i > -1) arr.splice(i, 1);
|
|
129
|
+
};
|
|
130
|
+
const emit = (event, ...args) => {
|
|
131
|
+
const arr = listeners2[event];
|
|
132
|
+
if (!arr) return;
|
|
133
|
+
for (let i = 0; i < arr.length; i++) {
|
|
134
|
+
try {
|
|
135
|
+
arr[i].apply(null, args);
|
|
136
|
+
} catch (e) {
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
return { on, off, emit };
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
// src/i18n/detect.js
|
|
144
|
+
var SUPPORTED_LOCALES = [
|
|
145
|
+
"tr",
|
|
146
|
+
"en",
|
|
147
|
+
"ar",
|
|
148
|
+
"fa",
|
|
149
|
+
"ur",
|
|
150
|
+
"fr",
|
|
151
|
+
"ru",
|
|
152
|
+
"de",
|
|
153
|
+
"he",
|
|
154
|
+
"uk",
|
|
155
|
+
"es",
|
|
156
|
+
"it",
|
|
157
|
+
"pt",
|
|
158
|
+
"nl",
|
|
159
|
+
"pl",
|
|
160
|
+
"sv",
|
|
161
|
+
"cs",
|
|
162
|
+
"zh",
|
|
163
|
+
"zh-TW",
|
|
164
|
+
"ja",
|
|
165
|
+
"ko",
|
|
166
|
+
"id",
|
|
167
|
+
"hi"
|
|
168
|
+
];
|
|
169
|
+
var RTL_LOCALES = ["ar", "he", "fa", "ur"];
|
|
170
|
+
var normalizeLocale = (raw, supported) => {
|
|
171
|
+
if (!raw) return null;
|
|
172
|
+
const list = supported || SUPPORTED_LOCALES;
|
|
173
|
+
const lo = String(raw).toLowerCase();
|
|
174
|
+
for (let i = 0; i < list.length; i++) {
|
|
175
|
+
if (list[i].toLowerCase() === lo) return list[i];
|
|
176
|
+
}
|
|
177
|
+
const prefix = lo.substring(0, 2);
|
|
178
|
+
for (let j = 0; j < list.length; j++) {
|
|
179
|
+
if (list[j].toLowerCase() === prefix) return list[j];
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
};
|
|
183
|
+
var detectLocale = ({ configLocale, supported, defaultLocale }) => {
|
|
184
|
+
const list = supported || SUPPORTED_LOCALES;
|
|
185
|
+
const fallback = defaultLocale || "tr";
|
|
186
|
+
if (configLocale && configLocale !== "auto") {
|
|
187
|
+
return normalizeLocale(configLocale, list) || fallback;
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
const url = new URL(window.location.href);
|
|
191
|
+
const qp = url.searchParams.get("lang");
|
|
192
|
+
if (qp) {
|
|
193
|
+
const ql = normalizeLocale(qp, list);
|
|
194
|
+
if (ql) return ql;
|
|
195
|
+
}
|
|
196
|
+
} catch (e) {
|
|
197
|
+
}
|
|
198
|
+
const htmlLang = document.documentElement.lang;
|
|
199
|
+
if (htmlLang) {
|
|
200
|
+
const hl = normalizeLocale(htmlLang, list);
|
|
201
|
+
if (hl) return hl;
|
|
202
|
+
}
|
|
203
|
+
const navLang = navigator.language || navigator.languages && navigator.languages[0] || "";
|
|
204
|
+
if (navLang) {
|
|
205
|
+
const nl = normalizeLocale(navLang, list);
|
|
206
|
+
if (nl) return nl;
|
|
207
|
+
}
|
|
208
|
+
return fallback;
|
|
209
|
+
};
|
|
210
|
+
var detectMainLang = ({ configMainLang, supported, defaultLocale }) => {
|
|
211
|
+
const list = supported || SUPPORTED_LOCALES;
|
|
212
|
+
const fallback = defaultLocale || "tr";
|
|
213
|
+
if (configMainLang) {
|
|
214
|
+
const ml = normalizeLocale(configMainLang, list);
|
|
215
|
+
if (ml) return ml;
|
|
216
|
+
}
|
|
217
|
+
const htmlLang = normalizeLocale(document.documentElement.lang, list);
|
|
218
|
+
if (htmlLang) return htmlLang;
|
|
219
|
+
return fallback;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
// src/i18n/translations/tr.js
|
|
223
|
+
var tr_default = {
|
|
224
|
+
title: "\xC7erez Tercihleri",
|
|
225
|
+
intro: "Bu site, deneyiminizi geli\u015Ftirmek i\xE7in \xE7erezler kullan\u0131r. Detaylar i\xE7in \xC7erez Politikam\u0131z\u0131 inceleyin.",
|
|
226
|
+
policyLink: "\xC7erez Politikas\u0131",
|
|
227
|
+
acceptAll: "T\xFCm\xFCn\xFC Kabul Et",
|
|
228
|
+
rejectAll: "T\xFCm\xFCn\xFC Reddet",
|
|
229
|
+
preferences: "Tercihler",
|
|
230
|
+
save: "Se\xE7imleri Kaydet",
|
|
231
|
+
close: "Kapat",
|
|
232
|
+
cat: {
|
|
233
|
+
essential: { title: "Zorunlu \xC7erezler", desc: "Sitenin temel i\u015Flevleri i\xE7in gerekli, devre d\u0131\u015F\u0131 b\u0131rak\u0131lamaz.", always: "Her zaman aktif" },
|
|
234
|
+
analytics: { title: "Analitik \xC7erezler", desc: "Anonim ziyaret istatistikleri toplama amac\u0131yla kullan\u0131l\u0131r." },
|
|
235
|
+
marketing: { title: "Pazarlama \xC7erezleri", desc: "Ki\u015Fiselle\u015Ftirilmi\u015F reklam ve yeniden hedefleme i\xE7in kullan\u0131l\u0131r." },
|
|
236
|
+
functional: { title: "Fonksiyonel \xC7erezler", desc: "Dil, tema, b\xF6lge gibi tercihlerinizi hat\u0131rlamak i\xE7in kullan\u0131l\u0131r." }
|
|
237
|
+
},
|
|
238
|
+
placeholder: {
|
|
239
|
+
title: "\u0130\xE7erik engellendi",
|
|
240
|
+
desc: "Bu i\xE7eri\u011Fi g\xF6rmek i\xE7in {category} \xE7erezlerine izin vermeniz gerekiyor.",
|
|
241
|
+
cta: "\u0130zin ver"
|
|
242
|
+
},
|
|
243
|
+
tabs: {
|
|
244
|
+
categories: "Kategoriler",
|
|
245
|
+
services: "Hizmetler",
|
|
246
|
+
about: "Hakk\u0131nda"
|
|
247
|
+
},
|
|
248
|
+
service: {
|
|
249
|
+
description: "A\xE7\u0131klama",
|
|
250
|
+
processor: "Veri \u0130\u015Fleyici",
|
|
251
|
+
address: "Adres",
|
|
252
|
+
dpo: "VKO \u0130leti\u015Fim",
|
|
253
|
+
purposes: "Ama\xE7lar",
|
|
254
|
+
technologies: "Kullan\u0131lan Teknolojiler",
|
|
255
|
+
dataCollected: "Toplanan Veriler",
|
|
256
|
+
legalBasis: "Hukuki Dayanak",
|
|
257
|
+
retention: "Saklama S\xFCresi",
|
|
258
|
+
transferCountries: "Aktar\u0131m \xDClkeleri",
|
|
259
|
+
privacyPolicy: "Gizlilik Politikas\u0131",
|
|
260
|
+
cookiePolicy: "\xC7erez Politikas\u0131",
|
|
261
|
+
legalBasisValues: {
|
|
262
|
+
consent: "A\xE7\u0131k R\u0131za (GDPR Madde 6/1-a)",
|
|
263
|
+
legitimate_interest: "Me\u015Fru Menfaat (GDPR Madde 6/1-f)"
|
|
264
|
+
},
|
|
265
|
+
noServices: "Bu site i\xE7in hen\xFCz hizmet yap\u0131land\u0131r\u0131lmam\u0131\u015F."
|
|
266
|
+
},
|
|
267
|
+
svcAbout: {
|
|
268
|
+
title: "Bu CMP Hakk\u0131nda",
|
|
269
|
+
description: "Bu web sitesi; GDPR, KVKK, CCPA ve di\u011Fer ge\xE7erli gizlilik mevzuatlar\u0131na uyum sa\u011Flamak amac\u0131yla r\u0131za tercihlerinizi y\xF6netmek i\xE7in Blakfy \xC7erez Y\xF6netim Platformu'nu (CMP) kullanmaktad\u0131r.",
|
|
270
|
+
version: "S\xFCr\xFCm",
|
|
271
|
+
learnMore: "blakfy.com'da daha fazla bilgi"
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// src/i18n/translations/en.js
|
|
276
|
+
var en_default = {
|
|
277
|
+
title: "Cookie Preferences",
|
|
278
|
+
intro: "This site uses cookies to enhance your experience. See our Cookie Policy for details.",
|
|
279
|
+
policyLink: "Cookie Policy",
|
|
280
|
+
acceptAll: "Accept All",
|
|
281
|
+
rejectAll: "Reject All",
|
|
282
|
+
preferences: "Preferences",
|
|
283
|
+
save: "Save Choices",
|
|
284
|
+
close: "Close",
|
|
285
|
+
cat: {
|
|
286
|
+
essential: { title: "Essential Cookies", desc: "Required for the site to function. Cannot be disabled.", always: "Always active" },
|
|
287
|
+
analytics: { title: "Analytics Cookies", desc: "Used to collect anonymous visit statistics." },
|
|
288
|
+
marketing: { title: "Marketing Cookies", desc: "Used for personalized advertising and retargeting." },
|
|
289
|
+
functional: { title: "Functional Cookies", desc: "Used to remember preferences like language, theme, region." }
|
|
290
|
+
},
|
|
291
|
+
placeholder: {
|
|
292
|
+
title: "Content blocked",
|
|
293
|
+
desc: "You need to allow {category} cookies to view this content.",
|
|
294
|
+
cta: "Allow"
|
|
295
|
+
},
|
|
296
|
+
tabs: {
|
|
297
|
+
categories: "Categories",
|
|
298
|
+
services: "Services",
|
|
299
|
+
about: "About"
|
|
300
|
+
},
|
|
301
|
+
service: {
|
|
302
|
+
description: "Description",
|
|
303
|
+
processor: "Data Processor",
|
|
304
|
+
address: "Address",
|
|
305
|
+
dpo: "DPO Contact",
|
|
306
|
+
purposes: "Purposes",
|
|
307
|
+
technologies: "Technologies Used",
|
|
308
|
+
dataCollected: "Data Collected",
|
|
309
|
+
legalBasis: "Legal Basis",
|
|
310
|
+
retention: "Retention Period",
|
|
311
|
+
transferCountries: "Transfer Countries",
|
|
312
|
+
privacyPolicy: "Privacy Policy",
|
|
313
|
+
cookiePolicy: "Cookie Policy",
|
|
314
|
+
legalBasisValues: {
|
|
315
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
316
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
317
|
+
},
|
|
318
|
+
noServices: "No services are configured for this site."
|
|
319
|
+
},
|
|
320
|
+
svcAbout: {
|
|
321
|
+
title: "About this CMP",
|
|
322
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
323
|
+
version: "Version",
|
|
324
|
+
learnMore: "Learn more at blakfy.com"
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// src/i18n/translations/ar.js
|
|
329
|
+
var ar_default = {
|
|
330
|
+
title: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637",
|
|
331
|
+
intro: "\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u062A\u062D\u0633\u064A\u0646 \u062A\u062C\u0631\u0628\u062A\u0643. \u0631\u0627\u062C\u0639 \u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644.",
|
|
332
|
+
policyLink: "\u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637",
|
|
333
|
+
acceptAll: "\u0642\u0628\u0648\u0644 \u0627\u0644\u0643\u0644",
|
|
334
|
+
rejectAll: "\u0631\u0641\u0636 \u0627\u0644\u0643\u0644",
|
|
335
|
+
preferences: "\u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A",
|
|
336
|
+
save: "\u062D\u0641\u0638 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A",
|
|
337
|
+
close: "\u0625\u063A\u0644\u0627\u0642",
|
|
338
|
+
cat: {
|
|
339
|
+
essential: { title: "\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629", desc: "\u0636\u0631\u0648\u0631\u064A\u0629 \u0644\u0639\u0645\u0644 \u0627\u0644\u0645\u0648\u0642\u0639. \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0639\u0637\u064A\u0644\u0647\u0627.", always: "\u0646\u0634\u0637 \u062F\u0627\u0626\u0645\u064B\u0627" },
|
|
340
|
+
analytics: { title: "\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u062D\u0644\u064A\u0644\u064A\u0629", desc: "\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062C\u0645\u0639 \u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A \u0627\u0644\u0632\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0647\u0648\u0644\u0629." },
|
|
341
|
+
marketing: { title: "\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u0633\u0648\u064A\u0642\u064A\u0629", desc: "\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u0644\u0625\u0639\u0644\u0627\u0646 \u0627\u0644\u0645\u062E\u0635\u0635 \u0648\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0627\u0633\u062A\u0647\u062F\u0627\u0641." },
|
|
342
|
+
functional: { title: "\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0648\u0638\u064A\u0641\u064A\u0629", desc: "\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062A\u0630\u0643\u0631 \u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u062B\u0644 \u0627\u0644\u0644\u063A\u0629 \u0648\u0627\u0644\u0633\u0645\u0629." }
|
|
343
|
+
},
|
|
344
|
+
placeholder: {
|
|
345
|
+
title: "\u062A\u0645 \u062D\u0638\u0631 \u0627\u0644\u0645\u062D\u062A\u0648\u0649",
|
|
346
|
+
desc: "\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0627\u0644\u0633\u0645\u0627\u062D \u0628\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0640 {category} \u0644\u0639\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u0645\u062D\u062A\u0648\u0649.",
|
|
347
|
+
cta: "\u0627\u0644\u0633\u0645\u0627\u062D"
|
|
348
|
+
},
|
|
349
|
+
tabs: {
|
|
350
|
+
categories: "Categories",
|
|
351
|
+
services: "Services",
|
|
352
|
+
about: "About"
|
|
353
|
+
},
|
|
354
|
+
service: {
|
|
355
|
+
description: "Description",
|
|
356
|
+
processor: "Data Processor",
|
|
357
|
+
address: "Address",
|
|
358
|
+
dpo: "DPO Contact",
|
|
359
|
+
purposes: "Purposes",
|
|
360
|
+
technologies: "Technologies Used",
|
|
361
|
+
dataCollected: "Data Collected",
|
|
362
|
+
legalBasis: "Legal Basis",
|
|
363
|
+
retention: "Retention Period",
|
|
364
|
+
transferCountries: "Transfer Countries",
|
|
365
|
+
privacyPolicy: "Privacy Policy",
|
|
366
|
+
cookiePolicy: "Cookie Policy",
|
|
367
|
+
legalBasisValues: {
|
|
368
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
369
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
370
|
+
},
|
|
371
|
+
noServices: "No services are configured for this site."
|
|
372
|
+
},
|
|
373
|
+
svcAbout: {
|
|
374
|
+
title: "About this CMP",
|
|
375
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
376
|
+
version: "Version",
|
|
377
|
+
learnMore: "Learn more at blakfy.com"
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
|
|
381
|
+
// src/i18n/translations/fa.js
|
|
382
|
+
var fa_default = {
|
|
383
|
+
title: "\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0648\u06A9\u06CC",
|
|
384
|
+
intro: "\u0627\u06CC\u0646 \u0633\u0627\u06CC\u062A \u0627\u0632 \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627 \u0628\u0631\u0627\u06CC \u0628\u0647\u0628\u0648\u062F \u062A\u062C\u0631\u0628\u0647 \u0634\u0645\u0627 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u06A9\u0646\u062F. \u0628\u0631\u0627\u06CC \u062C\u0632\u0626\u06CC\u0627\u062A \u0628\u06CC\u0634\u062A\u0631 \u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC \u0645\u0627 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06A9\u0646\u06CC\u062F.",
|
|
385
|
+
policyLink: "\u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC",
|
|
386
|
+
acceptAll: "\u067E\u0630\u06CC\u0631\u0634 \u0647\u0645\u0647",
|
|
387
|
+
rejectAll: "\u0631\u062F \u0647\u0645\u0647",
|
|
388
|
+
preferences: "\u062A\u0646\u0638\u06CC\u0645\u0627\u062A",
|
|
389
|
+
save: "\u0630\u062E\u06CC\u0631\u0647 \u0627\u0646\u062A\u062E\u0627\u0628\u200C\u0647\u0627",
|
|
390
|
+
close: "\u0628\u0633\u062A\u0646",
|
|
391
|
+
cat: {
|
|
392
|
+
essential: { title: "\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0636\u0631\u0648\u0631\u06CC", desc: "\u0628\u0631\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F \u0627\u0635\u0644\u06CC \u0633\u0627\u06CC\u062A \u0644\u0627\u0632\u0645 \u0627\u0633\u062A. \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u06A9\u0631\u062F\u0646 \u0622\u0646\u200C\u0647\u0627 \u0627\u0645\u06A9\u0627\u0646\u200C\u067E\u0630\u06CC\u0631 \u0646\u06CC\u0633\u062A.", always: "\u0647\u0645\u06CC\u0634\u0647 \u0641\u0639\u0627\u0644" },
|
|
393
|
+
analytics: { title: "\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u062A\u062D\u0644\u06CC\u0644\u06CC", desc: "\u0628\u0631\u0627\u06CC \u062C\u0645\u0639\u200C\u0622\u0648\u0631\u06CC \u0622\u0645\u0627\u0631 \u0646\u0627\u0634\u0646\u0627\u0633 \u0628\u0627\u0632\u062F\u06CC\u062F\u06A9\u0646\u0646\u062F\u06AF\u0627\u0646 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F." },
|
|
394
|
+
marketing: { title: "\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0628\u0627\u0632\u0627\u0631\u06CC\u0627\u0628\u06CC", desc: "\u0628\u0631\u0627\u06CC \u062A\u0628\u0644\u06CC\u063A\u0627\u062A \u0634\u062E\u0635\u06CC\u200C\u0633\u0627\u0632\u06CC\u200C\u0634\u062F\u0647 \u0648 \u0647\u062F\u0641\u200C\u06AF\u0630\u0627\u0631\u06CC \u0645\u062C\u062F\u062F \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F." },
|
|
395
|
+
functional: { title: "\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F\u06CC", desc: "\u0628\u0631\u0627\u06CC \u0628\u0647 \u06CC\u0627\u062F\u0622\u0648\u0631\u06CC \u062A\u0646\u0638\u06CC\u0645\u0627\u062A\u06CC \u0645\u0627\u0646\u0646\u062F \u0632\u0628\u0627\u0646 \u0648 \u067E\u0648\u0633\u062A\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F." }
|
|
396
|
+
},
|
|
397
|
+
placeholder: {
|
|
398
|
+
title: "\u0645\u062D\u062A\u0648\u0627 \u0645\u0633\u062F\u0648\u062F \u0634\u062F",
|
|
399
|
+
desc: "\u0628\u0631\u0627\u06CC \u0645\u0634\u0627\u0647\u062F\u0647 \u0627\u06CC\u0646 \u0645\u062D\u062A\u0648\u0627 \u0628\u0627\u06CC\u062F \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC {category} \u0631\u0627 \u0645\u062C\u0627\u0632 \u06A9\u0646\u06CC\u062F.",
|
|
400
|
+
cta: "\u0627\u062C\u0627\u0632\u0647 \u062F\u0627\u062F\u0646"
|
|
401
|
+
},
|
|
402
|
+
tabs: {
|
|
403
|
+
categories: "Categories",
|
|
404
|
+
services: "Services",
|
|
405
|
+
about: "About"
|
|
406
|
+
},
|
|
407
|
+
service: {
|
|
408
|
+
description: "Description",
|
|
409
|
+
processor: "Data Processor",
|
|
410
|
+
address: "Address",
|
|
411
|
+
dpo: "DPO Contact",
|
|
412
|
+
purposes: "Purposes",
|
|
413
|
+
technologies: "Technologies Used",
|
|
414
|
+
dataCollected: "Data Collected",
|
|
415
|
+
legalBasis: "Legal Basis",
|
|
416
|
+
retention: "Retention Period",
|
|
417
|
+
transferCountries: "Transfer Countries",
|
|
418
|
+
privacyPolicy: "Privacy Policy",
|
|
419
|
+
cookiePolicy: "Cookie Policy",
|
|
420
|
+
legalBasisValues: {
|
|
421
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
422
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
423
|
+
},
|
|
424
|
+
noServices: "No services are configured for this site."
|
|
425
|
+
},
|
|
426
|
+
svcAbout: {
|
|
427
|
+
title: "About this CMP",
|
|
428
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
429
|
+
version: "Version",
|
|
430
|
+
learnMore: "Learn more at blakfy.com"
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
// src/i18n/translations/ur.js
|
|
435
|
+
var ur_default = {
|
|
436
|
+
title: "\u06A9\u0648\u06A9\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A",
|
|
437
|
+
intro: "\u06CC\u06C1 \u0633\u0627\u0626\u0679 \u0622\u067E \u06A9\u06D2 \u062A\u062C\u0631\u0628\u06D2 \u06A9\u0648 \u0628\u06C1\u062A\u0631 \u0628\u0646\u0627\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u06A9\u0648\u06A9\u06CC\u0632 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u062A\u06CC \u06C1\u06D2\u06D4 \u062A\u0641\u0635\u06CC\u0644\u0627\u062A \u06A9\u06D2 \u0644\u06CC\u06D2 \u06C1\u0645\u0627\u0631\u06CC \u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC \u062F\u06CC\u06A9\u06BE\u06CC\u06BA\u06D4",
|
|
438
|
+
policyLink: "\u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC",
|
|
439
|
+
acceptAll: "\u0633\u0628 \u0642\u0628\u0648\u0644 \u06A9\u0631\u06CC\u06BA",
|
|
440
|
+
rejectAll: "\u0633\u0628 \u0645\u0633\u062A\u0631\u062F \u06A9\u0631\u06CC\u06BA",
|
|
441
|
+
preferences: "\u062A\u0631\u062C\u06CC\u062D\u0627\u062A",
|
|
442
|
+
save: "\u0627\u0646\u062A\u062E\u0627\u0628 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA",
|
|
443
|
+
close: "\u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA",
|
|
444
|
+
cat: {
|
|
445
|
+
essential: { title: "\u0636\u0631\u0648\u0631\u06CC \u06A9\u0648\u06A9\u06CC\u0632", desc: "\u0633\u0627\u0626\u0679 \u06A9\u06D2 \u0628\u0646\u06CC\u0627\u062F\u06CC \u0627\u0641\u0639\u0627\u0644 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0636\u0631\u0648\u0631\u06CC \u06C1\u06CC\u06BA\u06D4 \u063A\u06CC\u0631 \u0641\u0639\u0627\u0644 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC \u062C\u0627 \u0633\u06A9\u062A\u06CC\u06BA\u06D4", always: "\u06C1\u0645\u06CC\u0634\u06C1 \u0641\u0639\u0627\u0644" },
|
|
446
|
+
analytics: { title: "\u062A\u062C\u0632\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632", desc: "\u06AF\u0645\u0646\u0627\u0645 \u0648\u0632\u0679 \u06A9\u06D2 \u0627\u0639\u062F\u0627\u062F \u0648 \u0634\u0645\u0627\u0631 \u062C\u0645\u0639 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4" },
|
|
447
|
+
marketing: { title: "\u0645\u0627\u0631\u06A9\u06CC\u0679\u0646\u06AF \u06A9\u0648\u06A9\u06CC\u0632", desc: "\u0630\u0627\u062A\u06CC \u0646\u0648\u0639\u06CC\u062A \u06A9\u06CC \u0627\u0634\u062A\u06C1\u0627\u0631\u0628\u0627\u0632\u06CC \u0627\u0648\u0631 \u0631\u06CC \u0679\u0627\u0631\u06AF\u06CC\u0679\u0646\u06AF \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4" },
|
|
448
|
+
functional: { title: "\u0641\u0639\u0644\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632", desc: "\u0632\u0628\u0627\u0646 \u0627\u0648\u0631 \u062A\u06BE\u06CC\u0645 \u062C\u06CC\u0633\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A \u06CC\u0627\u062F \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4" }
|
|
449
|
+
},
|
|
450
|
+
placeholder: {
|
|
451
|
+
title: "\u0645\u0648\u0627\u062F \u0628\u0644\u0627\u06A9 \u06C1\u06D2",
|
|
452
|
+
desc: "\u0627\u0633 \u0645\u0648\u0627\u062F \u06A9\u0648 \u062F\u06CC\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0622\u067E \u06A9\u0648 {category} \u06A9\u0648\u06A9\u06CC\u0632 \u06A9\u06CC \u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u0646\u06CC \u06C1\u0648\u06AF\u06CC\u06D4",
|
|
453
|
+
cta: "\u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u06BA"
|
|
454
|
+
},
|
|
455
|
+
tabs: {
|
|
456
|
+
categories: "Categories",
|
|
457
|
+
services: "Services",
|
|
458
|
+
about: "About"
|
|
459
|
+
},
|
|
460
|
+
service: {
|
|
461
|
+
description: "Description",
|
|
462
|
+
processor: "Data Processor",
|
|
463
|
+
address: "Address",
|
|
464
|
+
dpo: "DPO Contact",
|
|
465
|
+
purposes: "Purposes",
|
|
466
|
+
technologies: "Technologies Used",
|
|
467
|
+
dataCollected: "Data Collected",
|
|
468
|
+
legalBasis: "Legal Basis",
|
|
469
|
+
retention: "Retention Period",
|
|
470
|
+
transferCountries: "Transfer Countries",
|
|
471
|
+
privacyPolicy: "Privacy Policy",
|
|
472
|
+
cookiePolicy: "Cookie Policy",
|
|
473
|
+
legalBasisValues: {
|
|
474
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
475
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
476
|
+
},
|
|
477
|
+
noServices: "No services are configured for this site."
|
|
478
|
+
},
|
|
479
|
+
svcAbout: {
|
|
480
|
+
title: "About this CMP",
|
|
481
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
482
|
+
version: "Version",
|
|
483
|
+
learnMore: "Learn more at blakfy.com"
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
// src/i18n/translations/fr.js
|
|
488
|
+
var fr_default = {
|
|
489
|
+
title: "Pr\xE9f\xE9rences des Cookies",
|
|
490
|
+
intro: "Ce site utilise des cookies pour am\xE9liorer votre exp\xE9rience. Consultez notre Politique de Cookies pour plus de d\xE9tails.",
|
|
491
|
+
policyLink: "Politique de Cookies",
|
|
492
|
+
acceptAll: "Tout Accepter",
|
|
493
|
+
rejectAll: "Tout Refuser",
|
|
494
|
+
preferences: "Pr\xE9f\xE9rences",
|
|
495
|
+
save: "Enregistrer",
|
|
496
|
+
close: "Fermer",
|
|
497
|
+
cat: {
|
|
498
|
+
essential: { title: "Cookies Essentiels", desc: "N\xE9cessaires au fonctionnement du site. Ne peuvent pas \xEAtre d\xE9sactiv\xE9s.", always: "Toujours actif" },
|
|
499
|
+
analytics: { title: "Cookies Analytiques", desc: "Utilis\xE9s pour collecter des statistiques de visite anonymes." },
|
|
500
|
+
marketing: { title: "Cookies Marketing", desc: "Utilis\xE9s pour la publicit\xE9 personnalis\xE9e et le reciblage." },
|
|
501
|
+
functional: { title: "Cookies Fonctionnels", desc: "Utilis\xE9s pour m\xE9moriser vos pr\xE9f\xE9rences." }
|
|
502
|
+
},
|
|
503
|
+
placeholder: {
|
|
504
|
+
title: "Contenu bloqu\xE9",
|
|
505
|
+
desc: "Vous devez autoriser les cookies {category} pour voir ce contenu.",
|
|
506
|
+
cta: "Autoriser"
|
|
507
|
+
},
|
|
508
|
+
tabs: {
|
|
509
|
+
categories: "Categories",
|
|
510
|
+
services: "Services",
|
|
511
|
+
about: "About"
|
|
512
|
+
},
|
|
513
|
+
service: {
|
|
514
|
+
description: "Description",
|
|
515
|
+
processor: "Data Processor",
|
|
516
|
+
address: "Address",
|
|
517
|
+
dpo: "DPO Contact",
|
|
518
|
+
purposes: "Purposes",
|
|
519
|
+
technologies: "Technologies Used",
|
|
520
|
+
dataCollected: "Data Collected",
|
|
521
|
+
legalBasis: "Legal Basis",
|
|
522
|
+
retention: "Retention Period",
|
|
523
|
+
transferCountries: "Transfer Countries",
|
|
524
|
+
privacyPolicy: "Privacy Policy",
|
|
525
|
+
cookiePolicy: "Cookie Policy",
|
|
526
|
+
legalBasisValues: {
|
|
527
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
528
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
529
|
+
},
|
|
530
|
+
noServices: "No services are configured for this site."
|
|
531
|
+
},
|
|
532
|
+
svcAbout: {
|
|
533
|
+
title: "About this CMP",
|
|
534
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
535
|
+
version: "Version",
|
|
536
|
+
learnMore: "Learn more at blakfy.com"
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
// src/i18n/translations/ru.js
|
|
541
|
+
var ru_default = {
|
|
542
|
+
title: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 cookie",
|
|
543
|
+
intro: "\u042D\u0442\u043E\u0442 \u0441\u0430\u0439\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0444\u0430\u0439\u043B\u044B cookie \u0434\u043B\u044F \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u043E\u043F\u044B\u0442\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0432 \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F cookie.",
|
|
544
|
+
policyLink: "\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 cookie",
|
|
545
|
+
acceptAll: "\u041F\u0440\u0438\u043D\u044F\u0442\u044C \u0432\u0441\u0435",
|
|
546
|
+
rejectAll: "\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C \u0432\u0441\u0435",
|
|
547
|
+
preferences: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
|
|
548
|
+
save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440",
|
|
549
|
+
close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
|
|
550
|
+
cat: {
|
|
551
|
+
essential: { title: "\u041E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B cookie", desc: "\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441\u0430\u0439\u0442\u0430. \u041D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u044B.", always: "\u0412\u0441\u0435\u0433\u0434\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u044B" },
|
|
552
|
+
analytics: { title: "\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 cookie", desc: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0441\u0431\u043E\u0440\u0430 \u0430\u043D\u043E\u043D\u0438\u043C\u043D\u043E\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u043F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439." },
|
|
553
|
+
marketing: { title: "\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u044B\u0435 cookie", desc: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u0440\u0435\u043A\u043B\u0430\u043C\u044B \u0438 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0430." },
|
|
554
|
+
functional: { title: "\u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 cookie", desc: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0432\u0430\u0448\u0438\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0435\u043D\u0438\u0439." }
|
|
555
|
+
},
|
|
556
|
+
placeholder: {
|
|
557
|
+
title: "\u041A\u043E\u043D\u0442\u0435\u043D\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D",
|
|
558
|
+
desc: "\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043D\u0442\u0435\u043D\u0442, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 {category}.",
|
|
559
|
+
cta: "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C"
|
|
560
|
+
},
|
|
561
|
+
tabs: {
|
|
562
|
+
categories: "Categories",
|
|
563
|
+
services: "Services",
|
|
564
|
+
about: "About"
|
|
565
|
+
},
|
|
566
|
+
service: {
|
|
567
|
+
description: "Description",
|
|
568
|
+
processor: "Data Processor",
|
|
569
|
+
address: "Address",
|
|
570
|
+
dpo: "DPO Contact",
|
|
571
|
+
purposes: "Purposes",
|
|
572
|
+
technologies: "Technologies Used",
|
|
573
|
+
dataCollected: "Data Collected",
|
|
574
|
+
legalBasis: "Legal Basis",
|
|
575
|
+
retention: "Retention Period",
|
|
576
|
+
transferCountries: "Transfer Countries",
|
|
577
|
+
privacyPolicy: "Privacy Policy",
|
|
578
|
+
cookiePolicy: "Cookie Policy",
|
|
579
|
+
legalBasisValues: {
|
|
580
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
581
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
582
|
+
},
|
|
583
|
+
noServices: "No services are configured for this site."
|
|
584
|
+
},
|
|
585
|
+
svcAbout: {
|
|
586
|
+
title: "About this CMP",
|
|
587
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
588
|
+
version: "Version",
|
|
589
|
+
learnMore: "Learn more at blakfy.com"
|
|
590
|
+
}
|
|
591
|
+
};
|
|
592
|
+
|
|
593
|
+
// src/i18n/translations/de.js
|
|
594
|
+
var de_default = {
|
|
595
|
+
title: "Cookie-Einstellungen",
|
|
596
|
+
intro: "Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Weitere Informationen in unserer Cookie-Richtlinie.",
|
|
597
|
+
policyLink: "Cookie-Richtlinie",
|
|
598
|
+
acceptAll: "Alle akzeptieren",
|
|
599
|
+
rejectAll: "Alle ablehnen",
|
|
600
|
+
preferences: "Einstellungen",
|
|
601
|
+
save: "Auswahl speichern",
|
|
602
|
+
close: "Schlie\xDFen",
|
|
603
|
+
cat: {
|
|
604
|
+
essential: { title: "Notwendige Cookies", desc: "F\xFCr die Grundfunktionen der Website erforderlich. K\xF6nnen nicht deaktiviert werden.", always: "Immer aktiv" },
|
|
605
|
+
analytics: { title: "Analyse-Cookies", desc: "Werden verwendet, um anonyme Besuchsstatistiken zu sammeln." },
|
|
606
|
+
marketing: { title: "Marketing-Cookies", desc: "Werden f\xFCr personalisierte Werbung und Retargeting verwendet." },
|
|
607
|
+
functional: { title: "Funktionale Cookies", desc: "Werden verwendet, um Einstellungen wie Sprache und Theme zu speichern." }
|
|
608
|
+
},
|
|
609
|
+
placeholder: {
|
|
610
|
+
title: "Inhalt blockiert",
|
|
611
|
+
desc: "Sie m\xFCssen {category}-Cookies erlauben, um diesen Inhalt anzuzeigen.",
|
|
612
|
+
cta: "Erlauben"
|
|
613
|
+
},
|
|
614
|
+
tabs: {
|
|
615
|
+
categories: "Categories",
|
|
616
|
+
services: "Services",
|
|
617
|
+
about: "About"
|
|
618
|
+
},
|
|
619
|
+
service: {
|
|
620
|
+
description: "Description",
|
|
621
|
+
processor: "Data Processor",
|
|
622
|
+
address: "Address",
|
|
623
|
+
dpo: "DPO Contact",
|
|
624
|
+
purposes: "Purposes",
|
|
625
|
+
technologies: "Technologies Used",
|
|
626
|
+
dataCollected: "Data Collected",
|
|
627
|
+
legalBasis: "Legal Basis",
|
|
628
|
+
retention: "Retention Period",
|
|
629
|
+
transferCountries: "Transfer Countries",
|
|
630
|
+
privacyPolicy: "Privacy Policy",
|
|
631
|
+
cookiePolicy: "Cookie Policy",
|
|
632
|
+
legalBasisValues: {
|
|
633
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
634
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
635
|
+
},
|
|
636
|
+
noServices: "No services are configured for this site."
|
|
637
|
+
},
|
|
638
|
+
svcAbout: {
|
|
639
|
+
title: "About this CMP",
|
|
640
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
641
|
+
version: "Version",
|
|
642
|
+
learnMore: "Learn more at blakfy.com"
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
|
|
646
|
+
// src/i18n/translations/he.js
|
|
647
|
+
var he_default = {
|
|
648
|
+
title: "\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA",
|
|
649
|
+
intro: "\u05D0\u05EA\u05E8 \u05D6\u05D4 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05DC\u05E9\u05D9\u05E4\u05D5\u05E8 \u05D7\u05D5\u05D5\u05D9\u05EA\u05DA. \u05E8\u05D0\u05D4 \u05D0\u05EA \u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05D4\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05DC\u05E0\u05D5 \u05DC\u05E4\u05E8\u05D8\u05D9\u05DD.",
|
|
650
|
+
policyLink: "\u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA",
|
|
651
|
+
acceptAll: "\u05E7\u05D1\u05DC \u05D4\u05DB\u05DC",
|
|
652
|
+
rejectAll: "\u05D3\u05D7\u05D4 \u05D4\u05DB\u05DC",
|
|
653
|
+
preferences: "\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA",
|
|
654
|
+
save: "\u05E9\u05DE\u05D5\u05E8 \u05D1\u05D7\u05D9\u05E8\u05D5\u05EA",
|
|
655
|
+
close: "\u05E1\u05D2\u05D5\u05E8",
|
|
656
|
+
cat: {
|
|
657
|
+
essential: { title: "\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05D7\u05D9\u05D5\u05E0\u05D9\u05D5\u05EA", desc: "\u05E0\u05D3\u05E8\u05E9\u05D5\u05EA \u05DC\u05EA\u05E4\u05E7\u05D5\u05D3 \u05D4\u05D0\u05EA\u05E8. \u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05DC\u05D4\u05E9\u05D1\u05D9\u05EA.", always: "\u05E4\u05E2\u05D9\u05DC \u05EA\u05DE\u05D9\u05D3" },
|
|
658
|
+
analytics: { title: "\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E0\u05D9\u05EA\u05D5\u05D7", desc: "\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D0\u05D9\u05E1\u05D5\u05E3 \u05E1\u05D8\u05D8\u05D9\u05E1\u05D8\u05D9\u05E7\u05D5\u05EA \u05D1\u05D9\u05E7\u05D5\u05E8 \u05D0\u05E0\u05D5\u05E0\u05D9\u05DE\u05D9\u05D5\u05EA." },
|
|
659
|
+
marketing: { title: "\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05D9\u05D5\u05D5\u05E7", desc: "\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05E4\u05E8\u05E1\u05D5\u05DD \u05DE\u05D5\u05EA\u05D0\u05DD \u05D0\u05D9\u05E9\u05D9\u05EA \u05D5\u05E8\u05D9\u05DE\u05E8\u05E7\u05D8\u05D9\u05E0\u05D2." },
|
|
660
|
+
functional: { title: "\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D5\u05E0\u05DC\u05D9\u05D5\u05EA", desc: "\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D6\u05DB\u05D9\u05E8\u05EA \u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05DB\u05DE\u05D5 \u05E9\u05E4\u05D4 \u05D5\u05E2\u05D9\u05E6\u05D5\u05D1." }
|
|
661
|
+
},
|
|
662
|
+
placeholder: {
|
|
663
|
+
title: "\u05D4\u05EA\u05D5\u05DB\u05DF \u05D7\u05E1\u05D5\u05DD",
|
|
664
|
+
desc: "\u05E2\u05DC\u05D9\u05DA \u05DC\u05D0\u05E9\u05E8 \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA {category} \u05DB\u05D3\u05D9 \u05DC\u05E6\u05E4\u05D5\u05EA \u05D1\u05EA\u05D5\u05DB\u05DF \u05D6\u05D4.",
|
|
665
|
+
cta: "\u05D0\u05E4\u05E9\u05E8"
|
|
666
|
+
},
|
|
667
|
+
tabs: {
|
|
668
|
+
categories: "Categories",
|
|
669
|
+
services: "Services",
|
|
670
|
+
about: "About"
|
|
671
|
+
},
|
|
672
|
+
service: {
|
|
673
|
+
description: "Description",
|
|
674
|
+
processor: "Data Processor",
|
|
675
|
+
address: "Address",
|
|
676
|
+
dpo: "DPO Contact",
|
|
677
|
+
purposes: "Purposes",
|
|
678
|
+
technologies: "Technologies Used",
|
|
679
|
+
dataCollected: "Data Collected",
|
|
680
|
+
legalBasis: "Legal Basis",
|
|
681
|
+
retention: "Retention Period",
|
|
682
|
+
transferCountries: "Transfer Countries",
|
|
683
|
+
privacyPolicy: "Privacy Policy",
|
|
684
|
+
cookiePolicy: "Cookie Policy",
|
|
685
|
+
legalBasisValues: {
|
|
686
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
687
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
688
|
+
},
|
|
689
|
+
noServices: "No services are configured for this site."
|
|
690
|
+
},
|
|
691
|
+
svcAbout: {
|
|
692
|
+
title: "About this CMP",
|
|
693
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
694
|
+
version: "Version",
|
|
695
|
+
learnMore: "Learn more at blakfy.com"
|
|
696
|
+
}
|
|
697
|
+
};
|
|
698
|
+
|
|
699
|
+
// src/i18n/translations/uk.js
|
|
700
|
+
var uk_default = {
|
|
701
|
+
title: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 cookie",
|
|
702
|
+
intro: "\u0426\u0435\u0439 \u0441\u0430\u0439\u0442 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0444\u0430\u0439\u043B\u0438 cookie \u0434\u043B\u044F \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u0433\u043E \u0434\u043E\u0441\u0432\u0456\u0434\u0443. \u0414\u0438\u0432\u0456\u0442\u044C\u0441\u044F \u043D\u0430\u0448\u0443 \u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0443 cookie.",
|
|
703
|
+
policyLink: "\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430 cookie",
|
|
704
|
+
acceptAll: "\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438 \u0432\u0441\u0456",
|
|
705
|
+
rejectAll: "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438 \u0432\u0441\u0456",
|
|
706
|
+
preferences: "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F",
|
|
707
|
+
save: "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0432\u0438\u0431\u0456\u0440",
|
|
708
|
+
close: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438",
|
|
709
|
+
cat: {
|
|
710
|
+
essential: { title: "\u041E\u0431\u043E\u0432'\u044F\u0437\u043A\u043E\u0432\u0456 cookie", desc: "\u041D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0456 \u0434\u043B\u044F \u0440\u043E\u0431\u043E\u0442\u0438 \u0441\u0430\u0439\u0442\u0443. \u041D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0456.", always: "\u0417\u0430\u0432\u0436\u0434\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u0456" },
|
|
711
|
+
analytics: { title: "\u0410\u043D\u0430\u043B\u0456\u0442\u0438\u0447\u043D\u0456 cookie", desc: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0431\u043E\u0440\u0443 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u043E\u0457 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0432\u0456\u0434\u0432\u0456\u0434\u0443\u0432\u0430\u043D\u044C." },
|
|
712
|
+
marketing: { title: "\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u0456 cookie", desc: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u043E\u0457 \u0440\u0435\u043A\u043B\u0430\u043C\u0438 \u0442\u0430 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0443." },
|
|
713
|
+
functional: { title: "\u0424\u0443\u043D\u043A\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 cookie", desc: "\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u0430\u043C'\u044F\u0442\u043E\u0432\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u043C\u043E\u0432\u0438, \u0442\u0435\u043C\u0438 \u0442\u043E\u0449\u043E." }
|
|
714
|
+
},
|
|
715
|
+
placeholder: {
|
|
716
|
+
title: "\u0412\u043C\u0456\u0441\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E",
|
|
717
|
+
desc: "\u0429\u043E\u0431 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0446\u0435\u0439 \u0432\u043C\u0456\u0441\u0442, \u0434\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0444\u0430\u0439\u043B\u0438 cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u0457 {category}.",
|
|
718
|
+
cta: "\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438"
|
|
719
|
+
},
|
|
720
|
+
tabs: {
|
|
721
|
+
categories: "Categories",
|
|
722
|
+
services: "Services",
|
|
723
|
+
about: "About"
|
|
724
|
+
},
|
|
725
|
+
service: {
|
|
726
|
+
description: "Description",
|
|
727
|
+
processor: "Data Processor",
|
|
728
|
+
address: "Address",
|
|
729
|
+
dpo: "DPO Contact",
|
|
730
|
+
purposes: "Purposes",
|
|
731
|
+
technologies: "Technologies Used",
|
|
732
|
+
dataCollected: "Data Collected",
|
|
733
|
+
legalBasis: "Legal Basis",
|
|
734
|
+
retention: "Retention Period",
|
|
735
|
+
transferCountries: "Transfer Countries",
|
|
736
|
+
privacyPolicy: "Privacy Policy",
|
|
737
|
+
cookiePolicy: "Cookie Policy",
|
|
738
|
+
legalBasisValues: {
|
|
739
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
740
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
741
|
+
},
|
|
742
|
+
noServices: "No services are configured for this site."
|
|
743
|
+
},
|
|
744
|
+
svcAbout: {
|
|
745
|
+
title: "About this CMP",
|
|
746
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
747
|
+
version: "Version",
|
|
748
|
+
learnMore: "Learn more at blakfy.com"
|
|
749
|
+
}
|
|
750
|
+
};
|
|
751
|
+
|
|
752
|
+
// src/i18n/translations/es.js
|
|
753
|
+
var es_default = {
|
|
754
|
+
title: "Preferencias de Cookies",
|
|
755
|
+
intro: "Este sitio usa cookies para mejorar tu experiencia. Consulta nuestra Pol\xEDtica de Cookies.",
|
|
756
|
+
policyLink: "Pol\xEDtica de Cookies",
|
|
757
|
+
acceptAll: "Aceptar todo",
|
|
758
|
+
rejectAll: "Rechazar todo",
|
|
759
|
+
preferences: "Preferencias",
|
|
760
|
+
save: "Guardar opciones",
|
|
761
|
+
close: "Cerrar",
|
|
762
|
+
cat: {
|
|
763
|
+
essential: { title: "Cookies esenciales", desc: "Necesarias para el funcionamiento del sitio. No se pueden desactivar.", always: "Siempre activo" },
|
|
764
|
+
analytics: { title: "Cookies anal\xEDticas", desc: "Usadas para recopilar estad\xEDsticas de visita an\xF3nimas." },
|
|
765
|
+
marketing: { title: "Cookies de marketing", desc: "Usadas para publicidad personalizada y retargeting." },
|
|
766
|
+
functional: { title: "Cookies funcionales", desc: "Usadas para recordar preferencias como idioma o tema." }
|
|
767
|
+
},
|
|
768
|
+
placeholder: {
|
|
769
|
+
title: "Contenido bloqueado",
|
|
770
|
+
desc: "Necesitas permitir las cookies de {category} para ver este contenido.",
|
|
771
|
+
cta: "Permitir"
|
|
772
|
+
},
|
|
773
|
+
tabs: {
|
|
774
|
+
categories: "Categories",
|
|
775
|
+
services: "Services",
|
|
776
|
+
about: "About"
|
|
777
|
+
},
|
|
778
|
+
service: {
|
|
779
|
+
description: "Description",
|
|
780
|
+
processor: "Data Processor",
|
|
781
|
+
address: "Address",
|
|
782
|
+
dpo: "DPO Contact",
|
|
783
|
+
purposes: "Purposes",
|
|
784
|
+
technologies: "Technologies Used",
|
|
785
|
+
dataCollected: "Data Collected",
|
|
786
|
+
legalBasis: "Legal Basis",
|
|
787
|
+
retention: "Retention Period",
|
|
788
|
+
transferCountries: "Transfer Countries",
|
|
789
|
+
privacyPolicy: "Privacy Policy",
|
|
790
|
+
cookiePolicy: "Cookie Policy",
|
|
791
|
+
legalBasisValues: {
|
|
792
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
793
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
794
|
+
},
|
|
795
|
+
noServices: "No services are configured for this site."
|
|
796
|
+
},
|
|
797
|
+
svcAbout: {
|
|
798
|
+
title: "About this CMP",
|
|
799
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
800
|
+
version: "Version",
|
|
801
|
+
learnMore: "Learn more at blakfy.com"
|
|
802
|
+
}
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
// src/i18n/translations/it.js
|
|
806
|
+
var it_default = {
|
|
807
|
+
title: "Preferenze Cookie",
|
|
808
|
+
intro: "Questo sito usa i cookie per migliorare la tua esperienza. Consulta la nostra Informativa sui Cookie.",
|
|
809
|
+
policyLink: "Informativa sui Cookie",
|
|
810
|
+
acceptAll: "Accetta tutti",
|
|
811
|
+
rejectAll: "Rifiuta tutti",
|
|
812
|
+
preferences: "Preferenze",
|
|
813
|
+
save: "Salva scelte",
|
|
814
|
+
close: "Chiudi",
|
|
815
|
+
cat: {
|
|
816
|
+
essential: { title: "Cookie essenziali", desc: "Necessari per il funzionamento del sito. Non disattivabili.", always: "Sempre attivo" },
|
|
817
|
+
analytics: { title: "Cookie analitici", desc: "Usati per raccogliere statistiche di visita anonime." },
|
|
818
|
+
marketing: { title: "Cookie di marketing", desc: "Usati per pubblicit\xE0 personalizzata e retargeting." },
|
|
819
|
+
functional: { title: "Cookie funzionali", desc: "Usati per ricordare preferenze come lingua e tema." }
|
|
820
|
+
},
|
|
821
|
+
placeholder: {
|
|
822
|
+
title: "Contenuto bloccato",
|
|
823
|
+
desc: "Devi consentire i cookie {category} per visualizzare questo contenuto.",
|
|
824
|
+
cta: "Consenti"
|
|
825
|
+
},
|
|
826
|
+
tabs: {
|
|
827
|
+
categories: "Categories",
|
|
828
|
+
services: "Services",
|
|
829
|
+
about: "About"
|
|
830
|
+
},
|
|
831
|
+
service: {
|
|
832
|
+
description: "Description",
|
|
833
|
+
processor: "Data Processor",
|
|
834
|
+
address: "Address",
|
|
835
|
+
dpo: "DPO Contact",
|
|
836
|
+
purposes: "Purposes",
|
|
837
|
+
technologies: "Technologies Used",
|
|
838
|
+
dataCollected: "Data Collected",
|
|
839
|
+
legalBasis: "Legal Basis",
|
|
840
|
+
retention: "Retention Period",
|
|
841
|
+
transferCountries: "Transfer Countries",
|
|
842
|
+
privacyPolicy: "Privacy Policy",
|
|
843
|
+
cookiePolicy: "Cookie Policy",
|
|
844
|
+
legalBasisValues: {
|
|
845
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
846
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
847
|
+
},
|
|
848
|
+
noServices: "No services are configured for this site."
|
|
849
|
+
},
|
|
850
|
+
svcAbout: {
|
|
851
|
+
title: "About this CMP",
|
|
852
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
853
|
+
version: "Version",
|
|
854
|
+
learnMore: "Learn more at blakfy.com"
|
|
855
|
+
}
|
|
856
|
+
};
|
|
857
|
+
|
|
858
|
+
// src/i18n/translations/pt.js
|
|
859
|
+
var pt_default = {
|
|
860
|
+
title: "Prefer\xEAncias de Cookies",
|
|
861
|
+
intro: "Este site usa cookies para melhorar sua experi\xEAncia. Consulte nossa Pol\xEDtica de Cookies.",
|
|
862
|
+
policyLink: "Pol\xEDtica de Cookies",
|
|
863
|
+
acceptAll: "Aceitar todos",
|
|
864
|
+
rejectAll: "Rejeitar todos",
|
|
865
|
+
preferences: "Prefer\xEAncias",
|
|
866
|
+
save: "Salvar escolhas",
|
|
867
|
+
close: "Fechar",
|
|
868
|
+
cat: {
|
|
869
|
+
essential: { title: "Cookies essenciais", desc: "Necess\xE1rios para o funcionamento do site. N\xE3o podem ser desativados.", always: "Sempre ativo" },
|
|
870
|
+
analytics: { title: "Cookies anal\xEDticos", desc: "Usados para coletar estat\xEDsticas an\xF4nimas de visitas." },
|
|
871
|
+
marketing: { title: "Cookies de marketing", desc: "Usados para publicidade personalizada e retargeting." },
|
|
872
|
+
functional: { title: "Cookies funcionais", desc: "Usados para lembrar prefer\xEAncias como idioma e tema." }
|
|
873
|
+
},
|
|
874
|
+
placeholder: {
|
|
875
|
+
title: "Conte\xFAdo bloqueado",
|
|
876
|
+
desc: "Voc\xEA precisa permitir cookies de {category} para ver este conte\xFAdo.",
|
|
877
|
+
cta: "Permitir"
|
|
878
|
+
},
|
|
879
|
+
tabs: {
|
|
880
|
+
categories: "Categories",
|
|
881
|
+
services: "Services",
|
|
882
|
+
about: "About"
|
|
883
|
+
},
|
|
884
|
+
service: {
|
|
885
|
+
description: "Description",
|
|
886
|
+
processor: "Data Processor",
|
|
887
|
+
address: "Address",
|
|
888
|
+
dpo: "DPO Contact",
|
|
889
|
+
purposes: "Purposes",
|
|
890
|
+
technologies: "Technologies Used",
|
|
891
|
+
dataCollected: "Data Collected",
|
|
892
|
+
legalBasis: "Legal Basis",
|
|
893
|
+
retention: "Retention Period",
|
|
894
|
+
transferCountries: "Transfer Countries",
|
|
895
|
+
privacyPolicy: "Privacy Policy",
|
|
896
|
+
cookiePolicy: "Cookie Policy",
|
|
897
|
+
legalBasisValues: {
|
|
898
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
899
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
900
|
+
},
|
|
901
|
+
noServices: "No services are configured for this site."
|
|
902
|
+
},
|
|
903
|
+
svcAbout: {
|
|
904
|
+
title: "About this CMP",
|
|
905
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
906
|
+
version: "Version",
|
|
907
|
+
learnMore: "Learn more at blakfy.com"
|
|
908
|
+
}
|
|
909
|
+
};
|
|
910
|
+
|
|
911
|
+
// src/i18n/translations/nl.js
|
|
912
|
+
var nl_default = {
|
|
913
|
+
title: "Cookie-voorkeuren",
|
|
914
|
+
intro: "Deze site gebruikt cookies om uw ervaring te verbeteren. Zie ons Cookiebeleid voor details.",
|
|
915
|
+
policyLink: "Cookiebeleid",
|
|
916
|
+
acceptAll: "Alles accepteren",
|
|
917
|
+
rejectAll: "Alles weigeren",
|
|
918
|
+
preferences: "Voorkeuren",
|
|
919
|
+
save: "Keuzes opslaan",
|
|
920
|
+
close: "Sluiten",
|
|
921
|
+
cat: {
|
|
922
|
+
essential: { title: "Essenti\xEBle cookies", desc: "Noodzakelijk voor het functioneren van de site. Kunnen niet worden uitgeschakeld.", always: "Altijd actief" },
|
|
923
|
+
analytics: { title: "Analytische cookies", desc: "Gebruikt voor het verzamelen van anonieme bezoekstatistieken." },
|
|
924
|
+
marketing: { title: "Marketingcookies", desc: "Gebruikt voor gepersonaliseerde advertenties en retargeting." },
|
|
925
|
+
functional: { title: "Functionele cookies", desc: "Gebruikt om voorkeuren zoals taal en thema te onthouden." }
|
|
926
|
+
},
|
|
927
|
+
placeholder: {
|
|
928
|
+
title: "Inhoud geblokkeerd",
|
|
929
|
+
desc: "U moet {category}-cookies toestaan om deze inhoud te bekijken.",
|
|
930
|
+
cta: "Toestaan"
|
|
931
|
+
},
|
|
932
|
+
tabs: {
|
|
933
|
+
categories: "Categories",
|
|
934
|
+
services: "Services",
|
|
935
|
+
about: "About"
|
|
936
|
+
},
|
|
937
|
+
service: {
|
|
938
|
+
description: "Description",
|
|
939
|
+
processor: "Data Processor",
|
|
940
|
+
address: "Address",
|
|
941
|
+
dpo: "DPO Contact",
|
|
942
|
+
purposes: "Purposes",
|
|
943
|
+
technologies: "Technologies Used",
|
|
944
|
+
dataCollected: "Data Collected",
|
|
945
|
+
legalBasis: "Legal Basis",
|
|
946
|
+
retention: "Retention Period",
|
|
947
|
+
transferCountries: "Transfer Countries",
|
|
948
|
+
privacyPolicy: "Privacy Policy",
|
|
949
|
+
cookiePolicy: "Cookie Policy",
|
|
950
|
+
legalBasisValues: {
|
|
951
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
952
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
953
|
+
},
|
|
954
|
+
noServices: "No services are configured for this site."
|
|
955
|
+
},
|
|
956
|
+
svcAbout: {
|
|
957
|
+
title: "About this CMP",
|
|
958
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
959
|
+
version: "Version",
|
|
960
|
+
learnMore: "Learn more at blakfy.com"
|
|
961
|
+
}
|
|
962
|
+
};
|
|
963
|
+
|
|
964
|
+
// src/i18n/translations/pl.js
|
|
965
|
+
var pl_default = {
|
|
966
|
+
title: "Preferencje plik\xF3w cookie",
|
|
967
|
+
intro: "Ta strona u\u017Cywa plik\xF3w cookie, aby poprawi\u0107 Twoje do\u015Bwiadczenia. Zobacz nasz\u0105 Polityk\u0119 plik\xF3w cookie.",
|
|
968
|
+
policyLink: "Polityka plik\xF3w cookie",
|
|
969
|
+
acceptAll: "Akceptuj wszystkie",
|
|
970
|
+
rejectAll: "Odrzu\u0107 wszystkie",
|
|
971
|
+
preferences: "Preferencje",
|
|
972
|
+
save: "Zapisz wybory",
|
|
973
|
+
close: "Zamknij",
|
|
974
|
+
cat: {
|
|
975
|
+
essential: { title: "Niezb\u0119dne pliki cookie", desc: "Wymagane do dzia\u0142ania strony. Nie mo\u017Cna ich wy\u0142\u0105czy\u0107.", always: "Zawsze aktywne" },
|
|
976
|
+
analytics: { title: "Analityczne pliki cookie", desc: "U\u017Cywane do zbierania anonimowych statystyk odwiedzin." },
|
|
977
|
+
marketing: { title: "Marketingowe pliki cookie", desc: "U\u017Cywane do spersonalizowanych reklam i retargetingu." },
|
|
978
|
+
functional: { title: "Funkcjonalne pliki cookie", desc: "U\u017Cywane do zapami\u0119tywania preferencji takich jak j\u0119zyk i motyw." }
|
|
979
|
+
},
|
|
980
|
+
placeholder: {
|
|
981
|
+
title: "Tre\u015B\u0107 zablokowana",
|
|
982
|
+
desc: "Musisz zezwoli\u0107 na pliki cookie {category}, aby wy\u015Bwietli\u0107 t\u0119 tre\u015B\u0107.",
|
|
983
|
+
cta: "Zezw\xF3l"
|
|
984
|
+
},
|
|
985
|
+
tabs: {
|
|
986
|
+
categories: "Categories",
|
|
987
|
+
services: "Services",
|
|
988
|
+
about: "About"
|
|
989
|
+
},
|
|
990
|
+
service: {
|
|
991
|
+
description: "Description",
|
|
992
|
+
processor: "Data Processor",
|
|
993
|
+
address: "Address",
|
|
994
|
+
dpo: "DPO Contact",
|
|
995
|
+
purposes: "Purposes",
|
|
996
|
+
technologies: "Technologies Used",
|
|
997
|
+
dataCollected: "Data Collected",
|
|
998
|
+
legalBasis: "Legal Basis",
|
|
999
|
+
retention: "Retention Period",
|
|
1000
|
+
transferCountries: "Transfer Countries",
|
|
1001
|
+
privacyPolicy: "Privacy Policy",
|
|
1002
|
+
cookiePolicy: "Cookie Policy",
|
|
1003
|
+
legalBasisValues: {
|
|
1004
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1005
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1006
|
+
},
|
|
1007
|
+
noServices: "No services are configured for this site."
|
|
1008
|
+
},
|
|
1009
|
+
svcAbout: {
|
|
1010
|
+
title: "About this CMP",
|
|
1011
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1012
|
+
version: "Version",
|
|
1013
|
+
learnMore: "Learn more at blakfy.com"
|
|
1014
|
+
}
|
|
1015
|
+
};
|
|
1016
|
+
|
|
1017
|
+
// src/i18n/translations/sv.js
|
|
1018
|
+
var sv_default = {
|
|
1019
|
+
title: "Cookie-inst\xE4llningar",
|
|
1020
|
+
intro: "Den h\xE4r webbplatsen anv\xE4nder cookies f\xF6r att f\xF6rb\xE4ttra din upplevelse. Se v\xE5r Cookie-policy.",
|
|
1021
|
+
policyLink: "Cookie-policy",
|
|
1022
|
+
acceptAll: "Acceptera alla",
|
|
1023
|
+
rejectAll: "Avvisa alla",
|
|
1024
|
+
preferences: "Inst\xE4llningar",
|
|
1025
|
+
save: "Spara val",
|
|
1026
|
+
close: "St\xE4ng",
|
|
1027
|
+
cat: {
|
|
1028
|
+
essential: { title: "N\xF6dv\xE4ndiga cookies", desc: "Kr\xE4vs f\xF6r att webbplatsen ska fungera. Kan inte inaktiveras.", always: "Alltid aktiv" },
|
|
1029
|
+
analytics: { title: "Analytiska cookies", desc: "Anv\xE4nds f\xF6r att samla in anonym bes\xF6ksstatistik." },
|
|
1030
|
+
marketing: { title: "Marknadsf\xF6ringscookies", desc: "Anv\xE4nds f\xF6r personlig annonsering och \xE5termarknadsf\xF6ring." },
|
|
1031
|
+
functional: { title: "Funktionella cookies", desc: "Anv\xE4nds f\xF6r att komma ih\xE5g inst\xE4llningar som spr\xE5k och tema." }
|
|
1032
|
+
},
|
|
1033
|
+
placeholder: {
|
|
1034
|
+
title: "Inneh\xE5ll blockerat",
|
|
1035
|
+
desc: "Du m\xE5ste till\xE5ta {category}-cookies f\xF6r att visa detta inneh\xE5ll.",
|
|
1036
|
+
cta: "Till\xE5t"
|
|
1037
|
+
},
|
|
1038
|
+
tabs: {
|
|
1039
|
+
categories: "Categories",
|
|
1040
|
+
services: "Services",
|
|
1041
|
+
about: "About"
|
|
1042
|
+
},
|
|
1043
|
+
service: {
|
|
1044
|
+
description: "Description",
|
|
1045
|
+
processor: "Data Processor",
|
|
1046
|
+
address: "Address",
|
|
1047
|
+
dpo: "DPO Contact",
|
|
1048
|
+
purposes: "Purposes",
|
|
1049
|
+
technologies: "Technologies Used",
|
|
1050
|
+
dataCollected: "Data Collected",
|
|
1051
|
+
legalBasis: "Legal Basis",
|
|
1052
|
+
retention: "Retention Period",
|
|
1053
|
+
transferCountries: "Transfer Countries",
|
|
1054
|
+
privacyPolicy: "Privacy Policy",
|
|
1055
|
+
cookiePolicy: "Cookie Policy",
|
|
1056
|
+
legalBasisValues: {
|
|
1057
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1058
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1059
|
+
},
|
|
1060
|
+
noServices: "No services are configured for this site."
|
|
1061
|
+
},
|
|
1062
|
+
svcAbout: {
|
|
1063
|
+
title: "About this CMP",
|
|
1064
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1065
|
+
version: "Version",
|
|
1066
|
+
learnMore: "Learn more at blakfy.com"
|
|
1067
|
+
}
|
|
1068
|
+
};
|
|
1069
|
+
|
|
1070
|
+
// src/i18n/translations/cs.js
|
|
1071
|
+
var cs_default = {
|
|
1072
|
+
title: "P\u0159edvolby soubor\u016F cookie",
|
|
1073
|
+
intro: "Tento web pou\u017E\xEDv\xE1 soubory cookie ke zlep\u0161en\xED va\u0161eho z\xE1\u017Eitku. Viz na\u0161e Z\xE1sady soubor\u016F cookie.",
|
|
1074
|
+
policyLink: "Z\xE1sady soubor\u016F cookie",
|
|
1075
|
+
acceptAll: "P\u0159ijmout v\u0161e",
|
|
1076
|
+
rejectAll: "Odm\xEDtnout v\u0161e",
|
|
1077
|
+
preferences: "P\u0159edvolby",
|
|
1078
|
+
save: "Ulo\u017Eit volby",
|
|
1079
|
+
close: "Zav\u0159\xEDt",
|
|
1080
|
+
cat: {
|
|
1081
|
+
essential: { title: "Nezbytn\xE9 soubory cookie", desc: "Nutn\xE9 pro fungov\xE1n\xED webu. Nelze je deaktivovat.", always: "V\u017Edy aktivn\xED" },
|
|
1082
|
+
analytics: { title: "Analytick\xE9 soubory cookie", desc: "Slou\u017E\xED ke shroma\u017E\u010Fov\xE1n\xED anonymn\xEDch statistik n\xE1v\u0161t\u011Bv." },
|
|
1083
|
+
marketing: { title: "Marketingov\xE9 soubory cookie", desc: "Slou\u017E\xED k personalizovan\xE9 reklam\u011B a retargetingu." },
|
|
1084
|
+
functional: { title: "Funk\u010Dn\xED soubory cookie", desc: "Slou\u017E\xED k zapamatov\xE1n\xED p\u0159edvoleb jako jazyk a t\xE9ma." }
|
|
1085
|
+
},
|
|
1086
|
+
placeholder: {
|
|
1087
|
+
title: "Obsah blokov\xE1n",
|
|
1088
|
+
desc: "Pro zobrazen\xED tohoto obsahu mus\xEDte povolit soubory cookie {category}.",
|
|
1089
|
+
cta: "Povolit"
|
|
1090
|
+
},
|
|
1091
|
+
tabs: {
|
|
1092
|
+
categories: "Categories",
|
|
1093
|
+
services: "Services",
|
|
1094
|
+
about: "About"
|
|
1095
|
+
},
|
|
1096
|
+
service: {
|
|
1097
|
+
description: "Description",
|
|
1098
|
+
processor: "Data Processor",
|
|
1099
|
+
address: "Address",
|
|
1100
|
+
dpo: "DPO Contact",
|
|
1101
|
+
purposes: "Purposes",
|
|
1102
|
+
technologies: "Technologies Used",
|
|
1103
|
+
dataCollected: "Data Collected",
|
|
1104
|
+
legalBasis: "Legal Basis",
|
|
1105
|
+
retention: "Retention Period",
|
|
1106
|
+
transferCountries: "Transfer Countries",
|
|
1107
|
+
privacyPolicy: "Privacy Policy",
|
|
1108
|
+
cookiePolicy: "Cookie Policy",
|
|
1109
|
+
legalBasisValues: {
|
|
1110
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1111
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1112
|
+
},
|
|
1113
|
+
noServices: "No services are configured for this site."
|
|
1114
|
+
},
|
|
1115
|
+
svcAbout: {
|
|
1116
|
+
title: "About this CMP",
|
|
1117
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1118
|
+
version: "Version",
|
|
1119
|
+
learnMore: "Learn more at blakfy.com"
|
|
1120
|
+
}
|
|
1121
|
+
};
|
|
1122
|
+
|
|
1123
|
+
// src/i18n/translations/zh.js
|
|
1124
|
+
var zh_default = {
|
|
1125
|
+
title: "Cookie \u504F\u597D\u8BBE\u7F6E",
|
|
1126
|
+
intro: "\u672C\u7F51\u7AD9\u4F7F\u7528 Cookie \u6765\u6539\u5584\u60A8\u7684\u4F53\u9A8C\u3002\u8BE6\u60C5\u8BF7\u67E5\u770B\u6211\u4EEC\u7684 Cookie \u653F\u7B56\u3002",
|
|
1127
|
+
policyLink: "Cookie \u653F\u7B56",
|
|
1128
|
+
acceptAll: "\u63A5\u53D7\u5168\u90E8",
|
|
1129
|
+
rejectAll: "\u62D2\u7EDD\u5168\u90E8",
|
|
1130
|
+
preferences: "\u504F\u597D\u8BBE\u7F6E",
|
|
1131
|
+
save: "\u4FDD\u5B58\u9009\u62E9",
|
|
1132
|
+
close: "\u5173\u95ED",
|
|
1133
|
+
cat: {
|
|
1134
|
+
essential: { title: "\u5FC5\u8981 Cookie", desc: "\u7F51\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u65E0\u6CD5\u7981\u7528\u3002", always: "\u59CB\u7EC8\u542F\u7528" },
|
|
1135
|
+
analytics: { title: "\u5206\u6790 Cookie", desc: "\u7528\u4E8E\u6536\u96C6\u533F\u540D\u8BBF\u95EE\u7EDF\u8BA1\u6570\u636E\u3002" },
|
|
1136
|
+
marketing: { title: "\u8425\u9500 Cookie", desc: "\u7528\u4E8E\u4E2A\u6027\u5316\u5E7F\u544A\u548C\u518D\u8425\u9500\u3002" },
|
|
1137
|
+
functional: { title: "\u529F\u80FD Cookie", desc: "\u7528\u4E8E\u8BB0\u4F4F\u8BED\u8A00\u3001\u4E3B\u9898\u7B49\u504F\u597D\u8BBE\u7F6E\u3002" }
|
|
1138
|
+
},
|
|
1139
|
+
placeholder: {
|
|
1140
|
+
title: "\u5185\u5BB9\u5DF2\u88AB\u963B\u6B62",
|
|
1141
|
+
desc: "\u60A8\u9700\u8981\u5141\u8BB8 {category} Cookie \u624D\u80FD\u67E5\u770B\u6B64\u5185\u5BB9\u3002",
|
|
1142
|
+
cta: "\u5141\u8BB8"
|
|
1143
|
+
},
|
|
1144
|
+
tabs: {
|
|
1145
|
+
categories: "Categories",
|
|
1146
|
+
services: "Services",
|
|
1147
|
+
about: "About"
|
|
1148
|
+
},
|
|
1149
|
+
service: {
|
|
1150
|
+
description: "Description",
|
|
1151
|
+
processor: "Data Processor",
|
|
1152
|
+
address: "Address",
|
|
1153
|
+
dpo: "DPO Contact",
|
|
1154
|
+
purposes: "Purposes",
|
|
1155
|
+
technologies: "Technologies Used",
|
|
1156
|
+
dataCollected: "Data Collected",
|
|
1157
|
+
legalBasis: "Legal Basis",
|
|
1158
|
+
retention: "Retention Period",
|
|
1159
|
+
transferCountries: "Transfer Countries",
|
|
1160
|
+
privacyPolicy: "Privacy Policy",
|
|
1161
|
+
cookiePolicy: "Cookie Policy",
|
|
1162
|
+
legalBasisValues: {
|
|
1163
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1164
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1165
|
+
},
|
|
1166
|
+
noServices: "No services are configured for this site."
|
|
1167
|
+
},
|
|
1168
|
+
svcAbout: {
|
|
1169
|
+
title: "About this CMP",
|
|
1170
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1171
|
+
version: "Version",
|
|
1172
|
+
learnMore: "Learn more at blakfy.com"
|
|
1173
|
+
}
|
|
1174
|
+
};
|
|
1175
|
+
|
|
1176
|
+
// src/i18n/translations/zh-TW.js
|
|
1177
|
+
var zh_TW_default = {
|
|
1178
|
+
title: "Cookie \u504F\u597D\u8A2D\u5B9A",
|
|
1179
|
+
intro: "\u672C\u7DB2\u7AD9\u4F7F\u7528 Cookie \u4F86\u6539\u5584\u60A8\u7684\u9AD4\u9A57\u3002\u8A73\u60C5\u8ACB\u67E5\u770B\u6211\u5011\u7684 Cookie \u653F\u7B56\u3002",
|
|
1180
|
+
policyLink: "Cookie \u653F\u7B56",
|
|
1181
|
+
acceptAll: "\u63A5\u53D7\u5168\u90E8",
|
|
1182
|
+
rejectAll: "\u62D2\u7D55\u5168\u90E8",
|
|
1183
|
+
preferences: "\u504F\u597D\u8A2D\u5B9A",
|
|
1184
|
+
save: "\u5132\u5B58\u9078\u64C7",
|
|
1185
|
+
close: "\u95DC\u9589",
|
|
1186
|
+
cat: {
|
|
1187
|
+
essential: { title: "\u5FC5\u8981 Cookie", desc: "\u7DB2\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u7121\u6CD5\u505C\u7528\u3002", always: "\u59CB\u7D42\u555F\u7528" },
|
|
1188
|
+
analytics: { title: "\u5206\u6790 Cookie", desc: "\u7528\u65BC\u6536\u96C6\u533F\u540D\u8A2A\u554F\u7D71\u8A08\u8CC7\u6599\u3002" },
|
|
1189
|
+
marketing: { title: "\u884C\u92B7 Cookie", desc: "\u7528\u65BC\u500B\u4EBA\u5316\u5EE3\u544A\u548C\u518D\u884C\u92B7\u3002" },
|
|
1190
|
+
functional: { title: "\u529F\u80FD Cookie", desc: "\u7528\u65BC\u8A18\u4F4F\u8A9E\u8A00\u3001\u4E3B\u984C\u7B49\u504F\u597D\u8A2D\u5B9A\u3002" }
|
|
1191
|
+
},
|
|
1192
|
+
placeholder: {
|
|
1193
|
+
title: "\u5167\u5BB9\u5DF2\u88AB\u5C01\u9396",
|
|
1194
|
+
desc: "\u60A8\u9700\u8981\u5141\u8A31 {category} Cookie \u624D\u80FD\u6AA2\u8996\u6B64\u5167\u5BB9\u3002",
|
|
1195
|
+
cta: "\u5141\u8A31"
|
|
1196
|
+
},
|
|
1197
|
+
tabs: {
|
|
1198
|
+
categories: "Categories",
|
|
1199
|
+
services: "Services",
|
|
1200
|
+
about: "About"
|
|
1201
|
+
},
|
|
1202
|
+
service: {
|
|
1203
|
+
description: "Description",
|
|
1204
|
+
processor: "Data Processor",
|
|
1205
|
+
address: "Address",
|
|
1206
|
+
dpo: "DPO Contact",
|
|
1207
|
+
purposes: "Purposes",
|
|
1208
|
+
technologies: "Technologies Used",
|
|
1209
|
+
dataCollected: "Data Collected",
|
|
1210
|
+
legalBasis: "Legal Basis",
|
|
1211
|
+
retention: "Retention Period",
|
|
1212
|
+
transferCountries: "Transfer Countries",
|
|
1213
|
+
privacyPolicy: "Privacy Policy",
|
|
1214
|
+
cookiePolicy: "Cookie Policy",
|
|
1215
|
+
legalBasisValues: {
|
|
1216
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1217
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1218
|
+
},
|
|
1219
|
+
noServices: "No services are configured for this site."
|
|
1220
|
+
},
|
|
1221
|
+
svcAbout: {
|
|
1222
|
+
title: "About this CMP",
|
|
1223
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1224
|
+
version: "Version",
|
|
1225
|
+
learnMore: "Learn more at blakfy.com"
|
|
1226
|
+
}
|
|
1227
|
+
};
|
|
1228
|
+
|
|
1229
|
+
// src/i18n/translations/ja.js
|
|
1230
|
+
var ja_default = {
|
|
1231
|
+
title: "Cookie\u306E\u8A2D\u5B9A",
|
|
1232
|
+
intro: "\u3053\u306E\u30B5\u30A4\u30C8\u306F\u30A8\u30AF\u30B9\u30DA\u30EA\u30A8\u30F3\u30B9\u3092\u5411\u4E0A\u3055\u305B\u308B\u305F\u3081\u306BCookie\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A73\u7D30\u306FCookie\u30DD\u30EA\u30B7\u30FC\u3092\u3054\u89A7\u304F\u3060\u3055\u3044\u3002",
|
|
1233
|
+
policyLink: "Cookie\u30DD\u30EA\u30B7\u30FC",
|
|
1234
|
+
acceptAll: "\u3059\u3079\u3066\u627F\u8A8D",
|
|
1235
|
+
rejectAll: "\u3059\u3079\u3066\u62D2\u5426",
|
|
1236
|
+
preferences: "\u8A2D\u5B9A",
|
|
1237
|
+
save: "\u9078\u629E\u3092\u4FDD\u5B58",
|
|
1238
|
+
close: "\u9589\u3058\u308B",
|
|
1239
|
+
cat: {
|
|
1240
|
+
essential: { title: "\u5FC5\u9808Cookie", desc: "\u30B5\u30A4\u30C8\u306E\u57FA\u672C\u6A5F\u80FD\u306B\u5FC5\u8981\u3067\u3059\u3002\u7121\u52B9\u306B\u3067\u304D\u307E\u305B\u3093\u3002", always: "\u5E38\u306B\u6709\u52B9" },
|
|
1241
|
+
analytics: { title: "\u5206\u6790Cookie", desc: "\u533F\u540D\u306E\u8A2A\u554F\u7D71\u8A08\u3092\u53CE\u96C6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002" },
|
|
1242
|
+
marketing: { title: "\u30DE\u30FC\u30B1\u30C6\u30A3\u30F3\u30B0Cookie", desc: "\u30D1\u30FC\u30BD\u30CA\u30E9\u30A4\u30BA\u3055\u308C\u305F\u5E83\u544A\u3068\u30EA\u30BF\u30FC\u30B2\u30C6\u30A3\u30F3\u30B0\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002" },
|
|
1243
|
+
functional: { title: "\u6A5F\u80FDCookie", desc: "\u8A00\u8A9E\u3084\u30C6\u30FC\u30DE\u306A\u3069\u306E\u8A2D\u5B9A\u3092\u8A18\u61B6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002" }
|
|
1244
|
+
},
|
|
1245
|
+
placeholder: {
|
|
1246
|
+
title: "\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F",
|
|
1247
|
+
desc: "\u3053\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A\u3059\u308B\u306B\u306F{category}Cookie\u3092\u8A31\u53EF\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002",
|
|
1248
|
+
cta: "\u8A31\u53EF\u3059\u308B"
|
|
1249
|
+
},
|
|
1250
|
+
tabs: {
|
|
1251
|
+
categories: "Categories",
|
|
1252
|
+
services: "Services",
|
|
1253
|
+
about: "About"
|
|
1254
|
+
},
|
|
1255
|
+
service: {
|
|
1256
|
+
description: "Description",
|
|
1257
|
+
processor: "Data Processor",
|
|
1258
|
+
address: "Address",
|
|
1259
|
+
dpo: "DPO Contact",
|
|
1260
|
+
purposes: "Purposes",
|
|
1261
|
+
technologies: "Technologies Used",
|
|
1262
|
+
dataCollected: "Data Collected",
|
|
1263
|
+
legalBasis: "Legal Basis",
|
|
1264
|
+
retention: "Retention Period",
|
|
1265
|
+
transferCountries: "Transfer Countries",
|
|
1266
|
+
privacyPolicy: "Privacy Policy",
|
|
1267
|
+
cookiePolicy: "Cookie Policy",
|
|
1268
|
+
legalBasisValues: {
|
|
1269
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1270
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1271
|
+
},
|
|
1272
|
+
noServices: "No services are configured for this site."
|
|
1273
|
+
},
|
|
1274
|
+
svcAbout: {
|
|
1275
|
+
title: "About this CMP",
|
|
1276
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1277
|
+
version: "Version",
|
|
1278
|
+
learnMore: "Learn more at blakfy.com"
|
|
1279
|
+
}
|
|
1280
|
+
};
|
|
1281
|
+
|
|
1282
|
+
// src/i18n/translations/ko.js
|
|
1283
|
+
var ko_default = {
|
|
1284
|
+
title: "\uCFE0\uD0A4 \uD658\uACBD\uC124\uC815",
|
|
1285
|
+
intro: "\uC774 \uC0AC\uC774\uD2B8\uB294 \uACBD\uD5D8\uC744 \uD5A5\uC0C1\uC2DC\uD0A4\uAE30 \uC704\uD574 \uCFE0\uD0A4\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uCFE0\uD0A4 \uC815\uCC45\uC744 \uD655\uC778\uD558\uC138\uC694.",
|
|
1286
|
+
policyLink: "\uCFE0\uD0A4 \uC815\uCC45",
|
|
1287
|
+
acceptAll: "\uBAA8\uB450 \uC218\uB77D",
|
|
1288
|
+
rejectAll: "\uBAA8\uB450 \uAC70\uBD80",
|
|
1289
|
+
preferences: "\uD658\uACBD\uC124\uC815",
|
|
1290
|
+
save: "\uC120\uD0DD \uC800\uC7A5",
|
|
1291
|
+
close: "\uB2EB\uAE30",
|
|
1292
|
+
cat: {
|
|
1293
|
+
essential: { title: "\uD544\uC218 \uCFE0\uD0A4", desc: "\uC0AC\uC774\uD2B8 \uAE30\uB2A5\uC5D0 \uD544\uC694\uD558\uBA70 \uBE44\uD65C\uC131\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", always: "\uD56D\uC0C1 \uD65C\uC131" },
|
|
1294
|
+
analytics: { title: "\uBD84\uC11D \uCFE0\uD0A4", desc: "\uC775\uBA85 \uBC29\uBB38 \uD1B5\uACC4 \uC218\uC9D1\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4." },
|
|
1295
|
+
marketing: { title: "\uB9C8\uCF00\uD305 \uCFE0\uD0A4", desc: "\uB9DE\uCDA4\uD615 \uAD11\uACE0 \uBC0F \uB9AC\uD0C0\uAC8C\uD305\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4." },
|
|
1296
|
+
functional: { title: "\uAE30\uB2A5\uC131 \uCFE0\uD0A4", desc: "\uC5B8\uC5B4, \uD14C\uB9C8 \uB4F1\uC758 \uD658\uACBD\uC124\uC815\uC744 \uAE30\uC5B5\uD558\uB294 \uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4." }
|
|
1297
|
+
},
|
|
1298
|
+
placeholder: {
|
|
1299
|
+
title: "\uCF58\uD150\uCE20\uAC00 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4",
|
|
1300
|
+
desc: "\uC774 \uCF58\uD150\uCE20\uB97C \uBCF4\uB824\uBA74 {category} \uCFE0\uD0A4\uB97C \uD5C8\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.",
|
|
1301
|
+
cta: "\uD5C8\uC6A9"
|
|
1302
|
+
},
|
|
1303
|
+
tabs: {
|
|
1304
|
+
categories: "Categories",
|
|
1305
|
+
services: "Services",
|
|
1306
|
+
about: "About"
|
|
1307
|
+
},
|
|
1308
|
+
service: {
|
|
1309
|
+
description: "Description",
|
|
1310
|
+
processor: "Data Processor",
|
|
1311
|
+
address: "Address",
|
|
1312
|
+
dpo: "DPO Contact",
|
|
1313
|
+
purposes: "Purposes",
|
|
1314
|
+
technologies: "Technologies Used",
|
|
1315
|
+
dataCollected: "Data Collected",
|
|
1316
|
+
legalBasis: "Legal Basis",
|
|
1317
|
+
retention: "Retention Period",
|
|
1318
|
+
transferCountries: "Transfer Countries",
|
|
1319
|
+
privacyPolicy: "Privacy Policy",
|
|
1320
|
+
cookiePolicy: "Cookie Policy",
|
|
1321
|
+
legalBasisValues: {
|
|
1322
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1323
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1324
|
+
},
|
|
1325
|
+
noServices: "No services are configured for this site."
|
|
1326
|
+
},
|
|
1327
|
+
svcAbout: {
|
|
1328
|
+
title: "About this CMP",
|
|
1329
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1330
|
+
version: "Version",
|
|
1331
|
+
learnMore: "Learn more at blakfy.com"
|
|
1332
|
+
}
|
|
1333
|
+
};
|
|
1334
|
+
|
|
1335
|
+
// src/i18n/translations/id.js
|
|
1336
|
+
var id_default = {
|
|
1337
|
+
title: "Preferensi Cookie",
|
|
1338
|
+
intro: "Situs ini menggunakan cookie untuk meningkatkan pengalaman Anda. Lihat Kebijakan Cookie kami.",
|
|
1339
|
+
policyLink: "Kebijakan Cookie",
|
|
1340
|
+
acceptAll: "Terima Semua",
|
|
1341
|
+
rejectAll: "Tolak Semua",
|
|
1342
|
+
preferences: "Preferensi",
|
|
1343
|
+
save: "Simpan Pilihan",
|
|
1344
|
+
close: "Tutup",
|
|
1345
|
+
cat: {
|
|
1346
|
+
essential: { title: "Cookie Esensial", desc: "Diperlukan untuk fungsi dasar situs. Tidak dapat dinonaktifkan.", always: "Selalu aktif" },
|
|
1347
|
+
analytics: { title: "Cookie Analitik", desc: "Digunakan untuk mengumpulkan statistik kunjungan anonim." },
|
|
1348
|
+
marketing: { title: "Cookie Pemasaran", desc: "Digunakan untuk iklan yang dipersonalisasi dan retargeting." },
|
|
1349
|
+
functional: { title: "Cookie Fungsional", desc: "Digunakan untuk mengingat preferensi seperti bahasa dan tema." }
|
|
1350
|
+
},
|
|
1351
|
+
placeholder: {
|
|
1352
|
+
title: "Konten diblokir",
|
|
1353
|
+
desc: "Anda harus mengizinkan cookie {category} untuk melihat konten ini.",
|
|
1354
|
+
cta: "Izinkan"
|
|
1355
|
+
},
|
|
1356
|
+
tabs: {
|
|
1357
|
+
categories: "Categories",
|
|
1358
|
+
services: "Services",
|
|
1359
|
+
about: "About"
|
|
1360
|
+
},
|
|
1361
|
+
service: {
|
|
1362
|
+
description: "Description",
|
|
1363
|
+
processor: "Data Processor",
|
|
1364
|
+
address: "Address",
|
|
1365
|
+
dpo: "DPO Contact",
|
|
1366
|
+
purposes: "Purposes",
|
|
1367
|
+
technologies: "Technologies Used",
|
|
1368
|
+
dataCollected: "Data Collected",
|
|
1369
|
+
legalBasis: "Legal Basis",
|
|
1370
|
+
retention: "Retention Period",
|
|
1371
|
+
transferCountries: "Transfer Countries",
|
|
1372
|
+
privacyPolicy: "Privacy Policy",
|
|
1373
|
+
cookiePolicy: "Cookie Policy",
|
|
1374
|
+
legalBasisValues: {
|
|
1375
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1376
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1377
|
+
},
|
|
1378
|
+
noServices: "No services are configured for this site."
|
|
1379
|
+
},
|
|
1380
|
+
svcAbout: {
|
|
1381
|
+
title: "About this CMP",
|
|
1382
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1383
|
+
version: "Version",
|
|
1384
|
+
learnMore: "Learn more at blakfy.com"
|
|
1385
|
+
}
|
|
1386
|
+
};
|
|
1387
|
+
|
|
1388
|
+
// src/i18n/translations/hi.js
|
|
1389
|
+
var hi_default = {
|
|
1390
|
+
title: "\u0915\u0941\u0915\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902",
|
|
1391
|
+
intro: "\u092F\u0939 \u0938\u093E\u0907\u091F \u0906\u092A\u0915\u0947 \u0905\u0928\u0941\u092D\u0935 \u0915\u094B \u092C\u0947\u0939\u0924\u0930 \u092C\u0928\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0924\u0940 \u0939\u0948\u0964 \u0935\u093F\u0935\u0930\u0923 \u0915\u0947 \u0932\u093F\u090F \u0939\u092E\u093E\u0930\u0940 \u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F \u0926\u0947\u0916\u0947\u0902\u0964",
|
|
1392
|
+
policyLink: "\u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F",
|
|
1393
|
+
acceptAll: "\u0938\u092D\u0940 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902",
|
|
1394
|
+
rejectAll: "\u0938\u092D\u0940 \u0905\u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902",
|
|
1395
|
+
preferences: "\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902",
|
|
1396
|
+
save: "\u0935\u093F\u0915\u0932\u094D\u092A \u0938\u0939\u0947\u091C\u0947\u0902",
|
|
1397
|
+
close: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
|
|
1398
|
+
cat: {
|
|
1399
|
+
essential: { title: "\u0906\u0935\u0936\u094D\u092F\u0915 \u0915\u0941\u0915\u0940\u091C\u093C", desc: "\u0938\u093E\u0907\u091F \u0915\u0947 \u0915\u093E\u0930\u094D\u092F \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u0935\u0936\u094D\u092F\u0915\u0964 \u0905\u0915\u094D\u0937\u092E \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E \u0938\u0915\u0924\u0940\u0902\u0964", always: "\u0939\u092E\u0947\u0936\u093E \u0938\u0915\u094D\u0930\u093F\u092F" },
|
|
1400
|
+
analytics: { title: "\u0935\u093F\u0936\u094D\u0932\u0947\u0937\u0923 \u0915\u0941\u0915\u0940\u091C\u093C", desc: "\u0905\u091C\u094D\u091E\u093E\u0924 \u0935\u093F\u091C\u093C\u093F\u091F \u0906\u0901\u0915\u0921\u093C\u0947 \u090F\u0915\u0924\u094D\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964" },
|
|
1401
|
+
marketing: { title: "\u092E\u093E\u0930\u094D\u0915\u0947\u091F\u093F\u0902\u0917 \u0915\u0941\u0915\u0940\u091C\u093C", desc: "\u0935\u0948\u092F\u0915\u094D\u0924\u093F\u0915\u0943\u0924 \u0935\u093F\u091C\u094D\u091E\u093E\u092A\u0928 \u0914\u0930 \u0930\u093F\u091F\u093E\u0930\u094D\u0917\u0947\u091F\u093F\u0902\u0917 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964" },
|
|
1402
|
+
functional: { title: "\u0915\u093E\u0930\u094D\u092F\u093E\u0924\u094D\u092E\u0915 \u0915\u0941\u0915\u0940\u091C\u093C", desc: "\u092D\u093E\u0937\u093E, \u0925\u0940\u092E \u091C\u0948\u0938\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u0913\u0902 \u0915\u094B \u092F\u093E\u0926 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964" }
|
|
1403
|
+
},
|
|
1404
|
+
placeholder: {
|
|
1405
|
+
title: "\u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0905\u0935\u0930\u0941\u0926\u094D\u0927 \u0939\u0948",
|
|
1406
|
+
desc: "\u0907\u0938 \u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0915\u094B \u0926\u0947\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u094B {category} \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0928\u0940 \u0939\u094B\u0917\u0940\u0964",
|
|
1407
|
+
cta: "\u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902"
|
|
1408
|
+
},
|
|
1409
|
+
tabs: {
|
|
1410
|
+
categories: "Categories",
|
|
1411
|
+
services: "Services",
|
|
1412
|
+
about: "About"
|
|
1413
|
+
},
|
|
1414
|
+
service: {
|
|
1415
|
+
description: "Description",
|
|
1416
|
+
processor: "Data Processor",
|
|
1417
|
+
address: "Address",
|
|
1418
|
+
dpo: "DPO Contact",
|
|
1419
|
+
purposes: "Purposes",
|
|
1420
|
+
technologies: "Technologies Used",
|
|
1421
|
+
dataCollected: "Data Collected",
|
|
1422
|
+
legalBasis: "Legal Basis",
|
|
1423
|
+
retention: "Retention Period",
|
|
1424
|
+
transferCountries: "Transfer Countries",
|
|
1425
|
+
privacyPolicy: "Privacy Policy",
|
|
1426
|
+
cookiePolicy: "Cookie Policy",
|
|
1427
|
+
legalBasisValues: {
|
|
1428
|
+
consent: "Consent (Art. 6 para. 1 s. 1 lit. a GDPR)",
|
|
1429
|
+
legitimate_interest: "Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)"
|
|
1430
|
+
},
|
|
1431
|
+
noServices: "No services are configured for this site."
|
|
1432
|
+
},
|
|
1433
|
+
svcAbout: {
|
|
1434
|
+
title: "About this CMP",
|
|
1435
|
+
description: "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.",
|
|
1436
|
+
version: "Version",
|
|
1437
|
+
learnMore: "Learn more at blakfy.com"
|
|
1438
|
+
}
|
|
1439
|
+
};
|
|
1440
|
+
|
|
1441
|
+
// src/i18n/index.js
|
|
1442
|
+
var DEFAULT_LOCALE = "tr";
|
|
1443
|
+
var TRANSLATIONS = {
|
|
1444
|
+
tr: tr_default,
|
|
1445
|
+
en: en_default,
|
|
1446
|
+
ar: ar_default,
|
|
1447
|
+
fa: fa_default,
|
|
1448
|
+
ur: ur_default,
|
|
1449
|
+
fr: fr_default,
|
|
1450
|
+
ru: ru_default,
|
|
1451
|
+
de: de_default,
|
|
1452
|
+
he: he_default,
|
|
1453
|
+
uk: uk_default,
|
|
1454
|
+
es: es_default,
|
|
1455
|
+
it: it_default,
|
|
1456
|
+
pt: pt_default,
|
|
1457
|
+
nl: nl_default,
|
|
1458
|
+
pl: pl_default,
|
|
1459
|
+
sv: sv_default,
|
|
1460
|
+
cs: cs_default,
|
|
1461
|
+
zh: zh_default,
|
|
1462
|
+
"zh-TW": zh_TW_default,
|
|
1463
|
+
ja: ja_default,
|
|
1464
|
+
ko: ko_default,
|
|
1465
|
+
id: id_default,
|
|
1466
|
+
hi: hi_default
|
|
1467
|
+
};
|
|
1468
|
+
var getTranslation = (locale) => TRANSLATIONS[locale] || TRANSLATIONS[DEFAULT_LOCALE];
|
|
1469
|
+
|
|
1470
|
+
// src/ui/styles.js
|
|
1471
|
+
var STYLE_ID = "blakfy-cookie-styles";
|
|
1472
|
+
var RULES = [
|
|
1473
|
+
"/* Layout architecture is locked \u2014 only --blakfy-accent is overridable */",
|
|
1474
|
+
// Modal mode (centered, dimmed backdrop)
|
|
1475
|
+
".blakfy-overlay.modal{position:fixed !important;inset:0;background:rgba(0,0,0,.4);z-index:2147483646 !important;display:flex !important;align-items:center;justify-content:center;padding:16px}",
|
|
1476
|
+
// Widget mode (transparent, no backdrop)
|
|
1477
|
+
".blakfy-overlay.widget{position:fixed !important;inset:auto;background:transparent;padding:0;display:block !important;z-index:2147483646 !important;pointer-events:none}",
|
|
1478
|
+
".blakfy-overlay.widget .blakfy-card{width:min(96vw,1100px);max-width:none;border-radius:8px;position:relative;pointer-events:auto;padding-bottom:40px}",
|
|
1479
|
+
// Widget butonları kart genişliğine eşit dağılımlı
|
|
1480
|
+
".blakfy-overlay.widget .blakfy-actions{flex-wrap:nowrap}",
|
|
1481
|
+
".blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1;min-width:0;min-height:36px;padding:8px 16px}",
|
|
1482
|
+
// Position modifiers (widget)
|
|
1483
|
+
".blakfy-overlay.widget.bottom-center{bottom:16px;left:50%;right:auto;top:auto;transform:translateX(-50%)}",
|
|
1484
|
+
".blakfy-overlay.widget.bottom-right{bottom:16px;right:16px;left:auto;top:auto}",
|
|
1485
|
+
".blakfy-overlay.widget.bottom-left{bottom:16px;left:16px;right:auto;top:auto}",
|
|
1486
|
+
".blakfy-overlay.widget.top-center{top:16px;left:50%;right:auto;bottom:auto;transform:translateX(-50%)}",
|
|
1487
|
+
".blakfy-overlay.widget.top-right{top:16px;right:16px;left:auto;bottom:auto}",
|
|
1488
|
+
".blakfy-overlay.widget.top-left{top:16px;left:16px;right:auto;bottom:auto}",
|
|
1489
|
+
".blakfy-overlay.widget.center{top:50%;left:50%;right:auto;bottom:auto;transform:translate(-50%,-50%)}",
|
|
1490
|
+
// Card base (shared by banner + modal)
|
|
1491
|
+
".blakfy-card{background:#fff;color:#222;border-radius:16px;max-width:560px;width:100%;padding:24px;border:3px solid var(--blakfy-accent,#3E5C3A);font-family:system-ui,-apple-system,sans-serif;line-height:1.5;position:relative}",
|
|
1492
|
+
".blakfy-card[dir=rtl]{text-align:right}",
|
|
1493
|
+
".blakfy-card h2{margin:0 0 8px;font-size:18px;font-weight:600}",
|
|
1494
|
+
".blakfy-card p{margin:0 0 16px;font-size:14px;color:#444}",
|
|
1495
|
+
".blakfy-card a{color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}",
|
|
1496
|
+
// Actions
|
|
1497
|
+
".blakfy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}",
|
|
1498
|
+
// Buttons (3px radius per spec)
|
|
1499
|
+
".blakfy-btn{flex:1;min-width:120px;min-height:44px;padding:12px 16px;border:1px solid #ddd;border-radius:3px;background:#fff;color:#222;font-size:14px;font-weight:500;cursor:pointer;transition:transform .1s,background .15s}",
|
|
1500
|
+
".blakfy-btn:hover{transform:translateY(-1px)}",
|
|
1501
|
+
".blakfy-btn-primary{background:var(--blakfy-accent,#3E5C3A);color:#fff;border-color:transparent}",
|
|
1502
|
+
".blakfy-cat{padding:12px 0;border-top:1px solid #eee;display:flex;align-items:flex-start;gap:12px}",
|
|
1503
|
+
".blakfy-cat:first-of-type{border-top:none}",
|
|
1504
|
+
".blakfy-cat-text{flex:1}",
|
|
1505
|
+
".blakfy-cat-text strong{display:block;font-size:14px;margin-bottom:2px}",
|
|
1506
|
+
".blakfy-cat-text span{font-size:13px;color:#666}",
|
|
1507
|
+
// Switches (pill-shaped — UX standard)
|
|
1508
|
+
".blakfy-switch{flex-shrink:0;width:44px;height:24px;border-radius:999px;background:#ccc;position:relative;cursor:pointer;border:none;padding:0}",
|
|
1509
|
+
".blakfy-switch[aria-checked=true]{background:var(--blakfy-accent,#3E5C3A)}",
|
|
1510
|
+
".blakfy-switch::after{content:'';position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .2s}",
|
|
1511
|
+
".blakfy-switch[aria-checked=true]::after{transform:translateX(20px)}",
|
|
1512
|
+
".blakfy-switch:disabled{opacity:.6;cursor:not-allowed}",
|
|
1513
|
+
".blakfy-close{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;color:#666;width:32px;height:32px;border-radius:50%}",
|
|
1514
|
+
".blakfy-close:hover{background:#f3f3f3}",
|
|
1515
|
+
"[dir=rtl] .blakfy-close{right:auto;left:12px}",
|
|
1516
|
+
".blakfy-badge{position:absolute;bottom:8px;right:12px;font-size:11px;opacity:0.6;transition:opacity 0.2s;display:flex !important;pointer-events:auto !important;align-items:center;gap:4px;color:#666;text-decoration:none}",
|
|
1517
|
+
".blakfy-badge:hover{opacity:1}",
|
|
1518
|
+
"[dir=rtl] .blakfy-badge{right:auto;left:12px}",
|
|
1519
|
+
".blakfy-status{position:fixed;bottom:0;left:0;right:0;z-index:2147483645;display:flex;align-items:center;gap:12px;padding:10px 20px;font-family:system-ui,-apple-system,sans-serif;font-size:13px;line-height:1.5}",
|
|
1520
|
+
".blakfy-status-msg{flex:1}",
|
|
1521
|
+
".blakfy-status-dismiss{background:none;border:none;color:inherit;cursor:pointer;padding:4px 10px;border-radius:6px;font-size:16px;opacity:.8;line-height:1}",
|
|
1522
|
+
".blakfy-status-dismiss:hover{opacity:1;background:rgba(255,255,255,.2)}",
|
|
1523
|
+
"@media (prefers-reduced-motion:reduce){.blakfy-btn,.blakfy-switch::after{transition:none}}",
|
|
1524
|
+
// Responsive
|
|
1525
|
+
"@media (max-width:1024px){.blakfy-card{max-width:440px}}",
|
|
1526
|
+
"@media (max-width:768px){.blakfy-card{max-width:calc(100vw - 32px);padding:18px}.blakfy-card h2{font-size:16px}.blakfy-card p{font-size:13px}.blakfy-btn{flex:1 1 100%;min-height:44px;padding:10px 14px;font-size:13px}.blakfy-overlay.widget.bottom-center,.blakfy-overlay.widget.top-center{left:16px;right:16px;transform:none}.blakfy-overlay.widget .blakfy-card{width:100%}.blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1 1 100%;min-width:0}}",
|
|
1527
|
+
"@media (max-width:480px){.blakfy-overlay.widget .blakfy-card{width:100%;max-width:calc(100vw - 32px)}}",
|
|
1528
|
+
// Tab bar
|
|
1529
|
+
".blakfy-tabs{display:flex;border-bottom:2px solid #eee;margin:12px 0 16px;gap:0}",
|
|
1530
|
+
".blakfy-tab-btn{flex:1;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;padding:8px 10px;font-size:13px;font-weight:500;color:#666;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap;font-family:inherit}",
|
|
1531
|
+
".blakfy-tab-btn:hover{color:#222}",
|
|
1532
|
+
".blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A);font-weight:600}",
|
|
1533
|
+
// Tab panels
|
|
1534
|
+
".blakfy-tab-panel[aria-hidden=true]{display:none}",
|
|
1535
|
+
".blakfy-tab-panel[aria-hidden=false]{display:block}",
|
|
1536
|
+
// Service list + cards
|
|
1537
|
+
".blakfy-service-list{display:flex;flex-direction:column;gap:8px;max-height:420px;overflow-y:auto;padding-right:2px}",
|
|
1538
|
+
".blakfy-service-card{border:1px solid #eee;border-radius:6px;overflow:hidden}",
|
|
1539
|
+
".blakfy-service-card-header{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;background:#fafafa;user-select:none}",
|
|
1540
|
+
".blakfy-service-card-header:hover{background:#f3f3f3}",
|
|
1541
|
+
".blakfy-service-name{flex:1;font-size:13px;font-weight:600;color:#222}",
|
|
1542
|
+
".blakfy-service-cat{font-size:11px;padding:2px 8px;border-radius:999px;background:#eee;color:#555;text-transform:capitalize}",
|
|
1543
|
+
".blakfy-service-toggle{font-size:11px;color:#aaa;line-height:1}",
|
|
1544
|
+
".blakfy-service-body[aria-hidden=true]{display:none}",
|
|
1545
|
+
".blakfy-service-body[aria-hidden=false]{display:block;padding:12px;border-top:1px solid #eee}",
|
|
1546
|
+
".blakfy-service-dl{margin:0 0 10px;display:grid;grid-template-columns:auto 1fr;gap:4px 12px}",
|
|
1547
|
+
".blakfy-service-dt{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}",
|
|
1548
|
+
".blakfy-service-dd{margin:0;font-size:12px;color:#444;word-break:break-word}",
|
|
1549
|
+
".blakfy-service-links{display:flex;gap:12px;margin-top:8px;flex-wrap:wrap}",
|
|
1550
|
+
".blakfy-service-links a{font-size:12px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}",
|
|
1551
|
+
".blakfy-svc-empty{font-size:13px;color:#888;padding:16px 0}",
|
|
1552
|
+
// About panel
|
|
1553
|
+
".blakfy-about-panel{padding:4px 0}",
|
|
1554
|
+
".blakfy-about-brand{display:flex;align-items:center;gap:8px;margin-bottom:14px}",
|
|
1555
|
+
".blakfy-about-brand strong{font-size:15px;color:#222}",
|
|
1556
|
+
".blakfy-about-panel p{font-size:13px;color:#555;margin:0 0 10px;line-height:1.6}",
|
|
1557
|
+
".blakfy-about-panel a{font-size:13px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}",
|
|
1558
|
+
".blakfy-about-meta{font-size:12px;color:#aaa;margin-top:12px}",
|
|
1559
|
+
"@media (max-width:480px){.blakfy-tab-btn{font-size:12px;padding:8px 6px}.blakfy-service-list{max-height:260px}}",
|
|
1560
|
+
// ── Themes: gray ──────────────────────────────────────────────────────────
|
|
1561
|
+
".blakfy-card[data-blakfy-theme=gray]{background:#f0f0f0}",
|
|
1562
|
+
".blakfy-card[data-blakfy-theme=gray] .blakfy-btn{background:#e4e4e4;border-color:#ccc}",
|
|
1563
|
+
".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header{background:#e8e8e8}",
|
|
1564
|
+
".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header:hover{background:#ddd}",
|
|
1565
|
+
// ── Themes: dark ──────────────────────────────────────────────────────────
|
|
1566
|
+
".blakfy-card[data-blakfy-theme=dark]{background:#1a1a1a;color:#f0f0f0;border-color:var(--blakfy-accent,#3E5C3A)}",
|
|
1567
|
+
".blakfy-card[data-blakfy-theme=dark] p{color:#aaa}",
|
|
1568
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-cat-text span{color:#999}",
|
|
1569
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-cat{border-top-color:#333}",
|
|
1570
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-btn{background:#2a2a2a;color:#f0f0f0;border-color:#444}",
|
|
1571
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-btn:hover{background:#333}",
|
|
1572
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-switch{background:#444}",
|
|
1573
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-close{color:#aaa}",
|
|
1574
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-close:hover{background:#2a2a2a}",
|
|
1575
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-tabs{border-bottom-color:#333}",
|
|
1576
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn{color:#888}",
|
|
1577
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn:hover{color:#f0f0f0}",
|
|
1578
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A)}",
|
|
1579
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card{border-color:#333}",
|
|
1580
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header{background:#252525}",
|
|
1581
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header:hover{background:#2e2e2e}",
|
|
1582
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-body[aria-hidden=false]{border-top-color:#333}",
|
|
1583
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dt{color:#777}",
|
|
1584
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dd{color:#ccc}",
|
|
1585
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-name{color:#f0f0f0}",
|
|
1586
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-service-cat{background:#333;color:#aaa}",
|
|
1587
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-badge{color:#777}",
|
|
1588
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-about-brand strong{color:#f0f0f0}",
|
|
1589
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-about-panel p{color:#aaa}",
|
|
1590
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-about-meta{color:#666}",
|
|
1591
|
+
".blakfy-card[data-blakfy-theme=dark] .blakfy-svc-empty{color:#666}"
|
|
1592
|
+
];
|
|
1593
|
+
var injectStyles = () => {
|
|
1594
|
+
if (document.getElementById(STYLE_ID)) return;
|
|
1595
|
+
const css = document.createElement("style");
|
|
1596
|
+
css.id = STYLE_ID;
|
|
1597
|
+
css.textContent = RULES.join("");
|
|
1598
|
+
document.head.appendChild(css);
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
// src/ui/banner.js
|
|
1602
|
+
var createBanner = ({ t, isRTL, accent, theme, policyUrl, onAccept, onReject, onPrefs }) => {
|
|
1603
|
+
const card = document.createElement("div");
|
|
1604
|
+
card.className = "blakfy-card";
|
|
1605
|
+
card.setAttribute("dir", isRTL ? "rtl" : "ltr");
|
|
1606
|
+
card.setAttribute("role", "dialog");
|
|
1607
|
+
card.setAttribute("aria-labelledby", "blakfy-title");
|
|
1608
|
+
card.setAttribute("aria-describedby", "blakfy-desc");
|
|
1609
|
+
card.style.cssText = "--blakfy-accent:" + accent;
|
|
1610
|
+
if (theme && theme !== "light") card.setAttribute("data-blakfy-theme", theme);
|
|
1611
|
+
const h2 = document.createElement("h2");
|
|
1612
|
+
h2.id = "blakfy-title";
|
|
1613
|
+
h2.textContent = t.title;
|
|
1614
|
+
card.appendChild(h2);
|
|
1615
|
+
const p = document.createElement("p");
|
|
1616
|
+
p.id = "blakfy-desc";
|
|
1617
|
+
p.textContent = t.intro + " ";
|
|
1618
|
+
const a = document.createElement("a");
|
|
1619
|
+
a.href = policyUrl;
|
|
1620
|
+
a.textContent = t.policyLink;
|
|
1621
|
+
p.appendChild(a);
|
|
1622
|
+
card.appendChild(p);
|
|
1623
|
+
const actions = document.createElement("div");
|
|
1624
|
+
actions.className = "blakfy-actions";
|
|
1625
|
+
const btnReject = document.createElement("button");
|
|
1626
|
+
btnReject.className = "blakfy-btn";
|
|
1627
|
+
btnReject.setAttribute("data-act", "reject");
|
|
1628
|
+
btnReject.textContent = t.rejectAll;
|
|
1629
|
+
btnReject.addEventListener("click", () => {
|
|
1630
|
+
if (onReject) onReject();
|
|
1631
|
+
});
|
|
1632
|
+
actions.appendChild(btnReject);
|
|
1633
|
+
const btnPrefs = document.createElement("button");
|
|
1634
|
+
btnPrefs.className = "blakfy-btn";
|
|
1635
|
+
btnPrefs.setAttribute("data-act", "prefs");
|
|
1636
|
+
btnPrefs.textContent = t.preferences;
|
|
1637
|
+
btnPrefs.addEventListener("click", () => {
|
|
1638
|
+
if (onPrefs) onPrefs();
|
|
1639
|
+
});
|
|
1640
|
+
actions.appendChild(btnPrefs);
|
|
1641
|
+
const btnAccept = document.createElement("button");
|
|
1642
|
+
btnAccept.className = "blakfy-btn blakfy-btn-primary";
|
|
1643
|
+
btnAccept.setAttribute("data-act", "accept");
|
|
1644
|
+
btnAccept.textContent = t.acceptAll;
|
|
1645
|
+
btnAccept.addEventListener("click", () => {
|
|
1646
|
+
if (onAccept) onAccept();
|
|
1647
|
+
});
|
|
1648
|
+
actions.appendChild(btnAccept);
|
|
1649
|
+
card.appendChild(actions);
|
|
1650
|
+
const badgeSlot = document.createElement("div");
|
|
1651
|
+
badgeSlot.className = "blakfy-badge-slot";
|
|
1652
|
+
card.appendChild(badgeSlot);
|
|
1653
|
+
return card;
|
|
1654
|
+
};
|
|
1655
|
+
|
|
1656
|
+
// src/data/service-metadata.js
|
|
1657
|
+
var SERVICE_METADATA = {
|
|
1658
|
+
ga4: {
|
|
1659
|
+
displayName: "Google Analytics 4",
|
|
1660
|
+
category: "analytics",
|
|
1661
|
+
description: "Website analytics service that collects and reports traffic data to help website owners understand how visitors interact with their site.",
|
|
1662
|
+
processor: {
|
|
1663
|
+
name: "Google Ireland Limited",
|
|
1664
|
+
address: "Gordon House, Barrow St, Dublin 4, Ireland",
|
|
1665
|
+
dpo: "https://support.google.com/policies/contact/general_privacy_form"
|
|
1666
|
+
},
|
|
1667
|
+
purposes: ["Analytics", "Performance measurement", "User behavior analysis"],
|
|
1668
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1669
|
+
dataCollected: ["IP address", "Browser information", "Usage data", "Device information", "Geographic location", "Date and time of visit", "Pages visited"],
|
|
1670
|
+
legalBasis: "consent",
|
|
1671
|
+
retention: "14 months",
|
|
1672
|
+
transferCountries: ["United States of America"],
|
|
1673
|
+
privacyUrl: "https://policies.google.com/privacy",
|
|
1674
|
+
cookiePolicyUrl: "https://policies.google.com/technologies/cookies"
|
|
1675
|
+
},
|
|
1676
|
+
gtm: {
|
|
1677
|
+
displayName: "Google Tag Manager",
|
|
1678
|
+
category: "analytics",
|
|
1679
|
+
description: "Tag management system that allows website owners to manage and deploy marketing and analytics tags without modifying the website code.",
|
|
1680
|
+
processor: {
|
|
1681
|
+
name: "Google Ireland Limited",
|
|
1682
|
+
address: "Gordon House, Barrow St, Dublin 4, Ireland",
|
|
1683
|
+
dpo: "https://support.google.com/policies/contact/general_privacy_form"
|
|
1684
|
+
},
|
|
1685
|
+
purposes: ["Tag management", "Analytics", "Marketing"],
|
|
1686
|
+
technologies: ["Website tags", "JavaScript"],
|
|
1687
|
+
dataCollected: ["Aggregated tag firing data", "Diagnostic data"],
|
|
1688
|
+
legalBasis: "consent",
|
|
1689
|
+
retention: "14 days",
|
|
1690
|
+
transferCountries: ["United States of America", "Singapore", "Chile", "Taiwan"],
|
|
1691
|
+
privacyUrl: "https://business.safety.google/privacy/",
|
|
1692
|
+
cookiePolicyUrl: "https://policies.google.com/technologies/cookies"
|
|
1693
|
+
},
|
|
1694
|
+
facebook: {
|
|
1695
|
+
displayName: "Facebook Pixel",
|
|
1696
|
+
category: "marketing",
|
|
1697
|
+
description: "Tracking technology by Meta that measures ad effectiveness and enables retargeting of users who have visited the website.",
|
|
1698
|
+
processor: {
|
|
1699
|
+
name: "Meta Platforms Ireland Ltd.",
|
|
1700
|
+
address: "4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland",
|
|
1701
|
+
dpo: "https://www.facebook.com/help/contact/1650115808681298"
|
|
1702
|
+
},
|
|
1703
|
+
purposes: ["Analytics", "Marketing", "Retargeting", "Advertisement", "Conversion tracking"],
|
|
1704
|
+
technologies: ["Cookies", "Pixel"],
|
|
1705
|
+
dataCollected: ["IP address", "Browser information", "Device information", "Pages visited", "Pixel ID", "Ads viewed", "Usage behaviour", "Referrer URL"],
|
|
1706
|
+
legalBasis: "consent",
|
|
1707
|
+
retention: "180 days",
|
|
1708
|
+
transferCountries: ["United States of America", "Singapore", "United Kingdom"],
|
|
1709
|
+
privacyUrl: "https://www.facebook.com/privacy/explanation",
|
|
1710
|
+
cookiePolicyUrl: "https://www.facebook.com/policies/cookies"
|
|
1711
|
+
},
|
|
1712
|
+
clarity: {
|
|
1713
|
+
displayName: "Microsoft Clarity",
|
|
1714
|
+
category: "analytics",
|
|
1715
|
+
description: "Behavioral analytics tool that records user sessions and generates heatmaps to help understand how visitors interact with the website.",
|
|
1716
|
+
processor: {
|
|
1717
|
+
name: "Microsoft Ireland Operations Ltd.",
|
|
1718
|
+
address: "One Microsoft Place, South County Business Park, Leopardstown, Dublin 18, Ireland",
|
|
1719
|
+
dpo: "https://aka.ms/privacyresponse"
|
|
1720
|
+
},
|
|
1721
|
+
purposes: ["Analytics", "Heatmaps", "Session recording"],
|
|
1722
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1723
|
+
dataCollected: ["IP address", "Mouse movements", "Clicks", "Scrolls", "Browser information", "Device information", "Referrer URL"],
|
|
1724
|
+
legalBasis: "consent",
|
|
1725
|
+
retention: "13 months",
|
|
1726
|
+
transferCountries: ["United States of America"],
|
|
1727
|
+
privacyUrl: "https://privacy.microsoft.com/en-us/privacystatement",
|
|
1728
|
+
cookiePolicyUrl: ""
|
|
1729
|
+
},
|
|
1730
|
+
hotjar: {
|
|
1731
|
+
displayName: "Hotjar",
|
|
1732
|
+
category: "analytics",
|
|
1733
|
+
description: "User experience analytics platform providing heatmaps, session recordings, and feedback tools to understand visitor behavior.",
|
|
1734
|
+
processor: {
|
|
1735
|
+
name: "Hotjar Ltd.",
|
|
1736
|
+
address: "Dragonara Business Centre, 5th Floor, Dragonara Road, St. Julian's STJ 3141, Malta",
|
|
1737
|
+
dpo: "privacy@hotjar.com"
|
|
1738
|
+
},
|
|
1739
|
+
purposes: ["Analytics", "Heatmaps", "User feedback", "Session recording"],
|
|
1740
|
+
technologies: ["Cookies", "Pixel", "JavaScript"],
|
|
1741
|
+
dataCollected: ["IP address", "Usage data", "Mouse movements", "Click behavior", "Device information", "Browser information"],
|
|
1742
|
+
legalBasis: "consent",
|
|
1743
|
+
retention: "365 days",
|
|
1744
|
+
transferCountries: [],
|
|
1745
|
+
privacyUrl: "https://www.hotjar.com/legal/policies/privacy/",
|
|
1746
|
+
cookiePolicyUrl: "https://www.hotjar.com/legal/policies/cookie/"
|
|
1747
|
+
},
|
|
1748
|
+
youtube: {
|
|
1749
|
+
displayName: "YouTube",
|
|
1750
|
+
category: "marketing",
|
|
1751
|
+
description: "Video hosting service by Google. When enabled, YouTube videos embedded on the website can be played and related cookies are set.",
|
|
1752
|
+
processor: {
|
|
1753
|
+
name: "Google Ireland Limited",
|
|
1754
|
+
address: "Gordon House, Barrow St, Dublin 4, Ireland",
|
|
1755
|
+
dpo: "https://support.google.com/policies/contact/general_privacy_form"
|
|
1756
|
+
},
|
|
1757
|
+
purposes: ["Marketing", "Video content delivery", "Personalisation"],
|
|
1758
|
+
technologies: ["Cookies", "Pixel"],
|
|
1759
|
+
dataCollected: ["IP address", "Browser information", "Usage data", "Video viewing data", "Device information"],
|
|
1760
|
+
legalBasis: "consent",
|
|
1761
|
+
retention: "180 days",
|
|
1762
|
+
transferCountries: ["United States of America"],
|
|
1763
|
+
privacyUrl: "https://policies.google.com/privacy",
|
|
1764
|
+
cookiePolicyUrl: "https://policies.google.com/technologies/cookies"
|
|
1765
|
+
},
|
|
1766
|
+
vimeo: {
|
|
1767
|
+
displayName: "Vimeo",
|
|
1768
|
+
category: "marketing",
|
|
1769
|
+
description: "Video hosting and sharing platform. When enabled, Vimeo videos embedded on the website can be played.",
|
|
1770
|
+
processor: {
|
|
1771
|
+
name: "Vimeo, Inc.",
|
|
1772
|
+
address: "555 West 18th Street, New York, NY 10011, USA",
|
|
1773
|
+
dpo: "privacy@vimeo.com"
|
|
1774
|
+
},
|
|
1775
|
+
purposes: ["Marketing", "Video content delivery"],
|
|
1776
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1777
|
+
dataCollected: ["IP address", "Browser information", "Video viewing data", "Device information"],
|
|
1778
|
+
legalBasis: "consent",
|
|
1779
|
+
retention: "2 years",
|
|
1780
|
+
transferCountries: ["United States of America"],
|
|
1781
|
+
privacyUrl: "https://vimeo.com/privacy",
|
|
1782
|
+
cookiePolicyUrl: "https://vimeo.com/cookie_policy"
|
|
1783
|
+
},
|
|
1784
|
+
linkedin: {
|
|
1785
|
+
displayName: "LinkedIn Insight Tag",
|
|
1786
|
+
category: "marketing",
|
|
1787
|
+
description: "Analytics and retargeting tag by LinkedIn that enables conversion tracking and retargeting of website visitors through LinkedIn Ads.",
|
|
1788
|
+
processor: {
|
|
1789
|
+
name: "LinkedIn Ireland Unlimited Company",
|
|
1790
|
+
address: "Wilton Plaza, Wilton Place, Dublin 2, Ireland",
|
|
1791
|
+
dpo: "privacy@linkedin.com"
|
|
1792
|
+
},
|
|
1793
|
+
purposes: ["Marketing", "Analytics", "Retargeting", "Conversion tracking"],
|
|
1794
|
+
technologies: ["Cookies", "Pixel"],
|
|
1795
|
+
dataCollected: ["IP address", "Device information", "Pages visited", "Referrer URL", "Professional data"],
|
|
1796
|
+
legalBasis: "consent",
|
|
1797
|
+
retention: "90 days",
|
|
1798
|
+
transferCountries: ["United States of America"],
|
|
1799
|
+
privacyUrl: "https://www.linkedin.com/legal/privacy-policy",
|
|
1800
|
+
cookiePolicyUrl: "https://www.linkedin.com/legal/cookie-policy"
|
|
1801
|
+
},
|
|
1802
|
+
yandex: {
|
|
1803
|
+
displayName: "Yandex Metrica",
|
|
1804
|
+
category: "analytics",
|
|
1805
|
+
description: "Web analytics service that collects and evaluates statistical data on user behavior for optimization and marketing purposes.",
|
|
1806
|
+
processor: {
|
|
1807
|
+
name: "Yandex LLC",
|
|
1808
|
+
address: "16 Lva Tolstogo St., Moscow 119021, Russia",
|
|
1809
|
+
dpo: ""
|
|
1810
|
+
},
|
|
1811
|
+
purposes: ["Analytics", "Optimization"],
|
|
1812
|
+
technologies: ["Cookies", "Web beacons", "Pixel"],
|
|
1813
|
+
dataCollected: ["IP address", "Browser information", "Usage data", "Device information", "Date and time of visit", "Geographic location"],
|
|
1814
|
+
legalBasis: "consent",
|
|
1815
|
+
retention: "As long as necessary",
|
|
1816
|
+
transferCountries: ["Russia"],
|
|
1817
|
+
privacyUrl: "https://yandex.com/legal/confidential/",
|
|
1818
|
+
cookiePolicyUrl: ""
|
|
1819
|
+
},
|
|
1820
|
+
bing: {
|
|
1821
|
+
displayName: "Bing Ads UET",
|
|
1822
|
+
category: "marketing",
|
|
1823
|
+
description: "Universal Event Tracking tag by Microsoft Bing that enables conversion tracking and audience targeting for Bing Ads campaigns.",
|
|
1824
|
+
processor: {
|
|
1825
|
+
name: "Microsoft Corporation",
|
|
1826
|
+
address: "One Microsoft Way, Redmond, WA 98052, USA",
|
|
1827
|
+
dpo: "https://aka.ms/privacyresponse"
|
|
1828
|
+
},
|
|
1829
|
+
purposes: ["Marketing", "Conversion tracking", "Audience targeting"],
|
|
1830
|
+
technologies: ["Cookies", "Pixel"],
|
|
1831
|
+
dataCollected: ["IP address", "Browser information", "Conversion data", "Device information"],
|
|
1832
|
+
legalBasis: "consent",
|
|
1833
|
+
retention: "180 days",
|
|
1834
|
+
transferCountries: ["United States of America"],
|
|
1835
|
+
privacyUrl: "https://privacy.microsoft.com/en-us/privacystatement",
|
|
1836
|
+
cookiePolicyUrl: ""
|
|
1837
|
+
},
|
|
1838
|
+
tiktok: {
|
|
1839
|
+
displayName: "TikTok Pixel",
|
|
1840
|
+
category: "marketing",
|
|
1841
|
+
description: "Tracking pixel by TikTok that measures ad performance and enables retargeting for TikTok advertising campaigns.",
|
|
1842
|
+
processor: {
|
|
1843
|
+
name: "TikTok Information Technologies UK Limited",
|
|
1844
|
+
address: "6th Floor, One London Wall, London EC2Y 5EB, United Kingdom",
|
|
1845
|
+
dpo: "privacy@tiktok.com"
|
|
1846
|
+
},
|
|
1847
|
+
purposes: ["Marketing", "Retargeting", "Conversion tracking"],
|
|
1848
|
+
technologies: ["Cookies", "Pixel"],
|
|
1849
|
+
dataCollected: ["IP address", "Browser information", "Usage data", "Device information", "Pages visited"],
|
|
1850
|
+
legalBasis: "consent",
|
|
1851
|
+
retention: "13 months",
|
|
1852
|
+
transferCountries: ["United States of America", "Singapore"],
|
|
1853
|
+
privacyUrl: "https://www.tiktok.com/legal/page/row/privacy-policy/en",
|
|
1854
|
+
cookiePolicyUrl: "https://www.tiktok.com/legal/page/row/cookie-policy/en"
|
|
1855
|
+
},
|
|
1856
|
+
pinterest: {
|
|
1857
|
+
displayName: "Pinterest Tag",
|
|
1858
|
+
category: "marketing",
|
|
1859
|
+
description: "Analytics and retargeting tag by Pinterest that tracks conversions and enables targeting of website visitors through Pinterest Ads.",
|
|
1860
|
+
processor: {
|
|
1861
|
+
name: "Pinterest Europe Ltd.",
|
|
1862
|
+
address: "Palmerston House, 2nd Floor, Fenian Street, Dublin 2, Ireland",
|
|
1863
|
+
dpo: "privacy@pinterest.com"
|
|
1864
|
+
},
|
|
1865
|
+
purposes: ["Marketing", "Retargeting", "Conversion tracking"],
|
|
1866
|
+
technologies: ["Cookies", "Pixel"],
|
|
1867
|
+
dataCollected: ["IP address", "Browser information", "Usage data", "Device information"],
|
|
1868
|
+
legalBasis: "consent",
|
|
1869
|
+
retention: "1 year",
|
|
1870
|
+
transferCountries: ["United States of America"],
|
|
1871
|
+
privacyUrl: "https://policy.pinterest.com/en/privacy-policy",
|
|
1872
|
+
cookiePolicyUrl: "https://policy.pinterest.com/en/cookies"
|
|
1873
|
+
},
|
|
1874
|
+
tawkto: {
|
|
1875
|
+
displayName: "Tawk.to",
|
|
1876
|
+
category: "functional",
|
|
1877
|
+
description: "Live chat widget that allows website visitors to communicate in real time with website support agents.",
|
|
1878
|
+
processor: {
|
|
1879
|
+
name: "Tawk.to, Inc.",
|
|
1880
|
+
address: "2880 Zanker Road Suite 203, San Jose, CA 95134, USA",
|
|
1881
|
+
dpo: "privacy@tawk.to"
|
|
1882
|
+
},
|
|
1883
|
+
purposes: ["Functional", "Live chat", "Customer support"],
|
|
1884
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1885
|
+
dataCollected: ["IP address", "Browser information", "Chat messages", "Usage data", "Device information"],
|
|
1886
|
+
legalBasis: "consent",
|
|
1887
|
+
retention: "2 years",
|
|
1888
|
+
transferCountries: ["United States of America"],
|
|
1889
|
+
privacyUrl: "https://www.tawk.to/privacy-policy/",
|
|
1890
|
+
cookiePolicyUrl: ""
|
|
1891
|
+
},
|
|
1892
|
+
intercom: {
|
|
1893
|
+
displayName: "Intercom",
|
|
1894
|
+
category: "functional",
|
|
1895
|
+
description: "Customer messaging platform providing live chat, in-app messaging, and customer support tools.",
|
|
1896
|
+
processor: {
|
|
1897
|
+
name: "Intercom R&D Unlimited Company",
|
|
1898
|
+
address: "2nd Floor, Stephen Court, 18-21 St. Stephen's Green, Dublin 2, Ireland",
|
|
1899
|
+
dpo: "privacy@intercom.io"
|
|
1900
|
+
},
|
|
1901
|
+
purposes: ["Functional", "Customer support", "Marketing"],
|
|
1902
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1903
|
+
dataCollected: ["IP address", "Browser information", "Chat messages", "Usage data", "Device information", "Email address"],
|
|
1904
|
+
legalBasis: "consent",
|
|
1905
|
+
retention: "2 years",
|
|
1906
|
+
transferCountries: ["United States of America"],
|
|
1907
|
+
privacyUrl: "https://www.intercom.com/legal/privacy",
|
|
1908
|
+
cookiePolicyUrl: ""
|
|
1909
|
+
},
|
|
1910
|
+
hubspot: {
|
|
1911
|
+
displayName: "HubSpot",
|
|
1912
|
+
category: "marketing",
|
|
1913
|
+
description: "CRM and marketing automation platform. Tracks website visitor behavior to enable lead generation and marketing automation.",
|
|
1914
|
+
processor: {
|
|
1915
|
+
name: "HubSpot, Inc.",
|
|
1916
|
+
address: "25 First Street, Cambridge, MA 02141, USA",
|
|
1917
|
+
dpo: "privacy@hubspot.com"
|
|
1918
|
+
},
|
|
1919
|
+
purposes: ["Marketing", "Analytics", "CRM", "Lead generation"],
|
|
1920
|
+
technologies: ["Cookies", "Pixel", "JavaScript"],
|
|
1921
|
+
dataCollected: ["IP address", "Browser information", "Form submissions", "Pages visited", "Usage data", "Email address"],
|
|
1922
|
+
legalBasis: "consent",
|
|
1923
|
+
retention: "13 months",
|
|
1924
|
+
transferCountries: ["United States of America"],
|
|
1925
|
+
privacyUrl: "https://legal.hubspot.com/privacy-policy",
|
|
1926
|
+
cookiePolicyUrl: "https://legal.hubspot.com/cookie-policy"
|
|
1927
|
+
},
|
|
1928
|
+
mailchimp: {
|
|
1929
|
+
displayName: "Mailchimp",
|
|
1930
|
+
category: "marketing",
|
|
1931
|
+
description: "Email marketing and automation platform. Tracks email campaign interactions and website activity for subscriber management.",
|
|
1932
|
+
processor: {
|
|
1933
|
+
name: "The Rocket Science Group LLC (Mailchimp)",
|
|
1934
|
+
address: "675 Ponce de Leon Ave NE, Suite 5000, Atlanta, GA 30308, USA",
|
|
1935
|
+
dpo: "privacy@mailchimp.com"
|
|
1936
|
+
},
|
|
1937
|
+
purposes: ["Marketing", "Email campaigns", "Analytics"],
|
|
1938
|
+
technologies: ["Cookies", "Pixel", "Web beacons"],
|
|
1939
|
+
dataCollected: ["IP address", "Email behaviour", "Form submissions", "Device information", "Browser information"],
|
|
1940
|
+
legalBasis: "consent",
|
|
1941
|
+
retention: "2 years",
|
|
1942
|
+
transferCountries: ["United States of America"],
|
|
1943
|
+
privacyUrl: "https://mailchimp.com/legal/privacy/",
|
|
1944
|
+
cookiePolicyUrl: "https://mailchimp.com/legal/cookies/"
|
|
1945
|
+
},
|
|
1946
|
+
maps: {
|
|
1947
|
+
displayName: "Google Maps",
|
|
1948
|
+
category: "functional",
|
|
1949
|
+
description: "Interactive maps service by Google embedded on the website to display locations and provide directions.",
|
|
1950
|
+
processor: {
|
|
1951
|
+
name: "Google Ireland Limited",
|
|
1952
|
+
address: "Gordon House, Barrow St, Dublin 4, Ireland",
|
|
1953
|
+
dpo: "https://support.google.com/policies/contact/general_privacy_form"
|
|
1954
|
+
},
|
|
1955
|
+
purposes: ["Functional", "Maps display", "Location services"],
|
|
1956
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1957
|
+
dataCollected: ["IP address", "Location data", "Usage data", "Device information"],
|
|
1958
|
+
legalBasis: "consent",
|
|
1959
|
+
retention: "6 months",
|
|
1960
|
+
transferCountries: ["United States of America"],
|
|
1961
|
+
privacyUrl: "https://policies.google.com/privacy",
|
|
1962
|
+
cookiePolicyUrl: "https://policies.google.com/technologies/cookies"
|
|
1963
|
+
},
|
|
1964
|
+
recaptcha: {
|
|
1965
|
+
displayName: "Google reCAPTCHA",
|
|
1966
|
+
category: "functional",
|
|
1967
|
+
description: "Bot detection and security service by Google that protects forms and interactive elements from automated abuse.",
|
|
1968
|
+
processor: {
|
|
1969
|
+
name: "Google Ireland Limited",
|
|
1970
|
+
address: "Gordon House, Barrow St, Dublin 4, Ireland",
|
|
1971
|
+
dpo: "https://support.google.com/policies/contact/general_privacy_form"
|
|
1972
|
+
},
|
|
1973
|
+
purposes: ["Functional", "Security", "Bot detection"],
|
|
1974
|
+
technologies: ["Cookies", "JavaScript"],
|
|
1975
|
+
dataCollected: ["IP address", "Browser fingerprint", "Usage data", "Device information", "Mouse behaviour"],
|
|
1976
|
+
legalBasis: "consent",
|
|
1977
|
+
retention: "6 months",
|
|
1978
|
+
transferCountries: ["United States of America"],
|
|
1979
|
+
privacyUrl: "https://policies.google.com/privacy",
|
|
1980
|
+
cookiePolicyUrl: "https://policies.google.com/technologies/cookies"
|
|
1981
|
+
}
|
|
1982
|
+
};
|
|
1983
|
+
|
|
1984
|
+
// src/ui/modal.js
|
|
1985
|
+
var CATEGORIES = ["essential", "analytics", "marketing", "functional"];
|
|
1986
|
+
var el = (tag, props) => {
|
|
1987
|
+
const node = document.createElement(tag);
|
|
1988
|
+
if (props) {
|
|
1989
|
+
for (const k in props) {
|
|
1990
|
+
if (k === "text") node.textContent = props[k];
|
|
1991
|
+
else if (k === "html") node.innerHTML = props[k];
|
|
1992
|
+
else if (k === "class") node.className = props[k];
|
|
1993
|
+
else node.setAttribute(k, props[k]);
|
|
1994
|
+
}
|
|
1995
|
+
}
|
|
1996
|
+
return node;
|
|
1997
|
+
};
|
|
1998
|
+
var safeGet = (obj, path, fallback) => {
|
|
1999
|
+
let cur = obj;
|
|
2000
|
+
const parts = path.split(".");
|
|
2001
|
+
for (let i = 0; i < parts.length; i++) {
|
|
2002
|
+
if (cur == null) return fallback;
|
|
2003
|
+
cur = cur[parts[i]];
|
|
2004
|
+
}
|
|
2005
|
+
return cur != null ? cur : fallback;
|
|
2006
|
+
};
|
|
2007
|
+
var buildCatRow = (key, t, alwaysOn, checked) => {
|
|
2008
|
+
const c = safeGet(t, "cat." + key, {});
|
|
2009
|
+
const row = el("div", { class: "blakfy-cat" });
|
|
2010
|
+
const text = el("div", { class: "blakfy-cat-text" });
|
|
2011
|
+
const strong = el("strong", { text: c.title || key });
|
|
2012
|
+
text.appendChild(strong);
|
|
2013
|
+
const span = el("span", { text: (c.desc || "") + (alwaysOn ? " (" + (c.always || "") + ")" : "") });
|
|
2014
|
+
text.appendChild(span);
|
|
2015
|
+
row.appendChild(text);
|
|
2016
|
+
const sw = el("button", { class: "blakfy-switch", role: "switch", "aria-checked": checked ? "true" : "false", "data-cat": key });
|
|
2017
|
+
if (alwaysOn) sw.disabled = true;
|
|
2018
|
+
sw.addEventListener("click", () => {
|
|
2019
|
+
if (sw.disabled) return;
|
|
2020
|
+
sw.setAttribute("aria-checked", sw.getAttribute("aria-checked") === "true" ? "false" : "true");
|
|
2021
|
+
});
|
|
2022
|
+
row.appendChild(sw);
|
|
2023
|
+
return row;
|
|
2024
|
+
};
|
|
2025
|
+
var buildCategoriesPanel = (t, current, card, onSave, onAccept) => {
|
|
2026
|
+
const panel = el("div", { class: "blakfy-tab-panel", "data-panel": "categories", "aria-hidden": "false" });
|
|
2027
|
+
panel.appendChild(buildCatRow("essential", t, true, true));
|
|
2028
|
+
panel.appendChild(buildCatRow("analytics", t, false, !!current.analytics));
|
|
2029
|
+
panel.appendChild(buildCatRow("marketing", t, false, !!current.marketing));
|
|
2030
|
+
panel.appendChild(buildCatRow("functional", t, false, !!current.functional));
|
|
2031
|
+
const actions = el("div", { class: "blakfy-actions" });
|
|
2032
|
+
actions.style.marginTop = "16px";
|
|
2033
|
+
const btnSave = el("button", { class: "blakfy-btn", "data-act": "save", text: t.save || "Save" });
|
|
2034
|
+
btnSave.addEventListener("click", () => {
|
|
2035
|
+
const prefs = {};
|
|
2036
|
+
for (let i = 0; i < CATEGORIES.length; i++) {
|
|
2037
|
+
const k = CATEGORIES[i];
|
|
2038
|
+
if (k === "essential") continue;
|
|
2039
|
+
const sw = card.querySelector('[data-cat="' + k + '"]');
|
|
2040
|
+
prefs[k] = sw ? sw.getAttribute("aria-checked") === "true" : false;
|
|
2041
|
+
}
|
|
2042
|
+
if (onSave) onSave(prefs);
|
|
2043
|
+
});
|
|
2044
|
+
actions.appendChild(btnSave);
|
|
2045
|
+
const btnAccept = el("button", { class: "blakfy-btn blakfy-btn-primary", "data-act": "accept", text: t.acceptAll || "Accept All" });
|
|
2046
|
+
btnAccept.addEventListener("click", () => {
|
|
2047
|
+
if (onAccept) onAccept();
|
|
2048
|
+
});
|
|
2049
|
+
actions.appendChild(btnAccept);
|
|
2050
|
+
panel.appendChild(actions);
|
|
2051
|
+
return panel;
|
|
2052
|
+
};
|
|
2053
|
+
var buildServiceCard = (presetKey, meta, t) => {
|
|
2054
|
+
const s = safeGet(t, "service", {});
|
|
2055
|
+
const card = el("div", { class: "blakfy-service-card" });
|
|
2056
|
+
const header = el("div", { class: "blakfy-service-card-header" });
|
|
2057
|
+
header.appendChild(el("span", { class: "blakfy-service-name", text: meta.displayName }));
|
|
2058
|
+
header.appendChild(el("span", { class: "blakfy-service-cat", text: meta.category }));
|
|
2059
|
+
const toggle = el("span", { class: "blakfy-service-toggle", text: "\u25B8" });
|
|
2060
|
+
header.appendChild(toggle);
|
|
2061
|
+
card.appendChild(header);
|
|
2062
|
+
const body = el("div", { class: "blakfy-service-body", "aria-hidden": "true" });
|
|
2063
|
+
const dl = el("dl", { class: "blakfy-service-dl" });
|
|
2064
|
+
const addRow = (label, value) => {
|
|
2065
|
+
if (!value) return;
|
|
2066
|
+
const dt = el("dt", { class: "blakfy-service-dt", text: label });
|
|
2067
|
+
const dd = el("dd", { class: "blakfy-service-dd", text: value });
|
|
2068
|
+
dl.appendChild(dt);
|
|
2069
|
+
dl.appendChild(dd);
|
|
2070
|
+
};
|
|
2071
|
+
addRow(s.description || "Description", meta.description);
|
|
2072
|
+
addRow(s.processor || "Data Processor", meta.processor && meta.processor.name ? meta.processor.name : "");
|
|
2073
|
+
addRow(s.address || "Address", meta.processor && meta.processor.address ? meta.processor.address : "");
|
|
2074
|
+
if (meta.processor && meta.processor.dpo && meta.processor.dpo.indexOf("http") !== 0) {
|
|
2075
|
+
addRow(s.dpo || "DPO Contact", meta.processor.dpo);
|
|
2076
|
+
}
|
|
2077
|
+
addRow(s.purposes || "Purposes", meta.purposes && meta.purposes.length ? meta.purposes.join(", ") : "");
|
|
2078
|
+
addRow(s.technologies || "Technologies Used", meta.technologies && meta.technologies.length ? meta.technologies.join(", ") : "");
|
|
2079
|
+
addRow(s.dataCollected || "Data Collected", meta.dataCollected && meta.dataCollected.length ? meta.dataCollected.join(", ") : "");
|
|
2080
|
+
const lbv = safeGet(t, "service.legalBasisValues", {});
|
|
2081
|
+
const lbLabel = lbv[meta.legalBasis] || s.legalBasisValues && s.legalBasisValues[meta.legalBasis] || meta.legalBasis || "";
|
|
2082
|
+
addRow(s.legalBasis || "Legal Basis", lbLabel);
|
|
2083
|
+
addRow(s.retention || "Retention Period", meta.retention);
|
|
2084
|
+
addRow(s.transferCountries || "Transfer Countries", meta.transferCountries && meta.transferCountries.length ? meta.transferCountries.join(", ") : "");
|
|
2085
|
+
body.appendChild(dl);
|
|
2086
|
+
if (meta.privacyUrl && meta.privacyUrl.length || meta.cookiePolicyUrl && meta.cookiePolicyUrl.length) {
|
|
2087
|
+
const links = el("div", { class: "blakfy-service-links" });
|
|
2088
|
+
if (meta.privacyUrl) {
|
|
2089
|
+
const a = el("a", { href: meta.privacyUrl, target: "_blank", rel: "noopener noreferrer", text: s.privacyPolicy || "Privacy Policy" });
|
|
2090
|
+
links.appendChild(a);
|
|
2091
|
+
}
|
|
2092
|
+
if (meta.cookiePolicyUrl) {
|
|
2093
|
+
const a = el("a", { href: meta.cookiePolicyUrl, target: "_blank", rel: "noopener noreferrer", text: s.cookiePolicy || "Cookie Policy" });
|
|
2094
|
+
links.appendChild(a);
|
|
2095
|
+
}
|
|
2096
|
+
body.appendChild(links);
|
|
2097
|
+
}
|
|
2098
|
+
card.appendChild(body);
|
|
2099
|
+
header.addEventListener("click", () => {
|
|
2100
|
+
const hidden = body.getAttribute("aria-hidden") === "true";
|
|
2101
|
+
body.setAttribute("aria-hidden", hidden ? "false" : "true");
|
|
2102
|
+
toggle.textContent = hidden ? "\u25BE" : "\u25B8";
|
|
2103
|
+
});
|
|
2104
|
+
return card;
|
|
2105
|
+
};
|
|
2106
|
+
var buildServicesPanel = (activePresets, t) => {
|
|
2107
|
+
const panel = el("div", { class: "blakfy-tab-panel", "data-panel": "services", "aria-hidden": "true" });
|
|
2108
|
+
const list = el("div", { class: "blakfy-service-list" });
|
|
2109
|
+
if (!activePresets || activePresets.length === 0) {
|
|
2110
|
+
const empty = el("p", { class: "blakfy-svc-empty", text: safeGet(t, "service.noServices", "No services configured.") });
|
|
2111
|
+
list.appendChild(empty);
|
|
2112
|
+
} else {
|
|
2113
|
+
for (let i = 0; i < activePresets.length; i++) {
|
|
2114
|
+
const { key, meta } = activePresets[i];
|
|
2115
|
+
if (meta) list.appendChild(buildServiceCard(key, meta, t));
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2118
|
+
panel.appendChild(list);
|
|
2119
|
+
return panel;
|
|
2120
|
+
};
|
|
2121
|
+
var buildAboutPanel = (t, version) => {
|
|
2122
|
+
const panel = el("div", { class: "blakfy-tab-panel", "data-panel": "about", "aria-hidden": "true" });
|
|
2123
|
+
const content = el("div", { class: "blakfy-about-panel" });
|
|
2124
|
+
const brand = el("div", { class: "blakfy-about-brand" });
|
|
2125
|
+
brand.appendChild(el("strong", { text: "Blakfy Studio" }));
|
|
2126
|
+
content.appendChild(brand);
|
|
2127
|
+
const ab = safeGet(t, "svcAbout", {});
|
|
2128
|
+
if (ab.title) content.appendChild(el("p", { text: "" })).textContent = ab.title ? "" : "";
|
|
2129
|
+
const desc = el("p", { text: ab.description || "This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences." });
|
|
2130
|
+
content.appendChild(desc);
|
|
2131
|
+
const meta = el("p", { class: "blakfy-about-meta" });
|
|
2132
|
+
meta.textContent = (ab.version || "Version") + ": " + (version || "");
|
|
2133
|
+
content.appendChild(meta);
|
|
2134
|
+
const a = el("a", { href: "https://blakfy.com", target: "_blank", rel: "noopener noreferrer", text: ab.learnMore || "Learn more at blakfy.com" });
|
|
2135
|
+
content.appendChild(a);
|
|
2136
|
+
panel.appendChild(content);
|
|
2137
|
+
return panel;
|
|
2138
|
+
};
|
|
2139
|
+
var initTabs = (card) => {
|
|
2140
|
+
const btns = card.querySelectorAll(".blakfy-tab-btn");
|
|
2141
|
+
const panels = card.querySelectorAll(".blakfy-tab-panel");
|
|
2142
|
+
const switchTab = (target) => {
|
|
2143
|
+
for (let i = 0; i < btns.length; i++) {
|
|
2144
|
+
const active = btns[i].getAttribute("data-tab") === target;
|
|
2145
|
+
btns[i].setAttribute("aria-selected", active ? "true" : "false");
|
|
2146
|
+
if (active) btns[i].classList.add("blakfy-tab-btn--active");
|
|
2147
|
+
else btns[i].classList.remove("blakfy-tab-btn--active");
|
|
2148
|
+
}
|
|
2149
|
+
for (let i = 0; i < panels.length; i++) {
|
|
2150
|
+
panels[i].setAttribute("aria-hidden", panels[i].getAttribute("data-panel") === target ? "false" : "true");
|
|
2151
|
+
}
|
|
2152
|
+
};
|
|
2153
|
+
for (let i = 0; i < btns.length; i++) {
|
|
2154
|
+
btns[i].addEventListener("click", function() {
|
|
2155
|
+
switchTab(this.getAttribute("data-tab"));
|
|
2156
|
+
});
|
|
2157
|
+
}
|
|
2158
|
+
};
|
|
2159
|
+
var createModal = ({ t, isRTL, accent, theme, currentState, presets, version, onSave, onAccept, onClose }) => {
|
|
2160
|
+
const current = currentState || { analytics: false, marketing: false, functional: false };
|
|
2161
|
+
const card = el("div", { class: "blakfy-card", role: "dialog", "aria-labelledby": "blakfy-mtitle" });
|
|
2162
|
+
card.setAttribute("dir", isRTL ? "rtl" : "ltr");
|
|
2163
|
+
card.style.cssText = "--blakfy-accent:" + accent + ";position:relative";
|
|
2164
|
+
if (theme && theme !== "light") card.setAttribute("data-blakfy-theme", theme);
|
|
2165
|
+
const closeBtn = el("button", { class: "blakfy-close", "aria-label": t.close || "Close", "data-act": "close", text: "\xD7" });
|
|
2166
|
+
closeBtn.addEventListener("click", () => {
|
|
2167
|
+
if (onClose) onClose();
|
|
2168
|
+
});
|
|
2169
|
+
card.appendChild(closeBtn);
|
|
2170
|
+
const h2 = el("h2", { id: "blakfy-mtitle", text: t.title || "Cookie Preferences" });
|
|
2171
|
+
card.appendChild(h2);
|
|
2172
|
+
const tabs = safeGet(t, "tabs", { categories: "Categories", services: "Services", about: "About" });
|
|
2173
|
+
const tabBar = el("nav", { class: "blakfy-tabs", role: "tablist" });
|
|
2174
|
+
const makeTabBtn = (id, label, active) => {
|
|
2175
|
+
const btn = el("button", { class: "blakfy-tab-btn" + (active ? " blakfy-tab-btn--active" : ""), role: "tab", "data-tab": id, "aria-selected": active ? "true" : "false", text: label });
|
|
2176
|
+
return btn;
|
|
2177
|
+
};
|
|
2178
|
+
tabBar.appendChild(makeTabBtn("categories", tabs.categories || "Categories", true));
|
|
2179
|
+
tabBar.appendChild(makeTabBtn("services", tabs.services || "Services", false));
|
|
2180
|
+
tabBar.appendChild(makeTabBtn("about", tabs.about || "About", false));
|
|
2181
|
+
card.appendChild(tabBar);
|
|
2182
|
+
const enriched = [];
|
|
2183
|
+
if (presets && presets.length) {
|
|
2184
|
+
for (let i = 0; i < presets.length; i++) {
|
|
2185
|
+
const key = typeof presets[i] === "string" ? presets[i] : presets[i].key;
|
|
2186
|
+
const meta = SERVICE_METADATA[key] || (typeof presets[i] === "object" ? presets[i].meta : null);
|
|
2187
|
+
if (meta) enriched.push({ key, meta });
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
card.appendChild(buildCategoriesPanel(t, current, card, onSave, onAccept));
|
|
2191
|
+
card.appendChild(buildServicesPanel(enriched, t));
|
|
2192
|
+
card.appendChild(buildAboutPanel(t, version));
|
|
2193
|
+
card.appendChild(el("div", { class: "blakfy-badge-slot" }));
|
|
2194
|
+
initTabs(card);
|
|
2195
|
+
return card;
|
|
2196
|
+
};
|
|
2197
|
+
|
|
2198
|
+
// src/ui/badge.js
|
|
2199
|
+
var BADGE_HREF = "https://blakfy.com";
|
|
2200
|
+
var BADGE_TEXT_PREFIX = "Powered by ";
|
|
2201
|
+
var BADGE_BRAND = "Blakfy Studio";
|
|
2202
|
+
var BADGE_CLASS = "blakfy-badge";
|
|
2203
|
+
var PROTECT_STYLE_ID = "blakfy-badge-protect";
|
|
2204
|
+
var PROTECT_CSS = ".blakfy-badge{display:flex !important;visibility:visible !important;opacity:0.6 !important;pointer-events:auto !important;}.blakfy-badge:hover{opacity:1 !important;}.blakfy-badge[hidden]{display:flex !important;}";
|
|
2205
|
+
var mountedBadges = /* @__PURE__ */ new Set();
|
|
2206
|
+
var slotMap = /* @__PURE__ */ new WeakMap();
|
|
2207
|
+
var observer = null;
|
|
2208
|
+
var intervalId = null;
|
|
2209
|
+
var rootRef = null;
|
|
2210
|
+
var buildBadge = () => {
|
|
2211
|
+
const a = document.createElement("a");
|
|
2212
|
+
a.href = BADGE_HREF;
|
|
2213
|
+
a.target = "_blank";
|
|
2214
|
+
a.rel = "noopener noreferrer";
|
|
2215
|
+
a.className = BADGE_CLASS;
|
|
2216
|
+
a.setAttribute("aria-label", "Powered by Blakfy Studio \u2014 opens in new tab");
|
|
2217
|
+
const prefix = document.createTextNode(BADGE_TEXT_PREFIX);
|
|
2218
|
+
a.appendChild(prefix);
|
|
2219
|
+
const strong = document.createElement("strong");
|
|
2220
|
+
strong.textContent = BADGE_BRAND;
|
|
2221
|
+
a.appendChild(strong);
|
|
2222
|
+
let cssText = "display: flex !important; align-items: center; gap: 4px;position: absolute; bottom: 8px; right: 12px;font-size: 11px; font-family: system-ui, -apple-system, sans-serif;color: inherit; text-decoration: none;opacity: 0.6 !important; transition: opacity 0.2s;pointer-events: auto !important;z-index: 1;";
|
|
2223
|
+
a.style.cssText = cssText;
|
|
2224
|
+
return a;
|
|
2225
|
+
};
|
|
2226
|
+
var applyRTL = (badge) => {
|
|
2227
|
+
const rtlAncestor = badge.closest && badge.closest("[dir=rtl]");
|
|
2228
|
+
if (rtlAncestor) {
|
|
2229
|
+
badge.style.right = "auto";
|
|
2230
|
+
badge.style.left = "12px";
|
|
2231
|
+
}
|
|
2232
|
+
};
|
|
2233
|
+
var injectProtectStyle = () => {
|
|
2234
|
+
if (typeof document === "undefined") return;
|
|
2235
|
+
if (document.getElementById(PROTECT_STYLE_ID)) return;
|
|
2236
|
+
const style = document.createElement("style");
|
|
2237
|
+
style.id = PROTECT_STYLE_ID;
|
|
2238
|
+
style.textContent = PROTECT_CSS;
|
|
2239
|
+
(document.head || document.documentElement).appendChild(style);
|
|
2240
|
+
};
|
|
2241
|
+
var replaceBadge = (oldBadge) => {
|
|
2242
|
+
const slot = slotMap.get(oldBadge);
|
|
2243
|
+
const fresh = buildBadge();
|
|
2244
|
+
if (oldBadge.parentNode) {
|
|
2245
|
+
oldBadge.parentNode.replaceChild(fresh, oldBadge);
|
|
2246
|
+
} else if (slot && slot.isConnected) {
|
|
2247
|
+
slot.appendChild(fresh);
|
|
2248
|
+
} else if (rootRef) {
|
|
2249
|
+
rootRef.appendChild(fresh);
|
|
2250
|
+
}
|
|
2251
|
+
mountedBadges.delete(oldBadge);
|
|
2252
|
+
mountedBadges.add(fresh);
|
|
2253
|
+
if (slot) slotMap.set(fresh, slot);
|
|
2254
|
+
applyRTL(fresh);
|
|
2255
|
+
return fresh;
|
|
2256
|
+
};
|
|
2257
|
+
var reAttachBadge = (badge) => {
|
|
2258
|
+
const slot = slotMap.get(badge);
|
|
2259
|
+
if (badge.isConnected) return badge;
|
|
2260
|
+
const fresh = buildBadge();
|
|
2261
|
+
if (slot && slot.isConnected) {
|
|
2262
|
+
slot.appendChild(fresh);
|
|
2263
|
+
} else if (rootRef) {
|
|
2264
|
+
rootRef.appendChild(fresh);
|
|
2265
|
+
} else {
|
|
2266
|
+
return badge;
|
|
2267
|
+
}
|
|
2268
|
+
mountedBadges.delete(badge);
|
|
2269
|
+
mountedBadges.add(fresh);
|
|
2270
|
+
if (slot) slotMap.set(fresh, slot);
|
|
2271
|
+
applyRTL(fresh);
|
|
2272
|
+
return fresh;
|
|
2273
|
+
};
|
|
2274
|
+
var mountBadges = (rootEl) => {
|
|
2275
|
+
if (!rootEl) return [];
|
|
2276
|
+
rootRef = rootEl;
|
|
2277
|
+
const slots = rootEl.querySelectorAll(".blakfy-badge-slot");
|
|
2278
|
+
const result = [];
|
|
2279
|
+
for (let i = 0; i < slots.length; i++) {
|
|
2280
|
+
const slot = slots[i];
|
|
2281
|
+
const existing = slot.querySelector("." + BADGE_CLASS);
|
|
2282
|
+
if (existing) {
|
|
2283
|
+
mountedBadges.add(existing);
|
|
2284
|
+
slotMap.set(existing, slot);
|
|
2285
|
+
applyRTL(existing);
|
|
2286
|
+
result.push(existing);
|
|
2287
|
+
continue;
|
|
2288
|
+
}
|
|
2289
|
+
const badge = buildBadge();
|
|
2290
|
+
while (slot.firstChild) slot.removeChild(slot.firstChild);
|
|
2291
|
+
slot.appendChild(badge);
|
|
2292
|
+
mountedBadges.add(badge);
|
|
2293
|
+
slotMap.set(badge, slot);
|
|
2294
|
+
applyRTL(badge);
|
|
2295
|
+
result.push(badge);
|
|
2296
|
+
}
|
|
2297
|
+
return result;
|
|
2298
|
+
};
|
|
2299
|
+
var verifyBadges = () => {
|
|
2300
|
+
if (typeof window === "undefined" || !window.getComputedStyle) return;
|
|
2301
|
+
const snapshot = Array.from(mountedBadges);
|
|
2302
|
+
for (let i = 0; i < snapshot.length; i++) {
|
|
2303
|
+
const badge = snapshot[i];
|
|
2304
|
+
if (!badge.isConnected) {
|
|
2305
|
+
reAttachBadge(badge);
|
|
2306
|
+
continue;
|
|
2307
|
+
}
|
|
2308
|
+
const cs = window.getComputedStyle(badge);
|
|
2309
|
+
const opacity = parseFloat(cs.opacity);
|
|
2310
|
+
if (isFinite(opacity) && opacity < 0.5 || cs.display === "none" || cs.visibility === "hidden") {
|
|
2311
|
+
replaceBadge(badge);
|
|
2312
|
+
}
|
|
2313
|
+
}
|
|
2314
|
+
if (!document.getElementById(PROTECT_STYLE_ID)) {
|
|
2315
|
+
injectProtectStyle();
|
|
2316
|
+
}
|
|
2317
|
+
};
|
|
2318
|
+
var handleMutations = (records) => {
|
|
2319
|
+
let needsStyleReinject = false;
|
|
2320
|
+
const removedBadges = [];
|
|
2321
|
+
const mutatedBadges = [];
|
|
2322
|
+
for (let i = 0; i < records.length; i++) {
|
|
2323
|
+
const rec = records[i];
|
|
2324
|
+
if (rec.type === "childList") {
|
|
2325
|
+
for (let j = 0; j < rec.removedNodes.length; j++) {
|
|
2326
|
+
const node = rec.removedNodes[j];
|
|
2327
|
+
if (!node || node.nodeType !== 1) continue;
|
|
2328
|
+
if (node.id === PROTECT_STYLE_ID) {
|
|
2329
|
+
needsStyleReinject = true;
|
|
2330
|
+
}
|
|
2331
|
+
if (mountedBadges.has(node)) {
|
|
2332
|
+
removedBadges.push(node);
|
|
2333
|
+
} else if (node.querySelector) {
|
|
2334
|
+
const inner = node.querySelector("." + BADGE_CLASS);
|
|
2335
|
+
if (inner && mountedBadges.has(inner)) {
|
|
2336
|
+
removedBadges.push(inner);
|
|
2337
|
+
}
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
} else if (rec.type === "attributes") {
|
|
2341
|
+
const target = rec.target;
|
|
2342
|
+
if (target && mountedBadges.has(target)) {
|
|
2343
|
+
mutatedBadges.push(target);
|
|
2344
|
+
}
|
|
2345
|
+
}
|
|
2346
|
+
}
|
|
2347
|
+
if (needsStyleReinject) {
|
|
2348
|
+
setTimeout(injectProtectStyle, 0);
|
|
2349
|
+
}
|
|
2350
|
+
if (removedBadges.length) {
|
|
2351
|
+
setTimeout(() => {
|
|
2352
|
+
for (let i = 0; i < removedBadges.length; i++) {
|
|
2353
|
+
reAttachBadge(removedBadges[i]);
|
|
2354
|
+
}
|
|
2355
|
+
}, 50);
|
|
2356
|
+
}
|
|
2357
|
+
for (let i = 0; i < mutatedBadges.length; i++) {
|
|
2358
|
+
replaceBadge(mutatedBadges[i]);
|
|
2359
|
+
}
|
|
2360
|
+
};
|
|
2361
|
+
var installAntiTamper = (rootEl) => {
|
|
2362
|
+
if (!rootEl || typeof MutationObserver === "undefined") return;
|
|
2363
|
+
rootRef = rootEl;
|
|
2364
|
+
injectProtectStyle();
|
|
2365
|
+
if (observer) observer.disconnect();
|
|
2366
|
+
observer = new MutationObserver(handleMutations);
|
|
2367
|
+
observer.observe(rootEl, {
|
|
2368
|
+
childList: true,
|
|
2369
|
+
attributes: true,
|
|
2370
|
+
subtree: true,
|
|
2371
|
+
attributeFilter: ["style", "class", "hidden"]
|
|
2372
|
+
});
|
|
2373
|
+
if (document.head) {
|
|
2374
|
+
observer.observe(document.head, { childList: true, subtree: false });
|
|
2375
|
+
}
|
|
2376
|
+
if (intervalId) clearInterval(intervalId);
|
|
2377
|
+
intervalId = setInterval(verifyBadges, 2e3);
|
|
2378
|
+
};
|
|
2379
|
+
|
|
2380
|
+
// src/ui/focus-trap.js
|
|
2381
|
+
var FOCUSABLE = 'button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
|
|
2382
|
+
var activeRoot = null;
|
|
2383
|
+
var activeHandler = null;
|
|
2384
|
+
var activeEscape = null;
|
|
2385
|
+
var installFocusTrap = (rootEl, options) => {
|
|
2386
|
+
removeFocusTrap();
|
|
2387
|
+
if (!rootEl) return;
|
|
2388
|
+
activeRoot = rootEl;
|
|
2389
|
+
activeEscape = options && options.onEscape;
|
|
2390
|
+
activeHandler = (e) => {
|
|
2391
|
+
if (!activeRoot) return;
|
|
2392
|
+
if (e.key === "Escape") {
|
|
2393
|
+
if (typeof activeEscape === "function") {
|
|
2394
|
+
e.preventDefault();
|
|
2395
|
+
activeEscape();
|
|
2396
|
+
}
|
|
2397
|
+
return;
|
|
2398
|
+
}
|
|
2399
|
+
if (e.key !== "Tab") return;
|
|
2400
|
+
const nodes = activeRoot.querySelectorAll(FOCUSABLE);
|
|
2401
|
+
if (!nodes.length) return;
|
|
2402
|
+
const first = nodes[0];
|
|
2403
|
+
const last = nodes[nodes.length - 1];
|
|
2404
|
+
if (e.shiftKey && document.activeElement === first) {
|
|
2405
|
+
e.preventDefault();
|
|
2406
|
+
last.focus();
|
|
2407
|
+
} else if (!e.shiftKey && document.activeElement === last) {
|
|
2408
|
+
e.preventDefault();
|
|
2409
|
+
first.focus();
|
|
2410
|
+
}
|
|
2411
|
+
};
|
|
2412
|
+
document.addEventListener("keydown", activeHandler);
|
|
2413
|
+
const firstFocusable = rootEl.querySelector(FOCUSABLE);
|
|
2414
|
+
if (firstFocusable) firstFocusable.focus();
|
|
2415
|
+
};
|
|
2416
|
+
var removeFocusTrap = () => {
|
|
2417
|
+
if (activeHandler) {
|
|
2418
|
+
document.removeEventListener("keydown", activeHandler);
|
|
2419
|
+
}
|
|
2420
|
+
activeRoot = null;
|
|
2421
|
+
activeHandler = null;
|
|
2422
|
+
activeEscape = null;
|
|
2423
|
+
};
|
|
2424
|
+
|
|
2425
|
+
// src/ui/status-bar.js
|
|
2426
|
+
var STATUS_COLORS = {
|
|
2427
|
+
info: "#1a56db",
|
|
2428
|
+
warning: "#b45309",
|
|
2429
|
+
error: "#dc2626",
|
|
2430
|
+
success: "#057a55",
|
|
2431
|
+
maintenance: "#6d28d9"
|
|
2432
|
+
};
|
|
2433
|
+
var statusRoot = null;
|
|
2434
|
+
var statusData = null;
|
|
2435
|
+
var resolveStatusMessage = (data, currentLocale, mainLang) => {
|
|
2436
|
+
const msgs = data && data.message;
|
|
2437
|
+
if (!msgs) return null;
|
|
2438
|
+
return msgs[currentLocale] || msgs[mainLang] || msgs["en"] || msgs[Object.keys(msgs)[0]] || null;
|
|
2439
|
+
};
|
|
2440
|
+
var dismissKey = (data) => "blakfy_status_" + (data && data._id || "default");
|
|
2441
|
+
var dismissStatus = () => {
|
|
2442
|
+
if (!statusRoot) return;
|
|
2443
|
+
try {
|
|
2444
|
+
sessionStorage.setItem(dismissKey(statusData), "1");
|
|
2445
|
+
} catch (e) {
|
|
2446
|
+
}
|
|
2447
|
+
if (statusRoot.parentNode) statusRoot.parentNode.removeChild(statusRoot);
|
|
2448
|
+
statusRoot = null;
|
|
2449
|
+
statusData = null;
|
|
2450
|
+
};
|
|
2451
|
+
var renderStatus = ({ data, currentLocale, mainLang }) => {
|
|
2452
|
+
const msg = resolveStatusMessage(data, currentLocale, mainLang);
|
|
2453
|
+
if (!msg) return;
|
|
2454
|
+
try {
|
|
2455
|
+
if (sessionStorage.getItem(dismissKey(data)) === "1") return;
|
|
2456
|
+
} catch (e) {
|
|
2457
|
+
}
|
|
2458
|
+
const rtl = RTL_LOCALES.indexOf(currentLocale) > -1;
|
|
2459
|
+
const bg = STATUS_COLORS[data.type] || STATUS_COLORS.info;
|
|
2460
|
+
if (statusRoot && statusRoot.parentNode) {
|
|
2461
|
+
statusRoot.parentNode.removeChild(statusRoot);
|
|
2462
|
+
}
|
|
2463
|
+
const root = document.createElement("div");
|
|
2464
|
+
root.className = "blakfy-status";
|
|
2465
|
+
root.setAttribute("role", "status");
|
|
2466
|
+
root.setAttribute("dir", rtl ? "rtl" : "ltr");
|
|
2467
|
+
root.style.cssText = "background:" + bg + ";color:#fff";
|
|
2468
|
+
const span = document.createElement("span");
|
|
2469
|
+
span.className = "blakfy-status-msg";
|
|
2470
|
+
span.textContent = msg;
|
|
2471
|
+
root.appendChild(span);
|
|
2472
|
+
const btn = document.createElement("button");
|
|
2473
|
+
btn.className = "blakfy-status-dismiss";
|
|
2474
|
+
btn.setAttribute("aria-label", "close");
|
|
2475
|
+
btn.textContent = "\u2715";
|
|
2476
|
+
btn.addEventListener("click", dismissStatus);
|
|
2477
|
+
root.appendChild(btn);
|
|
2478
|
+
document.body.appendChild(root);
|
|
2479
|
+
statusRoot = root;
|
|
2480
|
+
statusData = data;
|
|
2481
|
+
};
|
|
2482
|
+
var fetchStatus = (url) => {
|
|
2483
|
+
if (!url) return Promise.resolve(null);
|
|
2484
|
+
return fetch(url + (url.indexOf("?") > -1 ? "&" : "?") + "_=" + Date.now(), { cache: "no-store" }).then((r) => r.json()).then((data) => {
|
|
2485
|
+
if (!data || !data.active) return null;
|
|
2486
|
+
if (data.expires && new Date(data.expires) < /* @__PURE__ */ new Date()) return null;
|
|
2487
|
+
data._id = (data.expires || "") + (data.type || "");
|
|
2488
|
+
return data;
|
|
2489
|
+
}).catch(() => null);
|
|
2490
|
+
};
|
|
2491
|
+
|
|
2492
|
+
// src/gating/script-unblocker.js
|
|
2493
|
+
var SKIP_ATTRS = { type: 1 };
|
|
2494
|
+
var isSkippedAttr = (name) => {
|
|
2495
|
+
if (SKIP_ATTRS[name]) return true;
|
|
2496
|
+
if (name.indexOf("data-blakfy-") === 0) return true;
|
|
2497
|
+
return false;
|
|
2498
|
+
};
|
|
2499
|
+
var unblockScripts = (category) => {
|
|
2500
|
+
if (typeof document === "undefined" || !category) return 0;
|
|
2501
|
+
const sel = 'script[type="text/plain"][data-blakfy-category="' + category + '"]:not([data-blakfy-unblocked="true"])';
|
|
2502
|
+
const nodes = document.querySelectorAll(sel);
|
|
2503
|
+
let count = 0;
|
|
2504
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
2505
|
+
const orig = nodes[i];
|
|
2506
|
+
const fresh = document.createElement("script");
|
|
2507
|
+
const attrs = orig.attributes;
|
|
2508
|
+
for (let j = 0; j < attrs.length; j++) {
|
|
2509
|
+
const a = attrs[j];
|
|
2510
|
+
if (isSkippedAttr(a.name)) continue;
|
|
2511
|
+
try {
|
|
2512
|
+
fresh.setAttribute(a.name, a.value);
|
|
2513
|
+
} catch (e) {
|
|
2514
|
+
}
|
|
2515
|
+
}
|
|
2516
|
+
const blakfySrc = orig.getAttribute("data-blakfy-src");
|
|
2517
|
+
if (blakfySrc) {
|
|
2518
|
+
fresh.src = blakfySrc;
|
|
2519
|
+
} else {
|
|
2520
|
+
fresh.text = orig.textContent || "";
|
|
2521
|
+
}
|
|
2522
|
+
orig.setAttribute("data-blakfy-unblocked", "true");
|
|
2523
|
+
if (orig.parentNode) {
|
|
2524
|
+
orig.parentNode.replaceChild(fresh, orig);
|
|
2525
|
+
count++;
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
return count;
|
|
2529
|
+
};
|
|
2530
|
+
|
|
2531
|
+
// src/gating/placeholder.js
|
|
2532
|
+
var fmt = (tpl, vars) => {
|
|
2533
|
+
if (!tpl) return "";
|
|
2534
|
+
return tpl.replace(/\{(\w+)\}/g, (_, k) => vars && vars[k] != null ? vars[k] : "{" + k + "}");
|
|
2535
|
+
};
|
|
2536
|
+
var createPlaceholder = ({ category, srcUrl, t, onAccept }) => {
|
|
2537
|
+
const ph = t && t.placeholder || {};
|
|
2538
|
+
const titleText = ph.title || "Content blocked";
|
|
2539
|
+
const descText = fmt(ph.desc || "Allow {category} cookies to view this content.", { category: category || "" });
|
|
2540
|
+
const ctaText = ph.cta || "Allow";
|
|
2541
|
+
const wrap = document.createElement("div");
|
|
2542
|
+
wrap.className = "blakfy-placeholder";
|
|
2543
|
+
wrap.setAttribute("role", "region");
|
|
2544
|
+
wrap.setAttribute("aria-label", titleText);
|
|
2545
|
+
wrap.style.cssText = [
|
|
2546
|
+
"box-sizing:border-box",
|
|
2547
|
+
"display:flex",
|
|
2548
|
+
"flex-direction:column",
|
|
2549
|
+
"align-items:center",
|
|
2550
|
+
"justify-content:center",
|
|
2551
|
+
"gap:12px",
|
|
2552
|
+
"padding:24px",
|
|
2553
|
+
"min-height:200px",
|
|
2554
|
+
"width:100%",
|
|
2555
|
+
"border:1px solid #d0d7de",
|
|
2556
|
+
"border-radius:12px",
|
|
2557
|
+
"background:#f6f8fa",
|
|
2558
|
+
"color:#1f2328",
|
|
2559
|
+
"font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif",
|
|
2560
|
+
"font-size:14px",
|
|
2561
|
+
"line-height:1.5",
|
|
2562
|
+
"text-align:center"
|
|
2563
|
+
].join(";");
|
|
2564
|
+
const icon = document.createElement("div");
|
|
2565
|
+
icon.setAttribute("aria-hidden", "true");
|
|
2566
|
+
icon.style.cssText = "font-size:28px;line-height:1";
|
|
2567
|
+
icon.textContent = "\u{1F512}";
|
|
2568
|
+
wrap.appendChild(icon);
|
|
2569
|
+
const title = document.createElement("div");
|
|
2570
|
+
title.style.cssText = "font-weight:600;font-size:16px;color:#1f2328";
|
|
2571
|
+
title.textContent = titleText;
|
|
2572
|
+
wrap.appendChild(title);
|
|
2573
|
+
const desc = document.createElement("div");
|
|
2574
|
+
desc.style.cssText = "max-width:420px;color:#57606a";
|
|
2575
|
+
desc.textContent = descText;
|
|
2576
|
+
wrap.appendChild(desc);
|
|
2577
|
+
if (srcUrl) {
|
|
2578
|
+
const host = document.createElement("div");
|
|
2579
|
+
host.style.cssText = "font-size:12px;color:#8c959f;word-break:break-all";
|
|
2580
|
+
try {
|
|
2581
|
+
const u = new URL(srcUrl);
|
|
2582
|
+
host.textContent = u.hostname;
|
|
2583
|
+
} catch (e) {
|
|
2584
|
+
host.textContent = srcUrl;
|
|
2585
|
+
}
|
|
2586
|
+
wrap.appendChild(host);
|
|
2587
|
+
}
|
|
2588
|
+
const cta = document.createElement("button");
|
|
2589
|
+
cta.type = "button";
|
|
2590
|
+
cta.className = "blakfy-placeholder-cta";
|
|
2591
|
+
cta.textContent = ctaText;
|
|
2592
|
+
cta.style.cssText = [
|
|
2593
|
+
"appearance:none",
|
|
2594
|
+
"border:0",
|
|
2595
|
+
"border-radius:8px",
|
|
2596
|
+
"padding:10px 18px",
|
|
2597
|
+
"background:#1f6feb",
|
|
2598
|
+
"color:#ffffff",
|
|
2599
|
+
"font-weight:600",
|
|
2600
|
+
"font-size:14px",
|
|
2601
|
+
"cursor:pointer",
|
|
2602
|
+
"margin-top:4px"
|
|
2603
|
+
].join(";");
|
|
2604
|
+
cta.addEventListener("click", () => {
|
|
2605
|
+
if (typeof onAccept === "function") {
|
|
2606
|
+
try {
|
|
2607
|
+
onAccept(category);
|
|
2608
|
+
} catch (e) {
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
});
|
|
2612
|
+
wrap.appendChild(cta);
|
|
2613
|
+
return wrap;
|
|
2614
|
+
};
|
|
2615
|
+
|
|
2616
|
+
// src/gating/iframe-unblocker.js
|
|
2617
|
+
var unblockIframes = (category) => {
|
|
2618
|
+
if (typeof document === "undefined" || !category) return 0;
|
|
2619
|
+
const sel = 'iframe[data-blakfy-src][data-blakfy-category="' + category + '"]:not([data-blakfy-unblocked="true"])';
|
|
2620
|
+
const nodes = document.querySelectorAll(sel);
|
|
2621
|
+
let count = 0;
|
|
2622
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
2623
|
+
const ifr = nodes[i];
|
|
2624
|
+
const src = ifr.getAttribute("data-blakfy-src");
|
|
2625
|
+
if (!src) continue;
|
|
2626
|
+
const phId = ifr.getAttribute("data-blakfy-placeholder-id");
|
|
2627
|
+
if (phId) {
|
|
2628
|
+
const ph = document.getElementById(phId);
|
|
2629
|
+
if (ph && ph.parentNode) ph.parentNode.removeChild(ph);
|
|
2630
|
+
ifr.removeAttribute("data-blakfy-placeholder-id");
|
|
2631
|
+
}
|
|
2632
|
+
ifr.src = src;
|
|
2633
|
+
ifr.style.display = "";
|
|
2634
|
+
ifr.setAttribute("data-blakfy-unblocked", "true");
|
|
2635
|
+
count++;
|
|
2636
|
+
}
|
|
2637
|
+
return count;
|
|
2638
|
+
};
|
|
2639
|
+
var installPlaceholders = (t, onAccept) => {
|
|
2640
|
+
if (typeof document === "undefined") return 0;
|
|
2641
|
+
const sel = 'iframe[data-blakfy-src][data-blakfy-category][data-blakfy-placeholder="auto"]:not([data-blakfy-unblocked="true"]):not([data-blakfy-placeholder-installed="true"])';
|
|
2642
|
+
const nodes = document.querySelectorAll(sel);
|
|
2643
|
+
let count = 0;
|
|
2644
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
2645
|
+
const ifr = nodes[i];
|
|
2646
|
+
const category = ifr.getAttribute("data-blakfy-category");
|
|
2647
|
+
const srcUrl = ifr.getAttribute("data-blakfy-src") || "";
|
|
2648
|
+
const ph = createPlaceholder({
|
|
2649
|
+
category,
|
|
2650
|
+
srcUrl,
|
|
2651
|
+
t,
|
|
2652
|
+
onAccept
|
|
2653
|
+
});
|
|
2654
|
+
const phId = "blakfy-ph-" + Math.random().toString(36).slice(2, 10);
|
|
2655
|
+
ph.id = phId;
|
|
2656
|
+
ifr.setAttribute("data-blakfy-placeholder-id", phId);
|
|
2657
|
+
ifr.setAttribute("data-blakfy-placeholder-installed", "true");
|
|
2658
|
+
ifr.style.display = "none";
|
|
2659
|
+
if (ifr.parentNode) {
|
|
2660
|
+
ifr.parentNode.insertBefore(ph, ifr);
|
|
2661
|
+
count++;
|
|
2662
|
+
}
|
|
2663
|
+
}
|
|
2664
|
+
return count;
|
|
2665
|
+
};
|
|
2666
|
+
|
|
2667
|
+
// src/gating/observer.js
|
|
2668
|
+
var activeObserver = null;
|
|
2669
|
+
var isBlockedScript = (node) => {
|
|
2670
|
+
return node && node.nodeType === 1 && node.tagName === "SCRIPT" && node.getAttribute && node.getAttribute("type") === "text/plain" && node.getAttribute("data-blakfy-category");
|
|
2671
|
+
};
|
|
2672
|
+
var isBlockedIframe = (node) => {
|
|
2673
|
+
return node && node.nodeType === 1 && node.tagName === "IFRAME" && node.getAttribute && node.getAttribute("data-blakfy-src") && node.getAttribute("data-blakfy-category");
|
|
2674
|
+
};
|
|
2675
|
+
var collectCategoriesFromNode = (node, set) => {
|
|
2676
|
+
if (!node || node.nodeType !== 1) return;
|
|
2677
|
+
if (isBlockedScript(node) || isBlockedIframe(node)) {
|
|
2678
|
+
set[node.getAttribute("data-blakfy-category")] = 1;
|
|
2679
|
+
}
|
|
2680
|
+
if (node.querySelectorAll) {
|
|
2681
|
+
const inner = node.querySelectorAll('script[type="text/plain"][data-blakfy-category], iframe[data-blakfy-src][data-blakfy-category]');
|
|
2682
|
+
for (let i = 0; i < inner.length; i++) {
|
|
2683
|
+
set[inner[i].getAttribute("data-blakfy-category")] = 1;
|
|
2684
|
+
}
|
|
2685
|
+
}
|
|
2686
|
+
};
|
|
2687
|
+
var startObserver = ({ getConsent, onScan }) => {
|
|
2688
|
+
if (typeof document === "undefined" || typeof MutationObserver === "undefined") return null;
|
|
2689
|
+
if (activeObserver) stopObserver();
|
|
2690
|
+
const obs = new MutationObserver((mutations) => {
|
|
2691
|
+
const seen = /* @__PURE__ */ Object.create(null);
|
|
2692
|
+
for (let i = 0; i < mutations.length; i++) {
|
|
2693
|
+
const m = mutations[i];
|
|
2694
|
+
if (m.type !== "childList") continue;
|
|
2695
|
+
const added = m.addedNodes;
|
|
2696
|
+
for (let j = 0; j < added.length; j++) {
|
|
2697
|
+
collectCategoriesFromNode(added[j], seen);
|
|
2698
|
+
}
|
|
2699
|
+
}
|
|
2700
|
+
for (const cat in seen) {
|
|
2701
|
+
if (typeof getConsent === "function" && getConsent(cat)) {
|
|
2702
|
+
if (typeof onScan === "function") {
|
|
2703
|
+
try {
|
|
2704
|
+
onScan(cat);
|
|
2705
|
+
} catch (e) {
|
|
2706
|
+
}
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
}
|
|
2710
|
+
});
|
|
2711
|
+
obs.observe(document.body || document.documentElement, { childList: true, subtree: true });
|
|
2712
|
+
activeObserver = obs;
|
|
2713
|
+
return obs;
|
|
2714
|
+
};
|
|
2715
|
+
var stopObserver = () => {
|
|
2716
|
+
if (activeObserver) {
|
|
2717
|
+
try {
|
|
2718
|
+
activeObserver.disconnect();
|
|
2719
|
+
} catch (e) {
|
|
2720
|
+
}
|
|
2721
|
+
activeObserver = null;
|
|
2722
|
+
}
|
|
2723
|
+
};
|
|
2724
|
+
var scanAll = ({ getConsent, categories }) => {
|
|
2725
|
+
if (typeof document === "undefined") return [];
|
|
2726
|
+
const list = Array.isArray(categories) && categories.length ? categories : ["essential", "analytics", "marketing", "functional", "recording"];
|
|
2727
|
+
const granted = [];
|
|
2728
|
+
for (let i = 0; i < list.length; i++) {
|
|
2729
|
+
const cat = list[i];
|
|
2730
|
+
if (typeof getConsent === "function" && getConsent(cat)) {
|
|
2731
|
+
granted.push(cat);
|
|
2732
|
+
}
|
|
2733
|
+
}
|
|
2734
|
+
return granted;
|
|
2735
|
+
};
|
|
2736
|
+
|
|
2737
|
+
// src/gating/cleaner.js
|
|
2738
|
+
var rules = /* @__PURE__ */ new Map();
|
|
2739
|
+
var ensure = (category) => {
|
|
2740
|
+
if (!rules.has(category)) rules.set(category, []);
|
|
2741
|
+
return rules.get(category);
|
|
2742
|
+
};
|
|
2743
|
+
var registerCleanup = ({ category, cookies, storage }) => {
|
|
2744
|
+
if (!category) return;
|
|
2745
|
+
const list = ensure(category);
|
|
2746
|
+
list.push({
|
|
2747
|
+
cookies: Array.isArray(cookies) ? cookies.slice() : [],
|
|
2748
|
+
storage: Array.isArray(storage) ? storage.slice() : []
|
|
2749
|
+
});
|
|
2750
|
+
};
|
|
2751
|
+
var getRootDomain = (host) => {
|
|
2752
|
+
if (!host) return "";
|
|
2753
|
+
const parts = host.split(".");
|
|
2754
|
+
if (parts.length <= 2) return host;
|
|
2755
|
+
return parts.slice(-2).join(".");
|
|
2756
|
+
};
|
|
2757
|
+
var expireCookie = (name) => {
|
|
2758
|
+
if (typeof document === "undefined") return;
|
|
2759
|
+
const host = typeof location !== "undefined" && location.hostname || "";
|
|
2760
|
+
const root = getRootDomain(host);
|
|
2761
|
+
const past = "Thu, 01 Jan 1970 00:00:00 GMT";
|
|
2762
|
+
try {
|
|
2763
|
+
document.cookie = name + "=; expires=" + past + "; path=/";
|
|
2764
|
+
} catch (e) {
|
|
2765
|
+
}
|
|
2766
|
+
if (host) {
|
|
2767
|
+
try {
|
|
2768
|
+
document.cookie = name + "=; expires=" + past + "; path=/; domain=" + host;
|
|
2769
|
+
} catch (e) {
|
|
2770
|
+
}
|
|
2771
|
+
try {
|
|
2772
|
+
document.cookie = name + "=; expires=" + past + "; path=/; domain=." + host;
|
|
2773
|
+
} catch (e) {
|
|
2774
|
+
}
|
|
2775
|
+
}
|
|
2776
|
+
if (root && root !== host) {
|
|
2777
|
+
try {
|
|
2778
|
+
document.cookie = name + "=; expires=" + past + "; path=/; domain=" + root;
|
|
2779
|
+
} catch (e) {
|
|
2780
|
+
}
|
|
2781
|
+
try {
|
|
2782
|
+
document.cookie = name + "=; expires=" + past + "; path=/; domain=." + root;
|
|
2783
|
+
} catch (e) {
|
|
2784
|
+
}
|
|
2785
|
+
}
|
|
2786
|
+
};
|
|
2787
|
+
var readCookieNames = () => {
|
|
2788
|
+
if (typeof document === "undefined" || !document.cookie) return [];
|
|
2789
|
+
const out = [];
|
|
2790
|
+
const parts = document.cookie.split(";");
|
|
2791
|
+
for (let i = 0; i < parts.length; i++) {
|
|
2792
|
+
const eq = parts[i].indexOf("=");
|
|
2793
|
+
const name = (eq === -1 ? parts[i] : parts[i].slice(0, eq)).trim();
|
|
2794
|
+
if (name) out.push(name);
|
|
2795
|
+
}
|
|
2796
|
+
return out;
|
|
2797
|
+
};
|
|
2798
|
+
var runCleanup = (category) => {
|
|
2799
|
+
const list = rules.get(category);
|
|
2800
|
+
if (!list || !list.length) return { cookies: 0, storage: 0 };
|
|
2801
|
+
const allNames = readCookieNames();
|
|
2802
|
+
let cookieCount = 0;
|
|
2803
|
+
let storageCount = 0;
|
|
2804
|
+
for (let i = 0; i < list.length; i++) {
|
|
2805
|
+
const rule = list[i];
|
|
2806
|
+
const cookieMatchers = rule.cookies || [];
|
|
2807
|
+
for (let m = 0; m < cookieMatchers.length; m++) {
|
|
2808
|
+
const matcher = cookieMatchers[m];
|
|
2809
|
+
if (matcher instanceof RegExp) {
|
|
2810
|
+
for (let n = 0; n < allNames.length; n++) {
|
|
2811
|
+
if (matcher.test(allNames[n])) {
|
|
2812
|
+
expireCookie(allNames[n]);
|
|
2813
|
+
cookieCount++;
|
|
2814
|
+
}
|
|
2815
|
+
}
|
|
2816
|
+
} else if (typeof matcher === "string") {
|
|
2817
|
+
expireCookie(matcher);
|
|
2818
|
+
cookieCount++;
|
|
2819
|
+
}
|
|
2820
|
+
}
|
|
2821
|
+
const storageKeys = rule.storage || [];
|
|
2822
|
+
for (let k = 0; k < storageKeys.length; k++) {
|
|
2823
|
+
try {
|
|
2824
|
+
if (typeof localStorage !== "undefined") {
|
|
2825
|
+
localStorage.removeItem(storageKeys[k]);
|
|
2826
|
+
storageCount++;
|
|
2827
|
+
}
|
|
2828
|
+
} catch (e) {
|
|
2829
|
+
}
|
|
2830
|
+
}
|
|
2831
|
+
}
|
|
2832
|
+
return { cookies: cookieCount, storage: storageCount };
|
|
2833
|
+
};
|
|
2834
|
+
|
|
2835
|
+
// src/presets/google-analytics.js
|
|
2836
|
+
var google_analytics_default = {
|
|
2837
|
+
name: "Google Analytics 4",
|
|
2838
|
+
category: "analytics",
|
|
2839
|
+
cookies: [/^_ga/, "_gid", "_gat", /^_ga_/],
|
|
2840
|
+
storage: [],
|
|
2841
|
+
scriptHosts: ["www.googletagmanager.com", "google-analytics.com"],
|
|
2842
|
+
onGrant: (state) => {
|
|
2843
|
+
},
|
|
2844
|
+
onRevoke: (state) => {
|
|
2845
|
+
}
|
|
2846
|
+
};
|
|
2847
|
+
|
|
2848
|
+
// src/presets/google-tag-manager.js
|
|
2849
|
+
var google_tag_manager_default = {
|
|
2850
|
+
name: "Google Tag Manager",
|
|
2851
|
+
category: "analytics",
|
|
2852
|
+
cookies: ["_gtm", /^_dc_gtm/],
|
|
2853
|
+
storage: [],
|
|
2854
|
+
scriptHosts: ["www.googletagmanager.com"],
|
|
2855
|
+
onGrant: (state) => {
|
|
2856
|
+
},
|
|
2857
|
+
onRevoke: (state) => {
|
|
2858
|
+
}
|
|
2859
|
+
};
|
|
2860
|
+
|
|
2861
|
+
// src/presets/google-maps.js
|
|
2862
|
+
var google_maps_default = {
|
|
2863
|
+
name: "Google Maps",
|
|
2864
|
+
category: "functional",
|
|
2865
|
+
cookies: [],
|
|
2866
|
+
storage: [],
|
|
2867
|
+
scriptHosts: ["maps.googleapis.com", "maps.gstatic.com"],
|
|
2868
|
+
onGrant: (state) => {
|
|
2869
|
+
},
|
|
2870
|
+
onRevoke: (state) => {
|
|
2871
|
+
}
|
|
2872
|
+
};
|
|
2873
|
+
|
|
2874
|
+
// src/presets/google-recaptcha.js
|
|
2875
|
+
var google_recaptcha_default = {
|
|
2876
|
+
name: "Google reCAPTCHA",
|
|
2877
|
+
category: "functional",
|
|
2878
|
+
cookies: ["_GRECAPTCHA"],
|
|
2879
|
+
storage: [],
|
|
2880
|
+
scriptHosts: ["www.google.com/recaptcha", "www.gstatic.com/recaptcha"],
|
|
2881
|
+
onGrant: (state) => {
|
|
2882
|
+
},
|
|
2883
|
+
onRevoke: (state) => {
|
|
2884
|
+
}
|
|
2885
|
+
};
|
|
2886
|
+
|
|
2887
|
+
// src/presets/facebook-pixel.js
|
|
2888
|
+
var facebook_pixel_default = {
|
|
2889
|
+
name: "Facebook Pixel",
|
|
2890
|
+
category: "marketing",
|
|
2891
|
+
cookies: ["_fbp", "_fbc"],
|
|
2892
|
+
storage: [],
|
|
2893
|
+
scriptHosts: ["connect.facebook.net"],
|
|
2894
|
+
onGrant: (state) => {
|
|
2895
|
+
},
|
|
2896
|
+
onRevoke: (state) => {
|
|
2897
|
+
}
|
|
2898
|
+
};
|
|
2899
|
+
|
|
2900
|
+
// src/presets/youtube.js
|
|
2901
|
+
var youtube_default = {
|
|
2902
|
+
name: "YouTube",
|
|
2903
|
+
category: "marketing",
|
|
2904
|
+
cookies: [],
|
|
2905
|
+
storage: [],
|
|
2906
|
+
scriptHosts: ["www.youtube.com", "youtube-nocookie.com"],
|
|
2907
|
+
onGrant: (state) => {
|
|
2908
|
+
},
|
|
2909
|
+
onRevoke: (state) => {
|
|
2910
|
+
}
|
|
2911
|
+
};
|
|
2912
|
+
|
|
2913
|
+
// src/presets/vimeo.js
|
|
2914
|
+
var vimeo_default = {
|
|
2915
|
+
name: "Vimeo",
|
|
2916
|
+
category: "marketing",
|
|
2917
|
+
cookies: [],
|
|
2918
|
+
storage: [],
|
|
2919
|
+
scriptHosts: ["player.vimeo.com", "vimeo.com"],
|
|
2920
|
+
onGrant: (state) => {
|
|
2921
|
+
},
|
|
2922
|
+
onRevoke: (state) => {
|
|
2923
|
+
}
|
|
2924
|
+
};
|
|
2925
|
+
|
|
2926
|
+
// src/presets/hotjar.js
|
|
2927
|
+
var hotjar_default = {
|
|
2928
|
+
name: "Hotjar",
|
|
2929
|
+
category: "analytics",
|
|
2930
|
+
cookies: [/^_hj/],
|
|
2931
|
+
storage: [],
|
|
2932
|
+
scriptHosts: ["static.hotjar.com", "script.hotjar.com"],
|
|
2933
|
+
onGrant: (state) => {
|
|
2934
|
+
},
|
|
2935
|
+
onRevoke: (state) => {
|
|
2936
|
+
}
|
|
2937
|
+
};
|
|
2938
|
+
|
|
2939
|
+
// src/presets/microsoft-clarity.js
|
|
2940
|
+
var microsoft_clarity_default = {
|
|
2941
|
+
name: "Microsoft Clarity",
|
|
2942
|
+
category: "analytics",
|
|
2943
|
+
cookies: ["_clck", "_clsk", "CLID", "MR", "MUID", "SM"],
|
|
2944
|
+
storage: [],
|
|
2945
|
+
scriptHosts: ["www.clarity.ms", "c.clarity.ms"],
|
|
2946
|
+
onGrant: (state) => {
|
|
2947
|
+
},
|
|
2948
|
+
onRevoke: (state) => {
|
|
2949
|
+
}
|
|
2950
|
+
};
|
|
2951
|
+
|
|
2952
|
+
// src/presets/linkedin-insight.js
|
|
2953
|
+
var linkedin_insight_default = {
|
|
2954
|
+
name: "LinkedIn Insight Tag",
|
|
2955
|
+
category: "marketing",
|
|
2956
|
+
cookies: ["li_sugr", "bcookie", "lidc", "UserMatchHistory", "AnalyticsSyncHistory"],
|
|
2957
|
+
storage: [],
|
|
2958
|
+
scriptHosts: ["snap.licdn.com", "px.ads.linkedin.com"],
|
|
2959
|
+
onGrant: (state) => {
|
|
2960
|
+
},
|
|
2961
|
+
onRevoke: (state) => {
|
|
2962
|
+
}
|
|
2963
|
+
};
|
|
2964
|
+
|
|
2965
|
+
// src/presets/yandex-metrica.js
|
|
2966
|
+
var yandex_metrica_default = {
|
|
2967
|
+
name: "Yandex Metrica",
|
|
2968
|
+
category: "analytics",
|
|
2969
|
+
subCategory: "recording",
|
|
2970
|
+
cookies: [/^_ym/, "yandexuid", "yabs-frequency"],
|
|
2971
|
+
storage: [],
|
|
2972
|
+
scriptHosts: ["mc.yandex.ru", "mc.webvisor.com", "mc.yandex.com"],
|
|
2973
|
+
onGrant: (state) => {
|
|
2974
|
+
},
|
|
2975
|
+
onRevoke: (state) => {
|
|
2976
|
+
}
|
|
2977
|
+
};
|
|
2978
|
+
|
|
2979
|
+
// src/presets/bing-ads-uet.js
|
|
2980
|
+
var bing_ads_uet_default = {
|
|
2981
|
+
name: "Bing Ads UET",
|
|
2982
|
+
category: "marketing",
|
|
2983
|
+
cookies: ["MUID", "_uetsid", "_uetvid"],
|
|
2984
|
+
storage: [],
|
|
2985
|
+
scriptHosts: ["bat.bing.com"],
|
|
2986
|
+
onGrant: (state) => {
|
|
2987
|
+
},
|
|
2988
|
+
onRevoke: (state) => {
|
|
2989
|
+
}
|
|
2990
|
+
};
|
|
2991
|
+
|
|
2992
|
+
// src/presets/tiktok-pixel.js
|
|
2993
|
+
var tiktok_pixel_default = {
|
|
2994
|
+
name: "TikTok Pixel",
|
|
2995
|
+
category: "marketing",
|
|
2996
|
+
cookies: ["_ttp"],
|
|
2997
|
+
storage: [],
|
|
2998
|
+
scriptHosts: ["analytics.tiktok.com"],
|
|
2999
|
+
onGrant: (state) => {
|
|
3000
|
+
},
|
|
3001
|
+
onRevoke: (state) => {
|
|
3002
|
+
}
|
|
3003
|
+
};
|
|
3004
|
+
|
|
3005
|
+
// src/presets/pinterest-tag.js
|
|
3006
|
+
var pinterest_tag_default = {
|
|
3007
|
+
name: "Pinterest Tag",
|
|
3008
|
+
category: "marketing",
|
|
3009
|
+
cookies: ["_pinterest_ct", "_pinterest_sess"],
|
|
3010
|
+
storage: [],
|
|
3011
|
+
scriptHosts: ["s.pinimg.com", "ct.pinterest.com"],
|
|
3012
|
+
onGrant: (state) => {
|
|
3013
|
+
},
|
|
3014
|
+
onRevoke: (state) => {
|
|
3015
|
+
}
|
|
3016
|
+
};
|
|
3017
|
+
|
|
3018
|
+
// src/presets/tawk-to.js
|
|
3019
|
+
var tawk_to_default = {
|
|
3020
|
+
name: "Tawk.to",
|
|
3021
|
+
category: "functional",
|
|
3022
|
+
cookies: ["TawkConnectionTime", /^__tawkuuid/, /^Tawk_/],
|
|
3023
|
+
storage: [],
|
|
3024
|
+
scriptHosts: ["embed.tawk.to"],
|
|
3025
|
+
onGrant: (state) => {
|
|
3026
|
+
},
|
|
3027
|
+
onRevoke: (state) => {
|
|
3028
|
+
}
|
|
3029
|
+
};
|
|
3030
|
+
|
|
3031
|
+
// src/presets/intercom.js
|
|
3032
|
+
var intercom_default = {
|
|
3033
|
+
name: "Intercom",
|
|
3034
|
+
category: "functional",
|
|
3035
|
+
cookies: [/^intercom-/],
|
|
3036
|
+
storage: [],
|
|
3037
|
+
scriptHosts: ["widget.intercom.io", "js.intercomcdn.com"],
|
|
3038
|
+
onGrant: (state) => {
|
|
3039
|
+
},
|
|
3040
|
+
onRevoke: (state) => {
|
|
3041
|
+
}
|
|
3042
|
+
};
|
|
3043
|
+
|
|
3044
|
+
// src/presets/hubspot.js
|
|
3045
|
+
var hubspot_default = {
|
|
3046
|
+
name: "HubSpot",
|
|
3047
|
+
category: "marketing",
|
|
3048
|
+
cookies: ["__hstc", "__hssc", "__hssrc", "hubspotutk", "messagesUtk"],
|
|
3049
|
+
storage: [],
|
|
3050
|
+
scriptHosts: ["js.hs-scripts.com", "js.hs-analytics.net"],
|
|
3051
|
+
onGrant: (state) => {
|
|
3052
|
+
},
|
|
3053
|
+
onRevoke: (state) => {
|
|
3054
|
+
}
|
|
3055
|
+
};
|
|
3056
|
+
|
|
3057
|
+
// src/presets/mailchimp.js
|
|
3058
|
+
var mailchimp_default = {
|
|
3059
|
+
name: "Mailchimp",
|
|
3060
|
+
category: "marketing",
|
|
3061
|
+
cookies: [/^_mcid/, "ak_bmsc", "_mcvisit"],
|
|
3062
|
+
storage: [],
|
|
3063
|
+
scriptHosts: ["chimpstatic.com"],
|
|
3064
|
+
onGrant: (state) => {
|
|
3065
|
+
},
|
|
3066
|
+
onRevoke: (state) => {
|
|
3067
|
+
}
|
|
3068
|
+
};
|
|
3069
|
+
|
|
3070
|
+
// src/presets/_registry.js
|
|
3071
|
+
var PRESETS = {
|
|
3072
|
+
ga4: google_analytics_default,
|
|
3073
|
+
gtm: google_tag_manager_default,
|
|
3074
|
+
maps: google_maps_default,
|
|
3075
|
+
recaptcha: google_recaptcha_default,
|
|
3076
|
+
facebook: facebook_pixel_default,
|
|
3077
|
+
youtube: youtube_default,
|
|
3078
|
+
vimeo: vimeo_default,
|
|
3079
|
+
hotjar: hotjar_default,
|
|
3080
|
+
clarity: microsoft_clarity_default,
|
|
3081
|
+
linkedin: linkedin_insight_default,
|
|
3082
|
+
yandex: yandex_metrica_default,
|
|
3083
|
+
bing: bing_ads_uet_default,
|
|
3084
|
+
tiktok: tiktok_pixel_default,
|
|
3085
|
+
pinterest: pinterest_tag_default,
|
|
3086
|
+
tawkto: tawk_to_default,
|
|
3087
|
+
intercom: intercom_default,
|
|
3088
|
+
hubspot: hubspot_default,
|
|
3089
|
+
mailchimp: mailchimp_default
|
|
3090
|
+
};
|
|
3091
|
+
var applyPreset = (name, { registerCleanup: registerCleanup2 }) => {
|
|
3092
|
+
const preset = PRESETS[name];
|
|
3093
|
+
if (!preset) return null;
|
|
3094
|
+
if (typeof registerCleanup2 === "function") {
|
|
3095
|
+
registerCleanup2({
|
|
3096
|
+
category: preset.category,
|
|
3097
|
+
cookies: preset.cookies || [],
|
|
3098
|
+
storage: preset.storage || []
|
|
3099
|
+
});
|
|
3100
|
+
if (preset.subCategory) {
|
|
3101
|
+
registerCleanup2({
|
|
3102
|
+
category: preset.subCategory,
|
|
3103
|
+
cookies: preset.cookies || [],
|
|
3104
|
+
storage: preset.storage || []
|
|
3105
|
+
});
|
|
3106
|
+
}
|
|
3107
|
+
}
|
|
3108
|
+
return preset;
|
|
3109
|
+
};
|
|
3110
|
+
|
|
3111
|
+
// src/compliance/google-cmv2.js
|
|
3112
|
+
var defaultsInstalled = false;
|
|
3113
|
+
var installDefaults = () => {
|
|
3114
|
+
if (typeof window === "undefined") return;
|
|
3115
|
+
if (defaultsInstalled) return;
|
|
3116
|
+
defaultsInstalled = true;
|
|
3117
|
+
window.dataLayer = window.dataLayer || [];
|
|
3118
|
+
if (typeof window.gtag !== "function") {
|
|
3119
|
+
window.gtag = function() {
|
|
3120
|
+
window.dataLayer.push(arguments);
|
|
3121
|
+
};
|
|
3122
|
+
}
|
|
3123
|
+
window.gtag("consent", "default", {
|
|
3124
|
+
ad_storage: "denied",
|
|
3125
|
+
ad_user_data: "denied",
|
|
3126
|
+
ad_personalization: "denied",
|
|
3127
|
+
analytics_storage: "denied",
|
|
3128
|
+
functionality_storage: "denied",
|
|
3129
|
+
personalization_storage: "denied",
|
|
3130
|
+
security_storage: "granted",
|
|
3131
|
+
wait_for_update: 500
|
|
3132
|
+
});
|
|
3133
|
+
};
|
|
3134
|
+
var pushGCM = (state) => {
|
|
3135
|
+
if (typeof window === "undefined") return;
|
|
3136
|
+
if (typeof window.gtag !== "function") return;
|
|
3137
|
+
const s = state || {};
|
|
3138
|
+
const m = s.marketing ? "granted" : "denied";
|
|
3139
|
+
const a = s.analytics ? "granted" : "denied";
|
|
3140
|
+
const f = s.functional ? "granted" : "denied";
|
|
3141
|
+
window.gtag("consent", "update", {
|
|
3142
|
+
ad_storage: m,
|
|
3143
|
+
ad_user_data: m,
|
|
3144
|
+
ad_personalization: m,
|
|
3145
|
+
analytics_storage: a,
|
|
3146
|
+
functionality_storage: f,
|
|
3147
|
+
personalization_storage: f,
|
|
3148
|
+
security_storage: "granted"
|
|
3149
|
+
});
|
|
3150
|
+
};
|
|
3151
|
+
|
|
3152
|
+
// src/compliance/microsoft-uet.js
|
|
3153
|
+
var defaultsInstalled2 = false;
|
|
3154
|
+
var installDefaults2 = () => {
|
|
3155
|
+
if (typeof window === "undefined") return;
|
|
3156
|
+
if (defaultsInstalled2) return;
|
|
3157
|
+
defaultsInstalled2 = true;
|
|
3158
|
+
window.uetq = window.uetq || [];
|
|
3159
|
+
window.uetq.push("consent", "default", { ad_storage: "denied" });
|
|
3160
|
+
};
|
|
3161
|
+
var pushUET = (state) => {
|
|
3162
|
+
if (typeof window === "undefined") return;
|
|
3163
|
+
const s = state || {};
|
|
3164
|
+
window.uetq = window.uetq || [];
|
|
3165
|
+
window.uetq.push("consent", "update", {
|
|
3166
|
+
ad_storage: s.marketing ? "granted" : "denied"
|
|
3167
|
+
});
|
|
3168
|
+
};
|
|
3169
|
+
|
|
3170
|
+
// src/compliance/yandex-metrica.js
|
|
3171
|
+
var defaultsInstalled3 = false;
|
|
3172
|
+
var installDefaults3 = () => {
|
|
3173
|
+
if (typeof window === "undefined") return;
|
|
3174
|
+
if (defaultsInstalled3) return;
|
|
3175
|
+
defaultsInstalled3 = true;
|
|
3176
|
+
if (typeof window.ym !== "function") {
|
|
3177
|
+
window.ym = function() {
|
|
3178
|
+
};
|
|
3179
|
+
window.ym.__blakfyStub = true;
|
|
3180
|
+
}
|
|
3181
|
+
};
|
|
3182
|
+
var applyYandex = (state, ctx) => {
|
|
3183
|
+
const s = state || {};
|
|
3184
|
+
const unblock = ctx && ctx.unblock;
|
|
3185
|
+
if (typeof unblock !== "function") return;
|
|
3186
|
+
if (s.analytics === true) unblock("analytics");
|
|
3187
|
+
if (s.recording === true) unblock("recording");
|
|
3188
|
+
};
|
|
3189
|
+
|
|
3190
|
+
// src/compliance/tcf-v2.js
|
|
3191
|
+
var B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
3192
|
+
var lastTCString = "";
|
|
3193
|
+
var vendorList = null;
|
|
3194
|
+
var bitsToB64 = (bits) => {
|
|
3195
|
+
const pad = (6 - bits.length % 6) % 6;
|
|
3196
|
+
const padded = bits + "0".repeat(pad);
|
|
3197
|
+
let out = "";
|
|
3198
|
+
for (let i = 0; i < padded.length; i += 6) {
|
|
3199
|
+
out += B64.charAt(parseInt(padded.substr(i, 6), 2));
|
|
3200
|
+
}
|
|
3201
|
+
return out;
|
|
3202
|
+
};
|
|
3203
|
+
var intToBits = (n, width) => {
|
|
3204
|
+
let s = (n >>> 0).toString(2);
|
|
3205
|
+
if (s.length > width) s = s.slice(-width);
|
|
3206
|
+
return s.padStart(width, "0");
|
|
3207
|
+
};
|
|
3208
|
+
var bigIntToBits = (n, width) => {
|
|
3209
|
+
const v = BigInt(Math.max(0, Math.floor(Number(n) / 100)));
|
|
3210
|
+
let s = v.toString(2);
|
|
3211
|
+
if (s.length > width) s = s.slice(-width);
|
|
3212
|
+
return s.padStart(width, "0");
|
|
3213
|
+
};
|
|
3214
|
+
var charToBits = (c) => intToBits(c.toUpperCase().charCodeAt(0) - 65, 6);
|
|
3215
|
+
var langToBits = (lang) => charToBits((lang || "EN").charAt(0)) + charToBits((lang || "EN").charAt(1));
|
|
3216
|
+
var buildPurposes = (state) => {
|
|
3217
|
+
const out = new Array(24).fill(0);
|
|
3218
|
+
out[0] = 1;
|
|
3219
|
+
if (state && state.analytics) {
|
|
3220
|
+
out[1] = 1;
|
|
3221
|
+
out[2] = 1;
|
|
3222
|
+
out[3] = 1;
|
|
3223
|
+
}
|
|
3224
|
+
if (state && state.marketing) {
|
|
3225
|
+
out[4] = 1;
|
|
3226
|
+
out[5] = 1;
|
|
3227
|
+
out[6] = 1;
|
|
3228
|
+
out[7] = 1;
|
|
3229
|
+
out[8] = 1;
|
|
3230
|
+
}
|
|
3231
|
+
if (state && state.functional) {
|
|
3232
|
+
out[9] = 1;
|
|
3233
|
+
}
|
|
3234
|
+
return out.join("");
|
|
3235
|
+
};
|
|
3236
|
+
var buildTCString = (opts) => {
|
|
3237
|
+
const o = opts || {};
|
|
3238
|
+
const cmpId = o.cmpId | 0;
|
|
3239
|
+
const cmpVersion2 = o.cmpVersion | 0;
|
|
3240
|
+
const now = Date.now();
|
|
3241
|
+
const created = bigIntToBits(now, 36);
|
|
3242
|
+
const lastUpdated = bigIntToBits(now, 36);
|
|
3243
|
+
const purposesConsent = o.purposeConsents || buildPurposes(o.state);
|
|
3244
|
+
const purposesLI = "0".repeat(24);
|
|
3245
|
+
const core = intToBits(2, 6) + created + lastUpdated + intToBits(cmpId, 12) + intToBits(cmpVersion2, 12) + intToBits(1, 6) + langToBits(o.consentLanguage || "EN") + intToBits(o.vendorListVersion || 300, 12) + intToBits(4, 6) + "10" + "0".repeat(12) + purposesConsent + purposesLI + "0" + charToBits("A") + charToBits("A") + intToBits(0, 16) + intToBits(0, 16) + "1" + intToBits(0, 12) + intToBits(0, 16) + intToBits(0, 16) + "1" + intToBits(0, 12);
|
|
3246
|
+
return bitsToB64(core);
|
|
3247
|
+
};
|
|
3248
|
+
var getTCString = () => lastTCString;
|
|
3249
|
+
var buildPurposeMap = (state) => {
|
|
3250
|
+
const consents = {};
|
|
3251
|
+
const li = {};
|
|
3252
|
+
const s = state || {};
|
|
3253
|
+
for (let i = 1; i <= 11; i++) {
|
|
3254
|
+
consents[i] = false;
|
|
3255
|
+
li[i] = false;
|
|
3256
|
+
}
|
|
3257
|
+
consents[1] = true;
|
|
3258
|
+
if (s.analytics) {
|
|
3259
|
+
consents[2] = true;
|
|
3260
|
+
consents[3] = true;
|
|
3261
|
+
consents[4] = true;
|
|
3262
|
+
}
|
|
3263
|
+
if (s.marketing) {
|
|
3264
|
+
consents[5] = true;
|
|
3265
|
+
consents[6] = true;
|
|
3266
|
+
consents[7] = true;
|
|
3267
|
+
consents[8] = true;
|
|
3268
|
+
consents[9] = true;
|
|
3269
|
+
}
|
|
3270
|
+
if (s.functional) {
|
|
3271
|
+
consents[10] = true;
|
|
3272
|
+
}
|
|
3273
|
+
return { consents, legitimateInterests: li };
|
|
3274
|
+
};
|
|
3275
|
+
var installTCFAPI = (opts) => {
|
|
3276
|
+
if (typeof window === "undefined") return;
|
|
3277
|
+
const o = opts || {};
|
|
3278
|
+
const cmpId = o.cmpId | 0;
|
|
3279
|
+
const cmpVersion2 = o.cmpVersion | 0;
|
|
3280
|
+
const getConsent = typeof o.getConsent === "function" ? o.getConsent : () => ({});
|
|
3281
|
+
const subscribe = typeof o.on === "function" ? o.on : null;
|
|
3282
|
+
const listeners2 = /* @__PURE__ */ Object.create(null);
|
|
3283
|
+
let nextId = 1;
|
|
3284
|
+
let displayStatus = "hidden";
|
|
3285
|
+
let eventStatus = "tcloaded";
|
|
3286
|
+
const buildTCData = (listenerId) => {
|
|
3287
|
+
const state = getConsent() || {};
|
|
3288
|
+
const purposes = buildPurposeMap(state);
|
|
3289
|
+
lastTCString = buildTCString({ cmpId, cmpVersion: cmpVersion2, state });
|
|
3290
|
+
return {
|
|
3291
|
+
tcString: lastTCString,
|
|
3292
|
+
eventStatus,
|
|
3293
|
+
cmpId,
|
|
3294
|
+
cmpVersion: cmpVersion2,
|
|
3295
|
+
gdprApplies: true,
|
|
3296
|
+
listenerId: typeof listenerId === "number" ? listenerId : null,
|
|
3297
|
+
addtlConsent: "",
|
|
3298
|
+
purpose: purposes,
|
|
3299
|
+
vendor: { consents: {}, legitimateInterests: {} }
|
|
3300
|
+
};
|
|
3301
|
+
};
|
|
3302
|
+
const buildPing = () => ({
|
|
3303
|
+
gdprApplies: true,
|
|
3304
|
+
cmpLoaded: true,
|
|
3305
|
+
cmpStatus: "loaded",
|
|
3306
|
+
displayStatus,
|
|
3307
|
+
apiVersion: "2.2",
|
|
3308
|
+
cmpVersion: cmpVersion2,
|
|
3309
|
+
cmpId,
|
|
3310
|
+
gvlVersion: vendorList && vendorList.vendorListVersion ? vendorList.vendorListVersion : 0,
|
|
3311
|
+
tcfPolicyVersion: 4
|
|
3312
|
+
});
|
|
3313
|
+
const handle = (command, version, callback, parameter) => {
|
|
3314
|
+
if (typeof callback !== "function") return;
|
|
3315
|
+
if (command === "ping") {
|
|
3316
|
+
callback(buildPing(), true);
|
|
3317
|
+
return;
|
|
3318
|
+
}
|
|
3319
|
+
if (command === "getTCData") {
|
|
3320
|
+
callback(buildTCData(null), true);
|
|
3321
|
+
return;
|
|
3322
|
+
}
|
|
3323
|
+
if (command === "addEventListener") {
|
|
3324
|
+
const id = nextId++;
|
|
3325
|
+
listeners2[id] = callback;
|
|
3326
|
+
callback(buildTCData(id), true);
|
|
3327
|
+
return;
|
|
3328
|
+
}
|
|
3329
|
+
if (command === "removeEventListener") {
|
|
3330
|
+
if (listeners2[parameter]) {
|
|
3331
|
+
delete listeners2[parameter];
|
|
3332
|
+
callback(true, true);
|
|
3333
|
+
} else callback(false, true);
|
|
3334
|
+
return;
|
|
3335
|
+
}
|
|
3336
|
+
callback(null, false);
|
|
3337
|
+
};
|
|
3338
|
+
if (!window.__tcfapi || !window.__tcfapi.__blakfy) {
|
|
3339
|
+
window.__tcfapi = (cmd, ver, cb, param) => handle(cmd, ver, cb, param);
|
|
3340
|
+
window.__tcfapi.__blakfy = true;
|
|
3341
|
+
}
|
|
3342
|
+
if (typeof document !== "undefined" && !document.querySelector('iframe[name="__tcfapiLocator"]')) {
|
|
3343
|
+
try {
|
|
3344
|
+
const iframe = document.createElement("iframe");
|
|
3345
|
+
iframe.style.cssText = "display:none;position:absolute;width:0;height:0;border:0";
|
|
3346
|
+
iframe.name = "__tcfapiLocator";
|
|
3347
|
+
(document.body || document.documentElement).appendChild(iframe);
|
|
3348
|
+
} catch (e) {
|
|
3349
|
+
}
|
|
3350
|
+
}
|
|
3351
|
+
if (!window.__blakfyTcfMsg) {
|
|
3352
|
+
window.__blakfyTcfMsg = true;
|
|
3353
|
+
window.addEventListener("message", (ev) => {
|
|
3354
|
+
const data = ev && ev.data;
|
|
3355
|
+
if (!data) return;
|
|
3356
|
+
const payload = typeof data === "string" ? safeParse(data) : data;
|
|
3357
|
+
if (!payload || !payload.__tcfapiCall) return;
|
|
3358
|
+
const call = payload.__tcfapiCall;
|
|
3359
|
+
handle(call.command, call.version, (returnValue, success) => {
|
|
3360
|
+
const msg = { __tcfapiReturn: { returnValue, success, callId: call.callId } };
|
|
3361
|
+
try {
|
|
3362
|
+
ev.source && ev.source.postMessage(msg, ev.origin || "*");
|
|
3363
|
+
} catch (e) {
|
|
3364
|
+
}
|
|
3365
|
+
}, call.parameter);
|
|
3366
|
+
});
|
|
3367
|
+
}
|
|
3368
|
+
const fireAll = () => {
|
|
3369
|
+
const ids = Object.keys(listeners2);
|
|
3370
|
+
for (let i = 0; i < ids.length; i++) {
|
|
3371
|
+
const id = ids[i];
|
|
3372
|
+
try {
|
|
3373
|
+
listeners2[id](buildTCData(parseInt(id, 10)), true);
|
|
3374
|
+
} catch (e) {
|
|
3375
|
+
}
|
|
3376
|
+
}
|
|
3377
|
+
};
|
|
3378
|
+
if (subscribe) {
|
|
3379
|
+
subscribe("change", () => {
|
|
3380
|
+
eventStatus = "useractioncomplete";
|
|
3381
|
+
fireAll();
|
|
3382
|
+
});
|
|
3383
|
+
subscribe("display", (visible) => {
|
|
3384
|
+
displayStatus = visible ? "visible" : "hidden";
|
|
3385
|
+
fireAll();
|
|
3386
|
+
});
|
|
3387
|
+
}
|
|
3388
|
+
return { fireAll };
|
|
3389
|
+
};
|
|
3390
|
+
var safeParse = (s) => {
|
|
3391
|
+
try {
|
|
3392
|
+
return JSON.parse(s);
|
|
3393
|
+
} catch (e) {
|
|
3394
|
+
return null;
|
|
3395
|
+
}
|
|
3396
|
+
};
|
|
3397
|
+
|
|
3398
|
+
// src/compliance/ccpa.js
|
|
3399
|
+
var optedOutFlag = false;
|
|
3400
|
+
var noticeGiven = true;
|
|
3401
|
+
var cmpVersion = 1;
|
|
3402
|
+
var listeners = [];
|
|
3403
|
+
var installed = false;
|
|
3404
|
+
var buildUSPString = (opts) => {
|
|
3405
|
+
const o = opts || {};
|
|
3406
|
+
const version = o.version || 1;
|
|
3407
|
+
const notice = o.notice === false ? "N" : o.notice === null ? "-" : "Y";
|
|
3408
|
+
const optOut2 = o.optedOut === true ? "Y" : o.optedOut === null ? "-" : "N";
|
|
3409
|
+
const lspa = o.lspa === true ? "Y" : o.lspa === null ? "-" : "N";
|
|
3410
|
+
return String(version) + notice + optOut2 + lspa;
|
|
3411
|
+
};
|
|
3412
|
+
var currentString = () => buildUSPString({ version: cmpVersion, notice: noticeGiven, optedOut: optedOutFlag, lspa: false });
|
|
3413
|
+
var fireListeners = () => {
|
|
3414
|
+
const data = { version: cmpVersion, uspString: currentString() };
|
|
3415
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
3416
|
+
try {
|
|
3417
|
+
listeners[i].cb(data, true);
|
|
3418
|
+
} catch (e) {
|
|
3419
|
+
}
|
|
3420
|
+
}
|
|
3421
|
+
};
|
|
3422
|
+
var installUSP = (opts) => {
|
|
3423
|
+
if (typeof window === "undefined") return;
|
|
3424
|
+
const o = opts || {};
|
|
3425
|
+
if (typeof o.optedOut === "boolean") optedOutFlag = o.optedOut;
|
|
3426
|
+
if (typeof o.notice === "boolean") noticeGiven = o.notice;
|
|
3427
|
+
if (installed) return;
|
|
3428
|
+
installed = true;
|
|
3429
|
+
window.__uspapi = (command, version, callback) => {
|
|
3430
|
+
if (typeof callback !== "function") return;
|
|
3431
|
+
if (command === "getUSPData") {
|
|
3432
|
+
callback({ version: cmpVersion, uspString: currentString() }, true);
|
|
3433
|
+
return;
|
|
3434
|
+
}
|
|
3435
|
+
callback(null, false);
|
|
3436
|
+
};
|
|
3437
|
+
if (typeof document !== "undefined" && !document.querySelector('iframe[name="__uspapiLocator"]')) {
|
|
3438
|
+
try {
|
|
3439
|
+
const iframe = document.createElement("iframe");
|
|
3440
|
+
iframe.style.cssText = "display:none;position:absolute;width:0;height:0;border:0";
|
|
3441
|
+
iframe.name = "__uspapiLocator";
|
|
3442
|
+
(document.body || document.documentElement).appendChild(iframe);
|
|
3443
|
+
} catch (e) {
|
|
3444
|
+
}
|
|
3445
|
+
}
|
|
3446
|
+
};
|
|
3447
|
+
var optOut = () => {
|
|
3448
|
+
optedOutFlag = true;
|
|
3449
|
+
noticeGiven = true;
|
|
3450
|
+
fireListeners();
|
|
3451
|
+
if (typeof window !== "undefined") {
|
|
3452
|
+
try {
|
|
3453
|
+
window.dispatchEvent(new CustomEvent("blakfy:ccpa:optout", { detail: { uspString: currentString() } }));
|
|
3454
|
+
} catch (e) {
|
|
3455
|
+
}
|
|
3456
|
+
}
|
|
3457
|
+
};
|
|
3458
|
+
var isOptedOut = () => optedOutFlag === true;
|
|
3459
|
+
var installDoNotSellLink = (opts) => {
|
|
3460
|
+
if (typeof document === "undefined") return null;
|
|
3461
|
+
const o = opts || {};
|
|
3462
|
+
const container = o.container || document.body;
|
|
3463
|
+
if (!container) return null;
|
|
3464
|
+
const existing = container.querySelector(".blakfy-ccpa-link");
|
|
3465
|
+
if (existing) return existing;
|
|
3466
|
+
const t = o.t || {};
|
|
3467
|
+
const label = t.ccpa && t.ccpa.doNotSell || "Do Not Sell or Share My Personal Information";
|
|
3468
|
+
const a = document.createElement("a");
|
|
3469
|
+
a.className = "blakfy-ccpa-link";
|
|
3470
|
+
a.href = "#";
|
|
3471
|
+
a.setAttribute("role", "button");
|
|
3472
|
+
a.textContent = label;
|
|
3473
|
+
a.addEventListener("click", (e) => {
|
|
3474
|
+
e.preventDefault();
|
|
3475
|
+
optOut();
|
|
3476
|
+
});
|
|
3477
|
+
container.appendChild(a);
|
|
3478
|
+
return a;
|
|
3479
|
+
};
|
|
3480
|
+
|
|
3481
|
+
// src/compliance/gpc.js
|
|
3482
|
+
var getGPC = () => {
|
|
3483
|
+
if (typeof navigator !== "undefined" && navigator.globalPrivacyControl === true) return true;
|
|
3484
|
+
if (typeof document !== "undefined" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.gpc === "1") return true;
|
|
3485
|
+
return false;
|
|
3486
|
+
};
|
|
3487
|
+
var applyGPC = (opts) => {
|
|
3488
|
+
const o = opts || {};
|
|
3489
|
+
const mode = o.mode || "respect";
|
|
3490
|
+
const currentState = o.currentState || null;
|
|
3491
|
+
const setPrefs = typeof o.setPrefs === "function" ? o.setPrefs : null;
|
|
3492
|
+
if (mode !== "respect") return { applied: false, reason: "mode-disabled" };
|
|
3493
|
+
if (!getGPC()) return { applied: false, reason: "no-gpc-signal" };
|
|
3494
|
+
if (currentState && currentState.explicit === true) {
|
|
3495
|
+
return { applied: false, reason: "user-already-consented" };
|
|
3496
|
+
}
|
|
3497
|
+
if (setPrefs) setPrefs({ analytics: false, marketing: false });
|
|
3498
|
+
return { applied: true, reason: "gpc-auto-deny" };
|
|
3499
|
+
};
|
|
3500
|
+
|
|
3501
|
+
// src/compliance/dnt.js
|
|
3502
|
+
var getDNT = () => {
|
|
3503
|
+
if (typeof navigator !== "undefined" && navigator.doNotTrack === "1") return true;
|
|
3504
|
+
if (typeof window !== "undefined" && window.doNotTrack === "1") return true;
|
|
3505
|
+
return false;
|
|
3506
|
+
};
|
|
3507
|
+
var applyDNT = (opts) => {
|
|
3508
|
+
const o = opts || {};
|
|
3509
|
+
const mode = o.mode || "respect";
|
|
3510
|
+
const setPrefs = typeof o.setPrefs === "function" ? o.setPrefs : null;
|
|
3511
|
+
if (!getDNT()) return { applied: false, reason: "no-dnt-signal" };
|
|
3512
|
+
if (mode === "auto-deny") {
|
|
3513
|
+
if (setPrefs) setPrefs({ analytics: false, marketing: false });
|
|
3514
|
+
return { applied: true, reason: "dnt-auto-deny" };
|
|
3515
|
+
}
|
|
3516
|
+
return { applied: false, reason: "dnt-ui-hint-only" };
|
|
3517
|
+
};
|
|
3518
|
+
|
|
3519
|
+
// src/geo/jurisdiction.js
|
|
3520
|
+
var EU_COUNTRIES = [
|
|
3521
|
+
"AT",
|
|
3522
|
+
"BE",
|
|
3523
|
+
"BG",
|
|
3524
|
+
"HR",
|
|
3525
|
+
"CY",
|
|
3526
|
+
"CZ",
|
|
3527
|
+
"DK",
|
|
3528
|
+
"EE",
|
|
3529
|
+
"FI",
|
|
3530
|
+
"FR",
|
|
3531
|
+
"DE",
|
|
3532
|
+
"GR",
|
|
3533
|
+
"HU",
|
|
3534
|
+
"IE",
|
|
3535
|
+
"IT",
|
|
3536
|
+
"LV",
|
|
3537
|
+
"LT",
|
|
3538
|
+
"LU",
|
|
3539
|
+
"MT",
|
|
3540
|
+
"NL",
|
|
3541
|
+
"PL",
|
|
3542
|
+
"PT",
|
|
3543
|
+
"RO",
|
|
3544
|
+
"SK",
|
|
3545
|
+
"SI",
|
|
3546
|
+
"ES",
|
|
3547
|
+
"SE",
|
|
3548
|
+
"NO",
|
|
3549
|
+
"IS",
|
|
3550
|
+
"LI",
|
|
3551
|
+
"GB",
|
|
3552
|
+
"UK",
|
|
3553
|
+
"CH"
|
|
3554
|
+
];
|
|
3555
|
+
var mapCountryToJurisdiction = (country, region) => {
|
|
3556
|
+
if (!country) return "default";
|
|
3557
|
+
const c = String(country).toUpperCase();
|
|
3558
|
+
const r = region ? String(region).toUpperCase() : "";
|
|
3559
|
+
if (EU_COUNTRIES.indexOf(c) !== -1) return "GDPR";
|
|
3560
|
+
if (c === "TR") return "GDPR";
|
|
3561
|
+
if (c === "BR") return "LGPD";
|
|
3562
|
+
if (c === "US" && r === "CA") return "CCPA";
|
|
3563
|
+
return "default";
|
|
3564
|
+
};
|
|
3565
|
+
var tzGuess = () => {
|
|
3566
|
+
try {
|
|
3567
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || "";
|
|
3568
|
+
if (tz.indexOf("Europe/") === 0) return "GDPR";
|
|
3569
|
+
if (tz === "America/Los_Angeles" || tz === "America/Tijuana") return "CCPA";
|
|
3570
|
+
if (tz === "America/Sao_Paulo") return "LGPD";
|
|
3571
|
+
return "default";
|
|
3572
|
+
} catch (e) {
|
|
3573
|
+
return "default";
|
|
3574
|
+
}
|
|
3575
|
+
};
|
|
3576
|
+
var detectJurisdiction = async (opts) => {
|
|
3577
|
+
const o = opts || {};
|
|
3578
|
+
if (typeof document !== "undefined" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.jurisdiction) {
|
|
3579
|
+
const v = document.documentElement.dataset.jurisdiction;
|
|
3580
|
+
if (v === "GDPR" || v === "CCPA" || v === "LGPD" || v === "default") return v;
|
|
3581
|
+
}
|
|
3582
|
+
if (o.geoEndpoint && typeof fetch === "function") {
|
|
3583
|
+
try {
|
|
3584
|
+
const res = await fetch(o.geoEndpoint, { credentials: "omit" });
|
|
3585
|
+
if (res && res.ok) {
|
|
3586
|
+
const data = await res.json();
|
|
3587
|
+
return mapCountryToJurisdiction(data && data.country, data && data.region);
|
|
3588
|
+
}
|
|
3589
|
+
} catch (e) {
|
|
3590
|
+
}
|
|
3591
|
+
}
|
|
3592
|
+
return tzGuess();
|
|
3593
|
+
};
|
|
3594
|
+
|
|
3595
|
+
// src/core/audit.js
|
|
3596
|
+
var postAudit = (endpoint, payload) => {
|
|
3597
|
+
if (!endpoint) return;
|
|
3598
|
+
try {
|
|
3599
|
+
fetch(endpoint, {
|
|
3600
|
+
method: "POST",
|
|
3601
|
+
headers: { "Content-Type": "application/json" },
|
|
3602
|
+
body: JSON.stringify(payload),
|
|
3603
|
+
keepalive: true
|
|
3604
|
+
}).catch(() => {
|
|
3605
|
+
});
|
|
3606
|
+
} catch (e) {
|
|
3607
|
+
}
|
|
3608
|
+
};
|
|
3609
|
+
|
|
3610
|
+
// src/api.js
|
|
3611
|
+
var VERSION = "2.1.0";
|
|
3612
|
+
var CATEGORIES2 = ["analytics", "marketing", "functional", "recording"];
|
|
3613
|
+
var createAPI = (ctx) => {
|
|
3614
|
+
const { config, emitter, deps } = ctx;
|
|
3615
|
+
let state = ctx.state || null;
|
|
3616
|
+
let currentLocale = ctx.locale;
|
|
3617
|
+
let mainLang = ctx.mainLang;
|
|
3618
|
+
let jurisdiction = ctx.jurisdiction || "default";
|
|
3619
|
+
let t = getTranslation(currentLocale);
|
|
3620
|
+
let modalRoot = null;
|
|
3621
|
+
let bannerRoot = null;
|
|
3622
|
+
const setUI = (which, root) => {
|
|
3623
|
+
if (which === "modal") modalRoot = root;
|
|
3624
|
+
if (which === "banner") bannerRoot = root;
|
|
3625
|
+
};
|
|
3626
|
+
const closeUI = () => {
|
|
3627
|
+
if (typeof document !== "undefined") {
|
|
3628
|
+
const overlays = document.querySelectorAll(".blakfy-overlay");
|
|
3629
|
+
for (let i = 0; i < overlays.length; i++) {
|
|
3630
|
+
const o = overlays[i];
|
|
3631
|
+
if (o && o.parentNode) o.parentNode.removeChild(o);
|
|
3632
|
+
}
|
|
3633
|
+
}
|
|
3634
|
+
modalRoot = null;
|
|
3635
|
+
bannerRoot = null;
|
|
3636
|
+
if (deps && typeof deps.removeFocusTrap === "function") deps.removeFocusTrap();
|
|
3637
|
+
};
|
|
3638
|
+
const getConsent = (cat) => {
|
|
3639
|
+
if (cat === "essential") return true;
|
|
3640
|
+
return state ? !!state[cat] : false;
|
|
3641
|
+
};
|
|
3642
|
+
const grantedCategories = (s) => {
|
|
3643
|
+
const out = [];
|
|
3644
|
+
if (!s) return out;
|
|
3645
|
+
for (let i = 0; i < CATEGORIES2.length; i++) {
|
|
3646
|
+
if (s[CATEGORIES2[i]]) out.push(CATEGORIES2[i]);
|
|
3647
|
+
}
|
|
3648
|
+
return out;
|
|
3649
|
+
};
|
|
3650
|
+
const commit = (prefs, action) => {
|
|
3651
|
+
const prevState = state;
|
|
3652
|
+
const prevGranted = grantedCategories(prevState);
|
|
3653
|
+
const next = buildState({
|
|
3654
|
+
prefs: prefs || {},
|
|
3655
|
+
currentLocale,
|
|
3656
|
+
mainLang,
|
|
3657
|
+
policyVersion: config.policyVersion,
|
|
3658
|
+
jurisdiction,
|
|
3659
|
+
tcString: deps && typeof deps.getTCString === "function" ? deps.getTCString() : null,
|
|
3660
|
+
uspString: null,
|
|
3661
|
+
prevId: prevState && prevState.id
|
|
3662
|
+
});
|
|
3663
|
+
state = next;
|
|
3664
|
+
try {
|
|
3665
|
+
writeCookie(state);
|
|
3666
|
+
} catch (e) {
|
|
3667
|
+
}
|
|
3668
|
+
if (config.auditEndpoint) {
|
|
3669
|
+
postAudit(config.auditEndpoint, {
|
|
3670
|
+
id: state.id,
|
|
3671
|
+
action: action || "save",
|
|
3672
|
+
timestamp: state.timestamp,
|
|
3673
|
+
version: state.version,
|
|
3674
|
+
jurisdiction: state.jurisdiction,
|
|
3675
|
+
consent: {
|
|
3676
|
+
analytics: state.analytics,
|
|
3677
|
+
marketing: state.marketing,
|
|
3678
|
+
functional: state.functional,
|
|
3679
|
+
recording: state.recording
|
|
3680
|
+
}
|
|
3681
|
+
});
|
|
3682
|
+
}
|
|
3683
|
+
if (deps && typeof deps.pushGCM === "function") deps.pushGCM(state);
|
|
3684
|
+
if (deps && typeof deps.pushUET === "function") deps.pushUET(state);
|
|
3685
|
+
if (deps && typeof deps.applyYandex === "function") {
|
|
3686
|
+
deps.applyYandex(state, {
|
|
3687
|
+
unblock: (cat) => {
|
|
3688
|
+
if (deps.unblockScripts) deps.unblockScripts(cat);
|
|
3689
|
+
if (deps.unblockIframes) deps.unblockIframes(cat);
|
|
3690
|
+
},
|
|
3691
|
+
runCleanup: deps.runCleanup
|
|
3692
|
+
});
|
|
3693
|
+
}
|
|
3694
|
+
const nowGranted = grantedCategories(state);
|
|
3695
|
+
for (let i = 0; i < nowGranted.length; i++) {
|
|
3696
|
+
const cat = nowGranted[i];
|
|
3697
|
+
if (deps && deps.unblockScripts) deps.unblockScripts(cat);
|
|
3698
|
+
if (deps && deps.unblockIframes) deps.unblockIframes(cat);
|
|
3699
|
+
}
|
|
3700
|
+
for (let j = 0; j < prevGranted.length; j++) {
|
|
3701
|
+
const c = prevGranted[j];
|
|
3702
|
+
if (nowGranted.indexOf(c) === -1) {
|
|
3703
|
+
if (deps && typeof deps.runCleanup === "function") deps.runCleanup(c);
|
|
3704
|
+
}
|
|
3705
|
+
}
|
|
3706
|
+
emitter.emit("change", state);
|
|
3707
|
+
for (let k = 0; k < CATEGORIES2.length; k++) {
|
|
3708
|
+
const cat = CATEGORIES2[k];
|
|
3709
|
+
const wasGranted = prevGranted.indexOf(cat) > -1;
|
|
3710
|
+
const isGranted = nowGranted.indexOf(cat) > -1;
|
|
3711
|
+
if (!wasGranted && isGranted) emitter.emit("consent:" + cat, true);
|
|
3712
|
+
if (wasGranted && !isGranted) emitter.emit("consent:" + cat, false);
|
|
3713
|
+
}
|
|
3714
|
+
closeUI();
|
|
3715
|
+
};
|
|
3716
|
+
const acceptAll = () => commit({ analytics: true, marketing: true, functional: true, recording: true }, "accept_all");
|
|
3717
|
+
const rejectAll = () => commit({ analytics: false, marketing: false, functional: false, recording: false }, "reject_all");
|
|
3718
|
+
const open = () => {
|
|
3719
|
+
if (deps && typeof deps.openModal === "function") deps.openModal({ commit, t, currentLocale, state });
|
|
3720
|
+
};
|
|
3721
|
+
const onChange = (fn) => {
|
|
3722
|
+
emitter.on("change", fn);
|
|
3723
|
+
};
|
|
3724
|
+
const onConsent = (category, fn) => {
|
|
3725
|
+
if (typeof fn !== "function") return;
|
|
3726
|
+
if (getConsent(category)) {
|
|
3727
|
+
try {
|
|
3728
|
+
fn(true);
|
|
3729
|
+
} catch (e) {
|
|
3730
|
+
}
|
|
3731
|
+
}
|
|
3732
|
+
emitter.on("consent:" + category, fn);
|
|
3733
|
+
};
|
|
3734
|
+
const setLocale = (loc) => {
|
|
3735
|
+
const resolved = normalizeLocale(loc);
|
|
3736
|
+
if (!resolved) return;
|
|
3737
|
+
currentLocale = resolved;
|
|
3738
|
+
t = getTranslation(resolved) || getTranslation(DEFAULT_LOCALE);
|
|
3739
|
+
emitter.emit("locale", { locale: resolved, t, isRTL: RTL_LOCALES.indexOf(resolved) > -1 });
|
|
3740
|
+
};
|
|
3741
|
+
const getMainLang = () => mainLang;
|
|
3742
|
+
const getState = () => state;
|
|
3743
|
+
const getJurisdiction = () => jurisdiction;
|
|
3744
|
+
const unblock = (category) => {
|
|
3745
|
+
if (!deps) return;
|
|
3746
|
+
if (typeof deps.unblockScripts === "function") deps.unblockScripts(category);
|
|
3747
|
+
if (typeof deps.unblockIframes === "function") deps.unblockIframes(category);
|
|
3748
|
+
};
|
|
3749
|
+
const scan = () => {
|
|
3750
|
+
const granted = scanAll({ getConsent });
|
|
3751
|
+
for (let i = 0; i < granted.length; i++) unblock(granted[i]);
|
|
3752
|
+
return granted;
|
|
3753
|
+
};
|
|
3754
|
+
const usePreset = (name) => {
|
|
3755
|
+
if (!deps || typeof deps.applyPreset !== "function") return null;
|
|
3756
|
+
return deps.applyPreset(name, { registerCleanup: deps.registerCleanup });
|
|
3757
|
+
};
|
|
3758
|
+
const registerCleanup2 = (opts) => {
|
|
3759
|
+
if (deps && typeof deps.registerCleanup === "function") deps.registerCleanup(opts);
|
|
3760
|
+
};
|
|
3761
|
+
const tcf = {
|
|
3762
|
+
getTCString: () => deps && typeof deps.getTCString === "function" ? deps.getTCString() : ""
|
|
3763
|
+
};
|
|
3764
|
+
const ccpa = {
|
|
3765
|
+
optOut: () => {
|
|
3766
|
+
if (deps && typeof deps.optOutCCPA === "function") deps.optOutCCPA();
|
|
3767
|
+
},
|
|
3768
|
+
isOptedOut: () => deps && typeof deps.isOptedOutCCPA === "function" ? !!deps.isOptedOutCCPA() : false
|
|
3769
|
+
};
|
|
3770
|
+
return {
|
|
3771
|
+
version: VERSION,
|
|
3772
|
+
open,
|
|
3773
|
+
acceptAll,
|
|
3774
|
+
rejectAll,
|
|
3775
|
+
getConsent,
|
|
3776
|
+
getState,
|
|
3777
|
+
onChange,
|
|
3778
|
+
setLocale,
|
|
3779
|
+
getMainLang,
|
|
3780
|
+
onConsent,
|
|
3781
|
+
registerCleanup: registerCleanup2,
|
|
3782
|
+
unblock,
|
|
3783
|
+
scan,
|
|
3784
|
+
usePreset,
|
|
3785
|
+
tcf,
|
|
3786
|
+
ccpa,
|
|
3787
|
+
getJurisdiction,
|
|
3788
|
+
__internal: { commit, setUI, closeUI }
|
|
3789
|
+
};
|
|
3790
|
+
};
|
|
3791
|
+
|
|
3792
|
+
// src/index.js
|
|
3793
|
+
var ROOT_OVERLAY_CLASS = "blakfy-overlay";
|
|
3794
|
+
var bootstrap = async () => {
|
|
3795
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
3796
|
+
if (window.BlakfyCookie && window.BlakfyCookie.__bootstrapped) return;
|
|
3797
|
+
const scriptEl = getScriptEl();
|
|
3798
|
+
const config = readConfig(scriptEl);
|
|
3799
|
+
const currentLocale = detectLocale({ configLocale: config.locale });
|
|
3800
|
+
const mainLang = detectMainLang({ configMainLang: config.mainLang });
|
|
3801
|
+
let t = getTranslation(currentLocale);
|
|
3802
|
+
let isRTL = RTL_LOCALES.indexOf(currentLocale) > -1;
|
|
3803
|
+
const resolveTheme = (raw) => {
|
|
3804
|
+
if (raw === "auto") {
|
|
3805
|
+
try {
|
|
3806
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
3807
|
+
} catch (e) {
|
|
3808
|
+
return "light";
|
|
3809
|
+
}
|
|
3810
|
+
}
|
|
3811
|
+
if (raw === "black") return "dark";
|
|
3812
|
+
if (raw === "white") return "light";
|
|
3813
|
+
return raw || "light";
|
|
3814
|
+
};
|
|
3815
|
+
const theme = resolveTheme(config.theme);
|
|
3816
|
+
injectStyles();
|
|
3817
|
+
const emitter = createEmitter();
|
|
3818
|
+
let jurisdiction = "default";
|
|
3819
|
+
try {
|
|
3820
|
+
jurisdiction = await detectJurisdiction({});
|
|
3821
|
+
} catch (e) {
|
|
3822
|
+
jurisdiction = "default";
|
|
3823
|
+
}
|
|
3824
|
+
installDefaults();
|
|
3825
|
+
installDefaults2();
|
|
3826
|
+
installDefaults3();
|
|
3827
|
+
let state = readCookie(config.policyVersion);
|
|
3828
|
+
if (config.tcf === "true") {
|
|
3829
|
+
installTCFAPI({
|
|
3830
|
+
cmpId: parseInt(config.cmpId, 10) || 0,
|
|
3831
|
+
cmpVersion: 1,
|
|
3832
|
+
getConsent: () => state || {},
|
|
3833
|
+
on: emitter.on
|
|
3834
|
+
});
|
|
3835
|
+
}
|
|
3836
|
+
const ccpaOn = config.ccpa === "true" || config.ccpa === "auto" && jurisdiction === "CCPA";
|
|
3837
|
+
if (ccpaOn) {
|
|
3838
|
+
installUSP({});
|
|
3839
|
+
installDoNotSellLink({ t });
|
|
3840
|
+
}
|
|
3841
|
+
if (getDNT() && config.dnt === "auto-deny" && !state) {
|
|
3842
|
+
applyDNT({ mode: "auto-deny", setPrefs: () => {
|
|
3843
|
+
} });
|
|
3844
|
+
}
|
|
3845
|
+
if (getGPC() && config.gpc === "respect" && !state) {
|
|
3846
|
+
applyGPC({ mode: "respect", currentState: null, setPrefs: () => {
|
|
3847
|
+
} });
|
|
3848
|
+
}
|
|
3849
|
+
let activePresetList = [];
|
|
3850
|
+
if (config.presets) {
|
|
3851
|
+
activePresetList = String(config.presets).split(",").map((s) => s.trim()).filter(Boolean);
|
|
3852
|
+
for (let i = 0; i < activePresetList.length; i++) {
|
|
3853
|
+
try {
|
|
3854
|
+
applyPreset(activePresetList[i], { registerCleanup });
|
|
3855
|
+
} catch (e) {
|
|
3856
|
+
}
|
|
3857
|
+
}
|
|
3858
|
+
}
|
|
3859
|
+
const api = createAPI({
|
|
3860
|
+
state,
|
|
3861
|
+
config,
|
|
3862
|
+
emitter,
|
|
3863
|
+
locale: currentLocale,
|
|
3864
|
+
mainLang,
|
|
3865
|
+
jurisdiction,
|
|
3866
|
+
deps: {
|
|
3867
|
+
unblockScripts,
|
|
3868
|
+
unblockIframes,
|
|
3869
|
+
runCleanup,
|
|
3870
|
+
registerCleanup,
|
|
3871
|
+
applyPreset,
|
|
3872
|
+
pushGCM,
|
|
3873
|
+
pushUET,
|
|
3874
|
+
applyYandex,
|
|
3875
|
+
getTCString,
|
|
3876
|
+
optOutCCPA: optOut,
|
|
3877
|
+
isOptedOutCCPA: isOptedOut,
|
|
3878
|
+
removeFocusTrap,
|
|
3879
|
+
openModal: (opts) => mountModal(opts)
|
|
3880
|
+
}
|
|
3881
|
+
});
|
|
3882
|
+
api.__bootstrapped = true;
|
|
3883
|
+
emitter.on("change", (s) => {
|
|
3884
|
+
state = s;
|
|
3885
|
+
});
|
|
3886
|
+
emitter.on("locale", (info) => {
|
|
3887
|
+
t = info.t;
|
|
3888
|
+
isRTL = info.isRTL;
|
|
3889
|
+
});
|
|
3890
|
+
if (!window.BlakfyCookie) {
|
|
3891
|
+
window.BlakfyCookie = api;
|
|
3892
|
+
try {
|
|
3893
|
+
window.dispatchEvent(new CustomEvent("blakfy:ready", { detail: { version: api.version } }));
|
|
3894
|
+
} catch (e) {
|
|
3895
|
+
}
|
|
3896
|
+
}
|
|
3897
|
+
const mountBanner = () => {
|
|
3898
|
+
const overlay = document.createElement("div");
|
|
3899
|
+
overlay.className = ROOT_OVERLAY_CLASS + " widget " + (config.position || "bottom-right");
|
|
3900
|
+
const card = createBanner({
|
|
3901
|
+
t,
|
|
3902
|
+
isRTL,
|
|
3903
|
+
accent: config.accent,
|
|
3904
|
+
theme,
|
|
3905
|
+
policyUrl: config.policyUrl,
|
|
3906
|
+
onAccept: () => api.acceptAll(),
|
|
3907
|
+
onReject: () => api.rejectAll(),
|
|
3908
|
+
onPrefs: () => mountModal({ commit: api.__internal.commit, t, currentLocale, state })
|
|
3909
|
+
});
|
|
3910
|
+
overlay.appendChild(card);
|
|
3911
|
+
document.body.appendChild(overlay);
|
|
3912
|
+
api.__internal.setUI("banner", overlay);
|
|
3913
|
+
mountBadges(card);
|
|
3914
|
+
installAntiTamper(card);
|
|
3915
|
+
installFocusTrap(card, { onEscape: () => {
|
|
3916
|
+
} });
|
|
3917
|
+
return overlay;
|
|
3918
|
+
};
|
|
3919
|
+
function mountModal(opts) {
|
|
3920
|
+
const existing = document.querySelectorAll("." + ROOT_OVERLAY_CLASS + ".modal");
|
|
3921
|
+
for (let i = 0; i < existing.length; i++) {
|
|
3922
|
+
if (existing[i].parentNode) existing[i].parentNode.removeChild(existing[i]);
|
|
3923
|
+
}
|
|
3924
|
+
const overlay = document.createElement("div");
|
|
3925
|
+
overlay.className = ROOT_OVERLAY_CLASS + " modal";
|
|
3926
|
+
overlay.addEventListener("click", (ev) => {
|
|
3927
|
+
if (ev.target === overlay) api.__internal.closeUI();
|
|
3928
|
+
});
|
|
3929
|
+
const card = createModal({
|
|
3930
|
+
t: opts && opts.t || t,
|
|
3931
|
+
isRTL,
|
|
3932
|
+
accent: config.accent,
|
|
3933
|
+
theme,
|
|
3934
|
+
currentState: state,
|
|
3935
|
+
presets: activePresetList,
|
|
3936
|
+
version: api.version,
|
|
3937
|
+
onSave: (prefs) => api.__internal.commit(prefs, "save"),
|
|
3938
|
+
onAccept: () => api.acceptAll(),
|
|
3939
|
+
onClose: () => api.__internal.closeUI()
|
|
3940
|
+
});
|
|
3941
|
+
overlay.appendChild(card);
|
|
3942
|
+
document.body.appendChild(overlay);
|
|
3943
|
+
api.__internal.setUI("modal", overlay);
|
|
3944
|
+
mountBadges(card);
|
|
3945
|
+
installAntiTamper(card);
|
|
3946
|
+
installFocusTrap(card, { onEscape: () => api.__internal.closeUI() });
|
|
3947
|
+
return overlay;
|
|
3948
|
+
}
|
|
3949
|
+
if (state) {
|
|
3950
|
+
pushGCM(state);
|
|
3951
|
+
pushUET(state);
|
|
3952
|
+
applyYandex(state, {
|
|
3953
|
+
unblock: (cat) => {
|
|
3954
|
+
unblockScripts(cat);
|
|
3955
|
+
unblockIframes(cat);
|
|
3956
|
+
},
|
|
3957
|
+
runCleanup
|
|
3958
|
+
});
|
|
3959
|
+
const granted = scanAll({ getConsent: api.getConsent });
|
|
3960
|
+
for (let i = 0; i < granted.length; i++) {
|
|
3961
|
+
unblockScripts(granted[i]);
|
|
3962
|
+
unblockIframes(granted[i]);
|
|
3963
|
+
}
|
|
3964
|
+
installPlaceholders(t, (cat) => {
|
|
3965
|
+
mountModal({ commit: api.__internal.commit, t, currentLocale, state });
|
|
3966
|
+
});
|
|
3967
|
+
} else {
|
|
3968
|
+
mountBanner();
|
|
3969
|
+
installPlaceholders(t, () => {
|
|
3970
|
+
mountModal({ commit: api.__internal.commit, t, currentLocale, state });
|
|
3971
|
+
});
|
|
3972
|
+
}
|
|
3973
|
+
startObserver({
|
|
3974
|
+
getConsent: api.getConsent,
|
|
3975
|
+
onScan: (cat) => {
|
|
3976
|
+
unblockScripts(cat);
|
|
3977
|
+
unblockIframes(cat);
|
|
3978
|
+
}
|
|
3979
|
+
});
|
|
3980
|
+
if (config.statusEnabled && config.statusUrl) {
|
|
3981
|
+
fetchStatus(config.statusUrl).then((data) => {
|
|
3982
|
+
if (data) renderStatus({ data, currentLocale, mainLang });
|
|
3983
|
+
});
|
|
3984
|
+
}
|
|
3985
|
+
};
|
|
3986
|
+
if (typeof document !== "undefined") {
|
|
3987
|
+
if (document.readyState === "loading") {
|
|
3988
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
3989
|
+
bootstrap();
|
|
3990
|
+
});
|
|
3991
|
+
} else {
|
|
3992
|
+
bootstrap();
|
|
3993
|
+
}
|
|
3994
|
+
}
|
|
3995
|
+
var index_default = bootstrap;
|
|
3996
|
+
})();
|
|
3997
|
+
/*! For license information please see cookie.js.LEGAL.txt */
|
|
3998
|
+
//# sourceMappingURL=cookie.js.map
|