@redacto.io/consent-sdk-react 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,1166 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ RedactoNoticeConsent: () => RedactoNoticeConsent
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+
27
+ // src/RedactoNoticeConsent/RedactoNoticeConsent.tsx
28
+ var import_react2 = require("react");
29
+
30
+ // src/RedactoNoticeConsent/api/index.ts
31
+ var import_jwt_decode = require("jwt-decode");
32
+ var BASE_URL = "https://api.redacto.tech";
33
+ var BACKEND_URL = "http://localhost:3000";
34
+ var fetchConsentContent = async ({
35
+ noticeId,
36
+ accessToken,
37
+ refreshToken,
38
+ language = "en"
39
+ }) => {
40
+ try {
41
+ const decodedToken = (0, import_jwt_decode.jwtDecode)(accessToken);
42
+ const ORGANISATION_UUID = decodedToken == null ? void 0 : decodedToken.organisation_uuid;
43
+ const WORKSPACE_UUID = decodedToken == null ? void 0 : decodedToken.workspace_uuid;
44
+ const response = await fetch(
45
+ `${BASE_URL}/consent/public/organisations/${ORGANISATION_UUID}/workspaces/${WORKSPACE_UUID}/notices/${noticeId}`,
46
+ {
47
+ method: "GET",
48
+ headers: {
49
+ Authorization: `Bearer ${accessToken}`,
50
+ "Accept-Language": language,
51
+ "Content-Type": "application/json"
52
+ }
53
+ }
54
+ );
55
+ if (response.status === 401) {
56
+ try {
57
+ const response2 = await fetch(
58
+ `${BACKEND_URL}/api/consent/refresh-token`,
59
+ {
60
+ method: "POST",
61
+ headers: {
62
+ "Content-Type": "application/json"
63
+ },
64
+ body: JSON.stringify({
65
+ refreshToken
66
+ })
67
+ }
68
+ );
69
+ if (!response2.ok) {
70
+ throw new Error("Failed to get consent tokens");
71
+ }
72
+ const data2 = await response2.json();
73
+ localStorage.setItem("accessToken", data2.token);
74
+ localStorage.setItem("refreshToken", data2.refresh_token);
75
+ localStorage.setItem("tokenExpiresAt", data2.expires_at);
76
+ } catch (error) {
77
+ console.error("Failed to setup consent:", error);
78
+ throw error;
79
+ }
80
+ }
81
+ if (response.status === 409) {
82
+ const error = new Error("User has already provided consent");
83
+ error.status = 409;
84
+ throw error;
85
+ }
86
+ if (!response.ok) {
87
+ throw new Error(
88
+ `Failed to fetch consent content: ${response.statusText}`
89
+ );
90
+ }
91
+ const data = await response.json();
92
+ return data;
93
+ } catch (error) {
94
+ console.error("Error fetching consent content:", error);
95
+ throw error;
96
+ }
97
+ };
98
+ var submitConsentEvent = async ({
99
+ accessToken,
100
+ noticeUuid,
101
+ purposes,
102
+ declined
103
+ }) => {
104
+ try {
105
+ const primaryEmail = localStorage.getItem("userEmail");
106
+ const decodedToken = (0, import_jwt_decode.jwtDecode)(accessToken);
107
+ const ORGANISATION_UUID = decodedToken.organisation_uuid;
108
+ const WORKSPACE_UUID = decodedToken.workspace_uuid;
109
+ const payload = {
110
+ primary_email: primaryEmail || void 0,
111
+ notice_uuid: noticeUuid,
112
+ source: "WEB",
113
+ declined,
114
+ consents: {
115
+ purposes: purposes.map((purpose) => ({
116
+ uuid: purpose.uuid,
117
+ name: purpose.name,
118
+ description: purpose.description,
119
+ industries: purpose.industries,
120
+ selected: purpose.selected,
121
+ data_elements: purpose.data_elements.map((element) => ({
122
+ uuid: element.uuid,
123
+ name: element.name,
124
+ enabled: element.enabled,
125
+ required: element.required,
126
+ selected: element.required ? true : element.selected
127
+ }))
128
+ }))
129
+ }
130
+ };
131
+ const response = await fetch(
132
+ `${BASE_URL}/consent/public/consent-events/organisations/${ORGANISATION_UUID}/workspaces/${WORKSPACE_UUID}/by-token`,
133
+ {
134
+ method: "POST",
135
+ headers: {
136
+ Authorization: `Bearer ${accessToken}`,
137
+ "Content-Type": "application/json"
138
+ },
139
+ body: JSON.stringify(payload)
140
+ }
141
+ );
142
+ if (!response.ok) {
143
+ throw new Error(`Failed to submit consent event: ${response.statusText}`);
144
+ }
145
+ } catch (error) {
146
+ console.error("Error submitting consent event:", error);
147
+ throw error;
148
+ }
149
+ };
150
+
151
+ // src/RedactoNoticeConsent/styles.ts
152
+ var styles = {
153
+ overlay: {
154
+ position: "fixed",
155
+ top: 0,
156
+ left: 0,
157
+ width: "100%",
158
+ height: "100%",
159
+ backgroundColor: "rgba(0, 0, 0, 0.5)",
160
+ display: "flex",
161
+ alignItems: "center",
162
+ justifyContent: "center",
163
+ zIndex: 999,
164
+ animation: "overlayFadeIn 0.2s cubic-bezier(0.16, 1, 0.3, 1)",
165
+ pointerEvents: "all"
166
+ },
167
+ modal: {
168
+ position: "fixed",
169
+ top: "50%",
170
+ left: "50%",
171
+ transform: "translate(-50%, -50%)",
172
+ width: "700px",
173
+ borderRadius: "8px",
174
+ backgroundColor: "#ffffff",
175
+ boxShadow: "4px 0px 4px 0px #00000040",
176
+ border: "none",
177
+ display: "flex",
178
+ flexDirection: "column",
179
+ maxHeight: "90vh",
180
+ zIndex: 1e3
181
+ },
182
+ content: {
183
+ margin: "22px",
184
+ display: "flex",
185
+ flexDirection: "column",
186
+ flexGrow: 1,
187
+ overflow: "hidden",
188
+ minHeight: 0
189
+ },
190
+ topSection: {
191
+ display: "flex",
192
+ justifyContent: "space-between",
193
+ alignItems: "center",
194
+ paddingBottom: "15px",
195
+ borderBottom: "1px solid #e5e7eb",
196
+ boxShadow: "0 1px 2px rgba(0, 0, 0, 0.03)",
197
+ backgroundColor: "#ffffff"
198
+ },
199
+ topLeft: {
200
+ display: "flex",
201
+ alignItems: "center",
202
+ gap: "10px"
203
+ },
204
+ logo: {
205
+ height: "32px",
206
+ width: "auto",
207
+ objectFit: "contain"
208
+ },
209
+ title: {
210
+ fontSize: "18px",
211
+ fontWeight: 700,
212
+ lineHeight: "150%",
213
+ letterSpacing: "0.2px",
214
+ verticalAlign: "middle",
215
+ color: "#101828"
216
+ },
217
+ topRight: {
218
+ borderRadius: "8px",
219
+ padding: "3px 9px",
220
+ border: "1px solid #d0d5dd",
221
+ display: "flex",
222
+ alignItems: "center",
223
+ justifyContent: "center",
224
+ fontWeight: 400,
225
+ fontSize: "12px",
226
+ lineHeight: "150%",
227
+ letterSpacing: "0.2px",
228
+ verticalAlign: "middle",
229
+ color: "#344054",
230
+ gap: "5px",
231
+ cursor: "pointer",
232
+ backgroundColor: "#ffffff"
233
+ },
234
+ middleSection: {
235
+ margin: "20px 0px",
236
+ display: "flex",
237
+ flexDirection: "column",
238
+ gap: "12px",
239
+ flexGrow: 1,
240
+ overflowY: "auto",
241
+ minHeight: 0,
242
+ paddingRight: "15px"
243
+ },
244
+ privacyText: {
245
+ fontSize: "16px",
246
+ fontWeight: 400,
247
+ lineHeight: "150%",
248
+ letterSpacing: "0.2px",
249
+ color: "#344054"
250
+ },
251
+ link: {
252
+ color: "#4f87ff",
253
+ textDecoration: "none"
254
+ },
255
+ subTitle: {
256
+ fontWeight: 600,
257
+ fontSize: "16px",
258
+ lineHeight: "150%",
259
+ letterSpacing: "0.2px",
260
+ color: "#101828"
261
+ },
262
+ optionsContainer: {
263
+ display: "flex",
264
+ flexDirection: "column",
265
+ gap: "14px"
266
+ },
267
+ optionItem: {
268
+ display: "flex",
269
+ justifyContent: "space-between",
270
+ alignItems: "center"
271
+ },
272
+ optionLeft: {
273
+ display: "flex",
274
+ gap: "12px",
275
+ alignItems: "center",
276
+ cursor: "pointer"
277
+ },
278
+ optionTextContainer: {
279
+ display: "flex",
280
+ flexDirection: "column"
281
+ },
282
+ optionTitle: {
283
+ fontWeight: 500,
284
+ fontSize: "16px",
285
+ lineHeight: "150%",
286
+ letterSpacing: "0.2px",
287
+ color: "#101828"
288
+ },
289
+ optionDescription: {
290
+ fontWeight: 400,
291
+ fontSize: "12px",
292
+ lineHeight: "150%",
293
+ letterSpacing: "0.2px",
294
+ color: "#475467",
295
+ verticalAlign: "middle"
296
+ },
297
+ checkboxLarge: {
298
+ height: "20px",
299
+ width: "20px",
300
+ padding: "4px",
301
+ borderRadius: "5px",
302
+ border: "2px solid #d0d5dd"
303
+ },
304
+ dataElementsContainer: {
305
+ marginLeft: "27px",
306
+ display: "flex",
307
+ flexDirection: "column"
308
+ },
309
+ dataElementItem: {
310
+ display: "flex",
311
+ alignItems: "center",
312
+ gap: "10px",
313
+ justifyContent: "space-between"
314
+ },
315
+ dataElementText: {
316
+ fontWeight: 400,
317
+ fontSize: "14px",
318
+ lineHeight: "150%",
319
+ letterSpacing: "0.2px",
320
+ color: "#344054"
321
+ },
322
+ checkboxSmall: {
323
+ height: "16px",
324
+ width: "16px",
325
+ padding: "4px",
326
+ borderRadius: "5px",
327
+ border: "2px solid #d0d5dd"
328
+ },
329
+ bottomSection: {
330
+ display: "flex",
331
+ justifyContent: "space-between",
332
+ gap: "29px",
333
+ paddingTop: "15px",
334
+ borderTop: "1px solid #e5e7eb",
335
+ boxShadow: "0 -1px 2px rgba(0, 0, 0, 0.03)",
336
+ backgroundColor: "#ffffff"
337
+ },
338
+ button: {
339
+ width: "100%",
340
+ borderRadius: "8px",
341
+ padding: "9px 45px",
342
+ fontWeight: 400,
343
+ fontSize: "16px",
344
+ lineHeight: "150%",
345
+ letterSpacing: "0.2px",
346
+ cursor: "pointer"
347
+ },
348
+ acceptButton: {
349
+ backgroundColor: "#4f87ff",
350
+ border: "none",
351
+ color: "#ffffff"
352
+ },
353
+ cancelButton: {
354
+ border: "1px solid #d0d5dd",
355
+ backgroundColor: "#ffffff",
356
+ color: "#000000"
357
+ },
358
+ languageSelectorContainer: {
359
+ position: "relative"
360
+ },
361
+ languageDropdown: {
362
+ position: "absolute",
363
+ top: "100%",
364
+ right: 0,
365
+ backgroundColor: "#ffffff",
366
+ border: "1px solid #d0d5dd",
367
+ borderRadius: "4px",
368
+ boxShadow: "0px 2px 4px rgba(0, 0, 0, 0.1)",
369
+ zIndex: 10,
370
+ width: "max-content",
371
+ marginTop: "4px"
372
+ },
373
+ languageItem: {
374
+ padding: "8px 12px",
375
+ cursor: "pointer",
376
+ fontSize: "12px",
377
+ color: "#344054",
378
+ backgroundColor: "#ffffff",
379
+ borderBottom: "1px solid #e5e7eb"
380
+ },
381
+ selectedLanguageItem: {
382
+ backgroundColor: "#f3f4f6",
383
+ fontWeight: 600
384
+ },
385
+ loadingContainer: {
386
+ display: "flex",
387
+ flexDirection: "column",
388
+ alignItems: "center",
389
+ justifyContent: "center",
390
+ padding: "2rem",
391
+ minHeight: "200px"
392
+ },
393
+ loadingSpinner: {
394
+ width: "40px",
395
+ height: "40px",
396
+ border: "4px solid #f3f3f3",
397
+ borderTop: "4px solid #3498db",
398
+ borderRadius: "50%",
399
+ animation: "spin 1s linear infinite",
400
+ marginBottom: "1rem"
401
+ },
402
+ // Media query styles
403
+ "@media (max-width: 768px)": {
404
+ modal: {
405
+ width: "90%"
406
+ },
407
+ content: {
408
+ margin: "20px"
409
+ },
410
+ title: {
411
+ fontSize: "16px"
412
+ },
413
+ subTitle: {
414
+ fontSize: "14px"
415
+ },
416
+ privacyText: {
417
+ fontSize: "14px"
418
+ },
419
+ optionTitle: {
420
+ fontSize: "14px"
421
+ },
422
+ optionDescription: {
423
+ fontSize: "11px"
424
+ },
425
+ dataElementText: {
426
+ fontSize: "12px"
427
+ },
428
+ topRight: {
429
+ fontSize: "11px",
430
+ padding: "3px 6px",
431
+ height: "auto",
432
+ width: "auto"
433
+ },
434
+ languageItem: {
435
+ fontSize: "11px",
436
+ padding: "6px 10px"
437
+ },
438
+ bottomSection: {
439
+ flexDirection: "column",
440
+ gap: "12px"
441
+ },
442
+ button: {
443
+ fontSize: "14px",
444
+ padding: "10px 20px"
445
+ },
446
+ middleSection: {
447
+ paddingRight: "10px"
448
+ }
449
+ }
450
+ };
451
+
452
+ // src/RedactoNoticeConsent/assets/redacto-logo.png
453
+ var redacto_logo_default = "data:image/png;base64,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";
454
+
455
+ // src/RedactoNoticeConsent/useMediaQuery.ts
456
+ var import_react = require("react");
457
+ var useMediaQuery = (query) => {
458
+ const getMatches = () => typeof window !== "undefined" ? window.matchMedia(query).matches : false;
459
+ const [matches, setMatches] = (0, import_react.useState)(getMatches);
460
+ (0, import_react.useEffect)(() => {
461
+ if (typeof window === "undefined") return;
462
+ const media = window.matchMedia(query);
463
+ const listener = (e) => {
464
+ setMatches(e.matches);
465
+ };
466
+ if (media.addEventListener) {
467
+ media.addEventListener("change", listener);
468
+ } else {
469
+ media.addListener(listener);
470
+ }
471
+ return () => {
472
+ if (media.removeEventListener) {
473
+ media.removeEventListener("change", listener);
474
+ } else {
475
+ media.removeListener(listener);
476
+ }
477
+ };
478
+ }, [query]);
479
+ return matches;
480
+ };
481
+
482
+ // src/RedactoNoticeConsent/RedactoNoticeConsent.tsx
483
+ var import_jsx_runtime = require("react/jsx-runtime");
484
+ var RedactoNoticeConsent = ({
485
+ noticeId,
486
+ accessToken,
487
+ refreshToken,
488
+ language = "en",
489
+ blockUI = false,
490
+ onAccept,
491
+ onDecline,
492
+ onError,
493
+ settings
494
+ }) => {
495
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
496
+ const [content, setContent] = (0, import_react2.useState)(null);
497
+ const [isLoading, setIsLoading] = (0, import_react2.useState)(true);
498
+ const [isSubmitting, setIsSubmitting] = (0, import_react2.useState)(false);
499
+ const [isLanguageDropdownOpen, setIsLanguageDropdownOpen] = (0, import_react2.useState)(false);
500
+ const [selectedLanguage, setSelectedLanguage] = (0, import_react2.useState)(language);
501
+ const [collapsedPurposes, setCollapsedPurposes] = (0, import_react2.useState)({});
502
+ const [selectedPurposes, setSelectedPurposes] = (0, import_react2.useState)({});
503
+ const [selectedDataElements, setSelectedDataElements] = (0, import_react2.useState)({});
504
+ const [hasAlreadyConsented, setHasAlreadyConsented] = (0, import_react2.useState)(false);
505
+ const isMobile = useMediaQuery("(max-width: 768px)");
506
+ const responsiveStyles = (0, import_react2.useMemo)(
507
+ () => ({
508
+ modal: {
509
+ width: isMobile ? "90%" : "700px"
510
+ },
511
+ content: {
512
+ margin: isMobile ? "20px" : "22px"
513
+ },
514
+ title: {
515
+ fontSize: isMobile ? "16px" : "18px"
516
+ },
517
+ subTitle: {
518
+ fontSize: isMobile ? "14px" : "16px"
519
+ },
520
+ privacyText: {
521
+ fontSize: isMobile ? "14px" : "16px"
522
+ },
523
+ optionTitle: {
524
+ fontSize: isMobile ? "14px" : "16px"
525
+ },
526
+ optionDescription: {
527
+ fontSize: isMobile ? "11px" : "12px"
528
+ },
529
+ dataElementText: {
530
+ fontSize: isMobile ? "12px" : "14px"
531
+ },
532
+ topRight: {
533
+ fontSize: isMobile ? "11px" : "12px",
534
+ padding: isMobile ? "3px 6px" : "3px 9px",
535
+ height: isMobile ? "auto" : void 0,
536
+ width: isMobile ? "auto" : void 0
537
+ },
538
+ languageItem: {
539
+ fontSize: isMobile ? "11px" : "12px",
540
+ padding: isMobile ? "6px 10px" : "8px 12px"
541
+ },
542
+ bottomSection: {
543
+ flexDirection: isMobile ? "column" : "row",
544
+ gap: isMobile ? "12px" : "29px"
545
+ },
546
+ button: {
547
+ fontSize: isMobile ? "14px" : "16px",
548
+ padding: isMobile ? "10px 20px" : "9px 45px"
549
+ },
550
+ middleSection: {
551
+ paddingRight: isMobile ? "10px" : "15px"
552
+ }
553
+ }),
554
+ [isMobile]
555
+ );
556
+ const areAllRequiredElementsChecked = (0, import_react2.useMemo)(() => {
557
+ if (!content) return false;
558
+ return content.purposes.every((purpose) => {
559
+ const requiredElements = purpose.data_elements.filter(
560
+ (element) => element.required
561
+ );
562
+ return requiredElements.every(
563
+ (element) => selectedDataElements[`${purpose.uuid}-${element.uuid}`]
564
+ );
565
+ });
566
+ }, [content, selectedDataElements]);
567
+ const acceptDisabled = isSubmitting || !areAllRequiredElementsChecked;
568
+ (0, import_react2.useEffect)(() => {
569
+ if (hasAlreadyConsented) {
570
+ onAccept == null ? void 0 : onAccept();
571
+ }
572
+ }, [hasAlreadyConsented, onAccept]);
573
+ const getTranslatedText = (key, defaultText, itemId) => {
574
+ var _a2, _b2;
575
+ if (!content) return defaultText;
576
+ if (selectedLanguage === content.default_language) {
577
+ if (key === "privacy_policy_anchor_text" && content.privacy_policy_anchor_text) {
578
+ return content.privacy_policy_anchor_text;
579
+ }
580
+ return defaultText;
581
+ }
582
+ if (!content.supported_languages_and_translations) {
583
+ return defaultText;
584
+ }
585
+ const translationMap = content.supported_languages_and_translations[selectedLanguage];
586
+ if (!translationMap) {
587
+ return defaultText;
588
+ }
589
+ if (itemId) {
590
+ if (key === "purposes.name" || key === "purposes.description") {
591
+ return ((_a2 = translationMap.purposes) == null ? void 0 : _a2[itemId]) || defaultText;
592
+ }
593
+ if (key.startsWith("data_elements.")) {
594
+ return ((_b2 = translationMap.data_elements) == null ? void 0 : _b2[itemId]) || defaultText;
595
+ }
596
+ }
597
+ const value = translationMap[key];
598
+ if (typeof value === "string") {
599
+ return value;
600
+ }
601
+ return defaultText;
602
+ };
603
+ (0, import_react2.useEffect)(() => {
604
+ const fetchNotice = async () => {
605
+ setIsLoading(true);
606
+ try {
607
+ const consentContentData = await fetchConsentContent({
608
+ noticeId,
609
+ accessToken,
610
+ refreshToken,
611
+ language
612
+ });
613
+ setContent(consentContentData.detail.active_config);
614
+ if (consentContentData.detail.active_config.default_language) {
615
+ setSelectedLanguage(
616
+ consentContentData.detail.active_config.default_language
617
+ );
618
+ }
619
+ const initialCollapsedState = consentContentData.detail.active_config.purposes.reduce(
620
+ (acc, purpose) => ({
621
+ ...acc,
622
+ [purpose.uuid]: true
623
+ }),
624
+ {}
625
+ );
626
+ setCollapsedPurposes(initialCollapsedState);
627
+ const initialPurposeState = consentContentData.detail.active_config.purposes.reduce(
628
+ (acc, purpose) => {
629
+ return {
630
+ ...acc,
631
+ [purpose.uuid]: false
632
+ // Initialize all purposes as unchecked
633
+ };
634
+ },
635
+ {}
636
+ );
637
+ setSelectedPurposes(initialPurposeState);
638
+ const initialDataElementState = consentContentData.detail.active_config.purposes.reduce(
639
+ (acc, purpose) => {
640
+ purpose.data_elements.forEach((element) => {
641
+ const combinedId = `${purpose.uuid}-${element.uuid}`;
642
+ acc[combinedId] = false;
643
+ });
644
+ return acc;
645
+ },
646
+ {}
647
+ );
648
+ setSelectedDataElements(initialDataElementState);
649
+ } catch (err) {
650
+ console.error(err);
651
+ if (err.status === 409) {
652
+ setHasAlreadyConsented(true);
653
+ } else {
654
+ onError == null ? void 0 : onError(err);
655
+ }
656
+ } finally {
657
+ setIsLoading(false);
658
+ }
659
+ };
660
+ fetchNotice();
661
+ }, [noticeId, accessToken, refreshToken, language, onError]);
662
+ const togglePurposeCollapse = (purposeUuid) => {
663
+ setCollapsedPurposes((prev) => ({
664
+ ...prev,
665
+ [purposeUuid]: !prev[purposeUuid]
666
+ }));
667
+ };
668
+ const toggleLanguageDropdown = () => {
669
+ setIsLanguageDropdownOpen(!isLanguageDropdownOpen);
670
+ };
671
+ const handleLanguageSelect = (lang) => {
672
+ setSelectedLanguage(lang);
673
+ setIsLanguageDropdownOpen(false);
674
+ };
675
+ const handlePurposeCheckboxChange = (purposeUuid) => {
676
+ if (content) {
677
+ const purpose = content.purposes.find((p) => p.uuid === purposeUuid);
678
+ if (purpose) {
679
+ const newPurposeState = !selectedPurposes[purposeUuid];
680
+ setSelectedPurposes((prev) => ({
681
+ ...prev,
682
+ [purposeUuid]: newPurposeState
683
+ }));
684
+ setSelectedDataElements((prev) => {
685
+ const updated = { ...prev };
686
+ purpose.data_elements.forEach((el) => {
687
+ updated[`${purposeUuid}-${el.uuid}`] = newPurposeState;
688
+ });
689
+ return updated;
690
+ });
691
+ }
692
+ }
693
+ };
694
+ const handleDataElementCheckboxChange = (elementUuid, purposeUuid) => {
695
+ const combinedId = `${purposeUuid}-${elementUuid}`;
696
+ setSelectedDataElements((prev) => {
697
+ const newState = {
698
+ ...prev,
699
+ [combinedId]: !prev[combinedId]
700
+ };
701
+ if (content) {
702
+ const purpose = content.purposes.find((p) => p.uuid === purposeUuid);
703
+ if (purpose) {
704
+ const requiredElements = purpose.data_elements.filter(
705
+ (el) => el.required
706
+ );
707
+ const allRequiredElementsChecked = requiredElements.every(
708
+ (el) => newState[`${purposeUuid}-${el.uuid}`]
709
+ );
710
+ setSelectedPurposes((prevPurposes) => ({
711
+ ...prevPurposes,
712
+ [purposeUuid]: allRequiredElementsChecked
713
+ }));
714
+ }
715
+ }
716
+ return newState;
717
+ });
718
+ };
719
+ const handleAccept = async () => {
720
+ try {
721
+ setIsSubmitting(true);
722
+ if (content) {
723
+ await submitConsentEvent({
724
+ accessToken,
725
+ noticeUuid: content.notice_uuid,
726
+ purposes: content.purposes.map((purpose) => ({
727
+ ...purpose,
728
+ selected: selectedPurposes[purpose.uuid] || false,
729
+ data_elements: purpose.data_elements.map((element) => ({
730
+ ...element,
731
+ selected: element.required ? true : selectedDataElements[`${purpose.uuid}-${element.uuid}`] || false
732
+ }))
733
+ })),
734
+ declined: false
735
+ });
736
+ }
737
+ onAccept == null ? void 0 : onAccept();
738
+ } catch (error) {
739
+ console.error("Error submitting consent:", error);
740
+ onError == null ? void 0 : onError(error);
741
+ } finally {
742
+ setIsSubmitting(false);
743
+ }
744
+ };
745
+ const handleDecline = async () => {
746
+ onDecline == null ? void 0 : onDecline();
747
+ };
748
+ const availableLanguages = (0, import_react2.useMemo)(
749
+ () => content ? [
750
+ content.default_language,
751
+ ...Object.keys(content.supported_languages_and_translations || {})
752
+ ].filter((value, index, self) => self.indexOf(value) === index) : [language],
753
+ [content, language]
754
+ );
755
+ const modalStyle = {
756
+ borderRadius: (settings == null ? void 0 : settings.borderRadius) || "8px",
757
+ backgroundColor: (settings == null ? void 0 : settings.backgroundColor) || "#ffffff"
758
+ };
759
+ const buttonStyle = {
760
+ borderRadius: (settings == null ? void 0 : settings.borderRadius) || "8px"
761
+ };
762
+ const acceptButtonStyle = {
763
+ ...buttonStyle,
764
+ backgroundColor: ((_b = (_a = settings == null ? void 0 : settings.button) == null ? void 0 : _a.accept) == null ? void 0 : _b.backgroundColor) || "#4f87ff",
765
+ color: ((_d = (_c = settings == null ? void 0 : settings.button) == null ? void 0 : _c.accept) == null ? void 0 : _d.textColor) || "#ffffff"
766
+ };
767
+ const declineButtonStyle = {
768
+ ...buttonStyle,
769
+ backgroundColor: ((_f = (_e = settings == null ? void 0 : settings.button) == null ? void 0 : _e.decline) == null ? void 0 : _f.backgroundColor) || "#ffffff",
770
+ color: ((_h = (_g = settings == null ? void 0 : settings.button) == null ? void 0 : _g.decline) == null ? void 0 : _h.textColor) || "#000000",
771
+ borderColor: (settings == null ? void 0 : settings.borderColor) || "#d0d5dd"
772
+ };
773
+ const linkStyle = {
774
+ color: ((_i = settings == null ? void 0 : settings.link) == null ? void 0 : _i.color) || "#4f87ff"
775
+ };
776
+ const languageSelectorStyle = {
777
+ borderRadius: (settings == null ? void 0 : settings.borderRadius) || "8px",
778
+ borderColor: (settings == null ? void 0 : settings.borderColor) || "#d0d5dd",
779
+ backgroundColor: ((_k = (_j = settings == null ? void 0 : settings.button) == null ? void 0 : _j.language) == null ? void 0 : _k.backgroundColor) || "#ffffff",
780
+ color: ((_m = (_l = settings == null ? void 0 : settings.button) == null ? void 0 : _l.language) == null ? void 0 : _m.textColor) || "#344054"
781
+ };
782
+ const selectedLanguageItemStyle = {
783
+ ...languageSelectorStyle,
784
+ backgroundColor: ((_o = (_n = settings == null ? void 0 : settings.button) == null ? void 0 : _n.language) == null ? void 0 : _o.selectedBackgroundColor) || "#f3f4f6",
785
+ color: ((_q = (_p = settings == null ? void 0 : settings.button) == null ? void 0 : _p.language) == null ? void 0 : _q.selectedTextColor) || "#344054",
786
+ fontWeight: 600
787
+ };
788
+ const headingStyle = {
789
+ color: (settings == null ? void 0 : settings.headingColor) || "#101828"
790
+ };
791
+ const textStyle = {
792
+ color: (settings == null ? void 0 : settings.textColor) || "#344054"
793
+ };
794
+ const sectionStyle = {
795
+ backgroundColor: (settings == null ? void 0 : settings.backgroundColor) || "#ffffff"
796
+ };
797
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: hasAlreadyConsented ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
798
+ blockUI && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: styles.overlay, "aria-hidden": "true" }),
799
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
800
+ "div",
801
+ {
802
+ style: {
803
+ ...styles.modal,
804
+ ...responsiveStyles.modal,
805
+ ...modalStyle
806
+ },
807
+ role: "dialog",
808
+ "aria-modal": "true",
809
+ "aria-labelledby": "privacy-notice-title",
810
+ children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: styles.loadingContainer, children: [
811
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: styles.loadingSpinner }),
812
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { style: { ...styles.privacyText, ...textStyle }, children: "Loading..." })
813
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { ...styles.content, ...responsiveStyles.content }, children: [
814
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { ...styles.topSection, ...sectionStyle }, children: [
815
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: styles.topLeft, children: [
816
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
817
+ "img",
818
+ {
819
+ style: styles.logo,
820
+ src: (content == null ? void 0 : content.logo_url) || redacto_logo_default,
821
+ alt: "logo"
822
+ }
823
+ ),
824
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
825
+ "h2",
826
+ {
827
+ id: "privacy-notice-title",
828
+ style: {
829
+ ...styles.title,
830
+ ...responsiveStyles.title,
831
+ ...headingStyle
832
+ },
833
+ children: "Your Privacy Matters"
834
+ }
835
+ )
836
+ ] }),
837
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: styles.languageSelectorContainer, children: [
838
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
839
+ "button",
840
+ {
841
+ style: {
842
+ ...styles.topRight,
843
+ ...responsiveStyles.topRight,
844
+ ...languageSelectorStyle
845
+ },
846
+ onClick: toggleLanguageDropdown,
847
+ "aria-expanded": isLanguageDropdownOpen,
848
+ "aria-haspopup": "listbox",
849
+ children: [
850
+ selectedLanguage,
851
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
852
+ "svg",
853
+ {
854
+ xmlns: "http://www.w3.org/2000/svg",
855
+ width: "16",
856
+ height: "16",
857
+ viewBox: "0 0 16 16",
858
+ fill: "none",
859
+ stroke: ((_s = (_r = settings == null ? void 0 : settings.button) == null ? void 0 : _r.language) == null ? void 0 : _s.textColor) || "currentColor",
860
+ strokeWidth: "2",
861
+ strokeLinecap: "round",
862
+ strokeLinejoin: "round",
863
+ style: { flexShrink: 0, marginLeft: "4px" },
864
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M4 6l4 4 4-4" })
865
+ }
866
+ )
867
+ ]
868
+ }
869
+ ),
870
+ isLanguageDropdownOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
871
+ "ul",
872
+ {
873
+ style: {
874
+ ...styles.languageDropdown,
875
+ ...languageSelectorStyle
876
+ },
877
+ role: "listbox",
878
+ "aria-label": "Select language",
879
+ children: availableLanguages.map((lang) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
880
+ "li",
881
+ {
882
+ style: {
883
+ ...styles.languageItem,
884
+ ...responsiveStyles.languageItem,
885
+ ...selectedLanguage === lang ? selectedLanguageItemStyle : languageSelectorStyle,
886
+ listStyle: "none"
887
+ },
888
+ onClick: () => handleLanguageSelect(lang),
889
+ role: "option",
890
+ "aria-selected": selectedLanguage === lang,
891
+ tabIndex: 0,
892
+ children: lang
893
+ },
894
+ lang
895
+ ))
896
+ }
897
+ )
898
+ ] })
899
+ ] }),
900
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
901
+ "div",
902
+ {
903
+ style: {
904
+ ...styles.middleSection,
905
+ ...responsiveStyles.middleSection,
906
+ ...sectionStyle
907
+ },
908
+ children: [
909
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
910
+ "p",
911
+ {
912
+ style: {
913
+ ...styles.privacyText,
914
+ ...responsiveStyles.privacyText,
915
+ ...textStyle
916
+ },
917
+ children: [
918
+ content ? getTranslatedText("notice_text", content.notice_text) : "",
919
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("br", {}),
920
+ "Learn more in our",
921
+ " ",
922
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
923
+ "a",
924
+ {
925
+ style: { ...styles.link, ...linkStyle },
926
+ href: (content == null ? void 0 : content.privacy_policy_url) || "#",
927
+ target: "_blank",
928
+ rel: "noopener noreferrer",
929
+ children: [
930
+ "[",
931
+ getTranslatedText(
932
+ "privacy_policy_anchor_text",
933
+ (content == null ? void 0 : content.privacy_policy_anchor_text) || "Privacy Policy"
934
+ ),
935
+ "]"
936
+ ]
937
+ }
938
+ ),
939
+ " ",
940
+ "and",
941
+ " ",
942
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
943
+ "a",
944
+ {
945
+ style: { ...styles.link, ...linkStyle },
946
+ href: (content == null ? void 0 : content.sub_processors_url) || "#",
947
+ target: "",
948
+ children: [
949
+ "[",
950
+ getTranslatedText(
951
+ "vendors_list_anchor_text",
952
+ (content == null ? void 0 : content.vendors_list_anchor_text) || "Vendors List"
953
+ ),
954
+ "]"
955
+ ]
956
+ }
957
+ ),
958
+ "."
959
+ ]
960
+ }
961
+ ),
962
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
963
+ "h2",
964
+ {
965
+ style: {
966
+ ...styles.subTitle,
967
+ ...responsiveStyles.subTitle,
968
+ ...headingStyle
969
+ },
970
+ children: getTranslatedText(
971
+ "purpose_section_heading",
972
+ "Manage What You Share"
973
+ )
974
+ }
975
+ ),
976
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: styles.optionsContainer, children: (_t = content == null ? void 0 : content.purposes) == null ? void 0 : _t.map((purpose) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
977
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: styles.optionItem, children: [
978
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
979
+ "div",
980
+ {
981
+ style: styles.optionLeft,
982
+ onClick: () => togglePurposeCollapse(purpose.uuid),
983
+ children: [
984
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
985
+ "div",
986
+ {
987
+ style: {
988
+ display: "flex",
989
+ alignItems: "center",
990
+ justifyContent: "center",
991
+ marginLeft: "5px"
992
+ },
993
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
994
+ "svg",
995
+ {
996
+ width: "7",
997
+ height: "12",
998
+ viewBox: "0 0 7 12",
999
+ fill: "none",
1000
+ xmlns: "http://www.w3.org/2000/svg",
1001
+ stroke: (settings == null ? void 0 : settings.headingColor) || "#323B4B",
1002
+ strokeWidth: "2",
1003
+ strokeLinecap: "round",
1004
+ strokeLinejoin: "round",
1005
+ style: {
1006
+ transform: !collapsedPurposes[purpose.uuid] ? "rotate(90deg)" : "rotate(0deg)",
1007
+ transition: "transform 0.3s ease"
1008
+ },
1009
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M1 1L6 6L1 11" })
1010
+ }
1011
+ )
1012
+ }
1013
+ ),
1014
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: styles.optionTextContainer, children: [
1015
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1016
+ "h2",
1017
+ {
1018
+ style: {
1019
+ ...styles.optionTitle,
1020
+ ...responsiveStyles.optionTitle,
1021
+ ...headingStyle
1022
+ },
1023
+ children: getTranslatedText(
1024
+ `purposes.name`,
1025
+ purpose.name,
1026
+ purpose.uuid
1027
+ )
1028
+ }
1029
+ ),
1030
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1031
+ "h3",
1032
+ {
1033
+ style: {
1034
+ ...styles.optionDescription,
1035
+ ...responsiveStyles.optionDescription,
1036
+ ...textStyle
1037
+ },
1038
+ children: getTranslatedText(
1039
+ `purposes.description`,
1040
+ purpose.description,
1041
+ purpose.uuid
1042
+ )
1043
+ }
1044
+ )
1045
+ ] })
1046
+ ]
1047
+ }
1048
+ ),
1049
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1050
+ "input",
1051
+ {
1052
+ style: styles.checkboxLarge,
1053
+ type: "checkbox",
1054
+ checked: selectedPurposes[purpose.uuid] || false,
1055
+ onChange: () => handlePurposeCheckboxChange(purpose.uuid)
1056
+ }
1057
+ )
1058
+ ] }),
1059
+ !collapsedPurposes[purpose.uuid] && purpose.data_elements && purpose.data_elements.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: styles.dataElementsContainer, children: purpose.data_elements.map((dataElement) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1060
+ "div",
1061
+ {
1062
+ style: styles.dataElementItem,
1063
+ children: [
1064
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1065
+ "span",
1066
+ {
1067
+ style: {
1068
+ ...styles.dataElementText,
1069
+ ...responsiveStyles.dataElementText,
1070
+ ...textStyle
1071
+ },
1072
+ children: [
1073
+ getTranslatedText(
1074
+ `data_elements.name`,
1075
+ dataElement.name,
1076
+ dataElement.uuid
1077
+ ),
1078
+ dataElement.required && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1079
+ "span",
1080
+ {
1081
+ style: {
1082
+ color: "red",
1083
+ marginLeft: "4px"
1084
+ },
1085
+ children: "*"
1086
+ }
1087
+ )
1088
+ ]
1089
+ }
1090
+ ),
1091
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1092
+ "input",
1093
+ {
1094
+ style: styles.checkboxSmall,
1095
+ type: "checkbox",
1096
+ checked: selectedDataElements[`${purpose.uuid}-${dataElement.uuid}`] || false,
1097
+ onChange: () => handleDataElementCheckboxChange(
1098
+ dataElement.uuid,
1099
+ purpose.uuid
1100
+ )
1101
+ }
1102
+ )
1103
+ ]
1104
+ },
1105
+ dataElement.uuid
1106
+ )) })
1107
+ ] }, purpose.uuid)) })
1108
+ ]
1109
+ }
1110
+ ),
1111
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1112
+ "div",
1113
+ {
1114
+ style: {
1115
+ ...styles.bottomSection,
1116
+ ...responsiveStyles.bottomSection,
1117
+ ...sectionStyle
1118
+ },
1119
+ children: [
1120
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1121
+ "button",
1122
+ {
1123
+ style: {
1124
+ ...styles.button,
1125
+ ...responsiveStyles.button,
1126
+ ...styles.acceptButton,
1127
+ ...acceptButtonStyle,
1128
+ opacity: acceptDisabled ? 0.5 : 1
1129
+ },
1130
+ onClick: handleAccept,
1131
+ disabled: acceptDisabled,
1132
+ children: isSubmitting ? "Processing..." : getTranslatedText(
1133
+ "confirm_button_text",
1134
+ (content == null ? void 0 : content.confirm_button_text) || "Accept"
1135
+ )
1136
+ }
1137
+ ),
1138
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1139
+ "button",
1140
+ {
1141
+ style: {
1142
+ ...styles.button,
1143
+ ...responsiveStyles.button,
1144
+ ...styles.cancelButton,
1145
+ ...declineButtonStyle
1146
+ },
1147
+ onClick: handleDecline,
1148
+ disabled: isSubmitting,
1149
+ children: isSubmitting ? "Processing..." : getTranslatedText(
1150
+ "decline_button_text",
1151
+ (content == null ? void 0 : content.decline_button_text) || "Decline"
1152
+ )
1153
+ }
1154
+ )
1155
+ ]
1156
+ }
1157
+ )
1158
+ ] })
1159
+ }
1160
+ )
1161
+ ] }) });
1162
+ };
1163
+ // Annotate the CommonJS export names for ESM import in node:
1164
+ 0 && (module.exports = {
1165
+ RedactoNoticeConsent
1166
+ });