@redacto.io/consent-sdk-react 10.0.0-beta.8 → 10.0.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/NOTICE.md +17 -0
- package/README.md +141 -3
- package/dist/chunk-FEGTW73Q.mjs +182 -0
- package/dist/{chunk-6A665OPR.mjs → chunk-OGL6OC3A.mjs} +4 -0
- package/dist/fonts.d.mts +35 -0
- package/dist/fonts.d.ts +35 -0
- package/dist/fonts.js +183 -0
- package/dist/fonts.mjs +10 -0
- package/dist/index.d.mts +41 -4
- package/dist/index.d.ts +41 -4
- package/dist/index.js +881 -416
- package/dist/index.mjs +502 -253
- package/dist/montserrat.generated-NBTECYRW.mjs +22 -0
- package/dist/privacy-center.d.mts +51 -11
- package/dist/privacy-center.d.ts +51 -11
- package/dist/privacy-center.js +252 -136
- package/dist/privacy-center.mjs +251 -137
- package/dist/types-6Aj7faxL.d.mts +57 -0
- package/dist/types-6Aj7faxL.d.ts +57 -0
- package/package.json +10 -1
- package/.turbo/turbo-build.log +0 -22
- package/.turbo/turbo-test.log +0 -203
- package/.turbo/turbo-verify-pack.log +0 -6
- package/CHANGELOG.md +0 -343
- package/src/RedactoNoticeAssisted/RedactoNoticeAssisted.test.tsx +0 -934
- package/src/RedactoNoticeAssisted/RedactoNoticeAssisted.tsx +0 -2160
- package/src/RedactoNoticeAssisted/api/index.ts +0 -275
- package/src/RedactoNoticeAssisted/api/types.ts +0 -182
- package/src/RedactoNoticeAssisted/assets/redacto-logo.png +0 -0
- package/src/RedactoNoticeAssisted/constants.ts +0 -51
- package/src/RedactoNoticeAssisted/i18n.ts +0 -1408
- package/src/RedactoNoticeAssisted/index.ts +0 -1
- package/src/RedactoNoticeAssisted/injectStyles.ts +0 -251
- package/src/RedactoNoticeAssisted/styles.ts +0 -730
- package/src/RedactoNoticeAssisted/types.ts +0 -26
- package/src/RedactoNoticeAssisted/useMediaQuery.ts +0 -36
- package/src/RedactoNoticeConsent/RedactoNoticeConsent.test.tsx +0 -1152
- package/src/RedactoNoticeConsent/RedactoNoticeConsent.tsx +0 -4258
- package/src/RedactoNoticeConsent/api/index.ts +0 -512
- package/src/RedactoNoticeConsent/api/types.ts +0 -469
- package/src/RedactoNoticeConsent/assets/redacto-logo.png +0 -0
- package/src/RedactoNoticeConsent/components/DigiLockerCallback.tsx +0 -602
- package/src/RedactoNoticeConsent/components/index.ts +0 -7
- package/src/RedactoNoticeConsent/constants.ts +0 -20
- package/src/RedactoNoticeConsent/index.ts +0 -1
- package/src/RedactoNoticeConsent/injectStyles.ts +0 -151
- package/src/RedactoNoticeConsent/language-codes.ts +0 -95
- package/src/RedactoNoticeConsent/services/storage.ts +0 -122
- package/src/RedactoNoticeConsent/styles.ts +0 -409
- package/src/RedactoNoticeConsent/types.ts +0 -54
- package/src/RedactoNoticeConsent/useMediaQuery.ts +0 -36
- package/src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.test.tsx +0 -369
- package/src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.tsx +0 -687
- package/src/RedactoNoticeConsentInline/api/index.ts +0 -106
- package/src/RedactoNoticeConsentInline/api/types.ts +0 -183
- package/src/RedactoNoticeConsentInline/assets/redacto-logo.png +0 -0
- package/src/RedactoNoticeConsentInline/index.ts +0 -1
- package/src/RedactoNoticeConsentInline/injectStyles.ts +0 -40
- package/src/RedactoNoticeConsentInline/styles.ts +0 -397
- package/src/RedactoNoticeConsentInline/types.ts +0 -51
- package/src/RedactoNoticeConsentInline/useMediaQuery.ts +0 -36
- package/src/RedactoPrivacyCenter/NotificationsPage.tsx +0 -182
- package/src/RedactoPrivacyCenter/PrivacyCenterActivityPage.tsx +0 -19
- package/src/RedactoPrivacyCenter/PrivacyCenterCaseDetailsPage.tsx +0 -156
- package/src/RedactoPrivacyCenter/PrivacyCenterConsentManagerPage.tsx +0 -17
- package/src/RedactoPrivacyCenter/PrivacyCenterFormPage.tsx +0 -79
- package/src/RedactoPrivacyCenter/PrivacyCenterHomePage.tsx +0 -36
- package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +0 -177
- package/src/RedactoPrivacyCenter/PrivacyCenterMyReceiptPage.tsx +0 -26
- package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +0 -58
- package/src/RedactoPrivacyCenter/api/actions.ts +0 -695
- package/src/RedactoPrivacyCenter/api/client.ts +0 -911
- package/src/RedactoPrivacyCenter/api/config.ts +0 -33
- package/src/RedactoPrivacyCenter/api/fetcher.ts +0 -260
- package/src/RedactoPrivacyCenter/api/orgBranding.ts +0 -16
- package/src/RedactoPrivacyCenter/api/upload.ts +0 -93
- package/src/RedactoPrivacyCenter/assets/character.svg +0 -31
- package/src/RedactoPrivacyCenter/assets/fileAttach.svg +0 -9
- package/src/RedactoPrivacyCenter/assets/greenTick.svg +0 -4
- package/src/RedactoPrivacyCenter/assets/mail.svg +0 -3
- package/src/RedactoPrivacyCenter/assets/poweredByRedacto.svg +0 -9
- package/src/RedactoPrivacyCenter/assets/sentImg.svg +0 -9
- package/src/RedactoPrivacyCenter/assets/uploadFileIcon.svg +0 -9
- package/src/RedactoPrivacyCenter/components/ActivitiesList.tsx +0 -252
- package/src/RedactoPrivacyCenter/components/ActivityTimeline.tsx +0 -239
- package/src/RedactoPrivacyCenter/components/AppShell/AppShell.tsx +0 -268
- package/src/RedactoPrivacyCenter/components/AppShell/MobileNavDrawer.tsx +0 -218
- package/src/RedactoPrivacyCenter/components/AppShell/NavItem.tsx +0 -205
- package/src/RedactoPrivacyCenter/components/AppShell/PageHeader.tsx +0 -107
- package/src/RedactoPrivacyCenter/components/AppShell/SidebarNav.tsx +0 -100
- package/src/RedactoPrivacyCenter/components/AppShell/TopAppBar.tsx +0 -339
- package/src/RedactoPrivacyCenter/components/AppShell/UserMenu.tsx +0 -245
- package/src/RedactoPrivacyCenter/components/AppShell/hooks/useIsTruncated.ts +0 -28
- package/src/RedactoPrivacyCenter/components/AppShell/hooks/useKeyboardShortcut.ts +0 -40
- package/src/RedactoPrivacyCenter/components/AppShell/hooks/useSidebarState.ts +0 -62
- package/src/RedactoPrivacyCenter/components/AppShell/usePrivacyCenterExitAction.ts +0 -36
- package/src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx +0 -38
- package/src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx +0 -31
- package/src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx +0 -79
- package/src/RedactoPrivacyCenter/components/CaseDetails/FinalizedTooltipWrapper.tsx +0 -25
- package/src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx +0 -96
- package/src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx +0 -97
- package/src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx +0 -156
- package/src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx +0 -171
- package/src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx +0 -23
- package/src/RedactoPrivacyCenter/components/CaseDetails/useFileUpload.ts +0 -116
- package/src/RedactoPrivacyCenter/components/CaseDetails/useMessagePolling.ts +0 -43
- package/src/RedactoPrivacyCenter/components/CaseDetails/utils.ts +0 -71
- package/src/RedactoPrivacyCenter/components/CaseDetailsModal.tsx +0 -469
- package/src/RedactoPrivacyCenter/components/CaseHistory.tsx +0 -426
- package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +0 -1206
- package/src/RedactoPrivacyCenter/components/ConsentManagerCells.tsx +0 -218
- package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +0 -138
- package/src/RedactoPrivacyCenter/components/ConsentManagerConstants.ts +0 -7
- package/src/RedactoPrivacyCenter/components/ConsentManagerExpandedRow.tsx +0 -179
- package/src/RedactoPrivacyCenter/components/ConsentManagerGroupedColumns.tsx +0 -318
- package/src/RedactoPrivacyCenter/components/ConsentManagerProductCards.tsx +0 -333
- package/src/RedactoPrivacyCenter/components/ConsentManagerPurposeCards.tsx +0 -102
- package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +0 -159
- package/src/RedactoPrivacyCenter/components/DataRequest/CorrectionDataSection.tsx +0 -189
- package/src/RedactoPrivacyCenter/components/DataRequest/GrievanceDataSection.tsx +0 -118
- package/src/RedactoPrivacyCenter/components/DataRequest/NominationDataSection.tsx +0 -66
- package/src/RedactoPrivacyCenter/components/DataRequest/ProductSelectionSection.tsx +0 -222
- package/src/RedactoPrivacyCenter/components/DataRequest/PurposeSelectionSection.tsx +0 -331
- package/src/RedactoPrivacyCenter/components/Form.tsx +0 -1796
- package/src/RedactoPrivacyCenter/components/GrievanceTable.tsx +0 -174
- package/src/RedactoPrivacyCenter/components/GrievanceTablePagination.tsx +0 -337
- package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +0 -334
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationBell.tsx +0 -173
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx +0 -18
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationDropdown.tsx +0 -54
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationDropdownItem.tsx +0 -57
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx +0 -19
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationListPanel.tsx +0 -92
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationRefreshButton.tsx +0 -20
- package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx +0 -58
- package/src/RedactoPrivacyCenter/components/NotificationHub/StatCard.tsx +0 -10
- package/src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts +0 -112
- package/src/RedactoPrivacyCenter/components/NotificationHub/utils.ts +0 -27
- package/src/RedactoPrivacyCenter/components/Pagination.tsx +0 -140
- package/src/RedactoPrivacyCenter/components/PrivacyCenterEmptyState.tsx +0 -76
- package/src/RedactoPrivacyCenter/components/PrivacyCenterSessionExpired.tsx +0 -97
- package/src/RedactoPrivacyCenter/components/ReceiptsList.tsx +0 -454
- package/src/RedactoPrivacyCenter/components/RequestSubmit.tsx +0 -270
- package/src/RedactoPrivacyCenter/components/SelectUser.tsx +0 -95
- package/src/RedactoPrivacyCenter/components/SelectUserGate.tsx +0 -187
- package/src/RedactoPrivacyCenter/components/SideMenuBarPC/constants.tsx +0 -25
- package/src/RedactoPrivacyCenter/components/SideMenuBarPC/types.ts +0 -21
- package/src/RedactoPrivacyCenter/components/caseHistoryColumns.tsx +0 -159
- package/src/RedactoPrivacyCenter/components/constant.ts +0 -52
- package/src/RedactoPrivacyCenter/components/groupHelpers.ts +0 -119
- package/src/RedactoPrivacyCenter/components/receiptColumns.tsx +0 -203
- package/src/RedactoPrivacyCenter/components/types.ts +0 -123
- package/src/RedactoPrivacyCenter/components/utils.tsx +0 -10
- package/src/RedactoPrivacyCenter/config/routes.ts +0 -9
- package/src/RedactoPrivacyCenter/config/table.ts +0 -25
- package/src/RedactoPrivacyCenter/context/AuthContext.tsx +0 -160
- package/src/RedactoPrivacyCenter/context/BaseUrlContext.tsx +0 -47
- package/src/RedactoPrivacyCenter/context/BrandingContext.tsx +0 -52
- package/src/RedactoPrivacyCenter/context/DataAvailabilityContext.session-expired.test.tsx +0 -92
- package/src/RedactoPrivacyCenter/context/DataAvailabilityContext.tsx +0 -181
- package/src/RedactoPrivacyCenter/context/LocaleContext.tsx +0 -11
- package/src/RedactoPrivacyCenter/context/NavigationContext.tsx +0 -96
- package/src/RedactoPrivacyCenter/context/OrganizationContext.tsx +0 -30
- package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +0 -80
- package/src/RedactoPrivacyCenter/context/ProfileSwitchContext.tsx +0 -15
- package/src/RedactoPrivacyCenter/context/types.ts +0 -19
- package/src/RedactoPrivacyCenter/lib/api.ts +0 -759
- package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +0 -67
- package/src/RedactoPrivacyCenter/lib/constants.ts +0 -276
- package/src/RedactoPrivacyCenter/lib/i18n.ts +0 -81
- package/src/RedactoPrivacyCenter/lib/locales.ts +0 -102
- package/src/RedactoPrivacyCenter/lib/queries.ts +0 -141
- package/src/RedactoPrivacyCenter/lib/types.ts +0 -876
- package/src/RedactoPrivacyCenter/lib/useCurrentLanguage.ts +0 -37
- package/src/RedactoPrivacyCenter/lib/utils.refresh-circuit.test.ts +0 -127
- package/src/RedactoPrivacyCenter/lib/utils.refresh-storage.test.ts +0 -85
- package/src/RedactoPrivacyCenter/lib/utils.session-expired.test.ts +0 -109
- package/src/RedactoPrivacyCenter/lib/utils.ts +0 -783
- package/src/RedactoPrivacyCenter/locales/as/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/bn/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/brx/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/doi/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/en/translation.json +0 -357
- package/src/RedactoPrivacyCenter/locales/gom/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/gu/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/hi/translation.json +0 -345
- package/src/RedactoPrivacyCenter/locales/kn/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/ks/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/mai/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/ml/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/mr/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/ne/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/or/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/pa/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/sa/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/sat/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/sd/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/ta/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/te/translation.json +0 -342
- package/src/RedactoPrivacyCenter/locales/ur/translation.json +0 -342
- package/src/RedactoPrivacyCenter/styles/applyBrandingTheme.ts +0 -66
- package/src/RedactoPrivacyCenter/styles/base.css +0 -117
- package/src/RedactoPrivacyCenter/styles/injectStyles.ts +0 -3108
- package/src/RedactoPrivacyCenter/styles/pcStyles.ts +0 -831
- package/src/RedactoPrivacyCenter/styles/responsive.ts +0 -138
- package/src/RedactoPrivacyCenter/styles/variables.css +0 -96
- package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +0 -387
- package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +0 -468
- package/src/RedactoPrivacyCenter/table/index.ts +0 -2
- package/src/RedactoPrivacyCenter/types/images.d.ts +0 -29
- package/src/RedactoPrivacyCenter/ui/Footer.tsx +0 -69
- package/src/RedactoPrivacyCenter/ui/FormBlockWrapper.tsx +0 -54
- package/src/RedactoPrivacyCenter/ui/PCAccordion.tsx +0 -93
- package/src/RedactoPrivacyCenter/ui/PCActionIcon.tsx +0 -47
- package/src/RedactoPrivacyCenter/ui/PCAvatar.test.tsx +0 -83
- package/src/RedactoPrivacyCenter/ui/PCAvatar.tsx +0 -93
- package/src/RedactoPrivacyCenter/ui/PCBadge.tsx +0 -48
- package/src/RedactoPrivacyCenter/ui/PCButton.tsx +0 -77
- package/src/RedactoPrivacyCenter/ui/PCCheckbox.tsx +0 -55
- package/src/RedactoPrivacyCenter/ui/PCCollapse.tsx +0 -107
- package/src/RedactoPrivacyCenter/ui/PCEmpty.tsx +0 -35
- package/src/RedactoPrivacyCenter/ui/PCInput.tsx +0 -132
- package/src/RedactoPrivacyCenter/ui/PCLoader.tsx +0 -31
- package/src/RedactoPrivacyCenter/ui/PCModal.tsx +0 -106
- package/src/RedactoPrivacyCenter/ui/PCPopover.tsx +0 -206
- package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +0 -433
- package/src/RedactoPrivacyCenter/ui/PCTable.tsx +0 -149
- package/src/RedactoPrivacyCenter/ui/PCText.tsx +0 -41
- package/src/RedactoPrivacyCenter/ui/PCTextarea.tsx +0 -43
- package/src/RedactoPrivacyCenter/ui/PCTitle.tsx +0 -37
- package/src/RedactoPrivacyCenter/ui/PCTooltip.tsx +0 -121
- package/src/RedactoPrivacyCenter/ui/SimpleBar.tsx +0 -25
- package/src/RedactoPrivacyCenter/ui/StatusBadge.tsx +0 -53
- package/src/RedactoPrivacyCenter/ui/index.ts +0 -18
- package/src/RedactoPrivacyCenter/utils/cn.ts +0 -28
- package/src/RedactoPrivacyCenter/utils/date.ts +0 -48
- package/src/RedactoPrivacyCenter/utils/status.ts +0 -111
- package/src/RedactoPrivacyCenter/utils/toast.ts +0 -130
- package/src/index.ts +0 -19
- package/src/privacy-center.ts +0 -113
- package/src/shared/api-errors.ts +0 -180
- package/src/shared/notice-consent-status.ts +0 -190
- package/src/types/css.d.ts +0 -4
- package/src/types/images.d.ts +0 -19
- package/src/types/react-jsx.d.ts +0 -26
- package/tests/DataAvailabilityContext.test.tsx +0 -123
- package/tests/Form.test.tsx +0 -1287
- package/tests/ManageConsentErrorMapping.test.tsx +0 -85
- package/tests/ProductSelectionSection.test.tsx +0 -328
- package/tests/RequestSubmit.test.tsx +0 -135
- package/tests/RevocablePurpose.test.tsx +0 -146
- package/tests/RevokeWarningMessage.test.tsx +0 -151
- package/tests/consentClient.test.ts +0 -217
- package/tests/manageConsentServer.test.ts +0 -38
- package/tests/mocks.ts +0 -257
- package/tests/resolveContactFromJwt.test.ts +0 -44
- package/tests/setup.ts +0 -16
- package/tsconfig.json +0 -16
- package/tsup.config.ts +0 -31
- package/vitest.config.ts +0 -16
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
|
+
SANDBOX_TOKEN_HEADER,
|
|
2
3
|
useMediaQuery
|
|
3
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OGL6OC3A.mjs";
|
|
5
|
+
import {
|
|
6
|
+
FONT_FAMILY_SEPARATOR,
|
|
7
|
+
FONT_NAME_QUOTE_CHARACTERS,
|
|
8
|
+
NOTICE_FONT_ENTRY_BY_ID,
|
|
9
|
+
NOTICE_FONT_FACE_STYLE_ID_PREFIX,
|
|
10
|
+
NOTICE_FONT_LOAD_ERROR_MESSAGE,
|
|
11
|
+
NOTICE_FONT_ROOT_PROPS,
|
|
12
|
+
injectNoticeFontStyles,
|
|
13
|
+
resolveNoticeFontFamily
|
|
14
|
+
} from "./chunk-FEGTW73Q.mjs";
|
|
4
15
|
|
|
5
16
|
// src/RedactoNoticeConsent/RedactoNoticeConsent.tsx
|
|
6
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
17
|
+
import { useCallback, useEffect as useEffect2, useMemo as useMemo2, useRef, useState } from "react";
|
|
7
18
|
|
|
8
19
|
// src/RedactoNoticeConsent/api/index.ts
|
|
9
20
|
import { jwtDecode as jwtDecode2 } from "jwt-decode";
|
|
@@ -66,6 +77,64 @@ async function parseApiError(response, fallbackMessage) {
|
|
|
66
77
|
});
|
|
67
78
|
}
|
|
68
79
|
|
|
80
|
+
// src/RedactoNoticeConsent/api/sandbox.ts
|
|
81
|
+
var resolveSandboxAuth = (params) => {
|
|
82
|
+
var _a, _b, _c, _d, _e;
|
|
83
|
+
const token = (_a = params.token) == null ? void 0 : _a.trim();
|
|
84
|
+
if (!token) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
const organisationUuid = (_b = params.organisationUuid) == null ? void 0 : _b.trim();
|
|
88
|
+
const workspaceUuid = (_c = params.workspaceUuid) == null ? void 0 : _c.trim();
|
|
89
|
+
const ucic = (_d = params.sandboxUcic) == null ? void 0 : _d.trim();
|
|
90
|
+
const subject = (_e = params.sandboxSubject) == null ? void 0 : _e.trim();
|
|
91
|
+
if (!organisationUuid || !workspaceUuid) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
"Sandbox mode requires organisationUuid and workspaceUuid props"
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
if (!ucic && !subject) {
|
|
97
|
+
throw new Error("Sandbox mode requires a UCIC, email, or mobile");
|
|
98
|
+
}
|
|
99
|
+
return { token, ucic, subject: subject != null ? subject : "", organisationUuid, workspaceUuid };
|
|
100
|
+
};
|
|
101
|
+
var resolveRequestAuth = (accessToken, sandboxParams, decodeTokenSafely2) => {
|
|
102
|
+
const sandbox = resolveSandboxAuth(sandboxParams);
|
|
103
|
+
if (sandbox) {
|
|
104
|
+
return {
|
|
105
|
+
organisationUuid: sandbox.organisationUuid,
|
|
106
|
+
workspaceUuid: sandbox.workspaceUuid,
|
|
107
|
+
sandbox
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
const decodedToken = accessToken ? decodeTokenSafely2(accessToken) : null;
|
|
111
|
+
if (!decodedToken) {
|
|
112
|
+
throw new Error("Invalid access token");
|
|
113
|
+
}
|
|
114
|
+
const { organisation_uuid, workspace_uuid } = decodedToken;
|
|
115
|
+
if (!organisation_uuid || !workspace_uuid) {
|
|
116
|
+
throw new Error("Invalid token: missing organization or workspace UUID");
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
organisationUuid: organisation_uuid,
|
|
120
|
+
workspaceUuid: workspace_uuid,
|
|
121
|
+
sandbox: null
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
var buildAuthHeaders = (accessToken, sandbox) => {
|
|
125
|
+
if (sandbox) {
|
|
126
|
+
return { [SANDBOX_TOKEN_HEADER]: sandbox.token };
|
|
127
|
+
}
|
|
128
|
+
return { Authorization: `Bearer ${accessToken}` };
|
|
129
|
+
};
|
|
130
|
+
var sandboxBodyIdentity = (sandbox) => {
|
|
131
|
+
if (sandbox.ucic) {
|
|
132
|
+
return { org_user_id: sandbox.ucic };
|
|
133
|
+
}
|
|
134
|
+
return sandbox.subject.includes("@") ? { primary_email: sandbox.subject } : { primary_mobile: sandbox.subject };
|
|
135
|
+
};
|
|
136
|
+
var sandboxQueryIdentity = (sandbox) => sandboxBodyIdentity(sandbox);
|
|
137
|
+
|
|
69
138
|
// src/shared/notice-consent-status.ts
|
|
70
139
|
import { jwtDecode } from "jwt-decode";
|
|
71
140
|
var decodeNoticeConsentToken = (token) => {
|
|
@@ -179,21 +248,19 @@ var fetchConsentContent = async ({
|
|
|
179
248
|
specific_uuid,
|
|
180
249
|
validate_against = "all",
|
|
181
250
|
include_fully_consented_data = false,
|
|
182
|
-
signal
|
|
251
|
+
signal,
|
|
252
|
+
...sandboxParams
|
|
183
253
|
}) => {
|
|
184
|
-
if (!noticeId || !
|
|
185
|
-
throw new Error("noticeId
|
|
254
|
+
if (!noticeId || !validate_against) {
|
|
255
|
+
throw new Error("noticeId is required");
|
|
186
256
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
throw new Error("Invalid access token");
|
|
190
|
-
}
|
|
191
|
-
const { organisation_uuid: ORGANISATION_UUID, workspace_uuid: WORKSPACE_UUID } = decodedToken;
|
|
192
|
-
if (!ORGANISATION_UUID || !WORKSPACE_UUID) {
|
|
193
|
-
throw new Error("Invalid token: missing organization or workspace UUID");
|
|
257
|
+
if (!accessToken && !sandboxParams.token) {
|
|
258
|
+
throw new Error("accessToken or token is required");
|
|
194
259
|
}
|
|
260
|
+
const { organisationUuid: ORGANISATION_UUID, workspaceUuid: WORKSPACE_UUID, sandbox } = resolveRequestAuth(accessToken, sandboxParams, decodeTokenSafely);
|
|
195
261
|
const apiBaseUrl = baseUrl || BASE_URL;
|
|
196
|
-
const
|
|
262
|
+
const cacheIdentity = sandbox ? `sandbox:${sandbox.organisationUuid}:${sandbox.workspaceUuid}:${sandbox.ucic || sandbox.subject}` : accessToken;
|
|
263
|
+
const cacheKey = `${cacheIdentity}-${noticeId}-${validate_against}-${language}-${specific_uuid || ""}-${include_fully_consented_data}`;
|
|
197
264
|
if (validate_against === "all" && !specific_uuid) {
|
|
198
265
|
const cachedData = getCachedData(cacheKey);
|
|
199
266
|
if (cachedData) {
|
|
@@ -210,10 +277,15 @@ var fetchConsentContent = async ({
|
|
|
210
277
|
if (include_fully_consented_data) {
|
|
211
278
|
url.searchParams.append("include_fully_consented_data", "true");
|
|
212
279
|
}
|
|
280
|
+
if (sandbox) {
|
|
281
|
+
for (const [key, value] of Object.entries(sandboxQueryIdentity(sandbox))) {
|
|
282
|
+
url.searchParams.append(key, value);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
213
285
|
const response = await fetch(url.toString(), {
|
|
214
286
|
method: "GET",
|
|
215
287
|
headers: {
|
|
216
|
-
|
|
288
|
+
...buildAuthHeaders(accessToken, sandbox),
|
|
217
289
|
"Accept-Language": language
|
|
218
290
|
},
|
|
219
291
|
signal
|
|
@@ -241,20 +313,17 @@ var submitConsentEvent = async ({
|
|
|
241
313
|
meta_data,
|
|
242
314
|
guardianVerificationReference,
|
|
243
315
|
selfDeclaredAdult,
|
|
244
|
-
signal
|
|
316
|
+
signal,
|
|
317
|
+
...sandboxParams
|
|
245
318
|
}) => {
|
|
246
|
-
if (!noticeUuid || !
|
|
247
|
-
throw new Error("noticeUuid
|
|
248
|
-
}
|
|
249
|
-
const decodedToken = decodeTokenSafely(accessToken);
|
|
250
|
-
if (!decodedToken) {
|
|
251
|
-
throw new Error("Invalid access token");
|
|
319
|
+
if (!noticeUuid || !Array.isArray(purposes)) {
|
|
320
|
+
throw new Error("noticeUuid and purposes array are required");
|
|
252
321
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
throw new Error("Invalid token: missing organization or workspace UUID");
|
|
322
|
+
if (!accessToken && !sandboxParams.token) {
|
|
323
|
+
throw new Error("accessToken or token is required");
|
|
256
324
|
}
|
|
257
|
-
const
|
|
325
|
+
const { organisationUuid: ORGANISATION_UUID, workspaceUuid: WORKSPACE_UUID, sandbox } = resolveRequestAuth(accessToken, sandboxParams, decodeTokenSafely);
|
|
326
|
+
const apiBaseUrl = (sandbox ? null : ledgerBaseUrl) || baseUrl || BASE_URL;
|
|
258
327
|
const validatedPurposes = purposes.map((purpose) => {
|
|
259
328
|
if (!purpose.uuid) {
|
|
260
329
|
throw new Error(`Invalid purpose data: missing uuid`);
|
|
@@ -280,15 +349,16 @@ var submitConsentEvent = async ({
|
|
|
280
349
|
guardian_verification_reference: guardianVerificationReference,
|
|
281
350
|
self_declared_adult: selfDeclaredAdult
|
|
282
351
|
};
|
|
352
|
+
const requestBody = sandbox ? { ...payload, ...sandboxBodyIdentity(sandbox) } : payload;
|
|
283
353
|
const response = await fetch(
|
|
284
354
|
`${apiBaseUrl}/public/organisations/${ORGANISATION_UUID}/workspaces/${WORKSPACE_UUID}/submit-consent`,
|
|
285
355
|
{
|
|
286
356
|
method: "POST",
|
|
287
357
|
headers: {
|
|
288
|
-
|
|
358
|
+
...buildAuthHeaders(accessToken, sandbox),
|
|
289
359
|
"Content-Type": "application/json"
|
|
290
360
|
},
|
|
291
|
-
body: JSON.stringify(
|
|
361
|
+
body: JSON.stringify(requestBody),
|
|
292
362
|
signal
|
|
293
363
|
}
|
|
294
364
|
);
|
|
@@ -300,69 +370,32 @@ var submitConsentEvent = async ({
|
|
|
300
370
|
}
|
|
301
371
|
apiCache.clear();
|
|
302
372
|
};
|
|
303
|
-
var buildLedgerConsentOverlay = (status, configPurposes) => {
|
|
304
|
-
var _a, _b;
|
|
305
|
-
const byUuid = new Map(status.purposes.map((p) => [p.uuid, p]));
|
|
306
|
-
const hasHistory = status.purposes.some(
|
|
307
|
-
(p) => (p.status || "INACTIVE") !== "INACTIVE"
|
|
308
|
-
);
|
|
309
|
-
if (!hasHistory) {
|
|
310
|
-
return null;
|
|
311
|
-
}
|
|
312
|
-
const purpose_selections = {};
|
|
313
|
-
for (const cp of configPurposes) {
|
|
314
|
-
const lp = byUuid.get(cp.uuid);
|
|
315
|
-
const purposeStatus = (lp == null ? void 0 : lp.status) || "INACTIVE";
|
|
316
|
-
const selectedByUuid = new Map(
|
|
317
|
-
((lp == null ? void 0 : lp.data_elements) || []).map((de) => [de.uuid, de.selected])
|
|
318
|
-
);
|
|
319
|
-
const data_elements = {};
|
|
320
|
-
for (const de of cp.data_elements) {
|
|
321
|
-
data_elements[de.uuid] = {
|
|
322
|
-
selected: (_a = selectedByUuid.get(de.uuid)) != null ? _a : false,
|
|
323
|
-
enabled: de.enabled,
|
|
324
|
-
required: de.required
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
purpose_selections[cp.uuid] = {
|
|
328
|
-
selected: (_b = lp == null ? void 0 : lp.selected) != null ? _b : false,
|
|
329
|
-
status: purposeStatus,
|
|
330
|
-
needs_reconsent: purposeStatus !== "ACTIVE",
|
|
331
|
-
data_elements
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
const reconsent_required = configPurposes.some(
|
|
335
|
-
(cp) => {
|
|
336
|
-
var _a2;
|
|
337
|
-
return (((_a2 = purpose_selections[cp.uuid]) == null ? void 0 : _a2.status) || "INACTIVE") !== "ACTIVE";
|
|
338
|
-
}
|
|
339
|
-
);
|
|
340
|
-
return { reconsent_required, purpose_selections };
|
|
341
|
-
};
|
|
342
373
|
var fetchTTSAudioUrls = async ({
|
|
343
374
|
accessToken,
|
|
344
375
|
baseUrl,
|
|
376
|
+
ledgerBaseUrl,
|
|
345
377
|
noticeUuid,
|
|
346
378
|
language,
|
|
347
|
-
signal
|
|
379
|
+
signal,
|
|
380
|
+
...sandboxParams
|
|
348
381
|
}) => {
|
|
349
|
-
if (!accessToken || !noticeUuid || !language) {
|
|
350
|
-
throw new Error("accessToken, noticeUuid, and language are required");
|
|
382
|
+
if (!accessToken && !sandboxParams.token || !noticeUuid || !language) {
|
|
383
|
+
throw new Error("accessToken (or token), noticeUuid, and language are required");
|
|
351
384
|
}
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
if (
|
|
358
|
-
|
|
385
|
+
const { organisationUuid: ORGANISATION_UUID, workspaceUuid: WORKSPACE_UUID, sandbox } = resolveRequestAuth(accessToken, sandboxParams, decodeTokenSafely);
|
|
386
|
+
const apiBaseUrl = (sandbox ? null : ledgerBaseUrl) || baseUrl || BASE_URL;
|
|
387
|
+
const url = new URL(
|
|
388
|
+
`${apiBaseUrl}/public/organisations/${ORGANISATION_UUID}/workspaces/${WORKSPACE_UUID}/notices/${noticeUuid}/audio/${language}`
|
|
389
|
+
);
|
|
390
|
+
if (sandbox) {
|
|
391
|
+
for (const [key, value] of Object.entries(sandboxQueryIdentity(sandbox))) {
|
|
392
|
+
url.searchParams.append(key, value);
|
|
393
|
+
}
|
|
359
394
|
}
|
|
360
|
-
const
|
|
361
|
-
const url = `${apiBaseUrl}/public/organisations/${ORGANISATION_UUID}/workspaces/${WORKSPACE_UUID}/notices/${noticeUuid}/audio/${language}`;
|
|
362
|
-
const response = await fetch(url, {
|
|
395
|
+
const response = await fetch(url.toString(), {
|
|
363
396
|
method: "GET",
|
|
364
397
|
headers: {
|
|
365
|
-
|
|
398
|
+
...buildAuthHeaders(accessToken, sandbox),
|
|
366
399
|
Accept: "application/json"
|
|
367
400
|
},
|
|
368
401
|
signal
|
|
@@ -404,7 +437,10 @@ var initiateGuardianVerification = async ({
|
|
|
404
437
|
if (!decodedToken) {
|
|
405
438
|
throw new Error("Invalid access token");
|
|
406
439
|
}
|
|
407
|
-
const {
|
|
440
|
+
const {
|
|
441
|
+
organisation_uuid: ORGANISATION_UUID,
|
|
442
|
+
workspace_uuid: WORKSPACE_UUID
|
|
443
|
+
} = decodedToken;
|
|
408
444
|
if (!ORGANISATION_UUID || !WORKSPACE_UUID) {
|
|
409
445
|
throw new Error("Invalid token: missing organization or workspace UUID");
|
|
410
446
|
}
|
|
@@ -478,7 +514,10 @@ var verifyGuardianStatus = async ({
|
|
|
478
514
|
if (!decodedToken) {
|
|
479
515
|
throw new Error("Invalid access token");
|
|
480
516
|
}
|
|
481
|
-
const {
|
|
517
|
+
const {
|
|
518
|
+
organisation_uuid: ORGANISATION_UUID,
|
|
519
|
+
workspace_uuid: WORKSPACE_UUID
|
|
520
|
+
} = decodedToken;
|
|
482
521
|
if (!ORGANISATION_UUID || !WORKSPACE_UUID) {
|
|
483
522
|
throw new Error("Invalid token: missing organization or workspace UUID");
|
|
484
523
|
}
|
|
@@ -491,9 +530,7 @@ var verifyGuardianStatus = async ({
|
|
|
491
530
|
Authorization: `Bearer ${accessToken}`,
|
|
492
531
|
"Content-Type": "application/json"
|
|
493
532
|
},
|
|
494
|
-
body: JSON.stringify({
|
|
495
|
-
session_token: sessionToken
|
|
496
|
-
}),
|
|
533
|
+
body: JSON.stringify({ session_token: sessionToken }),
|
|
497
534
|
signal
|
|
498
535
|
}
|
|
499
536
|
);
|
|
@@ -520,6 +557,12 @@ var verifyGuardianStatus = async ({
|
|
|
520
557
|
var redacto_logo_default = "data:image/png;base64,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";
|
|
521
558
|
|
|
522
559
|
// src/RedactoNoticeConsent/constants.ts
|
|
560
|
+
var DEFAULT_LOGO_POSITION = "left";
|
|
561
|
+
var LOGO_POSITION_JUSTIFY = {
|
|
562
|
+
left: "flex-start",
|
|
563
|
+
center: "center",
|
|
564
|
+
right: "flex-end"
|
|
565
|
+
};
|
|
523
566
|
var DPO_AUDIO_ELEMENT_MAP = [
|
|
524
567
|
{ audioKey: "grievance_text_audio_url", elementId: "dpo-grievance-text" },
|
|
525
568
|
{ audioKey: "grievance_anchor_text_audio_url", elementId: "dpo-grievance-link" },
|
|
@@ -531,6 +574,10 @@ var DPO_AUDIO_ELEMENT_MAP = [
|
|
|
531
574
|
{ audioKey: "dpo_anchor_text_audio_url", elementId: "dpo-dpo-link" }
|
|
532
575
|
];
|
|
533
576
|
|
|
577
|
+
// src/RedactoNoticeConsent/layout.ts
|
|
578
|
+
var resolveLogoPosition = (raw) => raw === "center" || raw === "right" ? raw : DEFAULT_LOGO_POSITION;
|
|
579
|
+
var logoRowJustify = (position) => LOGO_POSITION_JUSTIFY[position];
|
|
580
|
+
|
|
534
581
|
// src/RedactoNoticeConsent/language-codes.ts
|
|
535
582
|
var LANGUAGE_NATIVE_LABELS = {
|
|
536
583
|
English: "English",
|
|
@@ -752,6 +799,123 @@ var injectCheckboxStyles = () => {
|
|
|
752
799
|
stylesInjected = true;
|
|
753
800
|
};
|
|
754
801
|
|
|
802
|
+
// src/shared/useNoticeFont.ts
|
|
803
|
+
import { useEffect, useMemo } from "react";
|
|
804
|
+
|
|
805
|
+
// src/shared/fonts/font-sources.generated.ts
|
|
806
|
+
var NOTICE_FONT_SOURCE_IMPORTS = {
|
|
807
|
+
"montserrat": () => import("./montserrat.generated-NBTECYRW.mjs")
|
|
808
|
+
};
|
|
809
|
+
|
|
810
|
+
// src/shared/notice-webfont.ts
|
|
811
|
+
var noticeFontOptions = {};
|
|
812
|
+
var configureNoticeFonts = (options) => {
|
|
813
|
+
noticeFontOptions = { ...noticeFontOptions, ...options };
|
|
814
|
+
};
|
|
815
|
+
var toFamilyTokens = (value) => value.split(FONT_FAMILY_SEPARATOR).map(
|
|
816
|
+
(token) => token.trim().replace(FONT_NAME_QUOTE_CHARACTERS, "").toLowerCase()
|
|
817
|
+
);
|
|
818
|
+
var findNoticeFontEntry = (value) => {
|
|
819
|
+
const id = toFamilyTokens(value).find(
|
|
820
|
+
(token) => Boolean(NOTICE_FONT_ENTRY_BY_ID[token])
|
|
821
|
+
);
|
|
822
|
+
if (!id) {
|
|
823
|
+
return void 0;
|
|
824
|
+
}
|
|
825
|
+
return NOTICE_FONT_ENTRY_BY_ID[id];
|
|
826
|
+
};
|
|
827
|
+
var toFontFaceCss = (entry, sources) => sources.map(
|
|
828
|
+
({ weight, url }) => [
|
|
829
|
+
"@font-face {",
|
|
830
|
+
` font-family: "${entry.cssFamily}";`,
|
|
831
|
+
" font-style: normal;",
|
|
832
|
+
` font-weight: ${weight};`,
|
|
833
|
+
// `swap`, never the `auto` default: auto gives most browsers a ~3s block
|
|
834
|
+
// period with INVISIBLE text, which is unacceptable for a consent notice.
|
|
835
|
+
" font-display: swap;",
|
|
836
|
+
// `local()` still leads: the bundled copy is Latin + Latin-Extended only,
|
|
837
|
+
// so a visitor's own installation covers more scripts than ours does.
|
|
838
|
+
` src: local("${entry.cssFamily}"),`,
|
|
839
|
+
// Quoted url(): a data URI carries `,` and `;`, which are hostile to an
|
|
840
|
+
// unquoted url token. Base64 never contains a double quote.
|
|
841
|
+
` url("${url}") format("woff2");`,
|
|
842
|
+
"}"
|
|
843
|
+
].join("\n")
|
|
844
|
+
).join("\n\n");
|
|
845
|
+
var fontSourceLoads = /* @__PURE__ */ new Map();
|
|
846
|
+
var loadFontSources = (entry, importSources) => {
|
|
847
|
+
const pending = fontSourceLoads.get(entry.id);
|
|
848
|
+
if (pending) {
|
|
849
|
+
return pending;
|
|
850
|
+
}
|
|
851
|
+
const load = importSources().then((module) => module.NOTICE_FONT_SOURCES).catch((error) => {
|
|
852
|
+
fontSourceLoads.delete(entry.id);
|
|
853
|
+
throw error;
|
|
854
|
+
});
|
|
855
|
+
fontSourceLoads.set(entry.id, load);
|
|
856
|
+
return load;
|
|
857
|
+
};
|
|
858
|
+
var injectedFontFaceIds = /* @__PURE__ */ new Set();
|
|
859
|
+
var injectFontFace = (entry, sources) => {
|
|
860
|
+
if (injectedFontFaceIds.has(entry.id)) {
|
|
861
|
+
return;
|
|
862
|
+
}
|
|
863
|
+
injectedFontFaceIds.add(entry.id);
|
|
864
|
+
const styleId = `${NOTICE_FONT_FACE_STYLE_ID_PREFIX}${entry.slug}`;
|
|
865
|
+
if (document.getElementById(styleId)) {
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
const style = document.createElement("style");
|
|
869
|
+
style.id = styleId;
|
|
870
|
+
style.textContent = toFontFaceCss(entry, sources);
|
|
871
|
+
document.head.appendChild(style);
|
|
872
|
+
};
|
|
873
|
+
var loadNoticeWebfont = async (value, signal) => {
|
|
874
|
+
if (typeof document === "undefined" || noticeFontOptions.disabled) {
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
if (signal == null ? void 0 : signal.aborted) {
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
const entry = findNoticeFontEntry(value);
|
|
881
|
+
if (!entry || entry.source !== "webfont" || injectedFontFaceIds.has(entry.id)) {
|
|
882
|
+
return;
|
|
883
|
+
}
|
|
884
|
+
const importSources = NOTICE_FONT_SOURCE_IMPORTS[entry.slug];
|
|
885
|
+
if (!importSources) {
|
|
886
|
+
return;
|
|
887
|
+
}
|
|
888
|
+
try {
|
|
889
|
+
const sources = await loadFontSources(entry, importSources);
|
|
890
|
+
if (signal == null ? void 0 : signal.aborted) {
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
injectFontFace(entry, sources);
|
|
894
|
+
} catch (error) {
|
|
895
|
+
console.error(NOTICE_FONT_LOAD_ERROR_MESSAGE, error);
|
|
896
|
+
}
|
|
897
|
+
};
|
|
898
|
+
|
|
899
|
+
// src/shared/useNoticeFont.ts
|
|
900
|
+
var useNoticeFont = ({
|
|
901
|
+
hostFont,
|
|
902
|
+
noticeFont
|
|
903
|
+
}) => {
|
|
904
|
+
const fontFamily = useMemo(
|
|
905
|
+
() => resolveNoticeFontFamily({ hostFont, noticeFont }),
|
|
906
|
+
[hostFont, noticeFont]
|
|
907
|
+
);
|
|
908
|
+
useEffect(() => {
|
|
909
|
+
injectNoticeFontStyles();
|
|
910
|
+
}, []);
|
|
911
|
+
useEffect(() => {
|
|
912
|
+
const controller = new AbortController();
|
|
913
|
+
void loadNoticeWebfont(fontFamily, controller.signal);
|
|
914
|
+
return () => controller.abort();
|
|
915
|
+
}, [fontFamily]);
|
|
916
|
+
return fontFamily;
|
|
917
|
+
};
|
|
918
|
+
|
|
755
919
|
// src/RedactoNoticeConsent/styles.ts
|
|
756
920
|
var styles = {
|
|
757
921
|
overlay: {
|
|
@@ -823,6 +987,41 @@ var styles = {
|
|
|
823
987
|
padding: 0,
|
|
824
988
|
boxSizing: "border-box"
|
|
825
989
|
},
|
|
990
|
+
// The main notice header is two stacked rows: the logo alone on row 1,
|
|
991
|
+
// aligned per active_config.logo_position, then the title and the
|
|
992
|
+
// TTS/language controls on row 2. `topSection` and `topLeft` above keep their
|
|
993
|
+
// single-row shape for the age-verification, guardian and verification
|
|
994
|
+
// screens, which have no controls to place and share those styles.
|
|
995
|
+
headerStack: {
|
|
996
|
+
display: "flex",
|
|
997
|
+
flexDirection: "column",
|
|
998
|
+
alignItems: "stretch",
|
|
999
|
+
gap: "10px",
|
|
1000
|
+
paddingBottom: "15px",
|
|
1001
|
+
borderBottom: "none",
|
|
1002
|
+
backgroundColor: "#ffffff",
|
|
1003
|
+
margin: 0,
|
|
1004
|
+
boxSizing: "border-box",
|
|
1005
|
+
textAlign: "left"
|
|
1006
|
+
},
|
|
1007
|
+
logoRow: {
|
|
1008
|
+
display: "flex",
|
|
1009
|
+
alignItems: "center",
|
|
1010
|
+
width: "100%",
|
|
1011
|
+
margin: 0,
|
|
1012
|
+
padding: 0,
|
|
1013
|
+
boxSizing: "border-box"
|
|
1014
|
+
},
|
|
1015
|
+
headerRow: {
|
|
1016
|
+
display: "flex",
|
|
1017
|
+
alignItems: "center",
|
|
1018
|
+
justifyContent: "space-between",
|
|
1019
|
+
gap: "10px",
|
|
1020
|
+
width: "100%",
|
|
1021
|
+
margin: 0,
|
|
1022
|
+
padding: 0,
|
|
1023
|
+
boxSizing: "border-box"
|
|
1024
|
+
},
|
|
826
1025
|
logo: {
|
|
827
1026
|
height: "32px",
|
|
828
1027
|
width: "auto",
|
|
@@ -866,7 +1065,8 @@ var styles = {
|
|
|
866
1065
|
boxSizing: "border-box",
|
|
867
1066
|
textAlign: "left",
|
|
868
1067
|
cursor: "pointer",
|
|
869
|
-
backgroundColor: "#ffffff"
|
|
1068
|
+
backgroundColor: "#ffffff",
|
|
1069
|
+
fontFamily: "inherit"
|
|
870
1070
|
},
|
|
871
1071
|
middleSection: {
|
|
872
1072
|
margin: "0px",
|
|
@@ -1039,7 +1239,8 @@ var styles = {
|
|
|
1039
1239
|
cursor: "pointer",
|
|
1040
1240
|
margin: 0,
|
|
1041
1241
|
boxSizing: "border-box",
|
|
1042
|
-
textAlign: "center"
|
|
1242
|
+
textAlign: "center",
|
|
1243
|
+
fontFamily: "inherit"
|
|
1043
1244
|
},
|
|
1044
1245
|
acceptButton: {
|
|
1045
1246
|
backgroundColor: "#4f87ff",
|
|
@@ -1053,6 +1254,9 @@ var styles = {
|
|
|
1053
1254
|
},
|
|
1054
1255
|
languageSelectorContainer: {
|
|
1055
1256
|
position: "relative",
|
|
1257
|
+
// Shares `headerRow` with the title, which grows; without this a long
|
|
1258
|
+
// heading squeezes the language button instead of wrapping itself.
|
|
1259
|
+
flexShrink: 0,
|
|
1056
1260
|
margin: 0,
|
|
1057
1261
|
padding: 0,
|
|
1058
1262
|
boxSizing: "border-box"
|
|
@@ -1192,19 +1396,17 @@ var PurposeItem = ({
|
|
|
1192
1396
|
selectedLanguage,
|
|
1193
1397
|
initialDataElementSelections = {}
|
|
1194
1398
|
}) => {
|
|
1195
|
-
const headingStyle =
|
|
1399
|
+
const headingStyle = useMemo2(
|
|
1196
1400
|
() => ({
|
|
1197
|
-
color: (settings == null ? void 0 : settings.headingColor) || "#323B4B"
|
|
1198
|
-
fontFamily: (settings == null ? void 0 : settings.font) || "inherit"
|
|
1401
|
+
color: (settings == null ? void 0 : settings.headingColor) || "#323B4B"
|
|
1199
1402
|
}),
|
|
1200
|
-
[settings]
|
|
1403
|
+
[settings == null ? void 0 : settings.headingColor]
|
|
1201
1404
|
);
|
|
1202
|
-
const textStyle =
|
|
1405
|
+
const textStyle = useMemo2(
|
|
1203
1406
|
() => ({
|
|
1204
|
-
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
1205
|
-
fontFamily: (settings == null ? void 0 : settings.font) || "inherit"
|
|
1407
|
+
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
1206
1408
|
}),
|
|
1207
|
-
[settings]
|
|
1409
|
+
[settings == null ? void 0 : settings.textColor]
|
|
1208
1410
|
);
|
|
1209
1411
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
1210
1412
|
/* @__PURE__ */ jsxs("div", { style: styles4.optionItem, children: [
|
|
@@ -1509,7 +1711,7 @@ var GuardianForm = ({
|
|
|
1509
1711
|
const [openUpward, setOpenUpward] = useState(false);
|
|
1510
1712
|
const dropdownRef = useRef(null);
|
|
1511
1713
|
const optionsRef = useRef(null);
|
|
1512
|
-
|
|
1714
|
+
useEffect2(() => {
|
|
1513
1715
|
if (!isDropdownOpen) return;
|
|
1514
1716
|
const handleClickOutside = (e) => {
|
|
1515
1717
|
if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
|
|
@@ -1520,7 +1722,7 @@ var GuardianForm = ({
|
|
|
1520
1722
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1521
1723
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1522
1724
|
}, [isDropdownOpen]);
|
|
1523
|
-
|
|
1725
|
+
useEffect2(() => {
|
|
1524
1726
|
if (!isDropdownOpen || !dropdownRef.current) return;
|
|
1525
1727
|
const rect = dropdownRef.current.getBoundingClientRect();
|
|
1526
1728
|
const spaceBelow = window.innerHeight - rect.bottom;
|
|
@@ -1562,7 +1764,7 @@ var GuardianForm = ({
|
|
|
1562
1764
|
break;
|
|
1563
1765
|
}
|
|
1564
1766
|
};
|
|
1565
|
-
|
|
1767
|
+
useEffect2(() => {
|
|
1566
1768
|
var _a2;
|
|
1567
1769
|
if (focusedIndex >= 0 && optionsRef.current) {
|
|
1568
1770
|
const option = optionsRef.current.children[focusedIndex];
|
|
@@ -1573,14 +1775,12 @@ var GuardianForm = ({
|
|
|
1573
1775
|
const textColor = (settings == null ? void 0 : settings.textColor) || "#344054";
|
|
1574
1776
|
const bgColor = (settings == null ? void 0 : settings.backgroundColor) || "#ffffff";
|
|
1575
1777
|
const radius = (settings == null ? void 0 : settings.borderRadius) || "8px";
|
|
1576
|
-
const font = (settings == null ? void 0 : settings.font) || "inherit";
|
|
1577
1778
|
const inputStyle = {
|
|
1578
1779
|
width: "100%",
|
|
1579
1780
|
padding: "10px 12px",
|
|
1580
1781
|
border: `1px solid ${borderColor}`,
|
|
1581
1782
|
borderRadius: radius,
|
|
1582
1783
|
fontSize: "13px",
|
|
1583
|
-
fontFamily: font,
|
|
1584
1784
|
color: textColor,
|
|
1585
1785
|
backgroundColor: bgColor,
|
|
1586
1786
|
marginBottom: "2px",
|
|
@@ -1838,7 +2038,6 @@ var GuardianForm = ({
|
|
|
1838
2038
|
style: {
|
|
1839
2039
|
padding: "9px 12px",
|
|
1840
2040
|
fontSize: "13px",
|
|
1841
|
-
fontFamily: font,
|
|
1842
2041
|
color: isSelected ? accentColor : textColor,
|
|
1843
2042
|
backgroundColor: isFocused ? "#F3F4F6" : "transparent",
|
|
1844
2043
|
cursor: "pointer",
|
|
@@ -2355,6 +2554,12 @@ var RedactoNoticeConsent = ({
|
|
|
2355
2554
|
noticeId,
|
|
2356
2555
|
accessToken,
|
|
2357
2556
|
refreshToken,
|
|
2557
|
+
token,
|
|
2558
|
+
email,
|
|
2559
|
+
mobile,
|
|
2560
|
+
ucic,
|
|
2561
|
+
organisationUuid,
|
|
2562
|
+
workspaceUuid,
|
|
2358
2563
|
baseUrl,
|
|
2359
2564
|
ledgerBaseUrl,
|
|
2360
2565
|
language = "en",
|
|
@@ -2373,15 +2578,43 @@ var RedactoNoticeConsent = ({
|
|
|
2373
2578
|
reviewModeButtonText = "Continue"
|
|
2374
2579
|
}) => {
|
|
2375
2580
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
2376
|
-
const
|
|
2581
|
+
const sandboxParams = useMemo2(
|
|
2582
|
+
() => ({
|
|
2583
|
+
token,
|
|
2584
|
+
sandboxUcic: ucic,
|
|
2585
|
+
sandboxSubject: email || mobile,
|
|
2586
|
+
organisationUuid,
|
|
2587
|
+
workspaceUuid
|
|
2588
|
+
}),
|
|
2589
|
+
[token, ucic, email, mobile, organisationUuid, workspaceUuid]
|
|
2590
|
+
);
|
|
2591
|
+
const propValidationError = useMemo2(() => {
|
|
2377
2592
|
if (!(noticeId == null ? void 0 : noticeId.trim())) {
|
|
2378
2593
|
return "RedactoNoticeConsent: 'noticeId' prop is required and cannot be empty";
|
|
2379
2594
|
}
|
|
2595
|
+
if (token == null ? void 0 : token.trim()) {
|
|
2596
|
+
if (!(organisationUuid == null ? void 0 : organisationUuid.trim()) || !(workspaceUuid == null ? void 0 : workspaceUuid.trim())) {
|
|
2597
|
+
return "RedactoNoticeConsent: sandbox mode requires 'organisationUuid' and 'workspaceUuid'";
|
|
2598
|
+
}
|
|
2599
|
+
if (!(email == null ? void 0 : email.trim()) && !(mobile == null ? void 0 : mobile.trim()) && !(ucic == null ? void 0 : ucic.trim())) {
|
|
2600
|
+
return "RedactoNoticeConsent: sandbox mode requires 'email', 'mobile', or 'ucic'";
|
|
2601
|
+
}
|
|
2602
|
+
return null;
|
|
2603
|
+
}
|
|
2380
2604
|
if (!(accessToken == null ? void 0 : accessToken.trim())) {
|
|
2381
2605
|
return "RedactoNoticeConsent: 'accessToken' prop is required and cannot be empty";
|
|
2382
2606
|
}
|
|
2383
2607
|
return null;
|
|
2384
|
-
}, [
|
|
2608
|
+
}, [
|
|
2609
|
+
noticeId,
|
|
2610
|
+
accessToken,
|
|
2611
|
+
token,
|
|
2612
|
+
organisationUuid,
|
|
2613
|
+
workspaceUuid,
|
|
2614
|
+
email,
|
|
2615
|
+
mobile,
|
|
2616
|
+
ucic
|
|
2617
|
+
]);
|
|
2385
2618
|
if (propValidationError) {
|
|
2386
2619
|
return /* @__PURE__ */ jsxs(
|
|
2387
2620
|
"div",
|
|
@@ -2461,7 +2694,7 @@ var RedactoNoticeConsent = ({
|
|
|
2461
2694
|
const isPollingStatusRef = useRef(false);
|
|
2462
2695
|
const verificationSessionTokenRef = useRef(null);
|
|
2463
2696
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
2464
|
-
const responsiveStyles =
|
|
2697
|
+
const responsiveStyles = useMemo2(
|
|
2465
2698
|
() => ({
|
|
2466
2699
|
modal: {
|
|
2467
2700
|
width: isMobile ? "90%" : "700px"
|
|
@@ -2519,9 +2752,7 @@ var RedactoNoticeConsent = ({
|
|
|
2519
2752
|
height: isMobile ? "auto" : void 0,
|
|
2520
2753
|
width: isMobile ? "auto" : void 0
|
|
2521
2754
|
},
|
|
2522
|
-
|
|
2523
|
-
flexDirection: isMobile ? "column" : "row",
|
|
2524
|
-
alignItems: isMobile ? "stretch" : "flex-start",
|
|
2755
|
+
headerStack: {
|
|
2525
2756
|
gap: isMobile ? "12px" : "10px"
|
|
2526
2757
|
},
|
|
2527
2758
|
logo: {
|
|
@@ -2542,28 +2773,36 @@ var RedactoNoticeConsent = ({
|
|
|
2542
2773
|
}),
|
|
2543
2774
|
[isMobile]
|
|
2544
2775
|
);
|
|
2545
|
-
const
|
|
2776
|
+
const fontFamily = useNoticeFont({
|
|
2777
|
+
hostFont: settings == null ? void 0 : settings.font,
|
|
2778
|
+
noticeFont: content == null ? void 0 : content.font_preference
|
|
2779
|
+
});
|
|
2780
|
+
const componentHeadingStyle = useMemo2(
|
|
2781
|
+
() => ({
|
|
2782
|
+
color: (settings == null ? void 0 : settings.headingColor) || "#323B4B"
|
|
2783
|
+
}),
|
|
2784
|
+
[settings == null ? void 0 : settings.headingColor]
|
|
2785
|
+
);
|
|
2786
|
+
const componentTextStyle = useMemo2(
|
|
2546
2787
|
() => ({
|
|
2547
|
-
color: (settings == null ? void 0 : settings.
|
|
2548
|
-
fontFamily: (settings == null ? void 0 : settings.font) || "inherit"
|
|
2788
|
+
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
2549
2789
|
}),
|
|
2550
|
-
[settings == null ? void 0 : settings.
|
|
2790
|
+
[settings == null ? void 0 : settings.textColor]
|
|
2551
2791
|
);
|
|
2552
|
-
const
|
|
2792
|
+
const sectionStyle = useMemo2(
|
|
2553
2793
|
() => ({
|
|
2554
|
-
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
2555
|
-
fontFamily: (settings == null ? void 0 : settings.font) || "inherit"
|
|
2794
|
+
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
2556
2795
|
}),
|
|
2557
|
-
[settings == null ? void 0 : settings.textColor
|
|
2796
|
+
[settings == null ? void 0 : settings.textColor]
|
|
2558
2797
|
);
|
|
2559
|
-
const
|
|
2798
|
+
const logoRowStyle = useMemo2(
|
|
2560
2799
|
() => ({
|
|
2561
|
-
|
|
2562
|
-
|
|
2800
|
+
...styles.logoRow,
|
|
2801
|
+
justifyContent: logoRowJustify(resolveLogoPosition(content == null ? void 0 : content.logo_position))
|
|
2563
2802
|
}),
|
|
2564
|
-
[
|
|
2803
|
+
[content == null ? void 0 : content.logo_position]
|
|
2565
2804
|
);
|
|
2566
|
-
const areAllRequiredElementsChecked =
|
|
2805
|
+
const areAllRequiredElementsChecked = useMemo2(() => {
|
|
2567
2806
|
if (!content) return false;
|
|
2568
2807
|
return content.purposes.every((purpose) => {
|
|
2569
2808
|
const requiredElements = purpose.data_elements.filter(
|
|
@@ -2575,7 +2814,7 @@ var RedactoNoticeConsent = ({
|
|
|
2575
2814
|
});
|
|
2576
2815
|
}, [content, selectedDataElements]);
|
|
2577
2816
|
const acceptDisabled = isSubmitting || !areAllRequiredElementsChecked;
|
|
2578
|
-
|
|
2817
|
+
useEffect2(() => {
|
|
2579
2818
|
var _a2, _b2;
|
|
2580
2819
|
clearApiCache();
|
|
2581
2820
|
isRequestInProgressRef.current = false;
|
|
@@ -2638,7 +2877,7 @@ var RedactoNoticeConsent = ({
|
|
|
2638
2877
|
}
|
|
2639
2878
|
isInitialMountRef.current = false;
|
|
2640
2879
|
}, [accessToken]);
|
|
2641
|
-
|
|
2880
|
+
useEffect2(() => {
|
|
2642
2881
|
if (hasAlreadyConsented) {
|
|
2643
2882
|
onAccept == null ? void 0 : onAccept();
|
|
2644
2883
|
}
|
|
@@ -2711,7 +2950,7 @@ var RedactoNoticeConsent = ({
|
|
|
2711
2950
|
return content.dpo_info[key] || defaultText;
|
|
2712
2951
|
};
|
|
2713
2952
|
const fetchNotice = async () => {
|
|
2714
|
-
var _a2
|
|
2953
|
+
var _a2;
|
|
2715
2954
|
if (isRequestInProgressRef.current) {
|
|
2716
2955
|
return;
|
|
2717
2956
|
}
|
|
@@ -2725,16 +2964,18 @@ var RedactoNoticeConsent = ({
|
|
|
2725
2964
|
setShowAgeVerification(false);
|
|
2726
2965
|
setShowGuardianForm(false);
|
|
2727
2966
|
try {
|
|
2967
|
+
const noticeBaseUrl = ledgerBaseUrl && !applicationId && !token ? ledgerBaseUrl : baseUrl;
|
|
2728
2968
|
const consentContentData = await fetchConsentContent({
|
|
2729
2969
|
noticeId,
|
|
2730
2970
|
accessToken,
|
|
2731
2971
|
refreshToken,
|
|
2732
|
-
baseUrl,
|
|
2972
|
+
baseUrl: noticeBaseUrl,
|
|
2733
2973
|
language,
|
|
2734
2974
|
specific_uuid: applicationId,
|
|
2735
2975
|
validate_against: validateAgainst,
|
|
2736
2976
|
include_fully_consented_data: includeFullyConsentedData,
|
|
2737
|
-
signal: (_a2 = abortControllerRef.current) == null ? void 0 : _a2.signal
|
|
2977
|
+
signal: (_a2 = abortControllerRef.current) == null ? void 0 : _a2.signal,
|
|
2978
|
+
...sandboxParams
|
|
2738
2979
|
});
|
|
2739
2980
|
const activeConfig = consentContentData.detail.active_config;
|
|
2740
2981
|
setContent(activeConfig);
|
|
@@ -2752,24 +2993,8 @@ var RedactoNoticeConsent = ({
|
|
|
2752
2993
|
{}
|
|
2753
2994
|
);
|
|
2754
2995
|
setCollapsedPurposes(initialCollapsedState);
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
if (ledgerBaseUrl && !applicationId) {
|
|
2758
|
-
const ledgerStatus = await fetchNoticeConsentStatus({
|
|
2759
|
-
accessToken,
|
|
2760
|
-
ledgerBaseUrl,
|
|
2761
|
-
noticeUuid: noticeId,
|
|
2762
|
-
signal: (_b2 = abortControllerRef.current) == null ? void 0 : _b2.signal
|
|
2763
|
-
});
|
|
2764
|
-
if (ledgerStatus) {
|
|
2765
|
-
const overlay = buildLedgerConsentOverlay(
|
|
2766
|
-
ledgerStatus,
|
|
2767
|
-
activeConfig.purposes
|
|
2768
|
-
);
|
|
2769
|
-
isReconsentRequired = (_c2 = overlay == null ? void 0 : overlay.reconsent_required) != null ? _c2 : false;
|
|
2770
|
-
purposeSelections = overlay == null ? void 0 : overlay.purpose_selections;
|
|
2771
|
-
}
|
|
2772
|
-
}
|
|
2996
|
+
const isReconsentRequired = consentContentData.detail.reconsent_required;
|
|
2997
|
+
const purposeSelections = consentContentData.detail.purpose_selections;
|
|
2773
2998
|
const newCategorizedPurposes = isReconsentRequired ? {
|
|
2774
2999
|
alreadyConsented: activeConfig.purposes.filter(
|
|
2775
3000
|
(purpose) => {
|
|
@@ -2800,9 +3025,9 @@ var RedactoNoticeConsent = ({
|
|
|
2800
3025
|
const initialDataElementState = activeConfig.purposes.reduce(
|
|
2801
3026
|
(acc, purpose) => {
|
|
2802
3027
|
purpose.data_elements.forEach((element) => {
|
|
2803
|
-
var _a3,
|
|
3028
|
+
var _a3, _b2;
|
|
2804
3029
|
const combinedId = `${purpose.uuid}-${element.uuid}`;
|
|
2805
|
-
if ((
|
|
3030
|
+
if ((_b2 = (_a3 = purposeSelections == null ? void 0 : purposeSelections[purpose.uuid]) == null ? void 0 : _a3.data_elements) == null ? void 0 : _b2[element.uuid]) {
|
|
2806
3031
|
acc[combinedId] = purposeSelections[purpose.uuid].data_elements[element.uuid].selected;
|
|
2807
3032
|
} else {
|
|
2808
3033
|
acc[combinedId] = false;
|
|
@@ -2818,9 +3043,9 @@ var RedactoNoticeConsent = ({
|
|
|
2818
3043
|
const initialSelections = {};
|
|
2819
3044
|
newCategorizedPurposes.alreadyConsented.forEach((purpose) => {
|
|
2820
3045
|
purpose.data_elements.forEach((element) => {
|
|
2821
|
-
var _a3,
|
|
3046
|
+
var _a3, _b2;
|
|
2822
3047
|
const combinedId = `${purpose.uuid}-${element.uuid}`;
|
|
2823
|
-
if ((
|
|
3048
|
+
if ((_b2 = (_a3 = purposeSelections == null ? void 0 : purposeSelections[purpose.uuid]) == null ? void 0 : _a3.data_elements) == null ? void 0 : _b2[element.uuid]) {
|
|
2824
3049
|
initialSelections[combinedId] = purposeSelections[purpose.uuid].data_elements[element.uuid].selected;
|
|
2825
3050
|
} else {
|
|
2826
3051
|
initialSelections[combinedId] = false;
|
|
@@ -2841,9 +3066,9 @@ var RedactoNoticeConsent = ({
|
|
|
2841
3066
|
activeConfig.purposes.forEach(
|
|
2842
3067
|
(purpose) => {
|
|
2843
3068
|
purpose.data_elements.forEach((element) => {
|
|
2844
|
-
var _a3,
|
|
3069
|
+
var _a3, _b2;
|
|
2845
3070
|
const combinedId = `${purpose.uuid}-${element.uuid}`;
|
|
2846
|
-
if ((
|
|
3071
|
+
if ((_b2 = (_a3 = purposeSelections[purpose.uuid]) == null ? void 0 : _a3.data_elements) == null ? void 0 : _b2[element.uuid]) {
|
|
2847
3072
|
initialSelections[combinedId] = purposeSelections[purpose.uuid].data_elements[element.uuid].selected;
|
|
2848
3073
|
} else {
|
|
2849
3074
|
initialSelections[combinedId] = false;
|
|
@@ -2884,15 +3109,17 @@ var RedactoNoticeConsent = ({
|
|
|
2884
3109
|
isRequestInProgressRef.current = false;
|
|
2885
3110
|
}
|
|
2886
3111
|
};
|
|
2887
|
-
|
|
3112
|
+
useEffect2(() => {
|
|
2888
3113
|
injectCheckboxStyles();
|
|
2889
3114
|
fetchNotice();
|
|
2890
3115
|
}, [
|
|
2891
3116
|
noticeId,
|
|
2892
3117
|
accessToken,
|
|
2893
3118
|
refreshToken,
|
|
3119
|
+
sandboxParams,
|
|
2894
3120
|
language,
|
|
2895
3121
|
applicationId,
|
|
3122
|
+
ledgerBaseUrl,
|
|
2896
3123
|
validateAgainst,
|
|
2897
3124
|
includeFullyConsentedData
|
|
2898
3125
|
// Removed onError and isRefreshingToken from dependencies to prevent duplicate API calls
|
|
@@ -3007,7 +3234,8 @@ var RedactoNoticeConsent = ({
|
|
|
3007
3234
|
meta_data: applicationId ? { specific_uuid: applicationId } : void 0,
|
|
3008
3235
|
guardianVerificationReference: verificationReference || void 0,
|
|
3009
3236
|
selfDeclaredAdult: selfDeclaredAdult || void 0,
|
|
3010
|
-
signal: submitController.signal
|
|
3237
|
+
signal: submitController.signal,
|
|
3238
|
+
...sandboxParams
|
|
3011
3239
|
});
|
|
3012
3240
|
}
|
|
3013
3241
|
onAccept == null ? void 0 : onAccept();
|
|
@@ -3190,7 +3418,7 @@ var RedactoNoticeConsent = ({
|
|
|
3190
3418
|
} finally {
|
|
3191
3419
|
setIsSubmittingGuardian(false);
|
|
3192
3420
|
}
|
|
3193
|
-
}, [accessToken, baseUrl, guardianFormData, digilockerMode, digilockerCallbackUrl, selectedPurposes, selectedDataElements, noticeId, onError]);
|
|
3421
|
+
}, [accessToken, sandboxParams, baseUrl, guardianFormData, digilockerMode, digilockerCallbackUrl, selectedPurposes, selectedDataElements, noticeId, onError]);
|
|
3194
3422
|
const handleAgeVerificationYes = useCallback(() => {
|
|
3195
3423
|
setShowAgeVerification(false);
|
|
3196
3424
|
setIsMinorFlow(false);
|
|
@@ -3247,7 +3475,7 @@ var RedactoNoticeConsent = ({
|
|
|
3247
3475
|
setIsPollingStatus(false);
|
|
3248
3476
|
isPollingStatusRef.current = false;
|
|
3249
3477
|
setIsInitiatingVerification(false);
|
|
3250
|
-
}, [accessToken, baseUrl]);
|
|
3478
|
+
}, [accessToken, sandboxParams, baseUrl]);
|
|
3251
3479
|
const startPopupMonitoring = useCallback((popup) => {
|
|
3252
3480
|
popupCheckIntervalRef.current = window.setInterval(() => {
|
|
3253
3481
|
if (popup.closed) {
|
|
@@ -3275,8 +3503,8 @@ var RedactoNoticeConsent = ({
|
|
|
3275
3503
|
[]
|
|
3276
3504
|
);
|
|
3277
3505
|
const startStatusPolling = useCallback(
|
|
3278
|
-
(
|
|
3279
|
-
verificationSessionTokenRef.current =
|
|
3506
|
+
(token2) => {
|
|
3507
|
+
verificationSessionTokenRef.current = token2;
|
|
3280
3508
|
setIsPollingStatus(true);
|
|
3281
3509
|
isPollingStatusRef.current = true;
|
|
3282
3510
|
setVerificationError(null);
|
|
@@ -3328,7 +3556,7 @@ var RedactoNoticeConsent = ({
|
|
|
3328
3556
|
const response = await verifyGuardianStatus({
|
|
3329
3557
|
accessToken,
|
|
3330
3558
|
baseUrl,
|
|
3331
|
-
sessionToken:
|
|
3559
|
+
sessionToken: token2
|
|
3332
3560
|
});
|
|
3333
3561
|
consecutiveErrors = 0;
|
|
3334
3562
|
if (response.status === "verified") {
|
|
@@ -3398,7 +3626,7 @@ var RedactoNoticeConsent = ({
|
|
|
3398
3626
|
};
|
|
3399
3627
|
statusPollIntervalRef.current = window.setTimeout(poll, POLL_INTERVAL);
|
|
3400
3628
|
},
|
|
3401
|
-
[accessToken, baseUrl, getVerificationErrorMessage]
|
|
3629
|
+
[accessToken, sandboxParams, baseUrl, getVerificationErrorMessage]
|
|
3402
3630
|
);
|
|
3403
3631
|
const handleBackToGuardianForm = useCallback((clearName = false) => {
|
|
3404
3632
|
var _a2, _b2;
|
|
@@ -3436,7 +3664,7 @@ var RedactoNoticeConsent = ({
|
|
|
3436
3664
|
}
|
|
3437
3665
|
clearConsentState();
|
|
3438
3666
|
}, []);
|
|
3439
|
-
const availableLanguages =
|
|
3667
|
+
const availableLanguages = useMemo2(() => {
|
|
3440
3668
|
if (!content) return [language];
|
|
3441
3669
|
const pinned = ["English"];
|
|
3442
3670
|
if (content.default_language && content.default_language !== "English" && content.default_language !== "en") {
|
|
@@ -3458,7 +3686,7 @@ var RedactoNoticeConsent = ({
|
|
|
3458
3686
|
},
|
|
3459
3687
|
[content]
|
|
3460
3688
|
);
|
|
3461
|
-
const audioSequence =
|
|
3689
|
+
const audioSequence = useMemo2(() => {
|
|
3462
3690
|
if (!ttsAudioUrls || !content) return [];
|
|
3463
3691
|
const sequence = [];
|
|
3464
3692
|
if (ttsAudioUrls.notice_banner_heading_audio_url) {
|
|
@@ -3523,7 +3751,7 @@ var RedactoNoticeConsent = ({
|
|
|
3523
3751
|
}
|
|
3524
3752
|
return sequence;
|
|
3525
3753
|
}, [ttsAudioUrls, content, categorizedPurposes]);
|
|
3526
|
-
const elementIdSequence =
|
|
3754
|
+
const elementIdSequence = useMemo2(() => {
|
|
3527
3755
|
if (!ttsAudioUrls || !content) return [];
|
|
3528
3756
|
const elementIds = [];
|
|
3529
3757
|
if (ttsAudioUrls.notice_banner_heading_audio_url) {
|
|
@@ -3656,7 +3884,7 @@ var RedactoNoticeConsent = ({
|
|
|
3656
3884
|
playAudio();
|
|
3657
3885
|
}
|
|
3658
3886
|
}, [isPlaying, playAudio, pauseAudio]);
|
|
3659
|
-
|
|
3887
|
+
useEffect2(() => {
|
|
3660
3888
|
var _a2;
|
|
3661
3889
|
if (!isPlaying || !content || audioSequence.length === 0) return;
|
|
3662
3890
|
const currentIndex = currentAudioIndex;
|
|
@@ -3690,7 +3918,7 @@ var RedactoNoticeConsent = ({
|
|
|
3690
3918
|
categorizedPurposes,
|
|
3691
3919
|
collapsedPurposes
|
|
3692
3920
|
]);
|
|
3693
|
-
|
|
3921
|
+
useEffect2(() => {
|
|
3694
3922
|
const removeAllHighlights = () => {
|
|
3695
3923
|
document.querySelectorAll(".redacto-tts-highlight").forEach((el) => {
|
|
3696
3924
|
el.classList.remove("redacto-tts-highlight");
|
|
@@ -3726,7 +3954,7 @@ var RedactoNoticeConsent = ({
|
|
|
3726
3954
|
removeAllHighlights();
|
|
3727
3955
|
};
|
|
3728
3956
|
}, [highlightedElementId, isPlaying]);
|
|
3729
|
-
|
|
3957
|
+
useEffect2(() => {
|
|
3730
3958
|
setIsTTSAvailable(false);
|
|
3731
3959
|
setTtsAudioUrls(null);
|
|
3732
3960
|
stopAudio();
|
|
@@ -3738,9 +3966,11 @@ var RedactoNoticeConsent = ({
|
|
|
3738
3966
|
fetchTTSAudioUrls({
|
|
3739
3967
|
accessToken,
|
|
3740
3968
|
baseUrl,
|
|
3969
|
+
ledgerBaseUrl,
|
|
3741
3970
|
noticeUuid: content.notice_uuid,
|
|
3742
3971
|
language: languageCode,
|
|
3743
|
-
signal: ttsAbortController.signal
|
|
3972
|
+
signal: ttsAbortController.signal,
|
|
3973
|
+
...sandboxParams
|
|
3744
3974
|
}).then((response) => {
|
|
3745
3975
|
setTtsAudioUrls(response.detail);
|
|
3746
3976
|
setIsTTSAvailable(true);
|
|
@@ -3753,10 +3983,11 @@ var RedactoNoticeConsent = ({
|
|
|
3753
3983
|
return () => {
|
|
3754
3984
|
ttsAbortController.abort();
|
|
3755
3985
|
};
|
|
3756
|
-
}, [content, selectedLanguage, accessToken, baseUrl, getLanguageCode]);
|
|
3986
|
+
}, [content, selectedLanguage, accessToken, sandboxParams, baseUrl, ledgerBaseUrl, getLanguageCode]);
|
|
3757
3987
|
const modalStyle = {
|
|
3758
3988
|
borderRadius: (settings == null ? void 0 : settings.borderRadius) || "8px",
|
|
3759
|
-
backgroundColor: (settings == null ? void 0 : settings.backgroundColor) || "#ffffff"
|
|
3989
|
+
backgroundColor: (settings == null ? void 0 : settings.backgroundColor) || "#ffffff",
|
|
3990
|
+
fontFamily
|
|
3760
3991
|
};
|
|
3761
3992
|
const buttonStyle = {
|
|
3762
3993
|
borderRadius: (settings == null ? void 0 : settings.borderRadius) || "8px"
|
|
@@ -3790,7 +4021,7 @@ var RedactoNoticeConsent = ({
|
|
|
3790
4021
|
const handleCloseError = () => {
|
|
3791
4022
|
setErrorMessage(null);
|
|
3792
4023
|
};
|
|
3793
|
-
|
|
4024
|
+
useEffect2(() => {
|
|
3794
4025
|
const handleKeyDown = (event) => {
|
|
3795
4026
|
if (!modalRef.current) return;
|
|
3796
4027
|
const focusableElements = modalRef.current.querySelectorAll(
|
|
@@ -3829,13 +4060,13 @@ var RedactoNoticeConsent = ({
|
|
|
3829
4060
|
modal == null ? void 0 : modal.removeEventListener("keydown", handleKeyDown);
|
|
3830
4061
|
};
|
|
3831
4062
|
}, [isLoading, handleDecline]);
|
|
3832
|
-
|
|
4063
|
+
useEffect2(() => {
|
|
3833
4064
|
stopAudio();
|
|
3834
4065
|
}, [selectedLanguage, stopAudio]);
|
|
3835
|
-
|
|
4066
|
+
useEffect2(() => {
|
|
3836
4067
|
stopAudio();
|
|
3837
4068
|
}, [content, stopAudio]);
|
|
3838
|
-
|
|
4069
|
+
useEffect2(() => {
|
|
3839
4070
|
return () => {
|
|
3840
4071
|
var _a2, _b2;
|
|
3841
4072
|
if (abortControllerRef.current) {
|
|
@@ -3861,7 +4092,7 @@ var RedactoNoticeConsent = ({
|
|
|
3861
4092
|
}
|
|
3862
4093
|
};
|
|
3863
4094
|
}, [stopAudio]);
|
|
3864
|
-
|
|
4095
|
+
useEffect2(() => {
|
|
3865
4096
|
const persistedState = getConsentState();
|
|
3866
4097
|
if (!persistedState) return;
|
|
3867
4098
|
if (persistedState.noticeId && persistedState.noticeId !== noticeId) {
|
|
@@ -3911,6 +4142,7 @@ var RedactoNoticeConsent = ({
|
|
|
3911
4142
|
"div",
|
|
3912
4143
|
{
|
|
3913
4144
|
ref: modalRef,
|
|
4145
|
+
...NOTICE_FONT_ROOT_PROPS,
|
|
3914
4146
|
style: {
|
|
3915
4147
|
...styles.modal,
|
|
3916
4148
|
...responsiveStyles.modal,
|
|
@@ -4171,8 +4403,8 @@ var RedactoNoticeConsent = ({
|
|
|
4171
4403
|
"div",
|
|
4172
4404
|
{
|
|
4173
4405
|
style: {
|
|
4174
|
-
...styles.
|
|
4175
|
-
...responsiveStyles.
|
|
4406
|
+
...styles.headerStack,
|
|
4407
|
+
...responsiveStyles.headerStack,
|
|
4176
4408
|
...sectionStyle
|
|
4177
4409
|
},
|
|
4178
4410
|
children: (() => {
|
|
@@ -4341,40 +4573,12 @@ var RedactoNoticeConsent = ({
|
|
|
4341
4573
|
}
|
|
4342
4574
|
)
|
|
4343
4575
|
] });
|
|
4344
|
-
return
|
|
4345
|
-
/* @__PURE__ */
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
alignItems: "center",
|
|
4351
|
-
gap: "10px",
|
|
4352
|
-
width: "100%"
|
|
4353
|
-
},
|
|
4354
|
-
children: [
|
|
4355
|
-
logoNode,
|
|
4356
|
-
/* @__PURE__ */ jsx(
|
|
4357
|
-
"div",
|
|
4358
|
-
{
|
|
4359
|
-
style: {
|
|
4360
|
-
marginLeft: "auto",
|
|
4361
|
-
display: "flex",
|
|
4362
|
-
alignItems: "center",
|
|
4363
|
-
flexShrink: 0
|
|
4364
|
-
},
|
|
4365
|
-
children: controlsBlock
|
|
4366
|
-
}
|
|
4367
|
-
)
|
|
4368
|
-
]
|
|
4369
|
-
}
|
|
4370
|
-
),
|
|
4371
|
-
titleNode
|
|
4372
|
-
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4373
|
-
/* @__PURE__ */ jsxs("div", { style: styles.topLeft, children: [
|
|
4374
|
-
logoNode,
|
|
4375
|
-
titleNode
|
|
4376
|
-
] }),
|
|
4377
|
-
controlsBlock
|
|
4576
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4577
|
+
/* @__PURE__ */ jsx("div", { style: logoRowStyle, children: logoNode }),
|
|
4578
|
+
/* @__PURE__ */ jsxs("div", { style: styles.headerRow, children: [
|
|
4579
|
+
titleNode,
|
|
4580
|
+
controlsBlock
|
|
4581
|
+
] })
|
|
4378
4582
|
] });
|
|
4379
4583
|
})()
|
|
4380
4584
|
}
|
|
@@ -4719,7 +4923,7 @@ var RedactoNoticeConsent = ({
|
|
|
4719
4923
|
};
|
|
4720
4924
|
|
|
4721
4925
|
// src/RedactoNoticeConsentInline/RedactoNoticeConsentInline.tsx
|
|
4722
|
-
import { useEffect as
|
|
4926
|
+
import { useEffect as useEffect4, useMemo as useMemo3, useState as useState3, useRef as useRef2, useCallback as useCallback2, memo } from "react";
|
|
4723
4927
|
|
|
4724
4928
|
// src/RedactoNoticeConsentInline/api/index.ts
|
|
4725
4929
|
var BASE_URL2 = "https://api.redacto.tech/consent";
|
|
@@ -4727,12 +4931,16 @@ var fetchConsentContent2 = async ({
|
|
|
4727
4931
|
org_uuid,
|
|
4728
4932
|
workspace_uuid,
|
|
4729
4933
|
notice_uuid,
|
|
4934
|
+
accessToken,
|
|
4730
4935
|
baseUrl,
|
|
4731
|
-
|
|
4936
|
+
language,
|
|
4937
|
+
specific_uuid,
|
|
4938
|
+
signal
|
|
4732
4939
|
}) => {
|
|
4733
4940
|
const apiBaseUrl = baseUrl || BASE_URL2;
|
|
4941
|
+
const noticesUrl = `${apiBaseUrl}/public/organisations/${org_uuid}/workspaces/${workspace_uuid}/notices`;
|
|
4734
4942
|
const url = new URL(
|
|
4735
|
-
`${
|
|
4943
|
+
accessToken ? `${noticesUrl}/${notice_uuid}` : `${noticesUrl}/get-notice/${notice_uuid}`
|
|
4736
4944
|
);
|
|
4737
4945
|
if (specific_uuid) {
|
|
4738
4946
|
url.searchParams.append("specific_uuid", specific_uuid);
|
|
@@ -4740,8 +4948,11 @@ var fetchConsentContent2 = async ({
|
|
|
4740
4948
|
const response = await fetch(url.toString(), {
|
|
4741
4949
|
method: "GET",
|
|
4742
4950
|
headers: {
|
|
4743
|
-
"Content-Type": "application/json"
|
|
4744
|
-
|
|
4951
|
+
"Content-Type": "application/json",
|
|
4952
|
+
"Accept-Language": language || "en",
|
|
4953
|
+
...accessToken ? { Authorization: `Bearer ${accessToken}` } : {}
|
|
4954
|
+
},
|
|
4955
|
+
signal
|
|
4745
4956
|
});
|
|
4746
4957
|
if (!response.ok) {
|
|
4747
4958
|
throw await parseApiError(
|
|
@@ -4806,6 +5017,15 @@ var submitConsentEvent2 = async ({
|
|
|
4806
5017
|
|
|
4807
5018
|
// src/RedactoNoticeConsentInline/styles.ts
|
|
4808
5019
|
var styles2 = {
|
|
5020
|
+
// Root of the embedded widget — the host supplies the surrounding card, so this
|
|
5021
|
+
// is layout plus the font the rest of the widget inherits. (`container` below is
|
|
5022
|
+
// a standalone-card variant that the current layout does not use.)
|
|
5023
|
+
root: {
|
|
5024
|
+
display: "flex",
|
|
5025
|
+
flexDirection: "column",
|
|
5026
|
+
gap: "16px",
|
|
5027
|
+
fontFamily: "inherit"
|
|
5028
|
+
},
|
|
4809
5029
|
overlay: {
|
|
4810
5030
|
position: "fixed",
|
|
4811
5031
|
top: 0,
|
|
@@ -5152,11 +5372,11 @@ var styles2 = {
|
|
|
5152
5372
|
};
|
|
5153
5373
|
|
|
5154
5374
|
// src/RedactoNoticeConsentInline/useMediaQuery.ts
|
|
5155
|
-
import { useState as useState2, useEffect as
|
|
5375
|
+
import { useState as useState2, useEffect as useEffect3 } from "react";
|
|
5156
5376
|
var useMediaQuery2 = (query) => {
|
|
5157
5377
|
const getMatches = () => typeof window !== "undefined" ? window.matchMedia(query).matches : false;
|
|
5158
5378
|
const [matches, setMatches] = useState2(getMatches);
|
|
5159
|
-
|
|
5379
|
+
useEffect3(() => {
|
|
5160
5380
|
if (typeof window === "undefined") return;
|
|
5161
5381
|
const media = window.matchMedia(query);
|
|
5162
5382
|
const listener = (e) => {
|
|
@@ -5237,11 +5457,11 @@ var RedactoConsentInlineComponent = ({
|
|
|
5237
5457
|
const [fetchError, setFetchError] = useState3(null);
|
|
5238
5458
|
const [errorMessage, setErrorMessage] = useState3(null);
|
|
5239
5459
|
const hasSubmittedRef = useRef2(false);
|
|
5240
|
-
|
|
5460
|
+
useEffect4(() => {
|
|
5241
5461
|
injectSpinnerAnimation();
|
|
5242
5462
|
}, []);
|
|
5243
5463
|
const isMobile = useMediaQuery2("(max-width: 768px)");
|
|
5244
|
-
const responsiveStyles =
|
|
5464
|
+
const responsiveStyles = useMemo3(
|
|
5245
5465
|
() => ({
|
|
5246
5466
|
optionTitle: {
|
|
5247
5467
|
fontSize: isMobile ? "14px" : "16px"
|
|
@@ -5259,7 +5479,7 @@ var RedactoConsentInlineComponent = ({
|
|
|
5259
5479
|
}),
|
|
5260
5480
|
[isMobile]
|
|
5261
5481
|
);
|
|
5262
|
-
const areAllRequiredElementsChecked =
|
|
5482
|
+
const areAllRequiredElementsChecked = useMemo3(() => {
|
|
5263
5483
|
if (!content) return false;
|
|
5264
5484
|
return content.purposes.every((purpose) => {
|
|
5265
5485
|
const requiredElements = purpose.data_elements.filter(
|
|
@@ -5270,10 +5490,10 @@ var RedactoConsentInlineComponent = ({
|
|
|
5270
5490
|
);
|
|
5271
5491
|
});
|
|
5272
5492
|
}, [content, selectedDataElements]);
|
|
5273
|
-
|
|
5493
|
+
useEffect4(() => {
|
|
5274
5494
|
onValidationChange == null ? void 0 : onValidationChange(areAllRequiredElementsChecked);
|
|
5275
5495
|
}, [areAllRequiredElementsChecked, onValidationChange]);
|
|
5276
|
-
|
|
5496
|
+
useEffect4(() => {
|
|
5277
5497
|
if (hasAlreadyConsented) {
|
|
5278
5498
|
onAccept == null ? void 0 : onAccept();
|
|
5279
5499
|
}
|
|
@@ -5315,18 +5535,24 @@ var RedactoConsentInlineComponent = ({
|
|
|
5315
5535
|
}
|
|
5316
5536
|
return defaultText;
|
|
5317
5537
|
};
|
|
5318
|
-
const fetchNotice = async () => {
|
|
5538
|
+
const fetchNotice = async (signal) => {
|
|
5319
5539
|
setIsLoading(true);
|
|
5320
5540
|
setFetchError(null);
|
|
5541
|
+
setHasAlreadyConsented(false);
|
|
5321
5542
|
try {
|
|
5322
5543
|
const consentContentData = await fetchConsentContent2({
|
|
5323
5544
|
org_uuid,
|
|
5324
5545
|
workspace_uuid,
|
|
5325
5546
|
notice_uuid,
|
|
5547
|
+
accessToken,
|
|
5326
5548
|
baseUrl,
|
|
5327
5549
|
language,
|
|
5328
|
-
specific_uuid: applicationId
|
|
5550
|
+
specific_uuid: applicationId,
|
|
5551
|
+
signal
|
|
5329
5552
|
});
|
|
5553
|
+
if (signal == null ? void 0 : signal.aborted) {
|
|
5554
|
+
return;
|
|
5555
|
+
}
|
|
5330
5556
|
const activeConfig = consentContentData.detail.active_config;
|
|
5331
5557
|
setContent(activeConfig);
|
|
5332
5558
|
if (activeConfig.default_language) {
|
|
@@ -5362,6 +5588,9 @@ var RedactoConsentInlineComponent = ({
|
|
|
5362
5588
|
);
|
|
5363
5589
|
setSelectedPurposes(initialPurposeState);
|
|
5364
5590
|
} catch (err) {
|
|
5591
|
+
if ((signal == null ? void 0 : signal.aborted) || err instanceof Error && err.name === "AbortError") {
|
|
5592
|
+
return;
|
|
5593
|
+
}
|
|
5365
5594
|
const error = err;
|
|
5366
5595
|
setFetchError(error);
|
|
5367
5596
|
if (error.status === 409) {
|
|
@@ -5370,13 +5599,19 @@ var RedactoConsentInlineComponent = ({
|
|
|
5370
5599
|
onError == null ? void 0 : onError(error);
|
|
5371
5600
|
}
|
|
5372
5601
|
} finally {
|
|
5373
|
-
|
|
5602
|
+
if (!(signal == null ? void 0 : signal.aborted)) {
|
|
5603
|
+
setIsLoading(false);
|
|
5604
|
+
}
|
|
5374
5605
|
}
|
|
5375
5606
|
};
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
|
|
5607
|
+
useEffect4(() => {
|
|
5608
|
+
const controller = new AbortController();
|
|
5609
|
+
void fetchNotice(controller.signal);
|
|
5610
|
+
return () => {
|
|
5611
|
+
controller.abort();
|
|
5612
|
+
};
|
|
5613
|
+
}, [org_uuid, workspace_uuid, notice_uuid, language, applicationId, accessToken]);
|
|
5614
|
+
useEffect4(() => {
|
|
5380
5615
|
if (!ledgerBaseUrl || applicationId) {
|
|
5381
5616
|
return;
|
|
5382
5617
|
}
|
|
@@ -5530,7 +5765,7 @@ var RedactoConsentInlineComponent = ({
|
|
|
5530
5765
|
onAccept
|
|
5531
5766
|
]
|
|
5532
5767
|
);
|
|
5533
|
-
|
|
5768
|
+
useEffect4(() => {
|
|
5534
5769
|
if (accessToken && content && areAllRequiredElementsChecked && !isSubmitting && !isCheckingConsent && !hasAlreadyConsented && !hasSubmittedRef.current) {
|
|
5535
5770
|
hasSubmittedRef.current = true;
|
|
5536
5771
|
const autoSubmit = async () => {
|
|
@@ -5552,7 +5787,7 @@ var RedactoConsentInlineComponent = ({
|
|
|
5552
5787
|
hasAlreadyConsented,
|
|
5553
5788
|
handleAcceptWithToken
|
|
5554
5789
|
]);
|
|
5555
|
-
|
|
5790
|
+
useEffect4(() => {
|
|
5556
5791
|
if (!accessToken) {
|
|
5557
5792
|
hasSubmittedRef.current = false;
|
|
5558
5793
|
}
|
|
@@ -5563,11 +5798,20 @@ var RedactoConsentInlineComponent = ({
|
|
|
5563
5798
|
const textStyle = {
|
|
5564
5799
|
color: (settings == null ? void 0 : settings.textColor) || "#344054"
|
|
5565
5800
|
};
|
|
5801
|
+
const fontFamily = useNoticeFont({
|
|
5802
|
+
hostFont: settings == null ? void 0 : settings.font,
|
|
5803
|
+
noticeFont: content == null ? void 0 : content.font_preference
|
|
5804
|
+
});
|
|
5805
|
+
const rootStyle = { ...styles2.root, fontFamily };
|
|
5806
|
+
const loadingRootStyle = {
|
|
5807
|
+
...styles2.loadingContainer,
|
|
5808
|
+
fontFamily
|
|
5809
|
+
};
|
|
5566
5810
|
if (hasAlreadyConsented || fetchError) {
|
|
5567
5811
|
return null;
|
|
5568
5812
|
}
|
|
5569
5813
|
if (isLoading) {
|
|
5570
|
-
return /* @__PURE__ */ jsxs2("div", { style:
|
|
5814
|
+
return /* @__PURE__ */ jsxs2("div", { ...NOTICE_FONT_ROOT_PROPS, style: loadingRootStyle, children: [
|
|
5571
5815
|
/* @__PURE__ */ jsx2("div", { style: styles2.loadingSpinner }),
|
|
5572
5816
|
/* @__PURE__ */ jsx2("p", { style: { ...styles2.privacyText, ...textStyle }, children: "Loading..." })
|
|
5573
5817
|
] });
|
|
@@ -5575,7 +5819,7 @@ var RedactoConsentInlineComponent = ({
|
|
|
5575
5819
|
if (!content) {
|
|
5576
5820
|
return null;
|
|
5577
5821
|
}
|
|
5578
|
-
return /* @__PURE__ */ jsxs2("div", {
|
|
5822
|
+
return /* @__PURE__ */ jsxs2("div", { ...NOTICE_FONT_ROOT_PROPS, style: rootStyle, children: [
|
|
5579
5823
|
errorMessage && /* @__PURE__ */ jsx2(
|
|
5580
5824
|
"div",
|
|
5581
5825
|
{
|
|
@@ -5754,7 +5998,7 @@ RedactoConsentInlineComponent.displayName = "RedactoConsentInline";
|
|
|
5754
5998
|
var RedactoConsentInline = memo(RedactoConsentInlineComponent);
|
|
5755
5999
|
|
|
5756
6000
|
// src/RedactoNoticeAssisted/RedactoNoticeAssisted.tsx
|
|
5757
|
-
import { useState as useState5, useEffect as
|
|
6001
|
+
import { useState as useState5, useEffect as useEffect6, useMemo as useMemo4, useRef as useRef3, useCallback as useCallback3 } from "react";
|
|
5758
6002
|
|
|
5759
6003
|
// src/RedactoNoticeAssisted/styles.ts
|
|
5760
6004
|
var styles3 = {
|
|
@@ -5860,6 +6104,7 @@ var styles3 = {
|
|
|
5860
6104
|
display: "flex",
|
|
5861
6105
|
alignItems: "center",
|
|
5862
6106
|
justifyContent: "center",
|
|
6107
|
+
fontFamily: "inherit",
|
|
5863
6108
|
fontWeight: 400,
|
|
5864
6109
|
fontSize: "12px",
|
|
5865
6110
|
lineHeight: "150%",
|
|
@@ -6237,6 +6482,7 @@ var styles3 = {
|
|
|
6237
6482
|
borderRadius: "8px",
|
|
6238
6483
|
border: "1px solid #d0d5dd",
|
|
6239
6484
|
textAlign: "center",
|
|
6485
|
+
fontFamily: "inherit",
|
|
6240
6486
|
fontSize: "18px",
|
|
6241
6487
|
fontWeight: 500,
|
|
6242
6488
|
color: "#101828",
|
|
@@ -6358,6 +6604,7 @@ var styles3 = {
|
|
|
6358
6604
|
width: "100%",
|
|
6359
6605
|
borderRadius: "8px",
|
|
6360
6606
|
padding: "9px 45px",
|
|
6607
|
+
fontFamily: "inherit",
|
|
6361
6608
|
fontWeight: 400,
|
|
6362
6609
|
fontSize: "16px",
|
|
6363
6610
|
lineHeight: "150%",
|
|
@@ -6657,11 +6904,11 @@ var injectAssistedStyles = () => {
|
|
|
6657
6904
|
};
|
|
6658
6905
|
|
|
6659
6906
|
// src/RedactoNoticeAssisted/useMediaQuery.ts
|
|
6660
|
-
import { useState as useState4, useEffect as
|
|
6907
|
+
import { useState as useState4, useEffect as useEffect5 } from "react";
|
|
6661
6908
|
var useMediaQuery3 = (query) => {
|
|
6662
6909
|
const getMatches = () => typeof window !== "undefined" ? window.matchMedia(query).matches : false;
|
|
6663
6910
|
const [matches, setMatches] = useState4(getMatches);
|
|
6664
|
-
|
|
6911
|
+
useEffect5(() => {
|
|
6665
6912
|
if (typeof window === "undefined") return;
|
|
6666
6913
|
const media = window.matchMedia(query);
|
|
6667
6914
|
const listener = (e) => {
|
|
@@ -8316,10 +8563,10 @@ var RedactoNoticeAssisted = ({
|
|
|
8316
8563
|
const [isVerifying, setIsVerifying] = useState5(false);
|
|
8317
8564
|
const [createError, setCreateError] = useState5(null);
|
|
8318
8565
|
const [otpError, setOtpError] = useState5(null);
|
|
8319
|
-
|
|
8566
|
+
useEffect6(() => {
|
|
8320
8567
|
injectAssistedStyles();
|
|
8321
8568
|
}, []);
|
|
8322
|
-
|
|
8569
|
+
useEffect6(() => {
|
|
8323
8570
|
const controller = new AbortController();
|
|
8324
8571
|
setIsLoading(true);
|
|
8325
8572
|
setFetchError(null);
|
|
@@ -8357,14 +8604,14 @@ var RedactoNoticeAssisted = ({
|
|
|
8357
8604
|
});
|
|
8358
8605
|
return () => controller.abort();
|
|
8359
8606
|
}, [organisationUuid, workspaceUuid, noticeUuid, baseUrl]);
|
|
8360
|
-
|
|
8607
|
+
useEffect6(() => {
|
|
8361
8608
|
if (resendCountdown <= 0) return;
|
|
8362
8609
|
const intervalId = window.setInterval(() => {
|
|
8363
8610
|
setResendCountdown((prev) => prev <= 1 ? 0 : prev - 1);
|
|
8364
8611
|
}, 1e3);
|
|
8365
8612
|
return () => window.clearInterval(intervalId);
|
|
8366
8613
|
}, [resendCountdown]);
|
|
8367
|
-
|
|
8614
|
+
useEffect6(() => {
|
|
8368
8615
|
if (step !== "verify") return;
|
|
8369
8616
|
const id = window.setTimeout(
|
|
8370
8617
|
() => scrollIntoViewSoft(verifyBlockRef.current),
|
|
@@ -8372,7 +8619,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8372
8619
|
);
|
|
8373
8620
|
return () => window.clearTimeout(id);
|
|
8374
8621
|
}, [step]);
|
|
8375
|
-
|
|
8622
|
+
useEffect6(() => {
|
|
8376
8623
|
if (!otpSent) return;
|
|
8377
8624
|
const id = window.setTimeout(
|
|
8378
8625
|
() => scrollIntoViewSoft(otpSectionRef.current),
|
|
@@ -8380,7 +8627,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8380
8627
|
);
|
|
8381
8628
|
return () => window.clearTimeout(id);
|
|
8382
8629
|
}, [otpSent]);
|
|
8383
|
-
|
|
8630
|
+
useEffect6(() => {
|
|
8384
8631
|
if (!isLanguageDropdownOpen) return;
|
|
8385
8632
|
const handleClickOutside = (e) => {
|
|
8386
8633
|
if (languageContainerRef.current && !languageContainerRef.current.contains(e.target)) {
|
|
@@ -8395,7 +8642,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8395
8642
|
const isMobileValid = mobile.replace(/\D/g, "").length >= 10;
|
|
8396
8643
|
const isEmailValid = EMAIL_REGEX.test(email.trim());
|
|
8397
8644
|
const isContactValid = verifyMethod === "email" ? isEmailValid : isMobileValid;
|
|
8398
|
-
const areAllRequiredElementsChecked =
|
|
8645
|
+
const areAllRequiredElementsChecked = useMemo4(() => {
|
|
8399
8646
|
if (!content) return false;
|
|
8400
8647
|
return content.purposes.every((purpose) => {
|
|
8401
8648
|
const requiredElements = purpose.data_elements.filter(
|
|
@@ -8406,7 +8653,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8406
8653
|
);
|
|
8407
8654
|
});
|
|
8408
8655
|
}, [content, selectedDataElements]);
|
|
8409
|
-
const normalizedDefaultLang =
|
|
8656
|
+
const normalizedDefaultLang = useMemo4(() => {
|
|
8410
8657
|
const dl = content == null ? void 0 : content.default_language;
|
|
8411
8658
|
if (!dl) return "English";
|
|
8412
8659
|
return dl === "en" || dl === "EN" ? "English" : dl;
|
|
@@ -8415,7 +8662,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8415
8662
|
(lang) => lang === "English" || lang === "en" || lang === "EN",
|
|
8416
8663
|
[]
|
|
8417
8664
|
);
|
|
8418
|
-
const ts =
|
|
8665
|
+
const ts = useMemo4(
|
|
8419
8666
|
() => makeStaticT(toBcp47Code(selectedLanguage)),
|
|
8420
8667
|
[selectedLanguage]
|
|
8421
8668
|
);
|
|
@@ -8461,7 +8708,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8461
8708
|
},
|
|
8462
8709
|
[content, selectedLanguage, isDefaultLanguage]
|
|
8463
8710
|
);
|
|
8464
|
-
const availableLanguages =
|
|
8711
|
+
const availableLanguages = useMemo4(() => {
|
|
8465
8712
|
if (!content) return [selectedLanguage];
|
|
8466
8713
|
const pinned = ["English"];
|
|
8467
8714
|
if (normalizedDefaultLang && normalizedDefaultLang !== "English") {
|
|
@@ -8478,10 +8725,10 @@ var RedactoNoticeAssisted = ({
|
|
|
8478
8725
|
"--ra-accent": primaryColor,
|
|
8479
8726
|
"--ra-accent-soft": accentSoft
|
|
8480
8727
|
};
|
|
8481
|
-
const fontFamily = (content == null ? void 0 : content.font_preference)
|
|
8728
|
+
const fontFamily = useNoticeFont({ noticeFont: content == null ? void 0 : content.font_preference });
|
|
8482
8729
|
const logoUrl = (content == null ? void 0 : content.logo_url) || redacto_logo_default2;
|
|
8483
8730
|
const linkStyle = { ...styles3.link, color: secondaryColor };
|
|
8484
|
-
const responsive =
|
|
8731
|
+
const responsive = useMemo4(
|
|
8485
8732
|
() => ({
|
|
8486
8733
|
modal: { width: isMobile ? "90%" : "700px" },
|
|
8487
8734
|
title: { fontSize: isMobile ? "16px" : "18px" },
|
|
@@ -8572,7 +8819,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8572
8819
|
setSelectedLanguage(lang);
|
|
8573
8820
|
setIsLanguageDropdownOpen(false);
|
|
8574
8821
|
}, []);
|
|
8575
|
-
const audioSequence =
|
|
8822
|
+
const audioSequence = useMemo4(() => {
|
|
8576
8823
|
if (!ttsAudioUrls || !content) return [];
|
|
8577
8824
|
const sequence = [];
|
|
8578
8825
|
if (ttsAudioUrls.notice_banner_heading_audio_url) {
|
|
@@ -8633,7 +8880,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8633
8880
|
}
|
|
8634
8881
|
return sequence;
|
|
8635
8882
|
}, [ttsAudioUrls, content]);
|
|
8636
|
-
const elementIdSequence =
|
|
8883
|
+
const elementIdSequence = useMemo4(() => {
|
|
8637
8884
|
if (!ttsAudioUrls || !content) return [];
|
|
8638
8885
|
const elementIds = [];
|
|
8639
8886
|
if (ttsAudioUrls.notice_banner_heading_audio_url) {
|
|
@@ -8762,7 +9009,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8762
9009
|
playAudio();
|
|
8763
9010
|
}
|
|
8764
9011
|
}, [isPlaying, playAudio, pauseAudio]);
|
|
8765
|
-
|
|
9012
|
+
useEffect6(() => {
|
|
8766
9013
|
setIsTTSAvailable(false);
|
|
8767
9014
|
setTtsAudioUrls(null);
|
|
8768
9015
|
stopAudio();
|
|
@@ -8793,7 +9040,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8793
9040
|
baseUrl,
|
|
8794
9041
|
stopAudio
|
|
8795
9042
|
]);
|
|
8796
|
-
|
|
9043
|
+
useEffect6(() => {
|
|
8797
9044
|
var _a;
|
|
8798
9045
|
if (!isPlaying || !content || audioSequence.length === 0) return;
|
|
8799
9046
|
const currentIndex = currentAudioIndex;
|
|
@@ -8812,7 +9059,7 @@ var RedactoNoticeAssisted = ({
|
|
|
8812
9059
|
audioOffset += totalPurposeAudioCount;
|
|
8813
9060
|
}
|
|
8814
9061
|
}, [isPlaying, currentAudioIndex, audioSequence, content, collapsedPurposes]);
|
|
8815
|
-
|
|
9062
|
+
useEffect6(() => {
|
|
8816
9063
|
const removeAllHighlights = () => {
|
|
8817
9064
|
document.querySelectorAll(".redacto-tts-highlight").forEach((el) => {
|
|
8818
9065
|
el.classList.remove("redacto-tts-highlight");
|
|
@@ -9701,6 +9948,7 @@ var RedactoNoticeAssisted = ({
|
|
|
9701
9948
|
return /* @__PURE__ */ jsx3("div", { style: styles3.overlay, children: /* @__PURE__ */ jsx3(
|
|
9702
9949
|
"div",
|
|
9703
9950
|
{
|
|
9951
|
+
...NOTICE_FONT_ROOT_PROPS,
|
|
9704
9952
|
style: {
|
|
9705
9953
|
...styles3.modal,
|
|
9706
9954
|
...responsive.modal,
|
|
@@ -9835,7 +10083,7 @@ var MailIcon = ({
|
|
|
9835
10083
|
);
|
|
9836
10084
|
|
|
9837
10085
|
// src/RedactoNoticeConsent/components/DigiLockerCallback.tsx
|
|
9838
|
-
import { useCallback as useCallback4, useEffect as
|
|
10086
|
+
import { useCallback as useCallback4, useEffect as useEffect7, useRef as useRef4, useState as useState6 } from "react";
|
|
9839
10087
|
import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
9840
10088
|
var DigiLockerCallback = ({
|
|
9841
10089
|
accessToken: propAccessToken,
|
|
@@ -10093,7 +10341,7 @@ var DigiLockerCallback = ({
|
|
|
10093
10341
|
}
|
|
10094
10342
|
}
|
|
10095
10343
|
}, [propAccessToken, baseUrl, onSuccess, onError, redirectToOriginalPage]);
|
|
10096
|
-
|
|
10344
|
+
useEffect7(() => {
|
|
10097
10345
|
injectCheckboxStyles();
|
|
10098
10346
|
handleCallback();
|
|
10099
10347
|
return () => {
|
|
@@ -10311,5 +10559,6 @@ export {
|
|
|
10311
10559
|
DigiLockerCallback,
|
|
10312
10560
|
RedactoNoticeAssisted,
|
|
10313
10561
|
RedactoNoticeConsent,
|
|
10314
|
-
RedactoConsentInline as RedactoNoticeConsentInline
|
|
10562
|
+
RedactoConsentInline as RedactoNoticeConsentInline,
|
|
10563
|
+
configureNoticeFonts
|
|
10315
10564
|
};
|