@redacto.io/consent-sdk-react-native 5.0.0-beta.6 → 5.0.0-beta.8

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.
@@ -1,13 +1,14 @@
1
1
  import {
2
+ SANDBOX_TOKEN_HEADER,
2
3
  __require,
3
4
  languageOptions
4
- } from "./chunk-UVRSRLYW.mjs";
5
+ } from "./chunk-B2TXWC2C.mjs";
5
6
 
6
7
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
7
- import { useEffect as useEffect20 } from "react";
8
+ import { useEffect as useEffect21 } from "react";
8
9
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
9
10
  import { I18nextProvider } from "react-i18next";
10
- import { View as View50, StyleSheet as StyleSheet53, StatusBar as StatusBar2, Platform as Platform8 } from "react-native";
11
+ import { View as View52, StyleSheet as StyleSheet55, StatusBar as StatusBar2, Platform as Platform8 } from "react-native";
11
12
 
12
13
  // src/RedactoPrivacyCenter/lib/i18n.ts
13
14
  import i18n from "i18next";
@@ -424,7 +425,14 @@ var translation_default = {
424
425
  submittingAs: "Submitting as {{email}}",
425
426
  tapToChooseFile: "Tap to choose a file",
426
427
  view: "View",
427
- whatDoYouNeed: "What do you need?"
428
+ whatDoYouNeed: "What do you need?",
429
+ sessionExpiredTitle: "Your session has expired",
430
+ sessionExpiredDescription: "Please sign in again to continue.",
431
+ chooseYourProfile: "Choose your profile",
432
+ loginIdentifierLinkedToMultipleProfiles: "The login identifier is linked to more than one profile. Choose the one you want to view.",
433
+ userIdLabel: "User ID: {{id}}",
434
+ signingInEllipsis: "Signing in\u2026",
435
+ switchProfile: "Switch profile"
428
436
  };
429
437
 
430
438
  // src/RedactoPrivacyCenter/locales/as/translation.json
@@ -838,7 +846,14 @@ var translation_default2 = {
838
846
  submittingAs: "{{email}} \u09B9\u09BF\u099A\u09BE\u09AA\u09C7 \u09A6\u09BE\u0996\u09BF\u09B2 \u0995\u09F0\u09BF \u0986\u099B\u09C7",
839
847
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09BF\u09AC\u09B2\u09C8 \u099F\u09BF\u09AA\u0995",
840
848
  view: "\u099A\u09BE\u0993\u0995",
841
- whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?"
849
+ whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?",
850
+ sessionExpiredTitle: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u099B\u09C7\u099A\u09A8 \u09B6\u09C7\u09B7 \u09B9\u09C8\u099B\u09C7",
851
+ sessionExpiredDescription: "\u0985\u09AC\u09CD\u09AF\u09BE\u09B9\u09A4 \u09F0\u09BE\u0996\u09BF\u09AC\u09B2\u09C8 \u0985\u09A8\u09C1\u0997\u09CD\u09F0\u09B9 \u0995\u09F0\u09BF \u09AA\u09C1\u09A8\u09F0 \u099B\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09F0\u0995\u0964",
852
+ chooseYourProfile: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09A8\u09BF \u0995\u09F0\u0995",
853
+ loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u098F\u0995\u09BE\u09A7\u09BF\u0995 \u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2\u09F0 \u09B8\u09C8\u09A4\u09C7 \u09B8\u0982\u09AF\u09C1\u0995\u09CD\u09A4\u0964 \u0986\u09AA\u09C1\u09A8\u09BF \u099A\u09BE\u09AC \u09AC\u09BF\u099A\u09F0\u09BE\u099F\u09CB \u09AC\u09BE\u099B\u09A8\u09BF \u0995\u09F0\u0995\u0964",
854
+ userIdLabel: "\u09AC\u09CD\u09AF\u09F1\u09B9\u09BE\u09F0\u0995\u09BE\u09F0\u09C0 \u0986\u0987\u09A1\u09BF: {{id}}",
855
+ signingInEllipsis: "\u099B\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u09C8 \u0986\u099B\u09C7\u2026",
856
+ switchProfile: "\u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09B8\u09B2\u09A8\u09BF \u0995\u09F0\u0995"
842
857
  };
843
858
 
844
859
  // src/RedactoPrivacyCenter/locales/bn/translation.json
@@ -1252,7 +1267,14 @@ var translation_default3 = {
1252
1267
  submittingAs: "{{email}} \u09B9\u09BF\u09B8\u09BE\u09AC\u09C7 \u099C\u09AE\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7",
1253
1268
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A4\u09C7 \u099F\u09CD\u09AF\u09BE\u09AA \u0995\u09B0\u09C1\u09A8",
1254
1269
  view: "\u09A6\u09C7\u0996\u09C1\u09A8",
1255
- whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?"
1270
+ whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?",
1271
+ sessionExpiredTitle: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09B8\u09C7\u09B6\u09A8 \u09AE\u09C7\u09AF\u09BC\u09BE\u09A6 \u09B6\u09C7\u09B7 \u09B9\u09AF\u09BC\u09C7 \u0997\u09C7\u099B\u09C7",
1272
+ sessionExpiredDescription: "\u099A\u09BE\u09B2\u09BF\u09AF\u09BC\u09C7 \u09AF\u09C7\u09A4\u09C7 \u0985\u09A8\u09C1\u0997\u09CD\u09B0\u09B9 \u0995\u09B0\u09C7 \u0986\u09AC\u09BE\u09B0 \u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u0995\u09B0\u09C1\u09A8\u0964",
1273
+ chooseYourProfile: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8",
1274
+ loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u098F\u0995\u09BE\u09A7\u09BF\u0995 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2\u09C7\u09B0 \u09B8\u09BE\u09A5\u09C7 \u09AF\u09C1\u0995\u09CD\u09A4\u0964 \u0986\u09AA\u09A8\u09BF \u09AF\u09C7\u099F\u09BF \u09A6\u09C7\u0996\u09A4\u09C7 \u099A\u09BE\u09A8 \u09B8\u09C7\u099F\u09BF \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8\u0964",
1275
+ userIdLabel: "\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0986\u0987\u09A1\u09BF: {{id}}",
1276
+ signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u099A\u09CD\u099B\u09C7\u2026",
1277
+ switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8"
1256
1278
  };
1257
1279
 
1258
1280
  // src/RedactoPrivacyCenter/locales/brx/translation.json
@@ -1666,7 +1688,14 @@ var translation_default4 = {
1666
1688
  submittingAs: "{{email}} \u092E\u0939\u0930\u0948 \u0917\u0925\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B",
1667
1689
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916\u0928\u094B \u091F\u0947\u092C \u0916\u093E\u0932\u093E\u092E",
1668
1690
  view: "\u0928\u093E\u092F",
1669
- whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?"
1691
+ whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?",
1692
+ sessionExpiredTitle: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u0938\u0947\u0938\u0928 \u091C\u094B\u092C\u092C\u093E\u092F",
1693
+ sessionExpiredDescription: "\u0938\u093E\u0932\u093E\u092F\u0928\u094B \u0925\u093E\u0916\u093E\u092F \u0905\u0928\u0928\u093E\u0928\u0948 \u092B\u093F\u0928 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0916\u093E\u0932\u093E\u092E\u0964",
1694
+ chooseYourProfile: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u092A\u094D\u0930\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916",
1695
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u092E\u094B\u0928\u0938\u0947\u0928\u093F\u0916\u094D\u0930\u0941\u0907 \u092C\u093E\u0902\u0938\u093F\u0928 \u092A\u094D\u0930\u092B\u093E\u0907\u0932\u091C\u094B\u0902 \u0928\u093E\u0902\u091C\u093E\u092C \u0926\u0902\u0964 \u0928\u094B\u0902\u0925\u093E\u0919\u093E \u0928\u093E\u092F\u0928\u094B \u0932\u0941\u092C\u0948\u092F\u094B\u092C\u094D\u0932\u093E \u092C\u0947\u0916\u094C \u0938\u093E\u092F\u0916\u0964",
1696
+ userIdLabel: "\u092F\u0942\u091C\u0930 \u0906\u0908\u0921\u0940: {{id}}",
1697
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B \u0926\u0902\u2026",
1698
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0938\u094B\u0932\u093E\u092F"
1670
1699
  };
1671
1700
 
1672
1701
  // src/RedactoPrivacyCenter/locales/doi/translation.json
@@ -2080,7 +2109,14 @@ var translation_default5 = {
2080
2109
  submittingAs: "{{email}} \u0926\u0947 \u0930\u0942\u092A \u091A \u091C\u092E\u093E\u0902 \u0915\u0930\u0926\u0947",
2081
2110
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u091F\u0948\u092A \u0915\u0930\u094B",
2082
2111
  view: "\u0926\u093F\u0915\u094D\u0916\u094B",
2083
- whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?"
2112
+ whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?",
2113
+ sessionExpiredTitle: "\u0924\u0941\u0902\u0926\u093E \u0938\u0924\u094D\u0930 \u0916\u0924\u092E \u0939\u094B\u0908 \u0917\u0947\u0906 \u0910",
2114
+ sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u0915\u094D\u0916\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u0915\u0943\u092A\u093E \u0915\u0930\u093F\u092F\u0948 \u092B\u093F\u0930\u0940 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u094B\u0964",
2115
+ chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u094B",
2116
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u0907\u0915 \u0915\u094B\u0932\u093E \u092E\u0924\u093E \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0947\u0902 \u0915\u0928\u094D\u0928\u0948 \u091C\u0941\u0921\u093C\u094D\u092F\u093E \u0926\u093E \u0910\u0964 \u091C\u0947\u0939\u094D\u0921\u093C\u0940 \u0924\u0941\u0938\u0947\u0902 \u0926\u093F\u0915\u094D\u0916\u0928\u0940 \u0910 \u0913\u0939\u094D \u091A\u0941\u0928\u094B\u0964",
2117
+ userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
2118
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B\u0906 \u0915\u0930\u0926\u093E \u0910\u2026",
2119
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094B"
2084
2120
  };
2085
2121
 
2086
2122
  // src/RedactoPrivacyCenter/locales/gom/translation.json
@@ -2494,7 +2530,14 @@ var translation_default6 = {
2494
2530
  submittingAs: "{{email}} \u092E\u094D\u0939\u0942\u0923 \u0938\u093E\u0926\u0930 \u0915\u0930\u0924\u093E",
2495
2531
  tapToChooseFile: "\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u092A\u093E\u0915 \u091F\u0945\u092A \u0915\u0930\u093E\u0924",
2496
2532
  view: "\u092A\u0933\u092F\u093E\u0924",
2497
- whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?"
2533
+ whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?",
2534
+ sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947\u0902 \u0938\u0924\u094D\u0930 \u0938\u094B\u0902\u092A\u0932\u093E\u0902",
2535
+ sessionExpiredDescription: "\u092B\u0941\u0921\u0947\u0902 \u0935\u091A\u092A\u093E\u0915 \u0909\u092A\u0915\u093E\u0930 \u0915\u0930\u0942\u0928 \u092A\u0930\u0924\u0942\u0928 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u093E\u0924.",
2536
+ chooseYourProfile: "\u0924\u0941\u092E\u091A\u0947\u0902 \u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u093E\u0924",
2537
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u092A\u0930\u0938 \u091A\u0921 \u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932\u093E\u0902\u0915 \u091C\u094B\u0921\u0932\u093E. \u0924\u0941\u092E\u0915\u093E\u0902 \u091C\u0947\u0902 \u092A\u0933\u094B\u0935\u092A\u093E\u0915 \u091C\u093E\u092F \u0924\u0947\u0902 \u0928\u093F\u0935\u0921\u093E\u0924.",
2538
+ userIdLabel: "\u0935\u093E\u092A\u0930\u092A\u0940 \u0906\u092F\u0921\u0940: {{id}}",
2539
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u0935\u0928 \u0906\u0938\u093E\u2026",
2540
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u092C\u0926\u0932\u093E"
2498
2541
  };
2499
2542
 
2500
2543
  // src/RedactoPrivacyCenter/locales/gu/translation.json
@@ -2908,7 +2951,14 @@ var translation_default7 = {
2908
2951
  submittingAs: "{{email}} \u0AA4\u0AB0\u0AC0\u0A95\u0AC7 \u0AB8\u0AAC\u0AAE\u0ABF\u0A9F \u0A95\u0AB0\u0AC0 \u0AB0\u0AB9\u0ACD\u0AAF\u0ABE \u0A9B\u0ACB",
2909
2952
  tapToChooseFile: "\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0AB5\u0ABE \u0A9F\u0AC5\u0AAA \u0A95\u0AB0\u0ACB",
2910
2953
  view: "\u0A9C\u0AC1\u0A93",
2911
- whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?"
2954
+ whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?",
2955
+ sessionExpiredTitle: "\u0AA4\u0AAE\u0ABE\u0AB0\u0AC1\u0A82 \u0AB8\u0AA4\u0ACD\u0AB0 \u0AB8\u0AAE\u0ABE\u0AAA\u0ACD\u0AA4 \u0AA5\u0A88 \u0A97\u0AAF\u0AC1\u0A82 \u0A9B\u0AC7",
2956
+ sessionExpiredDescription: "\u0A9A\u0ABE\u0AB2\u0AC1 \u0AB0\u0ABE\u0A96\u0AB5\u0ABE \u0AAE\u0ABE\u0A9F\u0AC7 \u0A95\u0AC3\u0AAA\u0ABE \u0A95\u0AB0\u0AC0\u0AA8\u0AC7 \u0AAB\u0AB0\u0AC0\u0AA5\u0AC0 \u0AB8\u0ABE\u0A87\u0AA8 \u0A87\u0AA8 \u0A95\u0AB0\u0ACB.",
2957
+ chooseYourProfile: "\u0AA4\u0AAE\u0ABE\u0AB0\u0AC0 \u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0ACB",
2958
+ loginIdentifierLinkedToMultipleProfiles: "\u0AB2\u0ACB\u0A97\u0ABF\u0AA8 \u0A86\u0A88\u0AA1\u0AC0 \u0A8F\u0A95 \u0A95\u0AB0\u0AA4\u0ABE\u0A82 \u0AB5\u0AA7\u0AC1 \u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AB8\u0ABE\u0AA5\u0AC7 \u0A9C\u0ACB\u0AA1\u0ABE\u0AAF\u0AC7\u0AB2 \u0A9B\u0AC7. \u0AA4\u0AAE\u0AC7 \u0A9C\u0AC7 \u0A9C\u0ACB\u0AB5\u0ABE \u0AAE\u0ABE\u0A82\u0A97\u0ACB \u0A9B\u0ACB \u0AA4\u0AC7 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0ACB.",
2959
+ userIdLabel: "\u0AB5\u0AAA\u0AB0\u0ABE\u0AB6\u0A95\u0AB0\u0ACD\u0AA4\u0ABE \u0A86\u0A88\u0AA1\u0AC0: {{id}}",
2960
+ signingInEllipsis: "\u0AB8\u0ABE\u0A87\u0AA8 \u0A87\u0AA8 \u0AA5\u0A88 \u0AB0\u0AB9\u0ACD\u0AAF\u0AC1\u0A82 \u0A9B\u0AC7\u2026",
2961
+ switchProfile: "\u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAC\u0AA6\u0AB2\u0ACB"
2912
2962
  };
2913
2963
 
2914
2964
  // src/RedactoPrivacyCenter/locales/hi/translation.json
@@ -3322,7 +3372,14 @@ var translation_default8 = {
3322
3372
  submittingAs: "{{email}} \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u092C\u092E\u093F\u091F \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902",
3323
3373
  tapToChooseFile: "\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091F\u0948\u092A \u0915\u0930\u0947\u0902",
3324
3374
  view: "\u0926\u0947\u0916\u0947\u0902",
3325
- whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?"
3375
+ whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?",
3376
+ sessionExpiredTitle: "\u0906\u092A\u0915\u093E \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u0917\u092F\u093E \u0939\u0948",
3377
+ sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0943\u092A\u092F\u093E \u092B\u093F\u0930 \u0938\u0947 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0947\u0902\u0964",
3378
+ chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0947\u0902",
3379
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0908\u0921\u0940 \u090F\u0915 \u0938\u0947 \u0905\u0927\u093F\u0915 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u0938\u0947 \u091C\u0941\u0921\u093C\u093E \u0939\u0948\u0964 \u091C\u093F\u0938\u0947 \u0906\u092A \u0926\u0947\u0916\u0928\u093E \u091A\u093E\u0939\u0924\u0947 \u0939\u0948\u0902 \u0909\u0938\u0947 \u091A\u0941\u0928\u0947\u0902\u0964",
3380
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
3381
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026",
3382
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u092C\u0926\u0932\u0947\u0902"
3326
3383
  };
3327
3384
 
3328
3385
  // src/RedactoPrivacyCenter/locales/kn/translation.json
@@ -3736,7 +3793,14 @@ var translation_default9 = {
3736
3793
  submittingAs: "{{email}} \u0C86\u0C97\u0CBF \u0CB8\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6",
3737
3794
  tapToChooseFile: "\u0CAB\u0CC8\u0CB2\u0CCD \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CB2\u0CC1 \u0C9F\u0CCD\u0CAF\u0CBE\u0CAA\u0CCD \u0CAE\u0CBE\u0CA1\u0CBF",
3738
3795
  view: "\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CBF",
3739
- whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?"
3796
+ whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?",
3797
+ sessionExpiredTitle: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CB8\u0CC6\u0CB7\u0CA8\u0CCD \u0C85\u0CB5\u0CA7\u0CBF \u0CAE\u0CC1\u0C97\u0CBF\u0CA6\u0CBF\u0CA6\u0CC6",
3798
+ sessionExpiredDescription: "\u0CAE\u0CC1\u0C82\u0CA6\u0CC1\u0CB5\u0CB0\u0CBF\u0CB8\u0CB2\u0CC1 \u0CA6\u0CAF\u0CB5\u0CBF\u0C9F\u0CCD\u0C9F\u0CC1 \u0CAE\u0CA4\u0CCD\u0CA4\u0CC6 \u0CB8\u0CC8\u0CA8\u0CCD \u0C87\u0CA8\u0CCD \u0CAE\u0CBE\u0CA1\u0CBF.",
3799
+ chooseYourProfile: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CBF",
3800
+ loginIdentifierLinkedToMultipleProfiles: "\u0CB2\u0CBE\u0C97\u0CBF\u0CA8\u0CCD \u0C90\u0CA1\u0CBF \u0C92\u0C82\u0CA6\u0C95\u0CCD\u0C95\u0CBF\u0C82\u0CA4 \u0CB9\u0CC6\u0C9A\u0CCD\u0C9A\u0CC1 \u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD\u200C\u0C97\u0CB3\u0CBF\u0C97\u0CC6 \u0CB2\u0CBF\u0C82\u0C95\u0CCD \u0C86\u0C97\u0CBF\u0CA6\u0CC6. \u0CA8\u0CC0\u0CB5\u0CC1 \u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CB2\u0CC1 \u0CAC\u0CAF\u0CB8\u0CC1\u0CB5\u0CC1\u0CA6\u0CA8\u0CCD\u0CA8\u0CC1 \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CBF.",
3801
+ userIdLabel: "\u0CAC\u0CB3\u0C95\u0CC6\u0CA6\u0CBE\u0CB0 \u0C90\u0CA1\u0CBF: {{id}}",
3802
+ signingInEllipsis: "\u0CB8\u0CC8\u0CA8\u0CCD \u0C87\u0CA8\u0CCD \u0C86\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6\u2026",
3803
+ switchProfile: "\u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0CAC\u0CA6\u0CB2\u0CBE\u0CAF\u0CBF\u0CB8\u0CBF"
3740
3804
  };
3741
3805
 
3742
3806
  // src/RedactoPrivacyCenter/locales/ks/translation.json
@@ -4150,7 +4214,14 @@ var translation_default10 = {
4150
4214
  submittingAs: "{{email}} \u067E\u0620\u0658\u0679\u06BE \u062C\u0645\u0639 \u06A9\u0631\u0627\u0646",
4151
4215
  tapToChooseFile: "\u0641\u0627\u06CC\u0644 \u0698\u0627\u0631\u0646\u06C1 \u062E\u0672\u0637\u0631\u0655 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u0648",
4152
4216
  view: "\u0648\u064F\u0686\u06BE\u0650\u0648",
4153
- whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F"
4217
+ whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F",
4218
+ sessionExpiredTitle: "\u062A\u064F\u06C1\u0646\u065B\u062F \u0633\u06CC\u0634\u064E\u0646 \u062E\u062A\u0645 \u06AF\u06C4\u0645\u064F\u062A",
4219
+ sessionExpiredDescription: "\u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06C1\u0655 \u062E\u0672\u0637\u0631\u0655 \u0645\u06C1\u0631\u0628\u0627\u0646\u06CC \u06A9\u0631\u0650\u062A\u06BE \u062F\u0648\u0628\u0627\u0631\u0655 \u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06A9\u0631\u06CC\u0648\u06D4",
4220
+ chooseYourProfile: "\u067E\u0646\u0646\u06C1\u0655 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0698\u0627\u0631\u0655\u0648",
4221
+ loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0650\u0646 \u0622\u0626\u06CC \u0688\u06CC \u0686\u06BE\u064F \u0627\u06A9\u06C1 \u06A9\u06BE\u06C4\u062A\u06C1 \u0632\u06CC\u0627\u062F\u0655 \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0646 \u0633\u065F\u062A\u0620 \u062C\u0648\u0691\u0646\u06C1 \u0622\u0645\u064F\u062A\u06D4 \u06CC\u064F\u0633 \u062A\u0648\u06C1\u06C1\u0650 \u0648\u064F\u0686\u06BE\u064F\u0646 \u0686\u06BE\u0650\u0648 \u06CC\u0698\u06BE\u0627\u0646 \u0633\u064F \u0698\u0627\u0631\u0655\u0648\u06D4",
4222
+ userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
4223
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06AF\u0698\u06BE\u0627\u0646 \u0686\u06BE\u064F\u2026",
4224
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u062F\u0644\u0627\u0648"
4154
4225
  };
4155
4226
 
4156
4227
  // src/RedactoPrivacyCenter/locales/mai/translation.json
@@ -4564,7 +4635,14 @@ var translation_default11 = {
4564
4635
  submittingAs: "{{email}} \u0930\u0942\u092A\u092E\u0947 \u091C\u092E\u093E \u0915\u093D \u0930\u0939\u0932 \u091B\u0940",
4565
4636
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u092C\u093E\u0915 \u0932\u0947\u0932 \u091F\u0948\u092A \u0915\u0930\u0942",
4566
4637
  view: "\u0926\u0947\u0916\u0942",
4567
- whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?"
4638
+ whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?",
4639
+ sessionExpiredTitle: "\u0905\u0939\u093E\u0901\u0915 \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u093D \u0917\u0947\u0932 \u0905\u091B\u093F",
4640
+ sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u093E\u0916\u092C\u093E\u0915 \u0932\u0947\u0932 \u0915\u0943\u092A\u092F\u093E \u092B\u0947\u0930 \u0938\u0901 \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0942\u0964",
4641
+ chooseYourProfile: "\u0905\u092A\u0928 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0942",
4642
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u0907\u0921\u0940 \u090F\u0915\u093E\u0927\u093F\u0915 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0938\u0901 \u091C\u0941\u0921\u093C\u0932 \u0905\u091B\u093F\u0964 \u091C\u0947 \u0905\u0939\u093E\u0901 \u0926\u0947\u0916\u092F \u091A\u093E\u0939\u0948\u0924 \u091B\u0940 \u0913\u0915\u0930\u093E \u091A\u0941\u0928\u0942\u0964",
4643
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0907\u0921\u0940: {{id}}",
4644
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u092D' \u0930\u0939\u0932 \u0905\u091B\u093F\u2026",
4645
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u0942"
4568
4646
  };
4569
4647
 
4570
4648
  // src/RedactoPrivacyCenter/locales/ml/translation.json
@@ -4978,7 +5056,14 @@ var translation_default12 = {
4978
5056
  submittingAs: "{{email}} \u0D06\u0D2F\u0D3F \u0D38\u0D2E\u0D7C\u0D2A\u0D4D\u0D2A\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41",
4979
5057
  tapToChooseFile: "\u0D2B\u0D2F\u0D7D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D3E\u0D7B \u0D1F\u0D3E\u0D2A\u0D4D\u0D2A\u0D4D \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D15",
4980
5058
  view: "\u0D15\u0D3E\u0D23\u0D41\u0D15",
4981
- whatDoYouNeed: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E\u0D15\u0D4D\u0D15\u0D4D \u0D0E\u0D28\u0D4D\u0D24\u0D3E\u0D23\u0D4D \u0D35\u0D47\u0D23\u0D4D\u0D1F\u0D24\u0D4D?"
5059
+ whatDoYouNeed: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E\u0D15\u0D4D\u0D15\u0D4D \u0D0E\u0D28\u0D4D\u0D24\u0D3E\u0D23\u0D4D \u0D35\u0D47\u0D23\u0D4D\u0D1F\u0D24\u0D4D?",
5060
+ sessionExpiredTitle: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D41\u0D1F\u0D46 \u0D38\u0D46\u0D37\u0D7B \u0D15\u0D3E\u0D32\u0D39\u0D30\u0D23\u0D2A\u0D4D\u0D2A\u0D46\u0D1F\u0D4D\u0D1F\u0D41",
5061
+ sessionExpiredDescription: "\u0D24\u0D41\u0D1F\u0D30\u0D3E\u0D7B \u0D26\u0D2F\u0D35\u0D3E\u0D2F\u0D3F \u0D35\u0D40\u0D23\u0D4D\u0D1F\u0D41\u0D02 \u0D38\u0D48\u0D7B \u0D07\u0D7B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D15.",
5062
+ chooseYourProfile: "\u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D33\u0D41\u0D1F\u0D46 \u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D7D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D41\u0D15",
5063
+ loginIdentifierLinkedToMultipleProfiles: "\u0D32\u0D4B\u0D17\u0D3F\u0D7B \u0D10\u0D21\u0D3F \u0D12\u0D28\u0D4D\u0D28\u0D3F\u0D32\u0D27\u0D3F\u0D15\u0D02 \u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D32\u0D41\u0D15\u0D33\u0D41\u0D2E\u0D3E\u0D2F\u0D3F \u0D2C\u0D28\u0D4D\u0D27\u0D3F\u0D2A\u0D4D\u0D2A\u0D3F\u0D1A\u0D4D\u0D1A\u0D3F\u0D30\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41. \u0D28\u0D3F\u0D19\u0D4D\u0D19\u0D7E \u0D15\u0D3E\u0D23\u0D3E\u0D7B \u0D06\u0D17\u0D4D\u0D30\u0D39\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D24\u0D4D \u0D24\u0D3F\u0D30\u0D1E\u0D4D\u0D1E\u0D46\u0D1F\u0D41\u0D15\u0D4D\u0D15\u0D41\u0D15.",
5064
+ userIdLabel: "\u0D09\u0D2A\u0D2F\u0D4B\u0D15\u0D4D\u0D24\u0D43 \u0D10\u0D21\u0D3F: {{id}}",
5065
+ signingInEllipsis: "\u0D38\u0D48\u0D7B \u0D07\u0D7B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D28\u0D4D\u0D28\u0D41\u2026",
5066
+ switchProfile: "\u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D7D \u0D2E\u0D3E\u0D31\u0D4D\u0D31\u0D41\u0D15"
4982
5067
  };
4983
5068
 
4984
5069
  // src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json
@@ -5392,7 +5477,14 @@ var translation_default13 = {
5392
5477
  submittingAs: "{{email}} \uABD1\uABE3\uABCF\uABC5 \uABCA\uABE5\uABD2\uABE0\uABC2\uABE4",
5393
5478
  tapToChooseFile: "\uABD0\uABE5\uABCF\uABDC \uABC8\uABDF\uABC5\uABD5 \uABC7\uABE6\uABDE \uABC7\uABE7",
5394
5479
  view: "\uABCC\uABE6\uABE1\uABCE",
5395
- whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?"
5480
+ whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?",
5481
+ sessionExpiredTitle: "\uABD1\uABD7\uABE3\uABDD\uABD2\uABE4 \uABC1\uABE6\uABC1\uABDF \uABC2\uABE3\uABCF\uABD4\uABE6",
5482
+ sessionExpiredDescription: "\uABC3\uABC8\uABE5 \uABC6\uABE0\uABCA\uABD4\uABDB\uABC5\uABD5 \uABC6\uABE5\uABC5\uABD5\uABE4\uABD7\uABE8\uABC5 \uABD1\uABC3\uABE8\uABDB \uABCD\uABDF\uABC5 \uABC1\uABE5\uABCF\uABDF \uABCF\uABDF \uABC7\uABE7\uABD5\uABE4\uABCC\uABE8\uABEB",
5483
+ chooseYourProfile: "\u09A8\u09B9\u09BE\u0995\u09CD\u0995\u09C0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u0996\u09A8\u09AC\u09BF\u09AF\u09BC\u09C1",
5484
+ loginIdentifierLinkedToMultipleProfiles: "\u09B2\u0997\u0987\u09A8 \u0986\u0987\u09A1\u09BF \u0985\u09B8\u09BF \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u0985\u09AE\u09A6\u0997\u09C0 \u09B9\u09C7\u09A8\u09CD\u09A8\u09BE \u09B2\u09CB\u0987\u09A8\u09A8\u09AC\u09BE \u09B2\u09C8\u0964 \u09A8\u09B9\u09BE\u0995\u09CD\u09A8\u09BE \u09AF\u09BC\u09C7\u0982\u09A8\u09BF\u0982\u09AC\u09BE \u0985\u09A6\u09C1 \u0996\u09A8\u09AC\u09BF\u09AF\u09BC\u09C1\u0964",
5485
+ userIdLabel: "\uABC3\uABE4\uABD1\uABE3\uABCF\uABD5 \uABD1\uABE5\uABCF\uABD7\uABE4: {{id}}",
5486
+ signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09A4\u09CC\u09B0\u09BF\u2026",
5487
+ switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09B9\u09CB\u0982\u09A6\u09CB\u0995-\u0989"
5396
5488
  };
5397
5489
 
5398
5490
  // src/RedactoPrivacyCenter/locales/mr/translation.json
@@ -5806,7 +5898,14 @@ var translation_default14 = {
5806
5898
  submittingAs: "{{email}} \u092E\u094D\u0939\u0923\u0942\u0928 \u0938\u092C\u092E\u093F\u091F \u0915\u0930\u0924 \u0906\u0939\u0947",
5807
5899
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u091F\u0945\u092A \u0915\u0930\u093E",
5808
5900
  view: "\u092A\u0939\u093E",
5809
- whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?"
5901
+ whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?",
5902
+ sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947 \u0938\u0924\u094D\u0930 \u0938\u0902\u092A\u0932\u0947 \u0906\u0939\u0947",
5903
+ sessionExpiredDescription: "\u0938\u0941\u0930\u0942 \u0920\u0947\u0935\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u0915\u0943\u092A\u092F\u093E \u092A\u0941\u0928\u094D\u0939\u093E \u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u093E.",
5904
+ chooseYourProfile: "\u0924\u0941\u092E\u091A\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u093E",
5905
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0949\u0917\u093F\u0928 \u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u092A\u0947\u0915\u094D\u0937\u093E \u091C\u093E\u0938\u094D\u0924 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0936\u0940 \u091C\u094B\u0921\u0932\u0947\u0932\u093E \u0906\u0939\u0947. \u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u091C\u0940 \u092A\u093E\u0939\u093E\u092F\u091A\u0940 \u0906\u0939\u0947 \u0924\u0940 \u0928\u093F\u0935\u0921\u093E.",
5906
+ userIdLabel: "\u0935\u093E\u092A\u0930\u0915\u0930\u094D\u0924\u093E \u0906\u092F\u0921\u0940: {{id}}",
5907
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0924 \u0906\u0939\u0947\u2026",
5908
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u093E"
5810
5909
  };
5811
5910
 
5812
5911
  // src/RedactoPrivacyCenter/locales/ne/translation.json
@@ -6220,7 +6319,14 @@ var translation_default15 = {
6220
6319
  submittingAs: "{{email}} \u0915\u094B \u0930\u0942\u092A\u092E\u093E \u092A\u0947\u0936 \u0917\u0930\u094D\u0926\u0948",
6221
6320
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928 \u091F\u094D\u092F\u093E\u092A \u0917\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6222
6321
  view: "\u0939\u0947\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6223
- whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?"
6322
+ whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?",
6323
+ sessionExpiredTitle: "\u0924\u092A\u093E\u0908\u0902\u0915\u094B \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u090F\u0915\u094B \u091B",
6324
+ sessionExpiredDescription: "\u091C\u093E\u0930\u0940 \u0930\u093E\u0916\u094D\u0928 \u0915\u0943\u092A\u092F\u093E \u092B\u0947\u0930\u093F \u0938\u093E\u0907\u0928 \u0907\u0928 \u0917\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D\u0964",
6325
+ chooseYourProfile: "\u0906\u092B\u094D\u0928\u094B \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6326
+ loginIdentifierLinkedToMultipleProfiles: "\u0932\u0917\u0907\u0928 \u0906\u0908\u0921\u0940 \u090F\u0915\u092D\u0928\u094D\u0926\u093E \u092C\u0922\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932\u0938\u0901\u0917 \u091C\u094B\u0921\u093F\u090F\u0915\u094B \u091B\u0964 \u0924\u092A\u093E\u0908\u0902\u0932\u0947 \u0939\u0947\u0930\u094D\u0928 \u091A\u093E\u0939\u0928\u0941\u092D\u090F\u0915\u094B \u091B\u093E\u0928\u094D\u0928\u0941\u0939\u094B\u0938\u094D\u0964",
6327
+ userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
6328
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u0941\u0901\u0926\u0948\u091B\u2026",
6329
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094D\u0928\u0941\u0939\u094B\u0938\u094D"
6224
6330
  };
6225
6331
 
6226
6332
  // src/RedactoPrivacyCenter/locales/or/translation.json
@@ -6634,7 +6740,14 @@ var translation_default16 = {
6634
6740
  submittingAs: "{{email}} \u0B2D\u0B3E\u0B2C\u0B47 \u0B26\u0B3E\u0B16\u0B32 \u0B15\u0B30\u0B41\u0B1B\u0B28\u0B4D\u0B24\u0B3F",
6635
6741
  tapToChooseFile: "\u0B2B\u0B3E\u0B07\u0B32 \u0B2C\u0B3E\u0B1B\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B1F\u0B4D\u0B5F\u0B3E\u0B2A \u0B15\u0B30\u0B28\u0B4D\u0B24\u0B41",
6636
6742
  view: "\u0B26\u0B47\u0B16\u0B28\u0B4D\u0B24\u0B41",
6637
- whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?"
6743
+ whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?",
6744
+ sessionExpiredTitle: "\u0B06\u0B2A\u0B23\u0B19\u0B4D\u0B15 \u0B38\u0B47\u0B38\u0B28\u0B4D \u0B38\u0B2E\u0B3E\u0B2A\u0B4D\u0B24 \u0B39\u0B4B\u0B07\u0B2F\u0B3E\u0B07\u0B1B\u0B3F",
6745
+ sessionExpiredDescription: "\u0B1C\u0B3E\u0B30\u0B3F \u0B30\u0B16\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B26\u0B5F\u0B3E\u0B15\u0B30\u0B3F \u0B2A\u0B41\u0B28\u0B30\u0B4D\u0B2C\u0B3E\u0B30 \u0B38\u0B3E\u0B07\u0B28\u0B4D \u0B07\u0B28\u0B4D \u0B15\u0B30\u0B28\u0B4D\u0B24\u0B41\u0964",
6746
+ chooseYourProfile: "\u0B06\u0B2A\u0B23\u0B19\u0B4D\u0B15 \u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B3E\u0B1B\u0B28\u0B4D\u0B24\u0B41",
6747
+ loginIdentifierLinkedToMultipleProfiles: "\u0B32\u0B17\u0B07\u0B28\u0B4D \u0B06\u0B07\u0B21\u0B3F \u0B0F\u0B15\u0B3E\u0B27\u0B3F\u0B15 \u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B38\u0B39\u0B3F\u0B24 \u0B2F\u0B4B\u0B21\u0B3C\u0B3E\u0B2F\u0B3E\u0B07\u0B1B\u0B3F\u0964 \u0B06\u0B2A\u0B23 \u0B26\u0B47\u0B16\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B1A\u0B3E\u0B39\u0B41\u0B01\u0B25\u0B3F\u0B2C\u0B3E\u0B1F\u0B3F \u0B2C\u0B3E\u0B1B\u0B28\u0B4D\u0B24\u0B41\u0964",
6748
+ userIdLabel: "\u0B2C\u0B4D\u0B5F\u0B2C\u0B39\u0B3E\u0B30\u0B15\u0B3E\u0B30\u0B40 \u0B06\u0B07\u0B21\u0B3F: {{id}}",
6749
+ signingInEllipsis: "\u0B38\u0B3E\u0B07\u0B28\u0B4D \u0B07\u0B28\u0B4D \u0B39\u0B47\u0B09\u0B1B\u0B3F\u2026",
6750
+ switchProfile: "\u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B26\u0B33\u0B3E\u0B28\u0B4D\u0B24\u0B41"
6638
6751
  };
6639
6752
 
6640
6753
  // src/RedactoPrivacyCenter/locales/pa/translation.json
@@ -7048,7 +7161,14 @@ var translation_default17 = {
7048
7161
  submittingAs: "{{email}} \u0A35\u0A1C\u0A4B\u0A02 \u0A38\u0A2C\u0A2E\u0A3F\u0A1F \u0A15\u0A30 \u0A30\u0A39\u0A47 \u0A39\u0A4B",
7049
7162
  tapToChooseFile: "\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A28 \u0A32\u0A08 \u0A1F\u0A48\u0A2A \u0A15\u0A30\u0A4B",
7050
7163
  view: "\u0A26\u0A47\u0A16\u0A4B",
7051
- whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?"
7164
+ whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?",
7165
+ sessionExpiredTitle: "\u0A24\u0A41\u0A39\u0A3E\u0A21\u0A3E \u0A38\u0A48\u0A38\u0A3C\u0A28 \u0A38\u0A2E\u0A3E\u0A2A\u0A24 \u0A39\u0A4B \u0A17\u0A3F\u0A06 \u0A39\u0A48",
7166
+ sessionExpiredDescription: "\u0A1C\u0A3E\u0A30\u0A40 \u0A30\u0A71\u0A16\u0A23 \u0A32\u0A08 \u0A15\u0A3F\u0A30\u0A2A\u0A3E \u0A15\u0A30\u0A15\u0A47 \u0A26\u0A41\u0A2C\u0A3E\u0A30\u0A3E \u0A38\u0A3E\u0A08\u0A28 \u0A07\u0A28 \u0A15\u0A30\u0A4B\u0964",
7167
+ chooseYourProfile: "\u0A06\u0A2A\u0A23\u0A40 \u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A4B",
7168
+ loginIdentifierLinkedToMultipleProfiles: "\u0A32\u0A4C\u0A17\u0A07\u0A28 \u0A06\u0A08\u0A21\u0A40 \u0A07\u0A71\u0A15 \u0A24\u0A4B\u0A02 \u0A35\u0A71\u0A27 \u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32\u0A3E\u0A02 \u0A28\u0A3E\u0A32 \u0A1C\u0A41\u0A5C\u0A3F\u0A06 \u0A39\u0A4B\u0A07\u0A06 \u0A39\u0A48\u0964 \u0A1C\u0A4B \u0A24\u0A41\u0A38\u0A40\u0A02 \u0A35\u0A47\u0A16\u0A23\u0A3E \u0A1A\u0A3E\u0A39\u0A41\u0A70\u0A26\u0A47 \u0A39\u0A4B \u0A09\u0A39 \u0A1A\u0A41\u0A23\u0A4B\u0964",
7169
+ userIdLabel: "\u0A09\u0A2A\u0A2F\u0A4B\u0A17\u0A15\u0A30\u0A24\u0A3E \u0A06\u0A08\u0A21\u0A40: {{id}}",
7170
+ signingInEllipsis: "\u0A38\u0A3E\u0A08\u0A28 \u0A07\u0A28 \u0A39\u0A4B \u0A30\u0A3F\u0A39\u0A3E \u0A39\u0A48\u2026",
7171
+ switchProfile: "\u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A2C\u0A26\u0A32\u0A4B"
7052
7172
  };
7053
7173
 
7054
7174
  // src/RedactoPrivacyCenter/locales/sa/translation.json
@@ -7462,7 +7582,14 @@ var translation_default18 = {
7462
7582
  submittingAs: "{{email}} \u0907\u0924\u093F \u0938\u092E\u0930\u094D\u092A\u092F\u0928\u094D",
7463
7583
  tapToChooseFile: "\u0938\u091E\u094D\u091A\u093F\u0915\u093E\u0902 \u091A\u0947\u0924\u0941\u0902 \u0938\u094D\u092A\u0943\u0936\u0924\u0941",
7464
7584
  view: "\u092A\u0936\u094D\u092F",
7465
- whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?"
7585
+ whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?",
7586
+ sessionExpiredTitle: "\u092D\u0935\u0924\u0903 \u0938\u0924\u094D\u0930\u0902 \u0938\u092E\u093E\u092A\u094D\u0924\u092E\u094D",
7587
+ sessionExpiredDescription: "\u0905\u0928\u0941\u0935\u0930\u094D\u0924\u0928\u093E\u0930\u094D\u0925\u0902 \u0915\u0943\u092A\u092F\u093E \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u0935\u0947\u0936\u0902 \u0915\u0930\u094B\u0924\u0941\u0964",
7588
+ chooseYourProfile: "\u0938\u094D\u0935\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u091A\u093F\u0928\u094B\u0924\u0941",
7589
+ loginIdentifierLinkedToMultipleProfiles: "\u092A\u094D\u0930\u0935\u0947\u0936-\u0906\u092F\u0921\u0940 \u090F\u0915\u093E\u0927\u093F\u0915\u0948\u0903 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0948\u0903 \u0938\u0939 \u0938\u092E\u094D\u092C\u0926\u094D\u0927\u0903 \u0905\u0938\u094D\u0924\u093F\u0964 \u092F\u0924\u094D \u0926\u094D\u0930\u0937\u094D\u091F\u0941\u092E\u094D \u0907\u091A\u094D\u091B\u0924\u093F \u0924\u0924\u094D \u091A\u093F\u0928\u094B\u0924\u0941\u0964",
7590
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0915\u094D\u0924\u0943-\u0906\u092F\u0921\u0940: {{id}}",
7591
+ signingInEllipsis: "\u092A\u094D\u0930\u0935\u0947\u0936\u0903 \u0915\u094D\u0930\u093F\u092F\u0924\u0947\u2026",
7592
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u092A\u0930\u093F\u0935\u0930\u094D\u0924\u092F\u0924\u0941"
7466
7593
  };
7467
7594
 
7468
7595
  // src/RedactoPrivacyCenter/locales/sat/translation.json
@@ -7876,7 +8003,14 @@ var translation_default19 = {
7876
8003
  submittingAs: "{{email}} \u1C5E\u1C6E\u1C60\u1C5F\u1C5B\u1C6E \u1C61\u1C5A\u1C62\u1C5F \u1C6E\u1C6B\u1C5F",
7877
8004
  tapToChooseFile: "\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C5E\u1C5F\u1C79\u1C5C\u1C64\u1C6B \u1C74\u1C6E\u1C6F \u1C62\u1C6E",
7878
8005
  view: "\u1C67\u1C6E\u1C5E \u1C62\u1C6E",
7879
- whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?"
8006
+ whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?",
8007
+ sessionExpiredTitle: "\u1C5F\u1C62\u1C5F\u1C5C \u1C65\u1C6E\u1C65\u1C5A\u1C71 \u1C62\u1C69\u1C6A\u1C5F\u1C79\u1C6B\u1C6E\u1C71\u1C5F",
8008
+ sessionExpiredDescription: "\u1C5E\u1C5F\u1C66\u1C5F \u1C6A\u1C5F\u1C5E\u1C5F\u1C63 \u1C5E\u1C5F\u1C79\u1C5C\u1C64\u1C6B \u1C6B\u1C5F\u1C6D\u1C5F \u1C60\u1C5F\u1C5B\u1C6E \u1C6B\u1C73\u1C66\u1C72\u1C5F \u1C65\u1C5F\u1C6D\u1C71 \u1C64\u1C71 \u1C62\u1C6E\u1C7E",
8009
+ chooseYourProfile: "\u1C5F\u1C62\u1C5F\u1C5C \u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C62\u1C6E",
8010
+ loginIdentifierLinkedToMultipleProfiles: "\u1C5E\u1C5A\u1C5C\u1C64\u1C71 \u1C5F\u1C6D\u1C70\u1C64 \u1C6B\u1C5A \u1C62\u1C64\u1C6B \u1C60\u1C77\u1C5A\u1C71 \u1C70\u1C77\u1C6E\u1C68 \u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C65\u1C5F\u1C76 \u1C61\u1C69\u1C70\u1C5F\u1C79\u1C63 \u1C5F\u1C60\u1C5F\u1C71\u1C5F\u1C7E \u1C5F\u1C62 \u1C67\u1C6E\u1C5E \u1C65\u1C5F\u1C71\u1C5F\u1C62 \u1C5A\u1C71\u1C5F \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C62\u1C6E\u1C7E",
8011
+ userIdLabel: "\u1C75\u1C6E\u1C75\u1C77\u1C5F\u1C68\u1C64\u1C6D\u1C5F\u1C79 \u1C5F\u1C6D\u1C70\u1C64: {{id}}",
8012
+ signingInEllipsis: "\u1C65\u1C5F\u1C6D\u1C64\u1C71 \u1C64\u1C71 \u1C6E\u1C6B\u1C5F\u1C6D\u2026",
8013
+ switchProfile: "\u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5A\u1C6B\u1C5A\u1C5E \u1C62\u1C6E"
7880
8014
  };
7881
8015
 
7882
8016
  // src/RedactoPrivacyCenter/locales/sd/translation.json
@@ -8290,7 +8424,14 @@ var translation_default20 = {
8290
8424
  submittingAs: "{{email}} \u0637\u0648\u0631 \u062C\u0645\u0639 \u06AA\u0631\u064A \u0631\u0647\u064A\u0627 \u0622\u0647\u064A\u0648",
8291
8425
  tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u06BB \u0644\u0627\u0621\u0650 \u067D\u064A\u067E \u06AA\u0631\u064A\u0648",
8292
8426
  view: "\u068F\u0633\u0648",
8293
- whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F"
8427
+ whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F",
8428
+ sessionExpiredTitle: "\u062A\u0648\u0647\u0627\u0646 \u062C\u0648 \u0633\u064A\u0634\u0646 \u062E\u062A\u0645 \u067F\u064A \u0648\u064A\u0648 \u0622\u0647\u064A",
8429
+ sessionExpiredDescription: "\u062C\u0627\u0631\u064A \u0631\u06A9\u06BB \u0644\u0627\u0621\u0650 \u0645\u0647\u0631\u0628\u0627\u0646\u064A \u06AA\u0631\u064A \u067B\u064A\u0647\u0631 \u0633\u0627\u0626\u0646 \u0627\u0646 \u06AA\u0631\u064A\u0648.",
8430
+ chooseYourProfile: "\u067E\u0646\u0647\u0646\u062C\u0648 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u064A\u0648",
8431
+ loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0646 \u0622\u0626\u064A\u068A\u064A \u0647\u06AA \u06A9\u0627\u0646 \u0648\u068C\u064A\u06AA \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0646 \u0633\u0627\u0646 \u06B3\u0646\u068D\u064A\u0644 \u0622\u0647\u064A. \u062C\u064A\u06AA\u0648 \u062A\u0648\u0647\u0627\u0646 \u068F\u0633\u06BB \u0686\u0627\u0647\u064A\u0648 \u067F\u0627 \u0627\u0647\u0648 \u0686\u0648\u0646\u068A\u064A\u0648.",
8432
+ userIdLabel: "\u064A\u0648\u0632\u0631 \u0622\u0626\u064A\u068A\u064A: {{id}}",
8433
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u067F\u064A \u0631\u0647\u064A\u0648 \u0622\u0647\u064A\u2026",
8434
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u064A\u0644 \u06AA\u0631\u064A\u0648"
8294
8435
  };
8295
8436
 
8296
8437
  // src/RedactoPrivacyCenter/locales/ta/translation.json
@@ -8704,7 +8845,14 @@ var translation_default21 = {
8704
8845
  submittingAs: "{{email}} \u0B86\u0B95 \u0B9A\u0BAE\u0BB0\u0BCD\u0BAA\u0BCD\u0BAA\u0BBF\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD",
8705
8846
  tapToChooseFile: "\u0B95\u0BCB\u0BAA\u0BCD\u0BAA\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95 \u0BA4\u0B9F\u0BCD\u0B9F\u0BB5\u0BC1\u0BAE\u0BCD",
8706
8847
  view: "\u0BAA\u0BBE\u0BB0\u0BCD",
8707
- whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?"
8848
+ whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?",
8849
+ sessionExpiredTitle: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B85\u0BAE\u0BB0\u0BCD\u0BB5\u0BC1 \u0B95\u0BBE\u0BB2\u0BBE\u0BB5\u0BA4\u0BBF\u0BAF\u0BBE\u0B95\u0BBF\u0BB5\u0BBF\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1",
8850
+ sessionExpiredDescription: "\u0BA4\u0BCA\u0B9F\u0BB0\u0BCD\u0BB5\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BA4\u0BAF\u0BB5\u0BC1\u0B9A\u0BC6\u0BAF\u0BCD\u0BA4\u0BC1 \u0BAE\u0BC0\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD \u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0BAF\u0BB5\u0BC1\u0BAE\u0BCD.",
8851
+ chooseYourProfile: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0BA4\u0BCD\u0BA4\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD",
8852
+ loginIdentifierLinkedToMultipleProfiles: "\u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0BB5\u0BC1 \u0B90\u0B9F\u0BBF \u0B92\u0BA9\u0BCD\u0BB1\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0BAE\u0BC7\u0BB1\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F \u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B9F\u0BA9\u0BCD \u0B87\u0BA3\u0BC8\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BC1\u0BB3\u0BCD\u0BB3\u0BA4\u0BC1. \u0BA8\u0BC0\u0B99\u0BCD\u0B95\u0BB3\u0BCD \u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAE\u0BCD\u0BAA\u0BC1\u0BB5\u0BA4\u0BC8\u0BA4\u0BCD \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD.",
8853
+ userIdLabel: "\u0BAA\u0BAF\u0BA9\u0BB0\u0BCD \u0B90\u0B9F\u0BBF: {{id}}",
8854
+ signingInEllipsis: "\u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",
8855
+ switchProfile: "\u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0BA4\u0BCD\u0BA4\u0BC8 \u0BAE\u0BBE\u0BB1\u0BCD\u0BB1\u0BC1"
8708
8856
  };
8709
8857
 
8710
8858
  // src/RedactoPrivacyCenter/locales/te/translation.json
@@ -9118,7 +9266,14 @@ var translation_default22 = {
9118
9266
  submittingAs: "{{email}} \u0C17\u0C3E \u0C38\u0C2E\u0C30\u0C4D\u0C2A\u0C3F\u0C38\u0C4D\u0C24\u0C41\u0C28\u0C4D\u0C28\u0C3E\u0C30\u0C41",
9119
9267
  tapToChooseFile: "\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C35\u0C21\u0C3E\u0C28\u0C3F\u0C15\u0C3F \u0C28\u0C4A\u0C15\u0C4D\u0C15\u0C02\u0C21\u0C3F",
9120
9268
  view: "\u0C35\u0C40\u0C15\u0C4D\u0C37\u0C3F\u0C02\u0C1A\u0C02\u0C21\u0C3F",
9121
- whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?"
9269
+ whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?",
9270
+ sessionExpiredTitle: "\u0C2E\u0C40 \u0C38\u0C46\u0C37\u0C28\u0C4D \u0C17\u0C21\u0C41\u0C35\u0C41 \u0C2E\u0C41\u0C17\u0C3F\u0C38\u0C3F\u0C02\u0C26\u0C3F",
9271
+ sessionExpiredDescription: "\u0C15\u0C4A\u0C28\u0C38\u0C3E\u0C17\u0C3F\u0C02\u0C1A\u0C21\u0C3E\u0C28\u0C3F\u0C15\u0C3F \u0C26\u0C2F\u0C1A\u0C47\u0C38\u0C3F \u0C2E\u0C33\u0C4D\u0C32\u0C40 \u0C38\u0C48\u0C28\u0C4D \u0C07\u0C28\u0C4D \u0C1A\u0C47\u0C2F\u0C02\u0C21\u0C3F.",
9272
+ chooseYourProfile: "\u0C2E\u0C40 \u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C02\u0C21\u0C3F",
9273
+ loginIdentifierLinkedToMultipleProfiles: "\u0C32\u0C3E\u0C17\u0C3F\u0C28\u0C4D \u0C10\u0C21\u0C3F \u0C12\u0C15\u0C1F\u0C3F \u0C15\u0C02\u0C1F\u0C47 \u0C0E\u0C15\u0C4D\u0C15\u0C41\u0C35 \u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C32\u0C24\u0C4B \u0C05\u0C28\u0C41\u0C38\u0C02\u0C27\u0C3E\u0C28\u0C3F\u0C02\u0C1A\u0C2C\u0C21\u0C3F\u0C02\u0C26\u0C3F. \u0C2E\u0C40\u0C30\u0C41 \u0C1A\u0C42\u0C21\u0C3E\u0C32\u0C28\u0C41\u0C15\u0C41\u0C02\u0C1F\u0C41\u0C28\u0C4D\u0C28\u0C26\u0C3E\u0C28\u0C4D\u0C28\u0C3F \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C02\u0C21\u0C3F.",
9274
+ userIdLabel: "\u0C35\u0C3F\u0C28\u0C3F\u0C2F\u0C4B\u0C17\u0C26\u0C3E\u0C30\u0C41 \u0C10\u0C21\u0C3F: {{id}}",
9275
+ signingInEllipsis: "\u0C38\u0C48\u0C28\u0C4D \u0C07\u0C28\u0C4D \u0C05\u0C35\u0C41\u0C24\u0C4B\u0C02\u0C26\u0C3F\u2026",
9276
+ switchProfile: "\u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C02\u0C21\u0C3F"
9122
9277
  };
9123
9278
 
9124
9279
  // src/RedactoPrivacyCenter/locales/ur/translation.json
@@ -9532,7 +9687,14 @@ var translation_default23 = {
9532
9687
  submittingAs: "{{email}} \u06A9\u06D2 \u0637\u0648\u0631 \u067E\u0631 \u062C\u0645\u0639 \u06A9\u0631 \u0631\u06C1\u06D2 \u06C1\u06CC\u06BA",
9533
9688
  tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u06BA",
9534
9689
  view: "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA",
9535
- whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F"
9690
+ whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F",
9691
+ sessionExpiredTitle: "\u0622\u067E \u06A9\u0627 \u0633\u06CC\u0634\u0646 \u062E\u062A\u0645 \u06C1\u0648 \u06AF\u06CC\u0627 \u06C1\u06D2",
9692
+ sessionExpiredDescription: "\u062C\u0627\u0631\u06CC \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0628\u0631\u0627\u06C1 \u06A9\u0631\u0645 \u062F\u0648\u0628\u0627\u0631\u06C1 \u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06A9\u0631\u06CC\u06BA\u06D4",
9693
+ chooseYourProfile: "\u0627\u067E\u0646\u06CC \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA",
9694
+ loginIdentifierLinkedToMultipleProfiles: "\u0644\u0627\u06AF \u0627\u0646 \u0622\u0626\u06CC \u0688\u06CC \u0627\u06CC\u06A9 \u0633\u06D2 \u0632\u06CC\u0627\u062F\u06C1 \u067E\u0631\u0648\u0641\u0627\u0626\u0644\u0632 \u0633\u06D2 \u0645\u0646\u0633\u0644\u06A9 \u06C1\u06D2\u06D4 \u062C\u0633\u06D2 \u0622\u067E \u062F\u06CC\u06A9\u06BE\u0646\u0627 \u0686\u0627\u06C1\u062A\u06D2 \u06C1\u06CC\u06BA \u0627\u0633\u06D2 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA\u06D4",
9695
+ userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
9696
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u06C1\u0648 \u0631\u06C1\u0627 \u06C1\u06D2\u2026",
9697
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u06CC\u0644 \u06A9\u0631\u06CC\u06BA"
9536
9698
  };
9537
9699
 
9538
9700
  // src/RedactoPrivacyCenter/lib/locales.ts
@@ -9750,7 +9912,54 @@ function useSafeInsets() {
9750
9912
  // src/RedactoPrivacyCenter/context/BaseUrlContext.tsx
9751
9913
  import { createContext, useContext, useMemo } from "react";
9752
9914
 
9915
+ // src/RedactoPrivacyCenter/lib/sandbox.ts
9916
+ var sandboxConfig = null;
9917
+ var setSandboxConfig = (config) => {
9918
+ sandboxConfig = config;
9919
+ };
9920
+ var getSandboxConfig = () => sandboxConfig;
9921
+ var isSandboxMode = () => sandboxConfig !== null;
9922
+ var sandboxAuthHeaders = () => {
9923
+ if (!sandboxConfig) {
9924
+ return null;
9925
+ }
9926
+ return {
9927
+ [SANDBOX_TOKEN_HEADER]: sandboxConfig.token
9928
+ };
9929
+ };
9930
+ var sandboxBodyIdentity = () => {
9931
+ if (!sandboxConfig) {
9932
+ return null;
9933
+ }
9934
+ if (sandboxConfig.ucic) {
9935
+ return { org_user_id: sandboxConfig.ucic };
9936
+ }
9937
+ return sandboxConfig.subject.includes("@") ? { primary_email: sandboxConfig.subject } : { primary_mobile: sandboxConfig.subject };
9938
+ };
9939
+ var sandboxQueryIdentity = () => sandboxBodyIdentity();
9940
+ var sandboxContact = () => sandboxConfig ? sandboxConfig.ucic || sandboxConfig.subject : null;
9941
+
9753
9942
  // src/RedactoPrivacyCenter/api/fetcher.ts
9943
+ var ApiError = class _ApiError extends Error {
9944
+ constructor(message, options = {}) {
9945
+ super(message);
9946
+ this.name = "ApiError";
9947
+ this.status = options.status;
9948
+ this.detail = options.detail;
9949
+ Object.setPrototypeOf(this, _ApiError.prototype);
9950
+ }
9951
+ };
9952
+ var TERMINAL_REFRESH_STATUSES = /* @__PURE__ */ new Set([400, 401, 403, 422]);
9953
+ function isTerminalRefreshError(error) {
9954
+ const e = error;
9955
+ if (!e) return false;
9956
+ if (typeof e.status === "number") {
9957
+ return TERMINAL_REFRESH_STATUSES.has(e.status);
9958
+ }
9959
+ const message = (typeof e.message === "string" ? e.message : "").toLowerCase();
9960
+ if (!message) return false;
9961
+ return message.includes("expired") || message.includes("revoked") || message.includes("not found") || message.includes("already used") || message.includes("invalid refresh token") || message.includes("unauthorized") || message.includes("[401]") || message.includes("[403]");
9962
+ }
9754
9963
  async function apiFetch(url, options = {}) {
9755
9964
  const { getAuthToken, headers = {}, ...fetchOptions } = options;
9756
9965
  const requestHeaders = new Headers();
@@ -9775,11 +9984,18 @@ async function apiFetch(url, options = {}) {
9775
9984
  }
9776
9985
  }
9777
9986
  if (getAuthToken) {
9778
- const token = await getAuthToken();
9779
- if (token) {
9780
- const trimmedToken = token.trim();
9781
- requestHeaders.set("X-Auth-Token", trimmedToken);
9782
- requestHeaders.set("x-auth-token", trimmedToken);
9987
+ const sandboxHeaders = sandboxAuthHeaders();
9988
+ if (sandboxHeaders) {
9989
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
9990
+ requestHeaders.set(key, value);
9991
+ });
9992
+ } else {
9993
+ const token = await getAuthToken();
9994
+ if (token) {
9995
+ const trimmedToken = token.trim();
9996
+ requestHeaders.set("X-Auth-Token", trimmedToken);
9997
+ requestHeaders.set("x-auth-token", trimmedToken);
9998
+ }
9783
9999
  }
9784
10000
  }
9785
10001
  const fetchOptionsFinal = {
@@ -9808,7 +10024,7 @@ async function apiFetch(url, options = {}) {
9808
10024
  } catch {
9809
10025
  }
9810
10026
  }
9811
- throw new Error(errorMessage);
10027
+ throw new ApiError(errorMessage, { status: response.status });
9812
10028
  }
9813
10029
  const contentLength = response.headers.get("Content-Length");
9814
10030
  const contentType = response.headers.get("Content-Type") || "";
@@ -9870,14 +10086,29 @@ function arrayBufferToBase64(buffer) {
9870
10086
  return result;
9871
10087
  }
9872
10088
  function createConsentClient(baseUrl, ledgerBaseUrl) {
9873
- const useLedger = Boolean(ledgerBaseUrl);
10089
+ const ledgerConfigured = Boolean(ledgerBaseUrl);
10090
+ const useLedger = () => ledgerConfigured && !isSandboxMode();
9874
10091
  const ledgerBase = (ledgerBaseUrl != null ? ledgerBaseUrl : "").replace(/\/$/, "");
9875
10092
  function ledgerUrl(baseRequest, path) {
9876
- if (!useLedger) {
10093
+ if (!useLedger()) {
9877
10094
  throw new Error("ledgerUrl called without a configured ledgerBaseUrl");
9878
10095
  }
9879
10096
  return `${ledgerBase}/public/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}${path}`;
9880
10097
  }
10098
+ function appendSandboxIdentity(queryParams) {
10099
+ const identity = sandboxQueryIdentity();
10100
+ if (identity) {
10101
+ Object.entries(identity).forEach(([key, value]) => {
10102
+ queryParams.append(key, value);
10103
+ });
10104
+ }
10105
+ }
10106
+ function sandboxIdentitySuffix() {
10107
+ const queryParams = new URLSearchParams();
10108
+ appendSandboxIdentity(queryParams);
10109
+ const queryString = queryParams.toString();
10110
+ return queryString ? `?${queryString}` : "";
10111
+ }
9881
10112
  async function privacyCenterApiFetch(url, options) {
9882
10113
  const { authToken, getAuthToken, headers = {}, ...fetchOptions } = options;
9883
10114
  const requestHeaders = new Headers();
@@ -9901,11 +10132,18 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
9901
10132
  );
9902
10133
  }
9903
10134
  }
9904
- const token = authToken || (getAuthToken ? await getAuthToken() : null);
9905
- if (token) {
9906
- const trimmedToken = token.trim();
9907
- const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
9908
- requestHeaders.set("Authorization", bearerToken);
10135
+ const sandboxHeaders = sandboxAuthHeaders();
10136
+ if (sandboxHeaders) {
10137
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
10138
+ requestHeaders.set(key, value);
10139
+ });
10140
+ } else {
10141
+ const token = authToken || (getAuthToken ? await getAuthToken() : null);
10142
+ if (token) {
10143
+ const trimmedToken = token.trim();
10144
+ const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
10145
+ requestHeaders.set("Authorization", bearerToken);
10146
+ }
9909
10147
  }
9910
10148
  const fetchOptionsFinal = {
9911
10149
  ...fetchOptions,
@@ -9986,18 +10224,20 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
9986
10224
  async createCaseRequest(baseRequest, payload, authToken, options) {
9987
10225
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/case`;
9988
10226
  const { useSessionAuth = false, getAuthToken, ...fetchOptions } = options || {};
10227
+ const contact = sandboxContact();
10228
+ const requestPayload = contact && payload && typeof payload === "object" ? { ...payload, contact } : payload;
9989
10229
  if (useSessionAuth) {
9990
10230
  return apiFetch(url, {
9991
10231
  ...fetchOptions,
9992
10232
  method: "POST",
9993
- body: JSON.stringify(payload),
10233
+ body: JSON.stringify(requestPayload),
9994
10234
  getAuthToken
9995
10235
  });
9996
10236
  }
9997
10237
  return privacyCenterApiFetch(url, {
9998
10238
  ...fetchOptions,
9999
10239
  method: "POST",
10000
- body: JSON.stringify(payload),
10240
+ body: JSON.stringify(requestPayload),
10001
10241
  authToken: authToken || baseRequest.authToken
10002
10242
  });
10003
10243
  },
@@ -10078,9 +10318,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10078
10318
  if (params.status) queryParams.append("status", params.status);
10079
10319
  if (params.product_uuid) queryParams.append("product_uuid", params.product_uuid);
10080
10320
  if (params.language) queryParams.append("language", params.language);
10321
+ appendSandboxIdentity(queryParams);
10081
10322
  const queryString = queryParams.toString();
10082
10323
  const consentsSuffix = `/user-consents${queryString ? `?${queryString}` : ""}`;
10083
- const url = useLedger ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
10324
+ const url = useLedger() ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
10084
10325
  return privacyCenterApiFetch(url, {
10085
10326
  ...options,
10086
10327
  method: "GET",
@@ -10099,9 +10340,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10099
10340
  if (params.search) queryParams.append("search", params.search);
10100
10341
  if (params.language) queryParams.append("language", params.language);
10101
10342
  if (params.nominator_uuid) queryParams.append("nominator_uuid", params.nominator_uuid);
10343
+ appendSandboxIdentity(queryParams);
10102
10344
  const queryString = queryParams.toString();
10103
10345
  const purposesSuffix = `/user-consents/${productUuid}/purposes${queryString ? `?${queryString}` : ""}`;
10104
- const url = useLedger ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
10346
+ const url = useLedger() ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
10105
10347
  return privacyCenterApiFetch(url, {
10106
10348
  ...options,
10107
10349
  method: "GET",
@@ -10123,9 +10365,13 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10123
10365
  * used with its `{ purpose_uuid, contact, ... }` payload.
10124
10366
  */
10125
10367
  async manageConsent(baseRequest, purposeId, contact, status, authToken, options, nominatorContact, dataElementUuids, noticeUuid, dataElements, language) {
10126
- if (!useLedger) {
10368
+ if (!useLedger()) {
10127
10369
  const url2 = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/manage-consent?status=${status}`;
10128
- const body2 = { purpose_uuid: purposeId, contact };
10370
+ const sandboxSingleContact = sandboxContact();
10371
+ const body2 = {
10372
+ purpose_uuid: purposeId,
10373
+ contact: sandboxSingleContact != null ? sandboxSingleContact : contact
10374
+ };
10129
10375
  if (nominatorContact) {
10130
10376
  body2.nominator_contact = nominatorContact;
10131
10377
  }
@@ -10188,6 +10434,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10188
10434
  if (offset !== void 0) queryParams.append("offset", offset.toString());
10189
10435
  if (limit !== void 0) queryParams.append("limit", limit.toString());
10190
10436
  if (language) queryParams.append("language", language);
10437
+ appendSandboxIdentity(queryParams);
10191
10438
  const queryString = queryParams.toString();
10192
10439
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/activities${queryString ? `?${queryString}` : ""}`;
10193
10440
  return privacyCenterApiFetch(url, {
@@ -10195,6 +10442,32 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10195
10442
  authToken: authToken || baseRequest.authToken
10196
10443
  });
10197
10444
  },
10445
+ /**
10446
+ * List all data principals that share this session's contact
10447
+ * (shared-contact profile picker). Identity is derived server-side from the
10448
+ * JWT — the caller sends nothing but its bearer token.
10449
+ */
10450
+ async listIdentities(baseRequest, authToken, options) {
10451
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities`;
10452
+ return privacyCenterApiFetch(url, {
10453
+ ...options,
10454
+ authToken: authToken || baseRequest.authToken
10455
+ });
10456
+ },
10457
+ /**
10458
+ * Re-scope the session to a chosen principal uuid (must be one of the
10459
+ * principals sharing this session's contact). Returns fresh access/refresh
10460
+ * tokens scoped to that principal.
10461
+ */
10462
+ async selectPrincipal(baseRequest, principalUuid, authToken, options) {
10463
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities/select`;
10464
+ return privacyCenterApiFetch(url, {
10465
+ ...options,
10466
+ method: "POST",
10467
+ body: JSON.stringify({ uuid: principalUuid }),
10468
+ authToken: authToken || baseRequest.authToken
10469
+ });
10470
+ },
10198
10471
  /**
10199
10472
  * Get receipts (privacy center)
10200
10473
  */
@@ -10208,9 +10481,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10208
10481
  if (params.created_before) queryParams.append("created_before", params.created_before);
10209
10482
  if (params.notice_uuid) queryParams.append("notice_uuid", params.notice_uuid);
10210
10483
  if (params.language) queryParams.append("language", params.language);
10484
+ appendSandboxIdentity(queryParams);
10211
10485
  const queryString = queryParams.toString();
10212
10486
  const receiptsSuffix = `/receipts${queryString ? `?${queryString}` : ""}`;
10213
- const url = useLedger ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
10487
+ const url = useLedger() ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
10214
10488
  return privacyCenterApiFetch(url, {
10215
10489
  ...options,
10216
10490
  method: "GET",
@@ -10224,11 +10498,16 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10224
10498
  * the RN UI writes to a temp file to open/share. 404 => not found.
10225
10499
  */
10226
10500
  async getReceiptPdf(baseRequest, receiptUuid, authToken) {
10227
- const url = useLedger ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
10501
+ const url = useLedger() ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
10228
10502
  const token = authToken || baseRequest.authToken;
10229
10503
  const requestHeaders = new Headers();
10230
10504
  requestHeaders.set("Accept", "application/pdf");
10231
- if (token) {
10505
+ const sandboxHeaders = sandboxAuthHeaders();
10506
+ if (sandboxHeaders) {
10507
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
10508
+ requestHeaders.set(key, value);
10509
+ });
10510
+ } else if (token) {
10232
10511
  const trimmedToken = token.trim();
10233
10512
  const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
10234
10513
  requestHeaders.set("Authorization", bearerToken);
@@ -10254,6 +10533,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10254
10533
  if (offset !== void 0) queryParams.append("offset", offset.toString());
10255
10534
  if (limit !== void 0) queryParams.append("limit", limit.toString());
10256
10535
  if (language) queryParams.append("language", language);
10536
+ appendSandboxIdentity(queryParams);
10257
10537
  const queryString = queryParams.toString();
10258
10538
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases?${queryString}`;
10259
10539
  return privacyCenterApiFetch(url, {
@@ -10265,7 +10545,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10265
10545
  * Get case messages (privacy center)
10266
10546
  */
10267
10547
  async getCaseMessages(baseRequest, caseUuid, authToken, options) {
10268
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
10548
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
10269
10549
  return privacyCenterApiFetch(url, {
10270
10550
  ...options,
10271
10551
  authToken: authToken || baseRequest.authToken
@@ -10275,7 +10555,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10275
10555
  * Send a message in a case (privacy center)
10276
10556
  */
10277
10557
  async sendCaseMessage(baseRequest, caseUuid, body, documentUuids, authToken, options) {
10278
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
10558
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
10279
10559
  return privacyCenterApiFetch(url, {
10280
10560
  ...options,
10281
10561
  method: "POST",
@@ -10287,7 +10567,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10287
10567
  * Upload a document for a case (privacy center)
10288
10568
  */
10289
10569
  async uploadCaseDocument(baseRequest, caseUuid, formData, authToken, options) {
10290
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document`;
10570
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document${sandboxIdentitySuffix()}`;
10291
10571
  return privacyCenterApiFetch(url, {
10292
10572
  ...options,
10293
10573
  method: "POST",
@@ -10320,6 +10600,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10320
10600
  if ((params == null ? void 0 : params.limit) !== void 0) queryParams.append("limit", params.limit.toString());
10321
10601
  if (params == null ? void 0 : params.include_summary) queryParams.append("include_summary", "true");
10322
10602
  if (params == null ? void 0 : params.language) queryParams.append("language", params.language);
10603
+ appendSandboxIdentity(queryParams);
10323
10604
  const queryString = queryParams.toString();
10324
10605
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${queryString ? `?${queryString}` : ""}`;
10325
10606
  return privacyCenterApiFetch(url, {
@@ -10331,7 +10612,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10331
10612
  * Get notification summary (aggregated counts only)
10332
10613
  */
10333
10614
  async getNotificationSummary(baseRequest, authToken) {
10334
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary`;
10615
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary${sandboxIdentitySuffix()}`;
10335
10616
  return privacyCenterApiFetch(url, {
10336
10617
  method: "GET",
10337
10618
  authToken: authToken || baseRequest.authToken
@@ -10341,7 +10622,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10341
10622
  * Get unread notification count (lightweight, for the header badge)
10342
10623
  */
10343
10624
  async getUnreadCount(baseRequest, authToken) {
10344
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count`;
10625
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count${sandboxIdentitySuffix()}`;
10345
10626
  return privacyCenterApiFetch(url, {
10346
10627
  method: "GET",
10347
10628
  authToken: authToken || baseRequest.authToken
@@ -10351,7 +10632,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10351
10632
  * Mark a single notification as read
10352
10633
  */
10353
10634
  async markNotificationRead(baseRequest, notificationUuid, authToken) {
10354
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read`;
10635
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read${sandboxIdentitySuffix()}`;
10355
10636
  return privacyCenterApiFetch(url, {
10356
10637
  method: "PATCH",
10357
10638
  authToken: authToken || baseRequest.authToken
@@ -10361,7 +10642,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10361
10642
  * Mark all notifications as read
10362
10643
  */
10363
10644
  async markAllNotificationsRead(baseRequest, authToken) {
10364
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read`;
10645
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read${sandboxIdentitySuffix()}`;
10365
10646
  return privacyCenterApiFetch(url, {
10366
10647
  method: "POST",
10367
10648
  authToken: authToken || baseRequest.authToken
@@ -10371,7 +10652,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10371
10652
  * Acknowledge a notification (sets is_read and is_acknowledged to true)
10372
10653
  */
10373
10654
  async acknowledgeNotification(baseRequest, notificationUuid, authToken) {
10374
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge`;
10655
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge${sandboxIdentitySuffix()}`;
10375
10656
  return privacyCenterApiFetch(url, {
10376
10657
  method: "POST",
10377
10658
  authToken: authToken || baseRequest.authToken
@@ -11483,6 +11764,40 @@ var acknowledgeNotification = async (organizationId, workspaceId, notificationUu
11483
11764
  var isRefreshing = false;
11484
11765
  var refreshPromise = null;
11485
11766
  var TOKEN_EXPIRY_BUFFER_SECONDS = 30;
11767
+ var deadRefreshToken = null;
11768
+ var transientRefreshFailureUntil = 0;
11769
+ var transientRefreshBackoffMs = 0;
11770
+ var MIN_REFRESH_BACKOFF_MS = 3e4;
11771
+ var MAX_REFRESH_BACKOFF_MS = 3e5;
11772
+ var sessionExpiredListener = null;
11773
+ var setSessionExpiredListener = (fn) => {
11774
+ sessionExpiredListener = fn;
11775
+ };
11776
+ var notifySessionExpired = () => {
11777
+ sessionExpiredListener == null ? void 0 : sessionExpiredListener();
11778
+ };
11779
+ var activeRefreshToken = (authContext) => (authContext == null ? void 0 : authContext.refreshToken) || getStoredValue("refresh_token") || null;
11780
+ var isRefreshBlocked = (authContext) => {
11781
+ const active = activeRefreshToken(authContext);
11782
+ if (active !== null && active === deadRefreshToken) return true;
11783
+ return Date.now() < transientRefreshFailureUntil;
11784
+ };
11785
+ var noteTransientRefreshFailure = () => {
11786
+ transientRefreshBackoffMs = Math.min(
11787
+ Math.max(transientRefreshBackoffMs * 2, MIN_REFRESH_BACKOFF_MS),
11788
+ MAX_REFRESH_BACKOFF_MS
11789
+ );
11790
+ transientRefreshFailureUntil = Date.now() + transientRefreshBackoffMs;
11791
+ };
11792
+ var markRefreshTokenDead = (token) => {
11793
+ if (token) deadRefreshToken = token;
11794
+ notifySessionExpired();
11795
+ };
11796
+ var resetRefreshCircuit = () => {
11797
+ deadRefreshToken = null;
11798
+ transientRefreshFailureUntil = 0;
11799
+ transientRefreshBackoffMs = 0;
11800
+ };
11486
11801
  var tokenStore = {};
11487
11802
  var getStoredValue = (key) => {
11488
11803
  var _a3;
@@ -11564,11 +11879,16 @@ var compareEmails = (email1, email2) => {
11564
11879
  return decodeURIComponent(email1.trim()).toLowerCase() === email2.trim().toLowerCase();
11565
11880
  };
11566
11881
  var ensureValidToken = async (organizationId, workspaceId, _slug, authContext, consentClient) => {
11882
+ const sandbox = getSandboxConfig();
11883
+ if (sandbox) {
11884
+ return sandbox.token;
11885
+ }
11567
11886
  const accessToken = (authContext == null ? void 0 : authContext.accessToken) || getStoredValue("access_token");
11568
11887
  if (accessToken && typeof accessToken === "string" && accessToken.trim() !== "" && !isJwtExpired(accessToken, TOKEN_EXPIRY_BUFFER_SECONDS)) {
11569
11888
  return accessToken;
11570
11889
  }
11571
11890
  if (isRefreshing && refreshPromise) return refreshPromise;
11891
+ if (isRefreshBlocked(authContext)) return null;
11572
11892
  isRefreshing = true;
11573
11893
  refreshPromise = performTokenRefresh(
11574
11894
  organizationId,
@@ -11596,6 +11916,7 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11596
11916
  if (!refreshToken || typeof refreshToken !== "string" || refreshToken.trim() === "") {
11597
11917
  if (authContext == null ? void 0 : authContext.onError)
11598
11918
  authContext.onError(new Error("No refresh token available"));
11919
+ notifySessionExpired();
11599
11920
  signOutPrivacyCenter();
11600
11921
  return null;
11601
11922
  }
@@ -11625,11 +11946,13 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11625
11946
  if (newRefreshToken)
11626
11947
  setStoredValue("refresh_token", newRefreshToken);
11627
11948
  }
11949
+ resetRefreshCircuit();
11628
11950
  return newAccessToken;
11629
11951
  }
11630
11952
  }
11631
11953
  if (authContext == null ? void 0 : authContext.onError)
11632
11954
  authContext.onError(new Error("Refresh token expired or revoked"));
11955
+ markRefreshTokenDead(refreshToken);
11633
11956
  signOutPrivacyCenter();
11634
11957
  return null;
11635
11958
  } catch (error) {
@@ -11637,7 +11960,12 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11637
11960
  authContext.onError(
11638
11961
  error instanceof Error ? error : new Error(String(error))
11639
11962
  );
11640
- signOutPrivacyCenter();
11963
+ if (isTerminalRefreshError(error)) {
11964
+ markRefreshTokenDead(refreshToken);
11965
+ signOutPrivacyCenter();
11966
+ } else {
11967
+ noteTransientRefreshFailure();
11968
+ }
11641
11969
  return null;
11642
11970
  }
11643
11971
  };
@@ -11701,15 +12029,73 @@ function syncJwtDataToStore(token) {
11701
12029
  if (authData.workspaceId) setStoredValue("pc_workspace_id", authData.workspaceId);
11702
12030
  return authData;
11703
12031
  }
11704
- function AuthProvider({ children, accessToken: initialAccessToken, refreshToken: initialRefreshToken, onError }) {
11705
- const initialAuth = extractJwtAuthData(initialAccessToken);
12032
+ function configureSandbox(props) {
12033
+ var _a3, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
12034
+ const token = (_a3 = props.token) == null ? void 0 : _a3.trim();
12035
+ if (!token) {
12036
+ setSandboxConfig(null);
12037
+ return null;
12038
+ }
12039
+ const organisationUuid = (_c = (_b = props.organisationUuid) == null ? void 0 : _b.trim()) != null ? _c : "";
12040
+ const workspaceUuid = (_e = (_d = props.workspaceUuid) == null ? void 0 : _d.trim()) != null ? _e : "";
12041
+ const ucic = (_g = (_f = props.sandboxUcic) == null ? void 0 : _f.trim()) != null ? _g : "";
12042
+ const subject = (_i = (_h = props.sandboxSubject) == null ? void 0 : _h.trim()) != null ? _i : "";
12043
+ const slug = (_k = (_j = props.slug) == null ? void 0 : _j.trim()) != null ? _k : "";
12044
+ if (!organisationUuid || !workspaceUuid) {
12045
+ throw new Error("Sandbox mode requires organisationUuid and workspaceUuid props");
12046
+ }
12047
+ if (!ucic && !subject) {
12048
+ throw new Error("Sandbox mode requires a UCIC, email, or mobile");
12049
+ }
12050
+ setSandboxConfig({
12051
+ token,
12052
+ ucic: ucic || void 0,
12053
+ subject,
12054
+ organisationUuid,
12055
+ workspaceUuid,
12056
+ slug
12057
+ });
12058
+ const contact = ucic || subject;
12059
+ setStoredValue("access_token", token);
12060
+ if (organisationUuid) setStoredValue("pc_org_id", organisationUuid);
12061
+ if (workspaceUuid) setStoredValue("pc_workspace_id", workspaceUuid);
12062
+ if (contact) setStoredValue("email", contact);
12063
+ return {
12064
+ email: contact || null,
12065
+ organizationId: organisationUuid || null,
12066
+ workspaceId: workspaceUuid || null,
12067
+ organizationName: null
12068
+ };
12069
+ }
12070
+ function AuthProvider(props) {
12071
+ const {
12072
+ children,
12073
+ accessToken: initialAccessToken,
12074
+ refreshToken: initialRefreshToken,
12075
+ token: sandboxToken,
12076
+ sandboxUcic,
12077
+ sandboxSubject,
12078
+ organisationUuid,
12079
+ workspaceUuid,
12080
+ slug,
12081
+ onError
12082
+ } = props;
12083
+ const [sandboxAuth] = useState(() => configureSandbox(props));
12084
+ const sandboxActive = sandboxAuth !== null;
12085
+ const initialAuth = sandboxAuth != null ? sandboxAuth : extractJwtAuthData(initialAccessToken);
11706
12086
  const [accessToken, setAccessToken] = useState(() => {
12087
+ if (sandboxActive) {
12088
+ return sandboxToken != null ? sandboxToken : "";
12089
+ }
11707
12090
  if (initialAccessToken && initialAccessToken.trim() !== "") {
11708
12091
  syncJwtDataToStore(initialAccessToken);
11709
12092
  }
11710
12093
  return initialAccessToken;
11711
12094
  });
11712
12095
  const [refreshToken, setRefreshToken] = useState(() => {
12096
+ if (sandboxActive) {
12097
+ return "";
12098
+ }
11713
12099
  if (initialRefreshToken && initialRefreshToken.trim() !== "") {
11714
12100
  setStoredValue("refresh_token", initialRefreshToken);
11715
12101
  }
@@ -11720,6 +12106,20 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11720
12106
  const [workspaceId, setWorkspaceId] = useState(initialAuth.workspaceId);
11721
12107
  const [organizationName, setOrganizationName] = useState(initialAuth.organizationName);
11722
12108
  useEffect(() => {
12109
+ if (!sandboxActive) {
12110
+ return;
12111
+ }
12112
+ const seeded = configureSandbox(props);
12113
+ if (seeded) {
12114
+ setEmail(seeded.email);
12115
+ setOrganizationId(seeded.organizationId);
12116
+ setWorkspaceId(seeded.workspaceId);
12117
+ setOrganizationName(seeded.organizationName);
12118
+ }
12119
+ return () => setSandboxConfig(null);
12120
+ }, [sandboxActive, sandboxToken, sandboxUcic, sandboxSubject, organisationUuid, workspaceUuid, slug]);
12121
+ useEffect(() => {
12122
+ if (sandboxActive) return;
11723
12123
  if (accessToken) {
11724
12124
  const authData = syncJwtDataToStore(accessToken);
11725
12125
  setEmail(authData.email);
@@ -11727,11 +12127,13 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11727
12127
  setWorkspaceId(authData.workspaceId);
11728
12128
  setOrganizationName(authData.organizationName);
11729
12129
  }
11730
- }, [accessToken]);
12130
+ }, [accessToken, sandboxActive]);
11731
12131
  useEffect(() => {
12132
+ if (sandboxActive) return;
11732
12133
  if (refreshToken) setStoredValue("refresh_token", refreshToken);
11733
- }, [refreshToken]);
12134
+ }, [refreshToken, sandboxActive]);
11734
12135
  useEffect(() => {
12136
+ if (sandboxActive) return;
11735
12137
  setAccessToken(initialAccessToken);
11736
12138
  if (initialAccessToken && initialAccessToken.trim() !== "") {
11737
12139
  const authData = syncJwtDataToStore(initialAccessToken);
@@ -11740,10 +12142,11 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11740
12142
  setWorkspaceId(authData.workspaceId);
11741
12143
  setOrganizationName(authData.organizationName);
11742
12144
  }
11743
- }, [initialAccessToken]);
12145
+ }, [initialAccessToken, sandboxActive]);
11744
12146
  useEffect(() => {
12147
+ if (sandboxActive) return;
11745
12148
  setRefreshToken(initialRefreshToken);
11746
- }, [initialRefreshToken]);
12149
+ }, [initialRefreshToken, sandboxActive]);
11747
12150
  const updateTokens = useCallback((newAccessToken, newRefreshToken) => {
11748
12151
  setAccessToken(newAccessToken);
11749
12152
  if (newRefreshToken) setRefreshToken(newRefreshToken);
@@ -12000,8 +12403,17 @@ function DataAvailabilityProvider({ children }) {
12000
12403
  mountedRef.current = false;
12001
12404
  };
12002
12405
  }, []);
12406
+ useEffect3(() => {
12407
+ setSessionExpiredListener(() => {
12408
+ if (!mountedRef.current) return;
12409
+ runIdRef.current += 1;
12410
+ setStatus("session-expired");
12411
+ });
12412
+ return () => setSessionExpiredListener(null);
12413
+ }, []);
12003
12414
  const runCheck = useCallback4(async () => {
12004
12415
  if (!organizationId || !workspaceId) return;
12416
+ if (isRefreshBlocked(authContext)) return;
12005
12417
  const runId = ++runIdRef.current;
12006
12418
  setStatus("checking");
12007
12419
  const contact = email;
@@ -14138,7 +14550,7 @@ import { useTranslation as useTranslation10 } from "react-i18next";
14138
14550
 
14139
14551
  // src/RedactoPrivacyCenter/lib/consentManagerUtils.ts
14140
14552
  function purposeItemToUserConsent(purpose, group) {
14141
- var _a3, _b, _c, _d;
14553
+ var _a3, _b, _c, _d, _e;
14142
14554
  return {
14143
14555
  purpose_uuid: purpose.purpose_uuid,
14144
14556
  purpose: purpose.name,
@@ -14152,6 +14564,7 @@ function purposeItemToUserConsent(purpose, group) {
14152
14564
  product_name: group.product_name,
14153
14565
  product_description: group.product_description,
14154
14566
  nominator_info: (_d = group.nominator) != null ? _d : void 0,
14567
+ revoke_warning_message: (_e = purpose.revoke_warning_message) != null ? _e : null,
14155
14568
  notice_uuid: purpose.notice_uuid
14156
14569
  };
14157
14570
  }
@@ -14419,7 +14832,7 @@ var ModifyConsentModal = ({
14419
14832
  action: "revoke",
14420
14833
  buttonLabel: t("revokeConsent"),
14421
14834
  buttonColor: colors.error,
14422
- warningMessage: t("revokeConsentWarning"),
14835
+ warningMessage: selectedRecord.revoke_warning_message || t("revokeConsentWarning"),
14423
14836
  description: nominatorLabel ? t("aboutToModifyConsentOnBehalf", { nominator: nominatorLabel }) : t("aboutToModifyConsent")
14424
14837
  };
14425
14838
  }
@@ -18136,6 +18549,7 @@ function useUnreadCount() {
18136
18549
  const loadRef = useRef8();
18137
18550
  loadRef.current = async () => {
18138
18551
  if (!organizationId || !workspaceId) return;
18552
+ if (isRefreshBlocked(authContext)) return;
18139
18553
  const res = await fetchUnreadCount(organizationId, workspaceId, authContext, consentClient);
18140
18554
  if (res && typeof res.count === "number") setCount(res.count);
18141
18555
  };
@@ -18461,17 +18875,255 @@ function PrivacyCenterEmptyState() {
18461
18875
  return /* @__PURE__ */ jsx49(PCEmpty, { iconName: "shield", title: t("noDataTitle"), description: t("noDataDescription") });
18462
18876
  }
18463
18877
 
18878
+ // src/RedactoPrivacyCenter/components/PrivacyCenterSessionExpired.tsx
18879
+ import { useTranslation as useTranslation20 } from "react-i18next";
18880
+ import { jsx as jsx50 } from "react/jsx-runtime";
18881
+ function PrivacyCenterSessionExpired() {
18882
+ const { t } = useTranslation20();
18883
+ return /* @__PURE__ */ jsx50(
18884
+ PCEmpty,
18885
+ {
18886
+ iconName: "shield",
18887
+ title: t("sessionExpiredTitle"),
18888
+ description: t("sessionExpiredDescription")
18889
+ }
18890
+ );
18891
+ }
18892
+
18893
+ // src/RedactoPrivacyCenter/components/SelectUserGate.tsx
18894
+ import { useCallback as useCallback11, useEffect as useEffect16, useState as useState22 } from "react";
18895
+ import { StyleSheet as StyleSheet41, View as View39 } from "react-native";
18896
+
18897
+ // src/RedactoPrivacyCenter/context/ProfileSwitchContext.tsx
18898
+ import { createContext as createContext7, useContext as useContext7 } from "react";
18899
+ import { jsx as jsx51 } from "react/jsx-runtime";
18900
+ var ProfileSwitchContext = createContext7({
18901
+ switchProfile: null
18902
+ });
18903
+ function ProfileSwitchProvider({
18904
+ switchProfile,
18905
+ children
18906
+ }) {
18907
+ return /* @__PURE__ */ jsx51(ProfileSwitchContext.Provider, { value: { switchProfile }, children });
18908
+ }
18909
+ function useProfileSwitch() {
18910
+ return useContext7(ProfileSwitchContext);
18911
+ }
18912
+
18913
+ // src/RedactoPrivacyCenter/components/SelectUser.tsx
18914
+ import { ScrollView as ScrollView8, StyleSheet as StyleSheet40, Text as Text30, TouchableOpacity as TouchableOpacity15, View as View38 } from "react-native";
18915
+ import { useTranslation as useTranslation21 } from "react-i18next";
18916
+
18917
+ // src/RedactoPrivacyCenter/lib/identityLabels.ts
18918
+ var identityPrimaryValue = (candidate) => {
18919
+ const orgUserId = candidate.org_user_id || "";
18920
+ const email = candidate.primary_email || "";
18921
+ const mobile = candidate.primary_mobile || "";
18922
+ return { orgUserId, fallback: email || mobile || candidate.uuid };
18923
+ };
18924
+ var identitySecondaryLabels = (candidate, primaryLabel) => {
18925
+ const email = candidate.primary_email || "";
18926
+ const mobile = candidate.primary_mobile || "";
18927
+ return [email, mobile].filter(
18928
+ (value, index, all) => value !== "" && value !== primaryLabel && all.indexOf(value) === index
18929
+ );
18930
+ };
18931
+ var selectableIdentities = (candidates) => candidates.filter((candidate) => Boolean(candidate.uuid));
18932
+
18933
+ // src/RedactoPrivacyCenter/components/SelectUser.tsx
18934
+ import { jsx as jsx52, jsxs as jsxs32 } from "react/jsx-runtime";
18935
+ var SelectUser = ({
18936
+ candidates,
18937
+ onSelect,
18938
+ busyUuid,
18939
+ error
18940
+ }) => {
18941
+ const { t } = useTranslation21();
18942
+ const { colors } = useTheme();
18943
+ const selectable = selectableIdentities(candidates);
18944
+ const busy = busyUuid !== null;
18945
+ return /* @__PURE__ */ jsxs32(ScrollView8, { contentContainerStyle: styles39.container, children: [
18946
+ /* @__PURE__ */ jsx52(Text30, { style: [typography.title, styles39.heading, { color: colors.text }], children: t("chooseYourProfile") }),
18947
+ /* @__PURE__ */ jsx52(Text30, { style: [typography.body, styles39.subtitle, { color: colors.textSecondary }], children: t("loginIdentifierLinkedToMultipleProfiles") }),
18948
+ error ? /* @__PURE__ */ jsx52(Text30, { style: [typography.caption, styles39.error, { color: colors.error }], children: error }) : null,
18949
+ selectable.map((candidate) => {
18950
+ const { orgUserId, fallback } = identityPrimaryValue(candidate);
18951
+ const primaryLabel = orgUserId ? t("userIdLabel", { id: orgUserId }) : fallback;
18952
+ const secondaryLabels = identitySecondaryLabels(candidate, primaryLabel);
18953
+ const isBusy = busyUuid === candidate.uuid;
18954
+ return /* @__PURE__ */ jsxs32(
18955
+ TouchableOpacity15,
18956
+ {
18957
+ accessibilityRole: "button",
18958
+ disabled: busy,
18959
+ onPress: () => onSelect(candidate.uuid),
18960
+ style: [
18961
+ styles39.row,
18962
+ {
18963
+ backgroundColor: colors.surface,
18964
+ borderColor: isBusy ? colors.primary : colors.border
18965
+ }
18966
+ ],
18967
+ children: [
18968
+ /* @__PURE__ */ jsxs32(View38, { style: styles39.rowText, children: [
18969
+ /* @__PURE__ */ jsx52(Text30, { style: [typography.label, { color: colors.text }], children: primaryLabel }),
18970
+ secondaryLabels.map((label) => /* @__PURE__ */ jsx52(
18971
+ Text30,
18972
+ {
18973
+ style: [typography.caption, styles39.secondary, { color: colors.textSecondary }],
18974
+ children: label
18975
+ },
18976
+ label
18977
+ ))
18978
+ ] }),
18979
+ isBusy ? /* @__PURE__ */ jsx52(Text30, { style: [typography.caption, { color: colors.textSecondary }], children: t("signingInEllipsis") }) : /* @__PURE__ */ jsx52(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary })
18980
+ ]
18981
+ },
18982
+ candidate.uuid
18983
+ );
18984
+ })
18985
+ ] });
18986
+ };
18987
+ var styles39 = StyleSheet40.create({
18988
+ container: { padding: spacing.lg },
18989
+ heading: { textAlign: "center" },
18990
+ subtitle: { textAlign: "center", marginTop: spacing.xs, marginBottom: spacing.lg },
18991
+ error: { textAlign: "center", marginBottom: spacing.md },
18992
+ row: {
18993
+ flexDirection: "row",
18994
+ alignItems: "center",
18995
+ borderWidth: 1,
18996
+ borderRadius: radii.md,
18997
+ padding: spacing.md,
18998
+ marginBottom: spacing.sm
18999
+ },
19000
+ rowText: { flex: 1 },
19001
+ secondary: { marginTop: 2 }
19002
+ });
19003
+
19004
+ // src/RedactoPrivacyCenter/components/SelectUserGate.tsx
19005
+ import { jsx as jsx53 } from "react/jsx-runtime";
19006
+ function SelectUserGate({ children }) {
19007
+ var _a3, _b;
19008
+ const { accessToken, organizationId, workspaceId, updateTokens } = useAuth();
19009
+ const { consentClient } = useBaseUrl();
19010
+ const { colors } = useTheme();
19011
+ const insets = useSafeInsets();
19012
+ const [phase, setPhase] = useState22("checking");
19013
+ const [candidates, setCandidates] = useState22([]);
19014
+ const [busyUuid, setBusyUuid] = useState22(null);
19015
+ const [selectError, setSelectError] = useState22(null);
19016
+ const [pinnedOrgUserId, setPinnedOrgUserId] = useState22(null);
19017
+ const tokenOrgUserId = ((_b = (_a3 = decodeJwtToken(accessToken)) == null ? void 0 : _a3.user_data) == null ? void 0 : _b.org_user_id) || "";
19018
+ useEffect16(() => {
19019
+ let cancelled = false;
19020
+ if (isSandboxMode() || !organizationId || !workspaceId || !accessToken) {
19021
+ setPhase("resolved");
19022
+ return;
19023
+ }
19024
+ const isPinned = Boolean(pinnedOrgUserId) && pinnedOrgUserId === tokenOrgUserId;
19025
+ setPhase(isPinned ? "resolved" : "checking");
19026
+ (async () => {
19027
+ var _a4;
19028
+ try {
19029
+ const res = await consentClient.listIdentities({
19030
+ organisationUuid: organizationId,
19031
+ workspaceUuid: workspaceId,
19032
+ authToken: accessToken
19033
+ });
19034
+ if (cancelled) return;
19035
+ const list = (_a4 = res == null ? void 0 : res.identities) != null ? _a4 : [];
19036
+ setCandidates(list);
19037
+ setPhase(list.length > 1 && !isPinned ? "picking" : "resolved");
19038
+ } catch {
19039
+ if (cancelled) return;
19040
+ setCandidates([]);
19041
+ setPhase("resolved");
19042
+ }
19043
+ })();
19044
+ return () => {
19045
+ cancelled = true;
19046
+ };
19047
+ }, [organizationId, workspaceId, tokenOrgUserId]);
19048
+ const handleSelect = useCallback11(
19049
+ async (principalUuid) => {
19050
+ var _a4, _b2;
19051
+ if (!principalUuid || busyUuid || !organizationId || !workspaceId) return;
19052
+ setBusyUuid(principalUuid);
19053
+ setSelectError(null);
19054
+ try {
19055
+ const res = await consentClient.selectPrincipal(
19056
+ {
19057
+ organisationUuid: organizationId,
19058
+ workspaceUuid: workspaceId,
19059
+ authToken: accessToken
19060
+ },
19061
+ principalUuid
19062
+ );
19063
+ if (!(res == null ? void 0 : res.token) || !(res == null ? void 0 : res.refresh_token)) {
19064
+ throw new Error("select-principal returned no tokens");
19065
+ }
19066
+ const pinned = ((_b2 = (_a4 = decodeJwtToken(res.token)) == null ? void 0 : _a4.user_data) == null ? void 0 : _b2.org_user_id) || null;
19067
+ setPinnedOrgUserId(pinned);
19068
+ setPhase("resolved");
19069
+ updateTokens(res.token, res.refresh_token);
19070
+ } catch (error) {
19071
+ setSelectError(
19072
+ error instanceof Error ? error.message : "Failed to switch profile"
19073
+ );
19074
+ } finally {
19075
+ setBusyUuid(null);
19076
+ }
19077
+ },
19078
+ [accessToken, busyUuid, consentClient, organizationId, workspaceId, updateTokens]
19079
+ );
19080
+ const canSwitch = candidates.length > 1;
19081
+ const switchProfile = useCallback11(() => {
19082
+ if (!canSwitch) return;
19083
+ setSelectError(null);
19084
+ setPhase("picking");
19085
+ }, [canSwitch]);
19086
+ if (phase === "checking" || phase === "picking") {
19087
+ return /* @__PURE__ */ jsx53(
19088
+ View39,
19089
+ {
19090
+ style: [
19091
+ styles40.screen,
19092
+ {
19093
+ backgroundColor: colors.canvasSubtle,
19094
+ paddingTop: insets.top,
19095
+ paddingBottom: insets.bottom
19096
+ }
19097
+ ],
19098
+ children: phase === "checking" ? /* @__PURE__ */ jsx53(PCLoader, {}) : /* @__PURE__ */ jsx53(
19099
+ SelectUser,
19100
+ {
19101
+ candidates,
19102
+ onSelect: handleSelect,
19103
+ busyUuid,
19104
+ error: selectError
19105
+ }
19106
+ )
19107
+ }
19108
+ );
19109
+ }
19110
+ return /* @__PURE__ */ jsx53(ProfileSwitchProvider, { switchProfile: canSwitch ? switchProfile : null, children });
19111
+ }
19112
+ var styles40 = StyleSheet41.create({
19113
+ screen: { flex: 1 }
19114
+ });
19115
+
18464
19116
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
18465
- import { useState as useState23, useMemo as useMemo20, useEffect as useEffect18 } from "react";
18466
- import { View as View45, Text as Text37, StyleSheet as StyleSheet47, ActivityIndicator as ActivityIndicator8, Platform as Platform7 } from "react-native";
18467
- import { useTranslation as useTranslation25 } from "react-i18next";
19117
+ import { useState as useState24, useMemo as useMemo20, useEffect as useEffect19 } from "react";
19118
+ import { View as View47, Text as Text38, StyleSheet as StyleSheet49, ActivityIndicator as ActivityIndicator8, Platform as Platform7 } from "react-native";
19119
+ import { useTranslation as useTranslation27 } from "react-i18next";
18468
19120
 
18469
19121
  // src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx
18470
- import { View as View38, Text as Text30, ScrollView as ScrollView8, StyleSheet as StyleSheet40 } from "react-native";
18471
- import { useTranslation as useTranslation20 } from "react-i18next";
18472
- import { jsx as jsx50, jsxs as jsxs32 } from "react/jsx-runtime";
19122
+ import { View as View40, Text as Text31, ScrollView as ScrollView9, StyleSheet as StyleSheet42 } from "react-native";
19123
+ import { useTranslation as useTranslation22 } from "react-i18next";
19124
+ import { jsx as jsx54, jsxs as jsxs33 } from "react/jsx-runtime";
18473
19125
  function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18474
- const { t } = useTranslation20();
19126
+ const { t } = useTranslation22();
18475
19127
  const { colors } = useTheme();
18476
19128
  const { listBottom } = usePrivacyCenterInsets({ hasFooter: true });
18477
19129
  const details = selectedCase.request_details;
@@ -18503,36 +19155,36 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18503
19155
  }
18504
19156
  const description = selectedCase.description_display || selectedCase.description;
18505
19157
  const hasDetails = description || details && (details.purposes && details.purposes.length > 0 || details.correction_data && details.correction_data.length > 0 || details.grievance_types && details.grievance_types.length > 0 || details.nomination_data);
18506
- return /* @__PURE__ */ jsxs32(ScrollView8, { style: [styles39.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles39.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
18507
- /* @__PURE__ */ jsx50(View38, { style: styles39.timeline, children: steps.map((step, i) => {
19158
+ return /* @__PURE__ */ jsxs33(ScrollView9, { style: [styles41.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles41.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
19159
+ /* @__PURE__ */ jsx54(View40, { style: styles41.timeline, children: steps.map((step, i) => {
18508
19160
  const isLast = i === steps.length - 1;
18509
- return /* @__PURE__ */ jsxs32(View38, { style: styles39.stepRow, children: [
18510
- /* @__PURE__ */ jsxs32(View38, { style: styles39.gutter, children: [
18511
- /* @__PURE__ */ jsx50(
18512
- View38,
19161
+ return /* @__PURE__ */ jsxs33(View40, { style: styles41.stepRow, children: [
19162
+ /* @__PURE__ */ jsxs33(View40, { style: styles41.gutter, children: [
19163
+ /* @__PURE__ */ jsx54(
19164
+ View40,
18513
19165
  {
18514
19166
  style: [
18515
- styles39.dot,
19167
+ styles41.dot,
18516
19168
  step.state === "upcoming" ? { backgroundColor: colors.canvasSubtle, borderWidth: 2, borderColor: step.danger ? colors.error : colors.border } : { backgroundColor: step.color }
18517
19169
  ],
18518
- children: step.state === "done" ? /* @__PURE__ */ jsx50(Icon, { name: "check", size: 11, color: colors.primaryText, strokeWidth: 3 }) : step.state === "current" ? /* @__PURE__ */ jsx50(View38, { style: [styles39.dotInner, { backgroundColor: colors.primaryText }] }) : null
19170
+ children: step.state === "done" ? /* @__PURE__ */ jsx54(Icon, { name: "check", size: 11, color: colors.primaryText, strokeWidth: 3 }) : step.state === "current" ? /* @__PURE__ */ jsx54(View40, { style: [styles41.dotInner, { backgroundColor: colors.primaryText }] }) : null
18519
19171
  }
18520
19172
  ),
18521
- !isLast ? /* @__PURE__ */ jsx50(View38, { style: [styles39.connector, { backgroundColor: colors.border }] }) : null
19173
+ !isLast ? /* @__PURE__ */ jsx54(View40, { style: [styles41.connector, { backgroundColor: colors.border }] }) : null
18522
19174
  ] }),
18523
- /* @__PURE__ */ jsxs32(View38, { style: [styles39.stepContent, isLast && styles39.stepContentLast], children: [
18524
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
18525
- step.date ? /* @__PURE__ */ jsx50(Text30, { style: [styles39.stepDate, { color: step.danger ? colors.error : colors.textSecondary }], children: step.date }) : null
19175
+ /* @__PURE__ */ jsxs33(View40, { style: [styles41.stepContent, isLast && styles41.stepContentLast], children: [
19176
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
19177
+ step.date ? /* @__PURE__ */ jsx54(Text31, { style: [styles41.stepDate, { color: step.danger ? colors.error : colors.textSecondary }], children: step.date }) : null
18526
19178
  ] })
18527
19179
  ] }, `${step.label}-${i}`);
18528
19180
  }) }),
18529
- hasDetails ? /* @__PURE__ */ jsxs32(View38, { style: [styles39.card, elevation.card, { backgroundColor: colors.surface }], children: [
18530
- description ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18531
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
18532
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.descriptionText, { color: colors.text }], children: description })
19181
+ hasDetails ? /* @__PURE__ */ jsxs33(View40, { style: [styles41.card, elevation.card, { backgroundColor: colors.surface }], children: [
19182
+ description ? /* @__PURE__ */ jsxs33(View40, { style: styles41.block, children: [
19183
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
19184
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.descriptionText, { color: colors.text }], children: description })
18533
19185
  ] }) : null,
18534
- (details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18535
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("purposesInvolved") || t("purposes") || "Purposes" }),
19186
+ (details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ jsxs33(View40, { style: styles41.block, children: [
19187
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("purposesInvolved") || t("purposes") || "Purposes" }),
18536
19188
  details.purposes.map((rawP, idx) => {
18537
19189
  const p = (rawP == null ? void 0 : rawP.purpose) ? rawP.purpose : rawP;
18538
19190
  const purposeId = (p == null ? void 0 : p.uuid) || (p == null ? void 0 : p.purpose_uuid) || (rawP == null ? void 0 : rawP.purpose_uuid) || idx;
@@ -18540,10 +19192,10 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18540
19192
  const purposeDescription = (p == null ? void 0 : p.description) || (rawP == null ? void 0 : rawP.description);
18541
19193
  const dataElements = Array.isArray(p == null ? void 0 : p.data_elements) ? p.data_elements.filter((de) => (de == null ? void 0 : de.selected) || (de == null ? void 0 : de.given_consent)) : [];
18542
19194
  const dataElementUuids = Array.isArray(rawP == null ? void 0 : rawP.data_element_uuids) ? rawP.data_element_uuids : Array.isArray(p == null ? void 0 : p.data_element_uuids) ? p.data_element_uuids : [];
18543
- return /* @__PURE__ */ jsxs32(View38, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet40.hairlineWidth }], children: [
18544
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemTitle, { color: colors.text }], children: purposeName }),
18545
- purposeDescription ? /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
18546
- dataElements.length > 0 ? /* @__PURE__ */ jsx50(View38, { style: styles39.chipRow, children: dataElements.map((de) => /* @__PURE__ */ jsx50(PCBadge, { status: "info", label: de.name }, de.uuid)) }) : dataElementUuids.length > 0 ? /* @__PURE__ */ jsxs32(Text30, { style: [styles39.itemDesc, { color: colors.textSecondary }], children: [
19195
+ return /* @__PURE__ */ jsxs33(View40, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet42.hairlineWidth }], children: [
19196
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.itemTitle, { color: colors.text }], children: purposeName }),
19197
+ purposeDescription ? /* @__PURE__ */ jsx54(Text31, { style: [styles41.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
19198
+ dataElements.length > 0 ? /* @__PURE__ */ jsx54(View40, { style: styles41.chipRow, children: dataElements.map((de) => /* @__PURE__ */ jsx54(PCBadge, { status: "info", label: de.name }, de.uuid)) }) : dataElementUuids.length > 0 ? /* @__PURE__ */ jsxs33(Text31, { style: [styles41.itemDesc, { color: colors.textSecondary }], children: [
18547
19199
  dataElementUuids.length,
18548
19200
  " ",
18549
19201
  t("dataElements") || "data elements"
@@ -18551,44 +19203,44 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18551
19203
  ] }, purposeId);
18552
19204
  })
18553
19205
  ] }) : null,
18554
- (details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18555
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
18556
- details.correction_data.map((item, idx) => /* @__PURE__ */ jsxs32(View38, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet40.hairlineWidth }], children: [
18557
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemTitle, { color: colors.text }], children: item.name }),
18558
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValues, children: [
18559
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValue, children: [
18560
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
18561
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionText, { color: colors.text }], children: item.curr_value || "-" })
19206
+ (details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ jsxs33(View40, { style: styles41.block, children: [
19207
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
19208
+ details.correction_data.map((item, idx) => /* @__PURE__ */ jsxs33(View40, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet42.hairlineWidth }], children: [
19209
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.itemTitle, { color: colors.text }], children: item.name }),
19210
+ /* @__PURE__ */ jsxs33(View40, { style: styles41.correctionValues, children: [
19211
+ /* @__PURE__ */ jsxs33(View40, { style: styles41.correctionValue, children: [
19212
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
19213
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.correctionText, { color: colors.text }], children: item.curr_value || "-" })
18562
19214
  ] }),
18563
- /* @__PURE__ */ jsx50(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
18564
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValue, children: [
18565
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
18566
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionText, { color: colors.primary }], children: item.new_value || "-" })
19215
+ /* @__PURE__ */ jsx54(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
19216
+ /* @__PURE__ */ jsxs33(View40, { style: styles41.correctionValue, children: [
19217
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
19218
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.correctionText, { color: colors.primary }], children: item.new_value || "-" })
18567
19219
  ] })
18568
19220
  ] })
18569
19221
  ] }, idx))
18570
19222
  ] }) : null,
18571
- (details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18572
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
18573
- /* @__PURE__ */ jsx50(View38, { style: styles39.chipRow, children: details.grievance_types.map((g, idx) => /* @__PURE__ */ jsx50(PCBadge, { status: "warning", label: (g.grievance || "").replace(/_/g, " ") }, idx)) })
19223
+ (details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ jsxs33(View40, { style: styles41.block, children: [
19224
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
19225
+ /* @__PURE__ */ jsx54(View40, { style: styles41.chipRow, children: details.grievance_types.map((g, idx) => /* @__PURE__ */ jsx54(PCBadge, { status: "warning", label: (g.grievance || "").replace(/_/g, " ") }, idx)) })
18574
19226
  ] }) : null,
18575
- (details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18576
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
18577
- details.nomination_data.nominee_email ? /* @__PURE__ */ jsxs32(View38, { style: styles39.kvRow, children: [
18578
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
18579
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvValue, { color: colors.text }], children: details.nomination_data.nominee_email })
19227
+ (details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ jsxs33(View40, { style: styles41.block, children: [
19228
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
19229
+ details.nomination_data.nominee_email ? /* @__PURE__ */ jsxs33(View40, { style: styles41.kvRow, children: [
19230
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
19231
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_email })
18580
19232
  ] }) : null,
18581
- details.nomination_data.nominee_mobile ? /* @__PURE__ */ jsxs32(View38, { style: styles39.kvRow, children: [
18582
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
18583
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvValue, { color: colors.text }], children: details.nomination_data.nominee_mobile })
19233
+ details.nomination_data.nominee_mobile ? /* @__PURE__ */ jsxs33(View40, { style: styles41.kvRow, children: [
19234
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
19235
+ /* @__PURE__ */ jsx54(Text31, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_mobile })
18584
19236
  ] }) : null
18585
19237
  ] }) : null
18586
19238
  ] }) : null,
18587
- /* @__PURE__ */ jsx50(View38, { style: { marginTop: "auto" }, children: /* @__PURE__ */ jsx50(Footer, {}) })
19239
+ /* @__PURE__ */ jsx54(View40, { style: { marginTop: "auto" }, children: /* @__PURE__ */ jsx54(Footer, {}) })
18588
19240
  ] });
18589
19241
  }
18590
19242
  var DOT = 22;
18591
- var styles39 = StyleSheet40.create({
19243
+ var styles41 = StyleSheet42.create({
18592
19244
  container: {
18593
19245
  flex: 1
18594
19246
  },
@@ -18709,21 +19361,21 @@ var styles39 = StyleSheet40.create({
18709
19361
  });
18710
19362
 
18711
19363
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
18712
- import { useState as useState22, useRef as useRef10, useEffect as useEffect17, useCallback as useCallback11, useMemo as useMemo19 } from "react";
18713
- import { View as View44, Text as Text36, FlatList as FlatList2, StyleSheet as StyleSheet46, ActivityIndicator as ActivityIndicator7 } from "react-native";
18714
- import { useTranslation as useTranslation24 } from "react-i18next";
19364
+ import { useState as useState23, useRef as useRef10, useEffect as useEffect18, useCallback as useCallback12, useMemo as useMemo19 } from "react";
19365
+ import { View as View46, Text as Text37, FlatList as FlatList2, StyleSheet as StyleSheet48, ActivityIndicator as ActivityIndicator7 } from "react-native";
19366
+ import { useTranslation as useTranslation26 } from "react-i18next";
18715
19367
 
18716
19368
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
18717
- import React22 from "react";
18718
- import { useTranslation as useTranslation22 } from "react-i18next";
19369
+ import React23 from "react";
19370
+ import { useTranslation as useTranslation24 } from "react-i18next";
18719
19371
 
18720
19372
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18721
- import React21 from "react";
18722
- import { StyleSheet as StyleSheet42, Text as Text32, View as View40 } from "react-native";
19373
+ import React22 from "react";
19374
+ import { StyleSheet as StyleSheet44, Text as Text33, View as View42 } from "react-native";
18723
19375
 
18724
19376
  // src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx
18725
- import { View as View39, Text as Text31, TouchableOpacity as TouchableOpacity15, Linking, StyleSheet as StyleSheet41 } from "react-native";
18726
- import { jsx as jsx51, jsxs as jsxs33 } from "react/jsx-runtime";
19377
+ import { View as View41, Text as Text32, TouchableOpacity as TouchableOpacity16, Linking, StyleSheet as StyleSheet43 } from "react-native";
19378
+ import { jsx as jsx55, jsxs as jsxs34 } from "react/jsx-runtime";
18727
19379
  function AttachmentCard({ doc }) {
18728
19380
  const { colors } = useTheme();
18729
19381
  const downloadUrl = getDownloadUrl(doc.file_url);
@@ -18732,28 +19384,28 @@ function AttachmentCard({ doc }) {
18732
19384
  Linking.openURL(downloadUrl);
18733
19385
  }
18734
19386
  };
18735
- return /* @__PURE__ */ jsxs33(
18736
- TouchableOpacity15,
19387
+ return /* @__PURE__ */ jsxs34(
19388
+ TouchableOpacity16,
18737
19389
  {
18738
- style: [styles40.container, { backgroundColor: colors.surface, borderColor: colors.border }],
19390
+ style: [styles42.container, { backgroundColor: colors.surface, borderColor: colors.border }],
18739
19391
  onPress: handlePress,
18740
19392
  disabled: !downloadUrl,
18741
19393
  activeOpacity: 0.7,
18742
19394
  children: [
18743
- /* @__PURE__ */ jsx51(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
18744
- /* @__PURE__ */ jsxs33(View39, { style: styles40.info, children: [
18745
- /* @__PURE__ */ jsx51(Text31, { style: [styles40.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
18746
- doc.file_size ? /* @__PURE__ */ jsx51(Text31, { style: [styles40.fileSize, { color: colors.textSecondary }], children: formatFileSize(doc.file_size) }) : null
19395
+ /* @__PURE__ */ jsx55(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
19396
+ /* @__PURE__ */ jsxs34(View41, { style: styles42.info, children: [
19397
+ /* @__PURE__ */ jsx55(Text32, { style: [styles42.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
19398
+ doc.file_size ? /* @__PURE__ */ jsx55(Text32, { style: [styles42.fileSize, { color: colors.textSecondary }], children: formatFileSize(doc.file_size) }) : null
18747
19399
  ] })
18748
19400
  ]
18749
19401
  }
18750
19402
  );
18751
19403
  }
18752
- var styles40 = StyleSheet41.create({
19404
+ var styles42 = StyleSheet43.create({
18753
19405
  container: {
18754
19406
  flexDirection: "row",
18755
19407
  alignItems: "center",
18756
- borderWidth: StyleSheet41.hairlineWidth,
19408
+ borderWidth: StyleSheet43.hairlineWidth,
18757
19409
  borderRadius: radii.md,
18758
19410
  paddingHorizontal: spacing.sm + 2,
18759
19411
  paddingVertical: spacing.sm,
@@ -18773,11 +19425,11 @@ var styles40 = StyleSheet41.create({
18773
19425
  });
18774
19426
 
18775
19427
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18776
- import { jsx as jsx52, jsxs as jsxs34 } from "react/jsx-runtime";
19428
+ import { jsx as jsx56, jsxs as jsxs35 } from "react/jsx-runtime";
18777
19429
  var AVATAR_SIZE = 28;
18778
19430
  var AVATAR_GUTTER = 36;
18779
19431
  function TeamAvatar({ tint }) {
18780
- return /* @__PURE__ */ jsx52(View40, { style: [styles41.avatar, { backgroundColor: withAlpha(tint, 0.13) }], children: /* @__PURE__ */ jsx52(Icon, { name: "shield-check", size: 15, color: tint, strokeWidth: 2 }) });
19432
+ return /* @__PURE__ */ jsx56(View42, { style: [styles43.avatar, { backgroundColor: withAlpha(tint, 0.13) }], children: /* @__PURE__ */ jsx56(Icon, { name: "shield-check", size: 15, color: tint, strokeWidth: 2 }) });
18781
19433
  }
18782
19434
  function ChatBubbleImpl({
18783
19435
  message,
@@ -18804,28 +19456,28 @@ function ChatBubbleImpl({
18804
19456
  borderBottomRightRadius: BUBBLE_RADIUS,
18805
19457
  borderBottomLeftRadius: tailRadius
18806
19458
  };
18807
- const bubble = /* @__PURE__ */ jsxs34(View40, { style: [styles41.bubble, bubbleStyle], children: [
18808
- !isPrincipal && isFirstInGroup ? /* @__PURE__ */ jsx52(Text32, { style: [styles41.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
18809
- message.body ? /* @__PURE__ */ jsx52(Text32, { style: [styles41.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
18810
- message.documents && message.documents.length > 0 ? /* @__PURE__ */ jsx52(View40, { style: styles41.attachments, children: message.documents.map((doc) => /* @__PURE__ */ jsx52(AttachmentCard, { doc }, doc.uuid)) }) : null
19459
+ const bubble = /* @__PURE__ */ jsxs35(View42, { style: [styles43.bubble, bubbleStyle], children: [
19460
+ !isPrincipal && isFirstInGroup ? /* @__PURE__ */ jsx56(Text33, { style: [styles43.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
19461
+ message.body ? /* @__PURE__ */ jsx56(Text33, { style: [styles43.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
19462
+ message.documents && message.documents.length > 0 ? /* @__PURE__ */ jsx56(View42, { style: styles43.attachments, children: message.documents.map((doc) => /* @__PURE__ */ jsx56(AttachmentCard, { doc }, doc.uuid)) }) : null
18811
19463
  ] });
18812
- return /* @__PURE__ */ jsxs34(
18813
- View40,
19464
+ return /* @__PURE__ */ jsxs35(
19465
+ View42,
18814
19466
  {
18815
19467
  style: [
18816
- styles41.row,
18817
- isPrincipal ? styles41.rowRight : styles41.rowLeft,
19468
+ styles43.row,
19469
+ isPrincipal ? styles43.rowRight : styles43.rowLeft,
18818
19470
  { marginTop: isFirstInGroup ? spacing.md : 2 }
18819
19471
  ],
18820
19472
  children: [
18821
- !isPrincipal ? /* @__PURE__ */ jsx52(View40, { style: styles41.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ jsx52(TeamAvatar, { tint: colors.primary }) : null }) : null,
18822
- /* @__PURE__ */ jsxs34(View40, { style: [styles41.column, isPrincipal ? styles41.columnRight : styles41.columnLeft], children: [
19473
+ !isPrincipal ? /* @__PURE__ */ jsx56(View42, { style: styles43.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ jsx56(TeamAvatar, { tint: colors.primary }) : null }) : null,
19474
+ /* @__PURE__ */ jsxs35(View42, { style: [styles43.column, isPrincipal ? styles43.columnRight : styles43.columnLeft], children: [
18823
19475
  bubble,
18824
- isLastInGroup ? /* @__PURE__ */ jsx52(
18825
- Text32,
19476
+ isLastInGroup ? /* @__PURE__ */ jsx56(
19477
+ Text33,
18826
19478
  {
18827
19479
  style: [
18828
- styles41.timestamp,
19480
+ styles43.timestamp,
18829
19481
  { color: colors.textSecondary, textAlign: isPrincipal ? "right" : "left" }
18830
19482
  ],
18831
19483
  children: formatMessageTime(timestamp)
@@ -18836,8 +19488,8 @@ function ChatBubbleImpl({
18836
19488
  }
18837
19489
  );
18838
19490
  }
18839
- var ChatBubble = React21.memo(ChatBubbleImpl);
18840
- var styles41 = StyleSheet42.create({
19491
+ var ChatBubble = React22.memo(ChatBubbleImpl);
19492
+ var styles43 = StyleSheet44.create({
18841
19493
  row: {
18842
19494
  flexDirection: "row",
18843
19495
  paddingHorizontal: spacing.md,
@@ -18897,9 +19549,9 @@ var styles41 = StyleSheet42.create({
18897
19549
  });
18898
19550
 
18899
19551
  // src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx
18900
- import { View as View41, Text as Text33, TouchableOpacity as TouchableOpacity16, StyleSheet as StyleSheet43 } from "react-native";
18901
- import { useTranslation as useTranslation21 } from "react-i18next";
18902
- import { jsx as jsx53, jsxs as jsxs35 } from "react/jsx-runtime";
19552
+ import { View as View43, Text as Text34, TouchableOpacity as TouchableOpacity17, StyleSheet as StyleSheet45 } from "react-native";
19553
+ import { useTranslation as useTranslation23 } from "react-i18next";
19554
+ import { jsx as jsx57, jsxs as jsxs36 } from "react/jsx-runtime";
18903
19555
  var STATUS_BADGE_MAP = {
18904
19556
  pending: "warning",
18905
19557
  under_review: "info",
@@ -18919,20 +19571,20 @@ function humanize(value) {
18919
19571
  }
18920
19572
  function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized = false }) {
18921
19573
  var _a3;
18922
- const { t } = useTranslation21();
19574
+ const { t } = useTranslation23();
18923
19575
  const { colors } = useTheme();
18924
19576
  const meta = message.document_request_metadata;
18925
19577
  if (!meta) return null;
18926
19578
  const status = meta.document_request_status;
18927
19579
  const canUpload = (status === "pending" || status === "replacement_requested") && !isCaseFinalized;
18928
19580
  const requestEventUuid = meta.document_request_uuid;
18929
- return /* @__PURE__ */ jsxs35(View41, { style: [styles42.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
18930
- /* @__PURE__ */ jsxs35(View41, { style: styles42.header, children: [
18931
- /* @__PURE__ */ jsxs35(View41, { style: styles42.titleRow, children: [
18932
- /* @__PURE__ */ jsx53(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
18933
- /* @__PURE__ */ jsx53(Text33, { style: [styles42.title, { color: colors.text }], children: meta.title || t("documentRequestedLabel") || "Document Requested" })
19581
+ return /* @__PURE__ */ jsxs36(View43, { style: [styles44.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
19582
+ /* @__PURE__ */ jsxs36(View43, { style: styles44.header, children: [
19583
+ /* @__PURE__ */ jsxs36(View43, { style: styles44.titleRow, children: [
19584
+ /* @__PURE__ */ jsx57(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
19585
+ /* @__PURE__ */ jsx57(Text34, { style: [styles44.title, { color: colors.text }], children: meta.title || t("documentRequestedLabel") || "Document Requested" })
18934
19586
  ] }),
18935
- /* @__PURE__ */ jsx53(
19587
+ /* @__PURE__ */ jsx57(
18936
19588
  PCBadge,
18937
19589
  {
18938
19590
  status: STATUS_BADGE_MAP[status] || "info",
@@ -18940,30 +19592,30 @@ function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized
18940
19592
  }
18941
19593
  )
18942
19594
  ] }),
18943
- meta.accepted_document ? /* @__PURE__ */ jsx53(Text33, { style: [styles42.accepted, { color: colors.textSecondary }], children: t("acceptedLabel", {
19595
+ meta.accepted_document ? /* @__PURE__ */ jsx57(Text34, { style: [styles44.accepted, { color: colors.textSecondary }], children: t("acceptedLabel", {
18944
19596
  accepted: meta.accepted_document,
18945
19597
  defaultValue: `Accepted: ${meta.accepted_document}`
18946
19598
  }) }) : null,
18947
- meta.rejection_reason ? /* @__PURE__ */ jsxs35(View41, { style: [styles42.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
18948
- /* @__PURE__ */ jsxs35(Text33, { style: [styles42.rejectionLabel, { color: colors.error }], children: [
19599
+ meta.rejection_reason ? /* @__PURE__ */ jsxs36(View43, { style: [styles44.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
19600
+ /* @__PURE__ */ jsxs36(Text34, { style: [styles44.rejectionLabel, { color: colors.error }], children: [
18949
19601
  t("rejectionReasonLabel") || "Rejection reason",
18950
19602
  ":"
18951
19603
  ] }),
18952
- /* @__PURE__ */ jsx53(Text33, { style: [styles42.rejectionText, { color: colors.error }], children: meta.rejection_reason })
19604
+ /* @__PURE__ */ jsx57(Text34, { style: [styles44.rejectionText, { color: colors.error }], children: meta.rejection_reason })
18953
19605
  ] }) : null,
18954
- canUpload && requestEventUuid ? /* @__PURE__ */ jsx53(
18955
- TouchableOpacity16,
19606
+ canUpload && requestEventUuid ? /* @__PURE__ */ jsx57(
19607
+ TouchableOpacity17,
18956
19608
  {
18957
- style: [styles42.uploadButton, { backgroundColor: colors.primary }],
19609
+ style: [styles44.uploadButton, { backgroundColor: colors.primary }],
18958
19610
  onPress: () => onUpload(requestEventUuid),
18959
19611
  disabled: isSubmitting,
18960
19612
  activeOpacity: 0.7,
18961
- children: /* @__PURE__ */ jsx53(Text33, { style: [styles42.uploadButtonText, { color: colors.primaryText }], children: isSubmitting ? t("loading") || "Loading..." : t("uploadAndSubmit") || "Upload & Submit" })
19613
+ children: /* @__PURE__ */ jsx57(Text34, { style: [styles44.uploadButtonText, { color: colors.primaryText }], children: isSubmitting ? t("loading") || "Loading..." : t("uploadAndSubmit") || "Upload & Submit" })
18962
19614
  }
18963
19615
  ) : null
18964
19616
  ] });
18965
19617
  }
18966
- var styles42 = StyleSheet43.create({
19618
+ var styles44 = StyleSheet45.create({
18967
19619
  container: {
18968
19620
  borderWidth: 1.5,
18969
19621
  borderStyle: "dashed",
@@ -19016,20 +19668,20 @@ var styles42 = StyleSheet43.create({
19016
19668
  });
19017
19669
 
19018
19670
  // src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx
19019
- import { StyleSheet as StyleSheet44, Text as Text34, View as View42 } from "react-native";
19020
- import { jsx as jsx54, jsxs as jsxs36 } from "react/jsx-runtime";
19671
+ import { StyleSheet as StyleSheet46, Text as Text35, View as View44 } from "react-native";
19672
+ import { jsx as jsx58, jsxs as jsxs37 } from "react/jsx-runtime";
19021
19673
  function StatusEvent({ icon, color, bgColor, borderColor, text, subText, timestamp }) {
19022
19674
  const { colors } = useTheme();
19023
- return /* @__PURE__ */ jsxs36(View42, { style: [styles43.container, { backgroundColor: bgColor }], children: [
19024
- /* @__PURE__ */ jsx54(View42, { style: [styles43.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
19025
- /* @__PURE__ */ jsxs36(View42, { style: styles43.textContainer, children: [
19026
- /* @__PURE__ */ jsx54(Text34, { style: [styles43.text, { color }], children: text }),
19027
- subText ? /* @__PURE__ */ jsx54(Text34, { style: [styles43.subText, { color: colors.textSecondary }], numberOfLines: 2, children: subText }) : null
19675
+ return /* @__PURE__ */ jsxs37(View44, { style: [styles45.container, { backgroundColor: bgColor }], children: [
19676
+ /* @__PURE__ */ jsx58(View44, { style: [styles45.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
19677
+ /* @__PURE__ */ jsxs37(View44, { style: styles45.textContainer, children: [
19678
+ /* @__PURE__ */ jsx58(Text35, { style: [styles45.text, { color }], children: text }),
19679
+ subText ? /* @__PURE__ */ jsx58(Text35, { style: [styles45.subText, { color: colors.textSecondary }], numberOfLines: 2, children: subText }) : null
19028
19680
  ] }),
19029
- /* @__PURE__ */ jsx54(Text34, { style: [styles43.timestamp, { color: colors.textSecondary }], children: formatMessageTime(timestamp) })
19681
+ /* @__PURE__ */ jsx58(Text35, { style: [styles45.timestamp, { color: colors.textSecondary }], children: formatMessageTime(timestamp) })
19030
19682
  ] });
19031
19683
  }
19032
- var styles43 = StyleSheet44.create({
19684
+ var styles45 = StyleSheet46.create({
19033
19685
  container: {
19034
19686
  flexDirection: "row",
19035
19687
  alignItems: "center",
@@ -19068,10 +19720,10 @@ var styles43 = StyleSheet44.create({
19068
19720
  });
19069
19721
 
19070
19722
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
19071
- import { Fragment as Fragment12, jsx as jsx55, jsxs as jsxs37 } from "react/jsx-runtime";
19072
- var CheckIcon = ({ color }) => /* @__PURE__ */ jsx55(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
19073
- var XIcon = ({ color }) => /* @__PURE__ */ jsx55(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
19074
- var RefreshIcon = ({ color }) => /* @__PURE__ */ jsx55(Icon, { name: "refresh-cw", size: 14, color, strokeWidth: 2.2 });
19723
+ import { Fragment as Fragment12, jsx as jsx59, jsxs as jsxs38 } from "react/jsx-runtime";
19724
+ var CheckIcon = ({ color }) => /* @__PURE__ */ jsx59(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
19725
+ var XIcon = ({ color }) => /* @__PURE__ */ jsx59(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
19726
+ var RefreshIcon = ({ color }) => /* @__PURE__ */ jsx59(Icon, { name: "refresh-cw", size: 14, color, strokeWidth: 2.2 });
19075
19727
  function MessageItemImpl({
19076
19728
  message,
19077
19729
  onUploadForRequest,
@@ -19081,14 +19733,14 @@ function MessageItemImpl({
19081
19733
  isLastInGroup = true
19082
19734
  }) {
19083
19735
  var _a3, _b;
19084
- const { t } = useTranslation22();
19736
+ const { t } = useTranslation24();
19085
19737
  const isPrincipal = message.sender_role === "data_principal";
19086
19738
  const senderLabel = isPrincipal ? t("senderYou") || "You" : t("senderPrivacyTeam") || "Privacy Team";
19087
19739
  switch (message.message_type) {
19088
19740
  case "message_sent":
19089
19741
  case "document_submitted":
19090
19742
  case "document_replaced":
19091
- return /* @__PURE__ */ jsx55(
19743
+ return /* @__PURE__ */ jsx59(
19092
19744
  ChatBubble,
19093
19745
  {
19094
19746
  message,
@@ -19100,8 +19752,8 @@ function MessageItemImpl({
19100
19752
  }
19101
19753
  );
19102
19754
  case "document_requested":
19103
- return /* @__PURE__ */ jsxs37(Fragment12, { children: [
19104
- /* @__PURE__ */ jsx55(
19755
+ return /* @__PURE__ */ jsxs38(Fragment12, { children: [
19756
+ /* @__PURE__ */ jsx59(
19105
19757
  ChatBubble,
19106
19758
  {
19107
19759
  message,
@@ -19112,7 +19764,7 @@ function MessageItemImpl({
19112
19764
  isLastInGroup
19113
19765
  }
19114
19766
  ),
19115
- /* @__PURE__ */ jsx55(
19767
+ /* @__PURE__ */ jsx59(
19116
19768
  DocumentRequestCard,
19117
19769
  {
19118
19770
  message,
@@ -19123,10 +19775,10 @@ function MessageItemImpl({
19123
19775
  )
19124
19776
  ] });
19125
19777
  case "document_approved":
19126
- return /* @__PURE__ */ jsx55(
19778
+ return /* @__PURE__ */ jsx59(
19127
19779
  StatusEvent,
19128
19780
  {
19129
- icon: /* @__PURE__ */ jsx55(CheckIcon, { color: "#059669" }),
19781
+ icon: /* @__PURE__ */ jsx59(CheckIcon, { color: "#059669" }),
19130
19782
  color: "#059669",
19131
19783
  bgColor: "rgba(16, 185, 129, 0.08)",
19132
19784
  borderColor: "rgba(16, 185, 129, 0.2)",
@@ -19135,10 +19787,10 @@ function MessageItemImpl({
19135
19787
  }
19136
19788
  );
19137
19789
  case "document_rejected":
19138
- return /* @__PURE__ */ jsx55(
19790
+ return /* @__PURE__ */ jsx59(
19139
19791
  StatusEvent,
19140
19792
  {
19141
- icon: /* @__PURE__ */ jsx55(XIcon, { color: "#DC2626" }),
19793
+ icon: /* @__PURE__ */ jsx59(XIcon, { color: "#DC2626" }),
19142
19794
  color: "#DC2626",
19143
19795
  bgColor: "rgba(220, 38, 38, 0.08)",
19144
19796
  borderColor: "rgba(220, 38, 38, 0.2)",
@@ -19148,10 +19800,10 @@ function MessageItemImpl({
19148
19800
  }
19149
19801
  );
19150
19802
  case "document_replacement_requested":
19151
- return /* @__PURE__ */ jsx55(
19803
+ return /* @__PURE__ */ jsx59(
19152
19804
  StatusEvent,
19153
19805
  {
19154
- icon: /* @__PURE__ */ jsx55(RefreshIcon, { color: "#D97706" }),
19806
+ icon: /* @__PURE__ */ jsx59(RefreshIcon, { color: "#D97706" }),
19155
19807
  color: "#D97706",
19156
19808
  bgColor: "rgba(245, 158, 11, 0.08)",
19157
19809
  borderColor: "rgba(245, 158, 11, 0.2)",
@@ -19161,7 +19813,7 @@ function MessageItemImpl({
19161
19813
  }
19162
19814
  );
19163
19815
  default:
19164
- return /* @__PURE__ */ jsx55(
19816
+ return /* @__PURE__ */ jsx59(
19165
19817
  ChatBubble,
19166
19818
  {
19167
19819
  message,
@@ -19174,22 +19826,22 @@ function MessageItemImpl({
19174
19826
  );
19175
19827
  }
19176
19828
  }
19177
- var MessageItem = React22.memo(MessageItemImpl);
19829
+ var MessageItem = React23.memo(MessageItemImpl);
19178
19830
 
19179
19831
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx
19180
- import { useEffect as useEffect16, useRef as useRef9 } from "react";
19832
+ import { useEffect as useEffect17, useRef as useRef9 } from "react";
19181
19833
  import {
19182
19834
  ActivityIndicator as ActivityIndicator6,
19183
19835
  Animated as Animated12,
19184
19836
  Easing as Easing3,
19185
- StyleSheet as StyleSheet45,
19186
- Text as Text35,
19837
+ StyleSheet as StyleSheet47,
19838
+ Text as Text36,
19187
19839
  TextInput as TextInput3,
19188
- TouchableOpacity as TouchableOpacity17,
19189
- View as View43
19840
+ TouchableOpacity as TouchableOpacity18,
19841
+ View as View45
19190
19842
  } from "react-native";
19191
- import { useTranslation as useTranslation23 } from "react-i18next";
19192
- import { jsx as jsx56, jsxs as jsxs38 } from "react/jsx-runtime";
19843
+ import { useTranslation as useTranslation25 } from "react-i18next";
19844
+ import { jsx as jsx60, jsxs as jsxs39 } from "react/jsx-runtime";
19193
19845
  function MessageComposer({
19194
19846
  messageText,
19195
19847
  onMessageTextChange,
@@ -19201,11 +19853,11 @@ function MessageComposer({
19201
19853
  isUploading,
19202
19854
  isCaseFinalized = false
19203
19855
  }) {
19204
- const { t } = useTranslation23();
19856
+ const { t } = useTranslation25();
19205
19857
  const { colors } = useTheme();
19206
19858
  const canSend = (messageText.trim().length > 0 || pendingUpload) && !isSending && !isUploading && !isCaseFinalized;
19207
19859
  const activate = useRef9(new Animated12.Value(canSend ? 1 : 0)).current;
19208
- useEffect16(() => {
19860
+ useEffect17(() => {
19209
19861
  Animated12.timing(activate, {
19210
19862
  toValue: canSend ? 1 : 0,
19211
19863
  duration: 180,
@@ -19225,7 +19877,7 @@ function MessageComposer({
19225
19877
  Animated12.spring(pressScale, { toValue: 1, useNativeDriver: true, speed: 20, bounciness: 6 }).start();
19226
19878
  };
19227
19879
  const pillIn = useRef9(new Animated12.Value(0)).current;
19228
- useEffect16(() => {
19880
+ useEffect17(() => {
19229
19881
  Animated12.timing(pillIn, {
19230
19882
  toValue: pendingUpload ? 1 : 0,
19231
19883
  duration: 220,
@@ -19235,12 +19887,12 @@ function MessageComposer({
19235
19887
  }, [pendingUpload, pillIn]);
19236
19888
  const pillOpacity = pillIn;
19237
19889
  const pillTranslateY = pillIn.interpolate({ inputRange: [0, 1], outputRange: [8, 0] });
19238
- return /* @__PURE__ */ jsxs38(View43, { style: [styles44.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
19239
- pendingUpload && /* @__PURE__ */ jsxs38(
19890
+ return /* @__PURE__ */ jsxs39(View45, { style: [styles46.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
19891
+ pendingUpload && /* @__PURE__ */ jsxs39(
19240
19892
  Animated12.View,
19241
19893
  {
19242
19894
  style: [
19243
- styles44.uploadPill,
19895
+ styles46.uploadPill,
19244
19896
  {
19245
19897
  backgroundColor: colors.primarySoft,
19246
19898
  opacity: pillOpacity,
@@ -19248,34 +19900,34 @@ function MessageComposer({
19248
19900
  }
19249
19901
  ],
19250
19902
  children: [
19251
- /* @__PURE__ */ jsx56(Icon, { name: "file", size: 14, color: colors.primary }),
19252
- /* @__PURE__ */ jsxs38(Text35, { style: [styles44.uploadFileName, { color: colors.primary }], numberOfLines: 1, children: [
19903
+ /* @__PURE__ */ jsx60(Icon, { name: "file", size: 14, color: colors.primary }),
19904
+ /* @__PURE__ */ jsxs39(Text36, { style: [styles46.uploadFileName, { color: colors.primary }], numberOfLines: 1, children: [
19253
19905
  pendingUpload.file_name,
19254
19906
  " (",
19255
19907
  formatFileSize(pendingUpload.file_size),
19256
19908
  ")"
19257
19909
  ] }),
19258
- /* @__PURE__ */ jsx56(TouchableOpacity17, { onPress: onRemovePendingUpload, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: /* @__PURE__ */ jsx56(Icon, { name: "x", size: 14, color: colors.textSecondary, strokeWidth: 2.4 }) })
19910
+ /* @__PURE__ */ jsx60(TouchableOpacity18, { onPress: onRemovePendingUpload, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: /* @__PURE__ */ jsx60(Icon, { name: "x", size: 14, color: colors.textSecondary, strokeWidth: 2.4 }) })
19259
19911
  ]
19260
19912
  }
19261
19913
  ),
19262
- /* @__PURE__ */ jsxs38(View43, { style: [styles44.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles44.pillDisabled], children: [
19263
- /* @__PURE__ */ jsx56(
19264
- TouchableOpacity17,
19914
+ /* @__PURE__ */ jsxs39(View45, { style: [styles46.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles46.pillDisabled], children: [
19915
+ /* @__PURE__ */ jsx60(
19916
+ TouchableOpacity18,
19265
19917
  {
19266
- style: styles44.attachButton,
19918
+ style: styles46.attachButton,
19267
19919
  onPress: onAttachClick,
19268
19920
  disabled: isUploading || isCaseFinalized,
19269
19921
  activeOpacity: 0.6,
19270
19922
  hitSlop: DEFAULT_HIT_SLOP,
19271
19923
  accessibilityLabel: t("uploadFile") || "Attach file",
19272
- children: isUploading ? /* @__PURE__ */ jsx56(ActivityIndicator6, { size: "small", color: colors.primary }) : /* @__PURE__ */ jsx56(Icon, { name: "paperclip", size: 20, color: colors.textSecondary })
19924
+ children: isUploading ? /* @__PURE__ */ jsx60(ActivityIndicator6, { size: "small", color: colors.primary }) : /* @__PURE__ */ jsx60(Icon, { name: "paperclip", size: 20, color: colors.textSecondary })
19273
19925
  }
19274
19926
  ),
19275
- /* @__PURE__ */ jsx56(
19927
+ /* @__PURE__ */ jsx60(
19276
19928
  TextInput3,
19277
19929
  {
19278
- style: [styles44.input, { color: colors.text }],
19930
+ style: [styles46.input, { color: colors.text }],
19279
19931
  value: messageText,
19280
19932
  onChangeText: onMessageTextChange,
19281
19933
  placeholder: t("messageInputPlaceholder", { defaultValue: "Message\u2026" }),
@@ -19285,8 +19937,8 @@ function MessageComposer({
19285
19937
  editable: !isSending && !isCaseFinalized
19286
19938
  }
19287
19939
  ),
19288
- /* @__PURE__ */ jsx56(Animated12.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ jsx56(
19289
- TouchableOpacity17,
19940
+ /* @__PURE__ */ jsx60(Animated12.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ jsx60(
19941
+ TouchableOpacity18,
19290
19942
  {
19291
19943
  onPress: onSend,
19292
19944
  onPressIn: handlePressIn,
@@ -19294,15 +19946,15 @@ function MessageComposer({
19294
19946
  disabled: !canSend,
19295
19947
  activeOpacity: 0.85,
19296
19948
  accessibilityLabel: t("send") || "Send",
19297
- children: /* @__PURE__ */ jsx56(Animated12.View, { style: [styles44.sendButton, { backgroundColor: sendBgColor }], children: isSending ? /* @__PURE__ */ jsx56(ActivityIndicator6, { size: "small", color: colors.primaryText }) : /* @__PURE__ */ jsx56(View43, { style: styles44.sendIcon, children: /* @__PURE__ */ jsx56(Icon, { name: "send", size: 18, color: canSend ? colors.primaryText : colors.textSecondary }) }) })
19949
+ children: /* @__PURE__ */ jsx60(Animated12.View, { style: [styles46.sendButton, { backgroundColor: sendBgColor }], children: isSending ? /* @__PURE__ */ jsx60(ActivityIndicator6, { size: "small", color: colors.primaryText }) : /* @__PURE__ */ jsx60(View45, { style: styles46.sendIcon, children: /* @__PURE__ */ jsx60(Icon, { name: "send", size: 18, color: canSend ? colors.primaryText : colors.textSecondary }) }) })
19298
19950
  }
19299
19951
  ) })
19300
19952
  ] })
19301
19953
  ] });
19302
19954
  }
19303
- var styles44 = StyleSheet45.create({
19955
+ var styles46 = StyleSheet47.create({
19304
19956
  container: {
19305
- borderTopWidth: StyleSheet45.hairlineWidth,
19957
+ borderTopWidth: StyleSheet47.hairlineWidth,
19306
19958
  paddingHorizontal: spacing.md,
19307
19959
  paddingVertical: spacing.sm
19308
19960
  },
@@ -19325,7 +19977,7 @@ var styles44 = StyleSheet45.create({
19325
19977
  pill: {
19326
19978
  flexDirection: "row",
19327
19979
  alignItems: "center",
19328
- borderWidth: StyleSheet45.hairlineWidth,
19980
+ borderWidth: StyleSheet47.hairlineWidth,
19329
19981
  borderRadius: radii.xxl + 4,
19330
19982
  paddingHorizontal: spacing.xs + 2,
19331
19983
  paddingVertical: spacing.xs,
@@ -19364,7 +20016,7 @@ var styles44 = StyleSheet45.create({
19364
20016
  });
19365
20017
 
19366
20018
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
19367
- import { Fragment as Fragment13, jsx as jsx57, jsxs as jsxs39 } from "react/jsx-runtime";
20019
+ import { Fragment as Fragment13, jsx as jsx61, jsxs as jsxs40 } from "react/jsx-runtime";
19368
20020
  var STREAK_GAP_MS = 5 * 60 * 1e3;
19369
20021
  function isStreakBoundary(a, b) {
19370
20022
  if (!a || !b) return true;
@@ -19394,7 +20046,7 @@ function sameDay(a, b) {
19394
20046
  }
19395
20047
  var MESSAGE_POLL_INTERVAL = 3e4;
19396
20048
  function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19397
- const { t } = useTranslation24();
20049
+ const { t } = useTranslation26();
19398
20050
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19399
20051
  const { consentClient } = useBaseUrl();
19400
20052
  const { colors } = useTheme();
@@ -19410,13 +20062,13 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19410
20062
  caseUuid,
19411
20063
  authContext
19412
20064
  );
19413
- const [messageText, setMessageText] = useState22("");
19414
- const [pendingUpload, setPendingUpload] = useState22(null);
19415
- const [isSending, setIsSending] = useState22(false);
19416
- const [isUploading, setIsUploading] = useState22(false);
19417
- const [isSubmittingForRequest, setIsSubmittingForRequest] = useState22(false);
20065
+ const [messageText, setMessageText] = useState23("");
20066
+ const [pendingUpload, setPendingUpload] = useState23(null);
20067
+ const [isSending, setIsSending] = useState23(false);
20068
+ const [isUploading, setIsUploading] = useState23(false);
20069
+ const [isSubmittingForRequest, setIsSubmittingForRequest] = useState23(false);
19418
20070
  const flatListRef = useRef10(null);
19419
- useEffect17(() => {
20071
+ useEffect18(() => {
19420
20072
  if (messages && messages.length > 0) {
19421
20073
  setTimeout(() => {
19422
20074
  var _a3;
@@ -19426,14 +20078,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19426
20078
  }, [messages == null ? void 0 : messages.length]);
19427
20079
  const refetchRef = useRef10(refetch);
19428
20080
  refetchRef.current = refetch;
19429
- useEffect17(() => {
20081
+ const authContextRef = useRef10(authContext);
20082
+ authContextRef.current = authContext;
20083
+ useEffect18(() => {
19430
20084
  if (isCaseFinalized) return;
19431
20085
  const id = setInterval(() => {
20086
+ if (isRefreshBlocked(authContextRef.current)) return;
19432
20087
  refetchRef.current();
19433
20088
  }, MESSAGE_POLL_INTERVAL);
19434
20089
  return () => clearInterval(id);
19435
20090
  }, [isCaseFinalized]);
19436
- const handleSend = useCallback11(async () => {
20091
+ const handleSend = useCallback12(async () => {
19437
20092
  if (isCaseFinalized) return;
19438
20093
  if (!messageText.trim() && !pendingUpload) return;
19439
20094
  if (!organizationId || !workspaceId) return;
@@ -19458,7 +20113,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19458
20113
  setIsSending(false);
19459
20114
  }
19460
20115
  }, [isCaseFinalized, messageText, pendingUpload, organizationId, workspaceId, caseUuid, authContext, consentClient, refetch]);
19461
- const handleAttach = useCallback11(async () => {
20116
+ const handleAttach = useCallback12(async () => {
19462
20117
  if (isCaseFinalized) return;
19463
20118
  if (!organizationId || !workspaceId) return;
19464
20119
  try {
@@ -19493,7 +20148,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19493
20148
  setIsUploading(false);
19494
20149
  }
19495
20150
  }, [isCaseFinalized, organizationId, workspaceId, caseUuid, authContext, consentClient]);
19496
- const handleUploadForRequest = useCallback11((_requestEventUuid) => {
20151
+ const handleUploadForRequest = useCallback12((_requestEventUuid) => {
19497
20152
  handleAttach();
19498
20153
  }, [handleAttach]);
19499
20154
  const messagesList = useMemo19(() => {
@@ -19505,17 +20160,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19505
20160
  });
19506
20161
  return list;
19507
20162
  }, [messages]);
19508
- const keyExtractor = useCallback11((item) => item.uuid, []);
19509
- const renderMessage = useCallback11(
20163
+ const keyExtractor = useCallback12((item) => item.uuid, []);
20164
+ const renderMessage = useCallback12(
19510
20165
  ({ item, index }) => {
19511
20166
  const prev = index > 0 ? messagesList[index - 1] : void 0;
19512
20167
  const next = index < messagesList.length - 1 ? messagesList[index + 1] : void 0;
19513
20168
  const isFirstInGroup = isStreakBoundary(prev, item);
19514
20169
  const isLastInGroup = isStreakBoundary(item, next);
19515
20170
  const dateSeparator = getDateSeparator(prev == null ? void 0 : prev.created_at, item.created_at, t);
19516
- return /* @__PURE__ */ jsxs39(Fragment13, { children: [
19517
- dateSeparator ? /* @__PURE__ */ jsx57(View44, { style: styles45.daySeparator, children: /* @__PURE__ */ jsx57(View44, { style: [styles45.dayPill, { backgroundColor: colors.surfaceAlt }], children: /* @__PURE__ */ jsx57(Text36, { style: [styles45.dayPillText, { color: colors.textSecondary }], children: dateSeparator }) }) }) : null,
19518
- /* @__PURE__ */ jsx57(
20171
+ return /* @__PURE__ */ jsxs40(Fragment13, { children: [
20172
+ dateSeparator ? /* @__PURE__ */ jsx61(View46, { style: styles47.daySeparator, children: /* @__PURE__ */ jsx61(View46, { style: [styles47.dayPill, { backgroundColor: colors.surfaceAlt }], children: /* @__PURE__ */ jsx61(Text37, { style: [styles47.dayPillText, { color: colors.textSecondary }], children: dateSeparator }) }) }) : null,
20173
+ /* @__PURE__ */ jsx61(
19519
20174
  MessageItem,
19520
20175
  {
19521
20176
  message: item,
@@ -19531,32 +20186,32 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19531
20186
  [messagesList, handleUploadForRequest, isSubmittingForRequest, isCaseFinalized, colors, t]
19532
20187
  );
19533
20188
  if (isLoading) {
19534
- return /* @__PURE__ */ jsx57(View44, { style: styles45.centered, children: /* @__PURE__ */ jsx57(ActivityIndicator7, { size: "large", color: colors.primary }) });
20189
+ return /* @__PURE__ */ jsx61(View46, { style: styles47.centered, children: /* @__PURE__ */ jsx61(ActivityIndicator7, { size: "large", color: colors.primary }) });
19535
20190
  }
19536
20191
  if (error) {
19537
- return /* @__PURE__ */ jsx57(View44, { style: styles45.centered, children: /* @__PURE__ */ jsx57(Text36, { style: [styles45.errorText, { color: colors.error }], children: t("errorLoadingMessages") || "Error loading messages" }) });
20192
+ return /* @__PURE__ */ jsx61(View46, { style: styles47.centered, children: /* @__PURE__ */ jsx61(Text37, { style: [styles47.errorText, { color: colors.error }], children: t("errorLoadingMessages") || "Error loading messages" }) });
19538
20193
  }
19539
- return /* @__PURE__ */ jsxs39(View44, { style: [styles45.container, { backgroundColor: colors.canvasSubtle }], children: [
19540
- /* @__PURE__ */ jsxs39(View44, { style: styles45.secureRow, children: [
19541
- /* @__PURE__ */ jsx57(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
19542
- /* @__PURE__ */ jsx57(Text36, { style: [styles45.secureText, { color: colors.textSecondary }], children: isCaseFinalized ? t("caseFinalizedMessagesTooltip") || "This case is finalized \u2014 messages can no longer be sent." : `${t("private", { defaultValue: "Private" })} \xB7 ${t("senderPrivacyTeam") || "Privacy Team"}` })
20194
+ return /* @__PURE__ */ jsxs40(View46, { style: [styles47.container, { backgroundColor: colors.canvasSubtle }], children: [
20195
+ /* @__PURE__ */ jsxs40(View46, { style: styles47.secureRow, children: [
20196
+ /* @__PURE__ */ jsx61(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
20197
+ /* @__PURE__ */ jsx61(Text37, { style: [styles47.secureText, { color: colors.textSecondary }], children: isCaseFinalized ? t("caseFinalizedMessagesTooltip") || "This case is finalized \u2014 messages can no longer be sent." : `${t("private", { defaultValue: "Private" })} \xB7 ${t("senderPrivacyTeam") || "Privacy Team"}` })
19543
20198
  ] }),
19544
- /* @__PURE__ */ jsx57(
20199
+ /* @__PURE__ */ jsx61(
19545
20200
  FlatList2,
19546
20201
  {
19547
20202
  ref: flatListRef,
19548
- style: styles45.list,
20203
+ style: styles47.list,
19549
20204
  data: messagesList,
19550
20205
  keyExtractor,
19551
20206
  renderItem: renderMessage,
19552
20207
  contentContainerStyle: [
19553
- styles45.messagesList,
19554
- messagesList.length ? styles45.messagesListFill : styles45.messagesListCenter
20208
+ styles47.messagesList,
20209
+ messagesList.length ? styles47.messagesListFill : styles47.messagesListCenter
19555
20210
  ],
19556
- ListEmptyComponent: /* @__PURE__ */ jsxs39(View44, { style: styles45.emptyContainer, children: [
19557
- /* @__PURE__ */ jsx57(View44, { style: [styles45.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ jsx57(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
19558
- /* @__PURE__ */ jsx57(Text36, { style: [styles45.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
19559
- /* @__PURE__ */ jsx57(Text36, { style: [styles45.emptySubtitle, { color: colors.textSecondary }], children: t("noMessagesYetSubtitle", "Start the conversation below") })
20211
+ ListEmptyComponent: /* @__PURE__ */ jsxs40(View46, { style: styles47.emptyContainer, children: [
20212
+ /* @__PURE__ */ jsx61(View46, { style: [styles47.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ jsx61(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
20213
+ /* @__PURE__ */ jsx61(Text37, { style: [styles47.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
20214
+ /* @__PURE__ */ jsx61(Text37, { style: [styles47.emptySubtitle, { color: colors.textSecondary }], children: t("noMessagesYetSubtitle", "Start the conversation below") })
19560
20215
  ] }),
19561
20216
  onContentSizeChange: () => {
19562
20217
  var _a3;
@@ -19568,7 +20223,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19568
20223
  removeClippedSubviews: true
19569
20224
  }
19570
20225
  ),
19571
- /* @__PURE__ */ jsx57(
20226
+ /* @__PURE__ */ jsx61(
19572
20227
  MessageComposer,
19573
20228
  {
19574
20229
  messageText,
@@ -19584,7 +20239,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19584
20239
  )
19585
20240
  ] });
19586
20241
  }
19587
- var styles45 = StyleSheet46.create({
20242
+ var styles47 = StyleSheet48.create({
19588
20243
  container: {
19589
20244
  flex: 1
19590
20245
  },
@@ -19667,16 +20322,16 @@ var styles45 = StyleSheet46.create({
19667
20322
  });
19668
20323
 
19669
20324
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
19670
- import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
20325
+ import { jsx as jsx62, jsxs as jsxs41 } from "react/jsx-runtime";
19671
20326
  function CaseDetailsPage() {
19672
20327
  var _a3, _b;
19673
- const { t } = useTranslation25();
20328
+ const { t } = useTranslation27();
19674
20329
  const { navigateTo, selectedCase, setSelectedCase, pendingCaseUuid } = useInternalNavigation();
19675
20330
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19676
20331
  const { colors } = useTheme();
19677
20332
  const { keyboardOffset } = usePrivacyCenterInsets();
19678
20333
  const requestTypeLabels = useRequestTypeLabels();
19679
- const [activeTab, setActiveTab] = useState23("request-details");
20334
+ const [activeTab, setActiveTab] = useState24("request-details");
19680
20335
  const authContext = useMemo20(() => ({
19681
20336
  accessToken,
19682
20337
  refreshToken,
@@ -19690,7 +20345,7 @@ function CaseDetailsPage() {
19690
20345
  email != null ? email : void 0,
19691
20346
  authContext
19692
20347
  );
19693
- useEffect18(() => {
20348
+ useEffect19(() => {
19694
20349
  if (!cases) return;
19695
20350
  if (cases.length === 0) {
19696
20351
  navigateTo("form");
@@ -19704,33 +20359,33 @@ function CaseDetailsPage() {
19704
20359
  navigateTo("form");
19705
20360
  }
19706
20361
  }, [cases, targetUuid, setSelectedCase, navigateTo]);
19707
- useEffect18(() => {
20362
+ useEffect19(() => {
19708
20363
  if (!selectedCase && !targetUuid && !isLoading) {
19709
20364
  navigateTo("form");
19710
20365
  }
19711
20366
  }, [selectedCase, targetUuid, isLoading, navigateTo]);
19712
20367
  if (!selectedCase) {
19713
- return /* @__PURE__ */ jsx58(View45, { style: styles46.centered, children: isLoading ? /* @__PURE__ */ jsx58(ActivityIndicator8, { size: "large", color: colors.primary }) : /* @__PURE__ */ jsx58(Text37, { style: [styles46.emptyText, { color: colors.textSecondary }], children: t("noCasesYet") || "No case selected" }) });
20368
+ return /* @__PURE__ */ jsx62(View47, { style: styles48.centered, children: isLoading ? /* @__PURE__ */ jsx62(ActivityIndicator8, { size: "large", color: colors.primary }) : /* @__PURE__ */ jsx62(Text38, { style: [styles48.emptyText, { color: colors.textSecondary }], children: t("noCasesYet") || "No case selected" }) });
19714
20369
  }
19715
20370
  const requestTypeLabel = requestTypeLabels[(_b = selectedCase.request_type) == null ? void 0 : _b.toUpperCase()] || selectedCase.request_type_display || formatCaseStatus(selectedCase.request_type || "");
19716
20371
  const tabs = [
19717
20372
  { id: "request-details", label: t("requestDetails") || "Request Details" },
19718
20373
  { id: "messages", label: t("messages") || "Messages" }
19719
20374
  ];
19720
- return /* @__PURE__ */ jsxs40(
20375
+ return /* @__PURE__ */ jsxs41(
19721
20376
  KeyboardAvoidingViewCompat,
19722
20377
  {
19723
- style: [styles46.container, { backgroundColor: colors.canvasSubtle }],
20378
+ style: [styles48.container, { backgroundColor: colors.canvasSubtle }],
19724
20379
  behavior: "padding",
19725
20380
  keyboardVerticalOffset: Platform7.OS === "ios" ? keyboardOffset : 0,
19726
20381
  children: [
19727
- /* @__PURE__ */ jsxs40(View45, { style: styles46.headerWrap, children: [
19728
- /* @__PURE__ */ jsx58(View45, { style: [styles46.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ jsxs40(View45, { style: styles46.heroInner, children: [
19729
- /* @__PURE__ */ jsx58(View45, { style: [styles46.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
19730
- /* @__PURE__ */ jsxs40(View45, { style: styles46.heroBody, children: [
19731
- /* @__PURE__ */ jsxs40(View45, { style: styles46.heroTopRow, children: [
19732
- /* @__PURE__ */ jsx58(View45, { style: [styles46.typeChip, { backgroundColor: withAlpha(getRequestTypeColor(selectedCase.request_type, colors), 0.12) }], children: /* @__PURE__ */ jsx58(Text37, { style: [styles46.typeChipText, { color: getRequestTypeColor(selectedCase.request_type, colors) }], numberOfLines: 1, children: requestTypeLabel }) }),
19733
- /* @__PURE__ */ jsx58(
20382
+ /* @__PURE__ */ jsxs41(View47, { style: styles48.headerWrap, children: [
20383
+ /* @__PURE__ */ jsx62(View47, { style: [styles48.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ jsxs41(View47, { style: styles48.heroInner, children: [
20384
+ /* @__PURE__ */ jsx62(View47, { style: [styles48.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
20385
+ /* @__PURE__ */ jsxs41(View47, { style: styles48.heroBody, children: [
20386
+ /* @__PURE__ */ jsxs41(View47, { style: styles48.heroTopRow, children: [
20387
+ /* @__PURE__ */ jsx62(View47, { style: [styles48.typeChip, { backgroundColor: withAlpha(getRequestTypeColor(selectedCase.request_type, colors), 0.12) }], children: /* @__PURE__ */ jsx62(Text38, { style: [styles48.typeChipText, { color: getRequestTypeColor(selectedCase.request_type, colors) }], numberOfLines: 1, children: requestTypeLabel }) }),
20388
+ /* @__PURE__ */ jsx62(
19734
20389
  PCBadge,
19735
20390
  {
19736
20391
  status: getCaseStatusVariant(selectedCase.status),
@@ -19739,10 +20394,10 @@ function CaseDetailsPage() {
19739
20394
  }
19740
20395
  )
19741
20396
  ] }),
19742
- /* @__PURE__ */ jsx58(Text37, { style: [styles46.caseId, { color: colors.text }], numberOfLines: 1, children: selectedCase.case_id })
20397
+ /* @__PURE__ */ jsx62(Text38, { style: [styles48.caseId, { color: colors.text }], numberOfLines: 1, children: selectedCase.case_id })
19743
20398
  ] })
19744
20399
  ] }) }),
19745
- /* @__PURE__ */ jsx58(
20400
+ /* @__PURE__ */ jsx62(
19746
20401
  Segmented,
19747
20402
  {
19748
20403
  options: tabs.map((tab) => ({ value: tab.id, label: tab.label })),
@@ -19751,18 +20406,18 @@ function CaseDetailsPage() {
19751
20406
  }
19752
20407
  )
19753
20408
  ] }),
19754
- /* @__PURE__ */ jsx58(View45, { style: styles46.tabContent, children: activeTab === "request-details" ? /* @__PURE__ */ jsx58(
20409
+ /* @__PURE__ */ jsx62(View47, { style: styles48.tabContent, children: activeTab === "request-details" ? /* @__PURE__ */ jsx62(
19755
20410
  RequestDetailsTab,
19756
20411
  {
19757
20412
  selectedCase,
19758
20413
  requestTypeLabel
19759
20414
  }
19760
- ) : /* @__PURE__ */ jsx58(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
20415
+ ) : /* @__PURE__ */ jsx62(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
19761
20416
  ]
19762
20417
  }
19763
20418
  );
19764
20419
  }
19765
- var styles46 = StyleSheet47.create({
20420
+ var styles48 = StyleSheet49.create({
19766
20421
  container: {
19767
20422
  flex: 1
19768
20423
  },
@@ -19827,36 +20482,36 @@ var styles46 = StyleSheet47.create({
19827
20482
  });
19828
20483
 
19829
20484
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
19830
- import { useCallback as useCallback13, useEffect as useEffect19, useMemo as useMemo23, useRef as useRef12, useState as useState24 } from "react";
19831
- import { FlatList as FlatList3, RefreshControl as RefreshControl5, StyleSheet as StyleSheet52, Text as Text41, TouchableOpacity as TouchableOpacity21, View as View49 } from "react-native";
19832
- import { useTranslation as useTranslation27 } from "react-i18next";
20485
+ import { useCallback as useCallback14, useEffect as useEffect20, useMemo as useMemo23, useRef as useRef12, useState as useState25 } from "react";
20486
+ import { FlatList as FlatList3, RefreshControl as RefreshControl5, StyleSheet as StyleSheet54, Text as Text42, TouchableOpacity as TouchableOpacity22, View as View51 } from "react-native";
20487
+ import { useTranslation as useTranslation29 } from "react-i18next";
19833
20488
 
19834
20489
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
19835
- import { StyleSheet as StyleSheet51, Text as Text40, TouchableOpacity as TouchableOpacity20, View as View48 } from "react-native";
19836
- import { useTranslation as useTranslation26 } from "react-i18next";
20490
+ import { StyleSheet as StyleSheet53, Text as Text41, TouchableOpacity as TouchableOpacity21, View as View50 } from "react-native";
20491
+ import { useTranslation as useTranslation28 } from "react-i18next";
19837
20492
 
19838
20493
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx
19839
- import { StyleSheet as StyleSheet48, Text as Text38, TouchableOpacity as TouchableOpacity18 } from "react-native";
19840
- import { jsx as jsx59 } from "react/jsx-runtime";
20494
+ import { StyleSheet as StyleSheet50, Text as Text39, TouchableOpacity as TouchableOpacity19 } from "react-native";
20495
+ import { jsx as jsx63 } from "react/jsx-runtime";
19841
20496
  var NotificationCTAButton = ({ cta, onPress }) => {
19842
20497
  const { colors } = useTheme();
19843
20498
  const tone = cta.style === "danger" ? colors.error : colors.primary;
19844
20499
  const isPrimary = cta.style === "primary" || cta.style === "danger";
19845
- return /* @__PURE__ */ jsx59(
19846
- TouchableOpacity18,
20500
+ return /* @__PURE__ */ jsx63(
20501
+ TouchableOpacity19,
19847
20502
  {
19848
20503
  onPress,
19849
20504
  activeOpacity: 0.7,
19850
20505
  style: [
19851
- styles47.button,
20506
+ styles49.button,
19852
20507
  isPrimary ? { backgroundColor: tone } : { backgroundColor: colors.primarySoft }
19853
20508
  ],
19854
20509
  accessibilityRole: "button",
19855
- children: /* @__PURE__ */ jsx59(Text38, { style: [styles47.label, { color: isPrimary ? colors.primaryText : colors.primary }], numberOfLines: 1, children: cta.label })
20510
+ children: /* @__PURE__ */ jsx63(Text39, { style: [styles49.label, { color: isPrimary ? colors.primaryText : colors.primary }], numberOfLines: 1, children: cta.label })
19856
20511
  }
19857
20512
  );
19858
20513
  };
19859
- var styles47 = StyleSheet48.create({
20514
+ var styles49 = StyleSheet50.create({
19860
20515
  button: {
19861
20516
  paddingHorizontal: spacing.lg,
19862
20517
  paddingVertical: spacing.sm,
@@ -19871,8 +20526,8 @@ var styles47 = StyleSheet48.create({
19871
20526
  });
19872
20527
 
19873
20528
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx
19874
- import { StyleSheet as StyleSheet49, View as View46 } from "react-native";
19875
- import { jsx as jsx60 } from "react/jsx-runtime";
20529
+ import { StyleSheet as StyleSheet51, View as View48 } from "react-native";
20530
+ import { jsx as jsx64 } from "react/jsx-runtime";
19876
20531
  var CATEGORY_ICON = {
19877
20532
  guardian: "user-round",
19878
20533
  consent: "clock",
@@ -19885,18 +20540,18 @@ var NotificationIcon = ({ notificationType, size = 40 }) => {
19885
20540
  var _a3;
19886
20541
  const category = (_a3 = TYPE_TO_ICON_CATEGORY[notificationType]) != null ? _a3 : "system";
19887
20542
  const color = ICON_COLORS[category];
19888
- return /* @__PURE__ */ jsx60(
19889
- View46,
20543
+ return /* @__PURE__ */ jsx64(
20544
+ View48,
19890
20545
  {
19891
20546
  style: [
19892
- styles48.wrap,
20547
+ styles50.wrap,
19893
20548
  { width: size, height: size, borderRadius: radii.md, backgroundColor: withAlpha(color, 0.13) }
19894
20549
  ],
19895
- children: /* @__PURE__ */ jsx60(Icon, { name: CATEGORY_ICON[category], size: Math.round(size * 0.5), color, strokeWidth: 2 })
20550
+ children: /* @__PURE__ */ jsx64(Icon, { name: CATEGORY_ICON[category], size: Math.round(size * 0.5), color, strokeWidth: 2 })
19896
20551
  }
19897
20552
  );
19898
20553
  };
19899
- var styles48 = StyleSheet49.create({
20554
+ var styles50 = StyleSheet51.create({
19900
20555
  wrap: {
19901
20556
  alignItems: "center",
19902
20557
  justifyContent: "center"
@@ -19905,8 +20560,8 @@ var styles48 = StyleSheet49.create({
19905
20560
 
19906
20561
  // src/RedactoPrivacyCenter/components/NotificationHub/SwipeableRow.tsx
19907
20562
  import { useMemo as useMemo21, useRef as useRef11 } from "react";
19908
- import { Animated as Animated13, PanResponder as PanResponder2, StyleSheet as StyleSheet50, Text as Text39, TouchableOpacity as TouchableOpacity19, View as View47 } from "react-native";
19909
- import { Fragment as Fragment14, jsx as jsx61, jsxs as jsxs41 } from "react/jsx-runtime";
20563
+ import { Animated as Animated13, PanResponder as PanResponder2, StyleSheet as StyleSheet52, Text as Text40, TouchableOpacity as TouchableOpacity20, View as View49 } from "react-native";
20564
+ import { Fragment as Fragment14, jsx as jsx65, jsxs as jsxs42 } from "react/jsx-runtime";
19910
20565
  var ACTION_WIDTH = 80;
19911
20566
  var CLAIM_THRESHOLD = 8;
19912
20567
  var SwipeableRow = ({ actions, background, children }) => {
@@ -19945,37 +20600,37 @@ var SwipeableRow = ({ actions, background, children }) => {
19945
20600
  [maxOpen]
19946
20601
  );
19947
20602
  if (actions.length === 0) {
19948
- return /* @__PURE__ */ jsx61(Fragment14, { children });
20603
+ return /* @__PURE__ */ jsx65(Fragment14, { children });
19949
20604
  }
19950
20605
  const runAction = (action) => {
19951
20606
  settle(0);
19952
20607
  action.onPress();
19953
20608
  };
19954
- return /* @__PURE__ */ jsxs41(View47, { style: styles49.root, children: [
19955
- /* @__PURE__ */ jsx61(View47, { style: styles49.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ jsxs41(
19956
- TouchableOpacity19,
20609
+ return /* @__PURE__ */ jsxs42(View49, { style: styles51.root, children: [
20610
+ /* @__PURE__ */ jsx65(View49, { style: styles51.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ jsxs42(
20611
+ TouchableOpacity20,
19957
20612
  {
19958
- style: [styles49.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
20613
+ style: [styles51.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
19959
20614
  onPress: () => runAction(action),
19960
20615
  activeOpacity: 0.85,
19961
20616
  accessibilityRole: "button",
19962
20617
  accessibilityLabel: action.label,
19963
20618
  children: [
19964
- /* @__PURE__ */ jsx61(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
19965
- /* @__PURE__ */ jsx61(Text39, { style: [styles49.actionLabel, { color: colors.primaryText }], numberOfLines: 1, children: action.label })
20619
+ /* @__PURE__ */ jsx65(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
20620
+ /* @__PURE__ */ jsx65(Text40, { style: [styles51.actionLabel, { color: colors.primaryText }], numberOfLines: 1, children: action.label })
19966
20621
  ]
19967
20622
  },
19968
20623
  action.key
19969
20624
  )) }),
19970
- /* @__PURE__ */ jsx61(Animated13.View, { style: [{ backgroundColor: background, transform: [{ translateX }] }], ...panResponder.panHandlers, children })
20625
+ /* @__PURE__ */ jsx65(Animated13.View, { style: [{ backgroundColor: background, transform: [{ translateX }] }], ...panResponder.panHandlers, children })
19971
20626
  ] });
19972
20627
  };
19973
- var styles49 = StyleSheet50.create({
20628
+ var styles51 = StyleSheet52.create({
19974
20629
  root: {
19975
20630
  position: "relative"
19976
20631
  },
19977
20632
  actionsLayer: {
19978
- ...StyleSheet50.absoluteFillObject,
20633
+ ...StyleSheet52.absoluteFillObject,
19979
20634
  flexDirection: "row",
19980
20635
  justifyContent: "flex-end"
19981
20636
  },
@@ -20008,10 +20663,10 @@ var formatTimeAgo = (dateString, t) => {
20008
20663
  };
20009
20664
 
20010
20665
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
20011
- import { Fragment as Fragment15, jsx as jsx62, jsxs as jsxs42 } from "react/jsx-runtime";
20666
+ import { Fragment as Fragment15, jsx as jsx66, jsxs as jsxs43 } from "react/jsx-runtime";
20012
20667
  var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) => {
20013
20668
  var _a3, _b;
20014
- const { t } = useTranslation26();
20669
+ const { t } = useTranslation28();
20015
20670
  const { colors } = useTheme();
20016
20671
  const isUnread = !notification.is_read;
20017
20672
  const statusLabel = notification.status_label_display || notification.status_label;
@@ -20038,35 +20693,35 @@ var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) =>
20038
20693
  onPress: onAcknowledge
20039
20694
  });
20040
20695
  }
20041
- return /* @__PURE__ */ jsx62(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ jsxs42(TouchableOpacity20, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles50.row, children: [
20042
- isUnread ? /* @__PURE__ */ jsx62(View48, { style: [styles50.accent, { backgroundColor: accent }] }) : null,
20043
- /* @__PURE__ */ jsx62(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
20044
- /* @__PURE__ */ jsxs42(View48, { style: styles50.content, children: [
20045
- /* @__PURE__ */ jsxs42(View48, { style: styles50.titleRow, children: [
20046
- /* @__PURE__ */ jsx62(
20047
- Text40,
20696
+ return /* @__PURE__ */ jsx66(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ jsxs43(TouchableOpacity21, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles52.row, children: [
20697
+ isUnread ? /* @__PURE__ */ jsx66(View50, { style: [styles52.accent, { backgroundColor: accent }] }) : null,
20698
+ /* @__PURE__ */ jsx66(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
20699
+ /* @__PURE__ */ jsxs43(View50, { style: styles52.content, children: [
20700
+ /* @__PURE__ */ jsxs43(View50, { style: styles52.titleRow, children: [
20701
+ /* @__PURE__ */ jsx66(
20702
+ Text41,
20048
20703
  {
20049
- style: [styles50.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20704
+ style: [styles52.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20050
20705
  numberOfLines: 2,
20051
20706
  children: notification.title
20052
20707
  }
20053
20708
  ),
20054
- isUnread ? /* @__PURE__ */ jsx62(View48, { style: [styles50.unreadDot, { backgroundColor: colors.primary }] }) : null
20709
+ isUnread ? /* @__PURE__ */ jsx66(View50, { style: [styles52.unreadDot, { backgroundColor: colors.primary }] }) : null
20055
20710
  ] }),
20056
- /* @__PURE__ */ jsxs42(View48, { style: styles50.metaRow, children: [
20057
- statusLabel ? /* @__PURE__ */ jsxs42(Fragment15, { children: [
20058
- /* @__PURE__ */ jsx62(View48, { style: [styles50.statusDot, { backgroundColor: accent }] }),
20059
- /* @__PURE__ */ jsx62(Text40, { style: [styles50.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
20060
- /* @__PURE__ */ jsx62(Text40, { style: [styles50.metaDivider, { color: colors.textSecondary }], children: "\xB7" })
20711
+ /* @__PURE__ */ jsxs43(View50, { style: styles52.metaRow, children: [
20712
+ statusLabel ? /* @__PURE__ */ jsxs43(Fragment15, { children: [
20713
+ /* @__PURE__ */ jsx66(View50, { style: [styles52.statusDot, { backgroundColor: accent }] }),
20714
+ /* @__PURE__ */ jsx66(Text41, { style: [styles52.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
20715
+ /* @__PURE__ */ jsx66(Text41, { style: [styles52.metaDivider, { color: colors.textSecondary }], children: "\xB7" })
20061
20716
  ] }) : null,
20062
- /* @__PURE__ */ jsx62(Text40, { style: [styles50.metaText, { color: colors.textSecondary }], children: formatTimeAgo(notification.created_at, t) })
20717
+ /* @__PURE__ */ jsx66(Text41, { style: [styles52.metaText, { color: colors.textSecondary }], children: formatTimeAgo(notification.created_at, t) })
20063
20718
  ] }),
20064
- showAcknowledge && ackCta ? /* @__PURE__ */ jsx62(View48, { style: styles50.ackWrap, children: /* @__PURE__ */ jsx62(NotificationCTAButton, { cta: ackCta, onPress: onAcknowledge }) }) : null
20719
+ showAcknowledge && ackCta ? /* @__PURE__ */ jsx66(View50, { style: styles52.ackWrap, children: /* @__PURE__ */ jsx66(NotificationCTAButton, { cta: ackCta, onPress: onAcknowledge }) }) : null
20065
20720
  ] }),
20066
- /* @__PURE__ */ jsx62(View48, { style: styles50.chevron, children: /* @__PURE__ */ jsx62(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary }) })
20721
+ /* @__PURE__ */ jsx66(View50, { style: styles52.chevron, children: /* @__PURE__ */ jsx66(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary }) })
20067
20722
  ] }) });
20068
20723
  };
20069
- var styles50 = StyleSheet51.create({
20724
+ var styles52 = StyleSheet53.create({
20070
20725
  row: {
20071
20726
  flexDirection: "row",
20072
20727
  alignItems: "center",
@@ -20129,7 +20784,7 @@ var styles50 = StyleSheet51.create({
20129
20784
  });
20130
20785
 
20131
20786
  // src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts
20132
- import { useCallback as useCallback12, useMemo as useMemo22 } from "react";
20787
+ import { useCallback as useCallback13, useMemo as useMemo22 } from "react";
20133
20788
  import { Linking as Linking2 } from "react-native";
20134
20789
  var useNotificationActions = () => {
20135
20790
  const { navigateTo, setSelectedCase } = useInternalNavigation();
@@ -20140,14 +20795,14 @@ var useNotificationActions = () => {
20140
20795
  () => ({ accessToken, refreshToken, onError, updateTokens }),
20141
20796
  [accessToken, refreshToken, onError, updateTokens]
20142
20797
  );
20143
- const hasAcknowledgeCTA = useCallback12(
20798
+ const hasAcknowledgeCTA = useCallback13(
20144
20799
  (notification) => {
20145
20800
  var _a3, _b;
20146
20801
  return (_b = (_a3 = notification.ctas) == null ? void 0 : _a3.some((cta) => cta.action_type === "acknowledge")) != null ? _b : false;
20147
20802
  },
20148
20803
  []
20149
20804
  );
20150
- const handleMarkRead = useCallback12(
20805
+ const handleMarkRead = useCallback13(
20151
20806
  async (notificationUuid) => {
20152
20807
  if (!organizationId || !workspaceId) return false;
20153
20808
  const result = await markNotificationRead(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20155,12 +20810,12 @@ var useNotificationActions = () => {
20155
20810
  },
20156
20811
  [organizationId, workspaceId, authContext, consentClient]
20157
20812
  );
20158
- const handleMarkAllRead = useCallback12(async () => {
20813
+ const handleMarkAllRead = useCallback13(async () => {
20159
20814
  if (!organizationId || !workspaceId) return false;
20160
20815
  const result = await markAllRead(organizationId, workspaceId, authContext, consentClient);
20161
20816
  return result !== null;
20162
20817
  }, [organizationId, workspaceId, authContext, consentClient]);
20163
- const handleAcknowledge = useCallback12(
20818
+ const handleAcknowledge = useCallback13(
20164
20819
  async (notificationUuid) => {
20165
20820
  if (!organizationId || !workspaceId) return false;
20166
20821
  const result = await acknowledgeNotification(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20168,7 +20823,7 @@ var useNotificationActions = () => {
20168
20823
  },
20169
20824
  [organizationId, workspaceId, authContext, consentClient]
20170
20825
  );
20171
- const handleCTAClick = useCallback12(
20826
+ const handleCTAClick = useCallback13(
20172
20827
  async (notification, cta) => {
20173
20828
  var _a3;
20174
20829
  if (cta.action_type === "acknowledge") {
@@ -20225,7 +20880,7 @@ var useNotificationActions = () => {
20225
20880
  };
20226
20881
 
20227
20882
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
20228
- import { Fragment as Fragment16, jsx as jsx63, jsxs as jsxs43 } from "react/jsx-runtime";
20883
+ import { Fragment as Fragment16, jsx as jsx67, jsxs as jsxs44 } from "react/jsx-runtime";
20229
20884
  var EMPTY_SUMMARY = { total: 0, unread: 0, action_needed: 0, acknowledged: 0 };
20230
20885
  var READ_FILTER_TO_PARAM = {
20231
20886
  all: void 0,
@@ -20233,7 +20888,7 @@ var READ_FILTER_TO_PARAM = {
20233
20888
  read: true
20234
20889
  };
20235
20890
  var NotificationsScreen = () => {
20236
- const { t } = useTranslation27();
20891
+ const { t } = useTranslation29();
20237
20892
  const { colors } = useTheme();
20238
20893
  const { langParam } = useCurrentLanguage();
20239
20894
  const { listBottom } = usePrivacyCenterInsets();
@@ -20250,15 +20905,15 @@ var NotificationsScreen = () => {
20250
20905
  handleAcknowledge,
20251
20906
  handleCTAClick
20252
20907
  } = useNotificationActions();
20253
- const [notifications, setNotifications] = useState24([]);
20254
- const [summary, setSummary] = useState24(EMPTY_SUMMARY);
20255
- const [activeTab, setActiveTab] = useState24("all");
20256
- const [readFilter, setReadFilter] = useState24("all");
20257
- const [isLoading, setIsLoading] = useState24(true);
20258
- const [isRefreshing2, setIsRefreshing] = useState24(false);
20259
- const [filterOpen, setFilterOpen] = useState24(false);
20908
+ const [notifications, setNotifications] = useState25([]);
20909
+ const [summary, setSummary] = useState25(EMPTY_SUMMARY);
20910
+ const [activeTab, setActiveTab] = useState25("all");
20911
+ const [readFilter, setReadFilter] = useState25("all");
20912
+ const [isLoading, setIsLoading] = useState25(true);
20913
+ const [isRefreshing2, setIsRefreshing] = useState25(false);
20914
+ const [filterOpen, setFilterOpen] = useState25(false);
20260
20915
  const isFiltered = activeTab !== "all" || readFilter !== "all";
20261
- const loadNotifications = useCallback13(
20916
+ const loadNotifications = useCallback14(
20262
20917
  async (includeSummary = false, silent = false) => {
20263
20918
  if (!organizationId || !workspaceId) return;
20264
20919
  if (!silent) setIsLoading(true);
@@ -20288,18 +20943,21 @@ var NotificationsScreen = () => {
20288
20943
  },
20289
20944
  [organizationId, workspaceId, activeTab, readFilter, authContext, consentClient, langParam]
20290
20945
  );
20291
- useEffect19(() => {
20946
+ useEffect20(() => {
20292
20947
  loadNotifications(true);
20293
20948
  }, [loadNotifications]);
20294
20949
  const loadRef = useRef12(loadNotifications);
20295
20950
  loadRef.current = loadNotifications;
20296
- useEffect19(() => {
20951
+ const authContextRef = useRef12(authContext);
20952
+ authContextRef.current = authContext;
20953
+ useEffect20(() => {
20297
20954
  const id = setInterval(() => {
20955
+ if (isRefreshBlocked(authContextRef.current)) return;
20298
20956
  loadRef.current(false, true);
20299
20957
  }, POLL_INTERVAL);
20300
20958
  return () => clearInterval(id);
20301
20959
  }, []);
20302
- const onNotificationClick = useCallback13(
20960
+ const onNotificationClick = useCallback14(
20303
20961
  async (notification) => {
20304
20962
  const shouldMarkRead = !notification.is_read;
20305
20963
  const shouldAutoAcknowledge = !notification.is_acknowledged && !hasAcknowledgeCTA(notification);
@@ -20320,7 +20978,7 @@ var NotificationsScreen = () => {
20320
20978
  },
20321
20979
  [hasAcknowledgeCTA, handleAcknowledge, handleMarkRead]
20322
20980
  );
20323
- const onRowPress = useCallback13(
20981
+ const onRowPress = useCallback14(
20324
20982
  async (notification) => {
20325
20983
  var _a3;
20326
20984
  const linkCta = (_a3 = notification.ctas) == null ? void 0 : _a3.find((cta) => cta.action_type === "link" && cta.url);
@@ -20338,7 +20996,7 @@ var NotificationsScreen = () => {
20338
20996
  },
20339
20997
  [handleCTAClick, onNotificationClick]
20340
20998
  );
20341
- const onMarkReadRow = useCallback13(
20999
+ const onMarkReadRow = useCallback14(
20342
21000
  async (notification) => {
20343
21001
  if (notification.is_read) return;
20344
21002
  const ok = await handleMarkRead(notification.uuid);
@@ -20348,7 +21006,7 @@ var NotificationsScreen = () => {
20348
21006
  },
20349
21007
  [handleMarkRead]
20350
21008
  );
20351
- const onAcknowledgeRow = useCallback13(
21009
+ const onAcknowledgeRow = useCallback14(
20352
21010
  async (notification) => {
20353
21011
  if (notification.is_acknowledged) return;
20354
21012
  const ok = await handleAcknowledge(notification.uuid);
@@ -20365,7 +21023,14 @@ var NotificationsScreen = () => {
20365
21023
  },
20366
21024
  [handleAcknowledge]
20367
21025
  );
20368
- const onRefresh = useCallback13(() => {
21026
+ const onMarkAllRead = useCallback14(async () => {
21027
+ const ok = await handleMarkAllRead();
21028
+ if (!ok) return;
21029
+ setNotifications((prev) => prev.map((item) => ({ ...item, is_read: true })));
21030
+ setSummary((prev) => ({ ...prev, unread: 0 }));
21031
+ if (readFilter !== "all") loadNotifications(true, true);
21032
+ }, [handleMarkAllRead, readFilter, loadNotifications]);
21033
+ const onRefresh = useCallback14(() => {
20369
21034
  setIsRefreshing(true);
20370
21035
  loadNotifications(true, true);
20371
21036
  }, [loadNotifications]);
@@ -20373,14 +21038,14 @@ var NotificationsScreen = () => {
20373
21038
  () => groupByTime(notifications, (item) => item.created_at, classifyTime),
20374
21039
  [notifications, classifyTime]
20375
21040
  );
20376
- const header = /* @__PURE__ */ jsxs43(View49, { style: styles51.header, children: [
20377
- /* @__PURE__ */ jsxs43(View49, { style: styles51.titleRow, children: [
20378
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
20379
- /* @__PURE__ */ jsx63(
20380
- TouchableOpacity21,
21041
+ const header = /* @__PURE__ */ jsxs44(View51, { style: styles53.header, children: [
21042
+ /* @__PURE__ */ jsxs44(View51, { style: styles53.titleRow, children: [
21043
+ /* @__PURE__ */ jsx67(Text42, { style: [styles53.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
21044
+ /* @__PURE__ */ jsx67(
21045
+ TouchableOpacity22,
20381
21046
  {
20382
21047
  style: [
20383
- styles51.filterBtn,
21048
+ styles53.filterBtn,
20384
21049
  {
20385
21050
  backgroundColor: isFiltered ? colors.primarySoft : colors.surface,
20386
21051
  borderColor: isFiltered ? colors.primary : colors.border
@@ -20389,30 +21054,30 @@ var NotificationsScreen = () => {
20389
21054
  onPress: () => setFilterOpen(true),
20390
21055
  accessibilityRole: "button",
20391
21056
  accessibilityLabel: t("filter") || "Filter",
20392
- children: /* @__PURE__ */ jsx63(Icon, { name: "sliders-horizontal", size: 18, color: isFiltered ? colors.primary : colors.text })
21057
+ children: /* @__PURE__ */ jsx67(Icon, { name: "sliders-horizontal", size: 18, color: isFiltered ? colors.primary : colors.text })
20393
21058
  }
20394
21059
  )
20395
21060
  ] }),
20396
- summary.unread > 0 ? /* @__PURE__ */ jsxs43(TouchableOpacity21, { style: styles51.markAllBtn, onPress: handleMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
20397
- /* @__PURE__ */ jsx63(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
20398
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.markAllLabel, { color: colors.primary }], children: t("markAllAsRead") || "Mark all as read" })
21061
+ summary.unread > 0 ? /* @__PURE__ */ jsxs44(TouchableOpacity22, { style: styles53.markAllBtn, onPress: onMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
21062
+ /* @__PURE__ */ jsx67(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
21063
+ /* @__PURE__ */ jsx67(Text42, { style: [styles53.markAllLabel, { color: colors.primary }], children: t("markAllAsRead") || "Mark all as read" })
20399
21064
  ] }) : null
20400
21065
  ] });
20401
- return /* @__PURE__ */ jsxs43(Fragment16, { children: [
20402
- /* @__PURE__ */ jsx63(
21066
+ return /* @__PURE__ */ jsxs44(Fragment16, { children: [
21067
+ /* @__PURE__ */ jsx67(
20403
21068
  FlatList3,
20404
21069
  {
20405
21070
  data: sections,
20406
21071
  keyExtractor: (section2) => section2.key,
20407
- style: [styles51.list, { backgroundColor: colors.canvasSubtle }],
20408
- contentContainerStyle: [styles51.listContent, { flexGrow: 1, paddingBottom: listBottom }],
21072
+ style: [styles53.list, { backgroundColor: colors.canvasSubtle }],
21073
+ contentContainerStyle: [styles53.listContent, { flexGrow: 1, paddingBottom: listBottom }],
20409
21074
  ListHeaderComponent: header,
20410
21075
  showsVerticalScrollIndicator: false,
20411
- refreshControl: /* @__PURE__ */ jsx63(RefreshControl5, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
20412
- renderItem: ({ item: section2 }) => /* @__PURE__ */ jsxs43(View49, { style: styles51.section, children: [
20413
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
20414
- /* @__PURE__ */ jsx63(View49, { style: [styles51.cardShadow, elevation.card], children: /* @__PURE__ */ jsx63(View49, { style: [styles51.cardClip, { backgroundColor: colors.surface }], children: section2.data.map((item, index) => /* @__PURE__ */ jsxs43(View49, { children: [
20415
- /* @__PURE__ */ jsx63(
21076
+ refreshControl: /* @__PURE__ */ jsx67(RefreshControl5, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
21077
+ renderItem: ({ item: section2 }) => /* @__PURE__ */ jsxs44(View51, { style: styles53.section, children: [
21078
+ /* @__PURE__ */ jsx67(Text42, { style: [styles53.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
21079
+ /* @__PURE__ */ jsx67(View51, { style: [styles53.cardShadow, elevation.card], children: /* @__PURE__ */ jsx67(View51, { style: [styles53.cardClip, { backgroundColor: colors.surface }], children: section2.data.map((item, index) => /* @__PURE__ */ jsxs44(View51, { children: [
21080
+ /* @__PURE__ */ jsx67(
20416
21081
  NotificationRow,
20417
21082
  {
20418
21083
  notification: item,
@@ -20421,19 +21086,19 @@ var NotificationsScreen = () => {
20421
21086
  onAcknowledge: () => onAcknowledgeRow(item)
20422
21087
  }
20423
21088
  ),
20424
- index < section2.data.length - 1 ? /* @__PURE__ */ jsx63(View49, { style: [styles51.separator, { backgroundColor: colors.hairline }] }) : null
21089
+ index < section2.data.length - 1 ? /* @__PURE__ */ jsx67(View51, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
20425
21090
  ] }, item.uuid)) }) })
20426
21091
  ] }),
20427
- ListEmptyComponent: isLoading ? /* @__PURE__ */ jsx63(View49, { style: styles51.skeletonWrap, children: /* @__PURE__ */ jsx63(View49, { style: [styles51.cardClip, elevation.card, { backgroundColor: colors.surface }], children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs43(View49, { children: [
20428
- /* @__PURE__ */ jsxs43(View49, { style: styles51.skeletonRow, children: [
20429
- /* @__PURE__ */ jsx63(Skeleton, { width: 36, height: 36, radius: radii.md }),
20430
- /* @__PURE__ */ jsxs43(View49, { style: styles51.skeletonLines, children: [
20431
- /* @__PURE__ */ jsx63(Skeleton, { width: "70%", height: 13 }),
20432
- /* @__PURE__ */ jsx63(Skeleton, { width: "40%", height: 10 })
21092
+ ListEmptyComponent: isLoading ? /* @__PURE__ */ jsx67(View51, { style: styles53.skeletonWrap, children: /* @__PURE__ */ jsx67(View51, { style: [styles53.cardClip, elevation.card, { backgroundColor: colors.surface }], children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs44(View51, { children: [
21093
+ /* @__PURE__ */ jsxs44(View51, { style: styles53.skeletonRow, children: [
21094
+ /* @__PURE__ */ jsx67(Skeleton, { width: 36, height: 36, radius: radii.md }),
21095
+ /* @__PURE__ */ jsxs44(View51, { style: styles53.skeletonLines, children: [
21096
+ /* @__PURE__ */ jsx67(Skeleton, { width: "70%", height: 13 }),
21097
+ /* @__PURE__ */ jsx67(Skeleton, { width: "40%", height: 10 })
20433
21098
  ] })
20434
21099
  ] }),
20435
- i < 3 ? /* @__PURE__ */ jsx63(View49, { style: [styles51.separator, { backgroundColor: colors.hairline }] }) : null
20436
- ] }, i)) }) }) : /* @__PURE__ */ jsx63(View49, { style: styles51.emptyWrap, children: /* @__PURE__ */ jsx63(
21100
+ i < 3 ? /* @__PURE__ */ jsx67(View51, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
21101
+ ] }, i)) }) }) : /* @__PURE__ */ jsx67(View51, { style: styles53.emptyWrap, children: /* @__PURE__ */ jsx67(
20437
21102
  PCEmpty,
20438
21103
  {
20439
21104
  iconName: "circle-check",
@@ -20442,14 +21107,14 @@ var NotificationsScreen = () => {
20442
21107
  }
20443
21108
  ) }),
20444
21109
  ListFooterComponentStyle: { marginTop: "auto" },
20445
- ListFooterComponent: /* @__PURE__ */ jsx63(Footer, {})
21110
+ ListFooterComponent: /* @__PURE__ */ jsx67(Footer, {})
20446
21111
  }
20447
21112
  ),
20448
- /* @__PURE__ */ jsx63(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ jsxs43(View49, { style: styles51.filterSheet, children: [
20449
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
20450
- /* @__PURE__ */ jsx63(View49, { style: styles51.chipWrap, children: filterTabs.map((tab) => {
21113
+ /* @__PURE__ */ jsx67(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ jsxs44(View51, { style: styles53.filterSheet, children: [
21114
+ /* @__PURE__ */ jsx67(Text42, { style: [styles53.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
21115
+ /* @__PURE__ */ jsx67(View51, { style: styles53.chipWrap, children: filterTabs.map((tab) => {
20451
21116
  const selected = tab.key === activeTab;
20452
- return /* @__PURE__ */ jsx63(
21117
+ return /* @__PURE__ */ jsx67(
20453
21118
  FilterChip,
20454
21119
  {
20455
21120
  label: tab.label,
@@ -20459,12 +21124,12 @@ var NotificationsScreen = () => {
20459
21124
  tab.key
20460
21125
  );
20461
21126
  }) }),
20462
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
20463
- /* @__PURE__ */ jsx63(View49, { style: styles51.chipWrap, children: [
21127
+ /* @__PURE__ */ jsx67(Text42, { style: [styles53.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
21128
+ /* @__PURE__ */ jsx67(View51, { style: styles53.chipWrap, children: [
20464
21129
  { key: "all", label: t("all") || "All" },
20465
21130
  { key: "unread", label: t("unread") || "Unread" },
20466
21131
  { key: "read", label: t("read", { defaultValue: "Read" }) }
20467
- ].map((opt) => /* @__PURE__ */ jsx63(
21132
+ ].map((opt) => /* @__PURE__ */ jsx67(
20468
21133
  FilterChip,
20469
21134
  {
20470
21135
  label: opt.label,
@@ -20473,13 +21138,13 @@ var NotificationsScreen = () => {
20473
21138
  },
20474
21139
  opt.key
20475
21140
  )) }),
20476
- /* @__PURE__ */ jsx63(
20477
- TouchableOpacity21,
21141
+ /* @__PURE__ */ jsx67(
21142
+ TouchableOpacity22,
20478
21143
  {
20479
- style: [styles51.applyBtn, { backgroundColor: colors.primary }],
21144
+ style: [styles53.applyBtn, { backgroundColor: colors.primary }],
20480
21145
  onPress: () => setFilterOpen(false),
20481
21146
  accessibilityRole: "button",
20482
- children: /* @__PURE__ */ jsx63(Text41, { style: [styles51.applyLabel, { color: colors.primaryText }], children: t("done", { defaultValue: "Done" }) })
21147
+ children: /* @__PURE__ */ jsx67(Text42, { style: [styles53.applyLabel, { color: colors.primaryText }], children: t("done", { defaultValue: "Done" }) })
20483
21148
  }
20484
21149
  )
20485
21150
  ] }) })
@@ -20487,25 +21152,25 @@ var NotificationsScreen = () => {
20487
21152
  };
20488
21153
  var FilterChip = ({ label, selected, onPress }) => {
20489
21154
  const { colors } = useTheme();
20490
- return /* @__PURE__ */ jsx63(
20491
- TouchableOpacity21,
21155
+ return /* @__PURE__ */ jsx67(
21156
+ TouchableOpacity22,
20492
21157
  {
20493
21158
  onPress,
20494
21159
  activeOpacity: 0.7,
20495
21160
  accessibilityRole: "button",
20496
21161
  accessibilityState: { selected },
20497
21162
  style: [
20498
- styles51.chip,
21163
+ styles53.chip,
20499
21164
  {
20500
21165
  backgroundColor: selected ? colors.primary : colors.surfaceAlt,
20501
21166
  borderColor: selected ? colors.primary : colors.border
20502
21167
  }
20503
21168
  ],
20504
- children: /* @__PURE__ */ jsx63(Text41, { style: [styles51.chipLabel, { color: selected ? colors.primaryText : colors.text }], children: label })
21169
+ children: /* @__PURE__ */ jsx67(Text42, { style: [styles53.chipLabel, { color: selected ? colors.primaryText : colors.text }], children: label })
20505
21170
  }
20506
21171
  );
20507
21172
  };
20508
- var styles51 = StyleSheet52.create({
21173
+ var styles53 = StyleSheet54.create({
20509
21174
  list: {
20510
21175
  flex: 1
20511
21176
  },
@@ -20539,7 +21204,7 @@ var styles51 = StyleSheet52.create({
20539
21204
  filterBtn: {
20540
21205
  width: 40,
20541
21206
  height: 40,
20542
- borderWidth: StyleSheet52.hairlineWidth,
21207
+ borderWidth: StyleSheet54.hairlineWidth,
20543
21208
  borderRadius: radii.md,
20544
21209
  justifyContent: "center",
20545
21210
  alignItems: "center"
@@ -20560,7 +21225,7 @@ var styles51 = StyleSheet52.create({
20560
21225
  overflow: "hidden"
20561
21226
  },
20562
21227
  separator: {
20563
- height: StyleSheet52.hairlineWidth,
21228
+ height: StyleSheet54.hairlineWidth,
20564
21229
  marginLeft: spacing.lg + 36 + spacing.md
20565
21230
  },
20566
21231
  emptyWrap: {
@@ -20598,7 +21263,7 @@ var styles51 = StyleSheet52.create({
20598
21263
  justifyContent: "center",
20599
21264
  paddingHorizontal: spacing.lg,
20600
21265
  borderRadius: radii.pill,
20601
- borderWidth: StyleSheet52.hairlineWidth
21266
+ borderWidth: StyleSheet54.hairlineWidth
20602
21267
  },
20603
21268
  chipLabel: {
20604
21269
  ...typography.label
@@ -20617,7 +21282,7 @@ var styles51 = StyleSheet52.create({
20617
21282
  });
20618
21283
 
20619
21284
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
20620
- import { Fragment as Fragment17, jsx as jsx64, jsxs as jsxs44 } from "react/jsx-runtime";
21285
+ import { Fragment as Fragment17, jsx as jsx68, jsxs as jsxs45 } from "react/jsx-runtime";
20621
21286
  var privacyCenterQueryClient = new QueryClient();
20622
21287
  function PrivacyCenterContent({ onBack }) {
20623
21288
  const { currentPage } = useInternalNavigation();
@@ -20627,24 +21292,24 @@ function PrivacyCenterContent({ onBack }) {
20627
21292
  const chromeMode = getPageChromeMode(currentPage);
20628
21293
  const canvasIsLight = isLightColor(colors.canvasSubtle);
20629
21294
  const barStyle = canvasIsLight ? "dark-content" : "light-content";
20630
- useEffect20(() => {
21295
+ useEffect21(() => {
20631
21296
  StatusBar2.setBarStyle(barStyle, true);
20632
21297
  if (Platform8.OS === "android") {
20633
21298
  setNavBarIconStyle(canvasIsLight ? "dark" : "light");
20634
21299
  }
20635
21300
  }, [barStyle, canvasIsLight]);
20636
- return /* @__PURE__ */ jsxs44(View50, { style: [styles52.container, { backgroundColor: colors.canvasSubtle }], children: [
20637
- /* @__PURE__ */ jsx64(StatusBar2, { barStyle, translucent: true }),
20638
- /* @__PURE__ */ jsx64(View50, { style: styles52.mainColumn, children: brandingLoading ? /* @__PURE__ */ jsx64(PCLoader, {}) : /* @__PURE__ */ jsxs44(Fragment17, { children: [
20639
- /* @__PURE__ */ jsx64(SlimTopBar, { mode: chromeMode, onBack }),
20640
- /* @__PURE__ */ jsx64(View50, { style: [styles52.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ jsx64(PCLoader, {}) : status === "empty" ? /* @__PURE__ */ jsx64(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ jsxs44(Fragment17, { children: [
20641
- currentPage === "home" && /* @__PURE__ */ jsx64(HomeHub, {}),
20642
- currentPage === "consent-manager" && /* @__PURE__ */ jsx64(ConsentManager, {}),
20643
- currentPage === "form" && /* @__PURE__ */ jsx64(FormPage, {}),
20644
- currentPage === "activity" && /* @__PURE__ */ jsx64(ActivitiesList, {}),
20645
- currentPage === "receipts" && /* @__PURE__ */ jsx64(ReceiptsList, {}),
20646
- currentPage === "case-details" && /* @__PURE__ */ jsx64(CaseDetailsPage, {}),
20647
- currentPage === "notifications" && /* @__PURE__ */ jsx64(NotificationsScreen, {})
21301
+ return /* @__PURE__ */ jsxs45(View52, { style: [styles54.container, { backgroundColor: colors.canvasSubtle }], children: [
21302
+ /* @__PURE__ */ jsx68(StatusBar2, { barStyle, translucent: true }),
21303
+ /* @__PURE__ */ jsx68(View52, { style: styles54.mainColumn, children: brandingLoading ? /* @__PURE__ */ jsx68(PCLoader, {}) : /* @__PURE__ */ jsxs45(Fragment17, { children: [
21304
+ /* @__PURE__ */ jsx68(SlimTopBar, { mode: chromeMode, onBack }),
21305
+ /* @__PURE__ */ jsx68(View52, { style: [styles54.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ jsx68(PCLoader, {}) : status === "session-expired" ? /* @__PURE__ */ jsx68(PrivacyCenterSessionExpired, {}) : status === "empty" ? /* @__PURE__ */ jsx68(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ jsxs45(Fragment17, { children: [
21306
+ currentPage === "home" && /* @__PURE__ */ jsx68(HomeHub, {}),
21307
+ currentPage === "consent-manager" && /* @__PURE__ */ jsx68(ConsentManager, {}),
21308
+ currentPage === "form" && /* @__PURE__ */ jsx68(FormPage, {}),
21309
+ currentPage === "activity" && /* @__PURE__ */ jsx68(ActivitiesList, {}),
21310
+ currentPage === "receipts" && /* @__PURE__ */ jsx68(ReceiptsList, {}),
21311
+ currentPage === "case-details" && /* @__PURE__ */ jsx68(CaseDetailsPage, {}),
21312
+ currentPage === "notifications" && /* @__PURE__ */ jsx68(NotificationsScreen, {})
20648
21313
  ] }) })
20649
21314
  ] }) })
20650
21315
  ] });
@@ -20658,22 +21323,34 @@ function RedactoPrivacyCenter({
20658
21323
  theme: _theme,
20659
21324
  accessToken,
20660
21325
  refreshToken,
21326
+ token,
21327
+ email,
21328
+ mobile,
21329
+ ucic,
21330
+ organisationUuid,
21331
+ workspaceUuid,
20661
21332
  onError,
20662
21333
  initialPage = "home",
20663
21334
  initialCaseUuid,
20664
21335
  onBack
20665
21336
  }) {
20666
- return /* @__PURE__ */ jsx64(SafeAreaBoundary, { children: /* @__PURE__ */ jsx64(KeyboardProviderCompat, { children: /* @__PURE__ */ jsx64(QueryClientProvider, { client: privacyCenterQueryClient, children: /* @__PURE__ */ jsx64(I18nextProvider, { i18n: i18n_default, children: /* @__PURE__ */ jsx64(ThemeProvider, { slug, baseUrl, children: /* @__PURE__ */ jsx64(BaseUrlProvider, { baseUrl, ledgerBaseUrl, children: /* @__PURE__ */ jsx64(
21337
+ return /* @__PURE__ */ jsx68(SafeAreaBoundary, { children: /* @__PURE__ */ jsx68(KeyboardProviderCompat, { children: /* @__PURE__ */ jsx68(QueryClientProvider, { client: privacyCenterQueryClient, children: /* @__PURE__ */ jsx68(I18nextProvider, { i18n: i18n_default, children: /* @__PURE__ */ jsx68(ThemeProvider, { slug, baseUrl, children: /* @__PURE__ */ jsx68(BaseUrlProvider, { baseUrl, ledgerBaseUrl, children: /* @__PURE__ */ jsx68(
20667
21338
  AuthProvider,
20668
21339
  {
20669
- accessToken,
20670
- refreshToken,
21340
+ accessToken: accessToken != null ? accessToken : "",
21341
+ refreshToken: refreshToken != null ? refreshToken : "",
21342
+ token,
21343
+ sandboxUcic: ucic,
21344
+ sandboxSubject: email || mobile,
21345
+ organisationUuid,
21346
+ workspaceUuid,
21347
+ slug,
20671
21348
  onError,
20672
- children: /* @__PURE__ */ jsx64(NavigationProvider, { initialPage, initialPendingCaseUuid: initialCaseUuid != null ? initialCaseUuid : null, children: /* @__PURE__ */ jsx64(DataAvailabilityProvider, { children: /* @__PURE__ */ jsx64(PageStatusProvider, { children: /* @__PURE__ */ jsx64(PrivacyCenterContent, { onBack }) }) }) })
21349
+ children: /* @__PURE__ */ jsx68(NavigationProvider, { initialPage, initialPendingCaseUuid: initialCaseUuid != null ? initialCaseUuid : null, children: /* @__PURE__ */ jsx68(SelectUserGate, { children: /* @__PURE__ */ jsx68(DataAvailabilityProvider, { children: /* @__PURE__ */ jsx68(PageStatusProvider, { children: /* @__PURE__ */ jsx68(PrivacyCenterContent, { onBack }) }) }) }) })
20673
21350
  }
20674
21351
  ) }) }) }) }) }) });
20675
21352
  }
20676
- var styles52 = StyleSheet53.create({
21353
+ var styles54 = StyleSheet55.create({
20677
21354
  container: {
20678
21355
  flex: 1
20679
21356
  },
@@ -20688,78 +21365,78 @@ var styles52 = StyleSheet53.create({
20688
21365
 
20689
21366
  // src/RedactoPrivacyCenter/components/SideMenu.tsx
20690
21367
  import {
20691
- StyleSheet as StyleSheet54,
20692
- Text as Text42,
20693
- TouchableOpacity as TouchableOpacity22,
20694
- View as View51
21368
+ StyleSheet as StyleSheet56,
21369
+ Text as Text43,
21370
+ TouchableOpacity as TouchableOpacity23,
21371
+ View as View53
20695
21372
  } from "react-native";
20696
- import { useTranslation as useTranslation28 } from "react-i18next";
21373
+ import { useTranslation as useTranslation30 } from "react-i18next";
20697
21374
  import Svg2, { Path as Path2 } from "react-native-svg";
20698
- import { Fragment as Fragment18, jsx as jsx65, jsxs as jsxs45 } from "react/jsx-runtime";
21375
+ import { Fragment as Fragment18, jsx as jsx69, jsxs as jsxs46 } from "react/jsx-runtime";
20699
21376
  var MENU_ITEMS = [
20700
21377
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consent Manager", icon: "shield-check" },
20701
21378
  { page: "form", labelKey: "grievanceRequests", fallback: "Privacy Requests", icon: "message-circle-warning" },
20702
21379
  { page: "activity", labelKey: "activity", fallback: "Activity", icon: "activity" }
20703
21380
  ];
20704
21381
  function SideMenu({ onBack } = {}) {
20705
- const { t } = useTranslation28();
21382
+ const { t } = useTranslation30();
20706
21383
  const { currentPage, navigateTo } = useInternalNavigation();
20707
21384
  const { organizationName, email } = useAuth();
20708
21385
  const { colors } = useTheme();
20709
21386
  const orgInitial = organizationName ? organizationName.charAt(0).toUpperCase() : "R";
20710
21387
  const displayName = organizationName || "Organization";
20711
- return /* @__PURE__ */ jsxs45(View51, { style: [styles53.container, { backgroundColor: colors.surface }], children: [
20712
- /* @__PURE__ */ jsxs45(View51, { style: styles53.orgSection, children: [
20713
- /* @__PURE__ */ jsx65(View51, { style: [styles53.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ jsx65(Text42, { style: [styles53.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
20714
- /* @__PURE__ */ jsxs45(View51, { style: styles53.orgInfo, children: [
20715
- /* @__PURE__ */ jsx65(Text42, { style: [styles53.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
20716
- email ? /* @__PURE__ */ jsx65(Text42, { style: [styles53.orgEmail, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
21388
+ return /* @__PURE__ */ jsxs46(View53, { style: [styles55.container, { backgroundColor: colors.surface }], children: [
21389
+ /* @__PURE__ */ jsxs46(View53, { style: styles55.orgSection, children: [
21390
+ /* @__PURE__ */ jsx69(View53, { style: [styles55.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ jsx69(Text43, { style: [styles55.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
21391
+ /* @__PURE__ */ jsxs46(View53, { style: styles55.orgInfo, children: [
21392
+ /* @__PURE__ */ jsx69(Text43, { style: [styles55.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
21393
+ email ? /* @__PURE__ */ jsx69(Text43, { style: [styles55.orgEmail, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
20717
21394
  ] })
20718
21395
  ] }),
20719
- /* @__PURE__ */ jsx65(View51, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20720
- /* @__PURE__ */ jsx65(View51, { style: styles53.menuSection, children: MENU_ITEMS.map((item) => {
21396
+ /* @__PURE__ */ jsx69(View53, { style: [styles55.divider, { backgroundColor: colors.border }] }),
21397
+ /* @__PURE__ */ jsx69(View53, { style: styles55.menuSection, children: MENU_ITEMS.map((item) => {
20721
21398
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
20722
- return /* @__PURE__ */ jsxs45(
20723
- TouchableOpacity22,
21399
+ return /* @__PURE__ */ jsxs46(
21400
+ TouchableOpacity23,
20724
21401
  {
20725
21402
  style: [
20726
- styles53.menuItem,
20727
- isActive && [styles53.menuItemActive, { backgroundColor: `${colors.primary}14` }]
21403
+ styles55.menuItem,
21404
+ isActive && [styles55.menuItemActive, { backgroundColor: `${colors.primary}14` }]
20728
21405
  ],
20729
21406
  onPress: () => navigateTo(item.page),
20730
21407
  activeOpacity: 0.7,
20731
21408
  accessibilityRole: "button",
20732
21409
  accessibilityState: { selected: isActive },
20733
21410
  children: [
20734
- /* @__PURE__ */ jsx65(View51, { style: styles53.menuIconWrap, children: /* @__PURE__ */ jsx65(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
20735
- /* @__PURE__ */ jsx65(
20736
- Text42,
21411
+ /* @__PURE__ */ jsx69(View53, { style: styles55.menuIconWrap, children: /* @__PURE__ */ jsx69(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
21412
+ /* @__PURE__ */ jsx69(
21413
+ Text43,
20737
21414
  {
20738
21415
  style: [
20739
- styles53.menuLabel,
21416
+ styles55.menuLabel,
20740
21417
  { color: isActive ? colors.primary : colors.text },
20741
- isActive && styles53.menuLabelActive
21418
+ isActive && styles55.menuLabelActive
20742
21419
  ],
20743
21420
  children: t(item.labelKey) || item.fallback
20744
21421
  }
20745
21422
  ),
20746
- isActive ? /* @__PURE__ */ jsx65(View51, { style: [styles53.activeIndicator, { backgroundColor: colors.primary }] }) : null
21423
+ isActive ? /* @__PURE__ */ jsx69(View53, { style: [styles55.activeIndicator, { backgroundColor: colors.primary }] }) : null
20747
21424
  ]
20748
21425
  },
20749
21426
  item.page
20750
21427
  );
20751
21428
  }) }),
20752
- onBack ? /* @__PURE__ */ jsxs45(Fragment18, { children: [
20753
- /* @__PURE__ */ jsx65(View51, { style: { flex: 1 } }),
20754
- /* @__PURE__ */ jsx65(View51, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20755
- /* @__PURE__ */ jsxs45(
20756
- TouchableOpacity22,
21429
+ onBack ? /* @__PURE__ */ jsxs46(Fragment18, { children: [
21430
+ /* @__PURE__ */ jsx69(View53, { style: { flex: 1 } }),
21431
+ /* @__PURE__ */ jsx69(View53, { style: [styles55.divider, { backgroundColor: colors.border }] }),
21432
+ /* @__PURE__ */ jsxs46(
21433
+ TouchableOpacity23,
20757
21434
  {
20758
- style: styles53.backBtn,
21435
+ style: styles55.backBtn,
20759
21436
  onPress: () => navigateBack(onBack),
20760
21437
  activeOpacity: 0.7,
20761
21438
  children: [
20762
- /* @__PURE__ */ jsx65(Svg2, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", children: onBack === "back" ? /* @__PURE__ */ jsx65(
21439
+ /* @__PURE__ */ jsx69(Svg2, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", children: onBack === "back" ? /* @__PURE__ */ jsx69(
20763
21440
  Path2,
20764
21441
  {
20765
21442
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -20768,7 +21445,7 @@ function SideMenu({ onBack } = {}) {
20768
21445
  strokeLinecap: "round",
20769
21446
  strokeLinejoin: "round"
20770
21447
  }
20771
- ) : /* @__PURE__ */ jsx65(
21448
+ ) : /* @__PURE__ */ jsx69(
20772
21449
  Path2,
20773
21450
  {
20774
21451
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -20778,14 +21455,14 @@ function SideMenu({ onBack } = {}) {
20778
21455
  strokeLinejoin: "round"
20779
21456
  }
20780
21457
  ) }),
20781
- /* @__PURE__ */ jsx65(Text42, { style: [styles53.backBtnLabel, { color: colors.textSecondary }], children: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out" })
21458
+ /* @__PURE__ */ jsx69(Text43, { style: [styles55.backBtnLabel, { color: colors.textSecondary }], children: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out" })
20782
21459
  ]
20783
21460
  }
20784
21461
  )
20785
21462
  ] }) : null
20786
21463
  ] });
20787
21464
  }
20788
- var styles53 = StyleSheet54.create({
21465
+ var styles55 = StyleSheet56.create({
20789
21466
  container: {
20790
21467
  flex: 1,
20791
21468
  paddingTop: 12
@@ -20871,42 +21548,68 @@ var styles53 = StyleSheet54.create({
20871
21548
  });
20872
21549
 
20873
21550
  // src/RedactoPrivacyCenter/components/Navbar.tsx
20874
- import { useCallback as useCallback14, useEffect as useEffect21, useState as useState25 } from "react";
20875
- import { StyleSheet as StyleSheet56, Text as Text44, TouchableOpacity as TouchableOpacity24, View as View53 } from "react-native";
20876
- import { useTranslation as useTranslation30 } from "react-i18next";
21551
+ import { useCallback as useCallback15, useEffect as useEffect22, useState as useState26 } from "react";
21552
+ import { StyleSheet as StyleSheet58, Text as Text45, TouchableOpacity as TouchableOpacity25, View as View55 } from "react-native";
21553
+ import { useTranslation as useTranslation32 } from "react-i18next";
20877
21554
  import Svg4, { Path as Path4 } from "react-native-svg";
20878
21555
 
20879
21556
  // src/RedactoPrivacyCenter/components/UserOrgMenu.tsx
20880
- import { Image as Image4, StyleSheet as StyleSheet55, Text as Text43, TouchableOpacity as TouchableOpacity23, View as View52 } from "react-native";
20881
- import { useTranslation as useTranslation29 } from "react-i18next";
21557
+ import { Image as Image4, StyleSheet as StyleSheet57, Text as Text44, TouchableOpacity as TouchableOpacity24, View as View54 } from "react-native";
21558
+ import { useTranslation as useTranslation31 } from "react-i18next";
20882
21559
  import Svg3, { Path as Path3 } from "react-native-svg";
20883
- import { jsx as jsx66, jsxs as jsxs46 } from "react/jsx-runtime";
21560
+ import { jsx as jsx70, jsxs as jsxs47 } from "react/jsx-runtime";
20884
21561
  var UserOrgMenu = ({ visible, onClose, onBack }) => {
20885
- const { t } = useTranslation29();
21562
+ const { t } = useTranslation31();
20886
21563
  const { organizationName, email } = useAuth();
20887
21564
  const { colors, branding } = useTheme();
21565
+ const { switchProfile } = useProfileSwitch();
20888
21566
  const brandName = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
20889
21567
  const handleAction = () => {
20890
21568
  onClose();
20891
21569
  navigateBack(onBack);
20892
21570
  };
20893
- return /* @__PURE__ */ jsxs46(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
20894
- /* @__PURE__ */ jsxs46(View52, { style: styles54.identity, children: [
20895
- (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ jsx66(Image4, { source: { uri: branding.logo_url }, style: styles54.logo, resizeMode: "contain" }) : /* @__PURE__ */ jsx66(PCAvatar, { name: organizationName || brandName, imageUrl: branding == null ? void 0 : branding.icon_url, size: 52 }),
20896
- /* @__PURE__ */ jsxs46(View52, { style: styles54.identityText, children: [
20897
- /* @__PURE__ */ jsx66(Text43, { style: [styles54.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
20898
- email ? /* @__PURE__ */ jsx66(Text43, { style: [styles54.email, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
21571
+ return /* @__PURE__ */ jsxs47(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
21572
+ /* @__PURE__ */ jsxs47(View54, { style: styles56.identity, children: [
21573
+ (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ jsx70(Image4, { source: { uri: branding.logo_url }, style: styles56.logo, resizeMode: "contain" }) : /* @__PURE__ */ jsx70(PCAvatar, { name: organizationName || brandName, imageUrl: branding == null ? void 0 : branding.icon_url, size: 52 }),
21574
+ /* @__PURE__ */ jsxs47(View54, { style: styles56.identityText, children: [
21575
+ /* @__PURE__ */ jsx70(Text44, { style: [styles56.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
21576
+ email ? /* @__PURE__ */ jsx70(Text44, { style: [styles56.email, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
20899
21577
  ] })
20900
21578
  ] }),
20901
- onBack ? /* @__PURE__ */ jsxs46(
20902
- TouchableOpacity23,
21579
+ switchProfile ? /* @__PURE__ */ jsxs47(
21580
+ TouchableOpacity24,
21581
+ {
21582
+ style: [styles56.actionRow, { backgroundColor: withAlpha(colors.primary, 0.1) }],
21583
+ onPress: () => {
21584
+ onClose();
21585
+ switchProfile();
21586
+ },
21587
+ activeOpacity: 0.7,
21588
+ accessibilityRole: "button",
21589
+ children: [
21590
+ /* @__PURE__ */ jsx70(Svg3, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx70(
21591
+ Path3,
21592
+ {
21593
+ d: "M16 3h5v5 M21 3l-7 7 M8 21H3v-5 M3 21l7-7",
21594
+ stroke: colors.primary,
21595
+ strokeWidth: 2,
21596
+ strokeLinecap: "round",
21597
+ strokeLinejoin: "round"
21598
+ }
21599
+ ) }),
21600
+ /* @__PURE__ */ jsx70(Text44, { style: [styles56.actionLabel, { color: colors.primary }], children: t("switchProfile") })
21601
+ ]
21602
+ }
21603
+ ) : null,
21604
+ onBack ? /* @__PURE__ */ jsxs47(
21605
+ TouchableOpacity24,
20903
21606
  {
20904
- style: [styles54.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
21607
+ style: [styles56.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
20905
21608
  onPress: handleAction,
20906
21609
  activeOpacity: 0.7,
20907
21610
  accessibilityRole: "button",
20908
21611
  children: [
20909
- /* @__PURE__ */ jsx66(Svg3, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: onBack === "signout" ? /* @__PURE__ */ jsx66(
21612
+ /* @__PURE__ */ jsx70(Svg3, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: onBack === "signout" ? /* @__PURE__ */ jsx70(
20910
21613
  Path3,
20911
21614
  {
20912
21615
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -20915,7 +21618,7 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
20915
21618
  strokeLinecap: "round",
20916
21619
  strokeLinejoin: "round"
20917
21620
  }
20918
- ) : /* @__PURE__ */ jsx66(
21621
+ ) : /* @__PURE__ */ jsx70(
20919
21622
  Path3,
20920
21623
  {
20921
21624
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -20925,13 +21628,13 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
20925
21628
  strokeLinejoin: "round"
20926
21629
  }
20927
21630
  ) }),
20928
- /* @__PURE__ */ jsx66(Text43, { style: [styles54.actionLabel, { color: onBack === "signout" ? colors.error : colors.primary }], children: onBack === "signout" ? t("signOut") || "Sign Out" : t("back") || "Back" })
21631
+ /* @__PURE__ */ jsx70(Text44, { style: [styles56.actionLabel, { color: onBack === "signout" ? colors.error : colors.primary }], children: onBack === "signout" ? t("signOut") || "Sign Out" : t("back") || "Back" })
20929
21632
  ]
20930
21633
  }
20931
21634
  ) : null
20932
21635
  ] });
20933
21636
  };
20934
- var styles54 = StyleSheet55.create({
21637
+ var styles56 = StyleSheet57.create({
20935
21638
  identity: {
20936
21639
  flexDirection: "row",
20937
21640
  alignItems: "center",
@@ -20972,33 +21675,33 @@ var styles54 = StyleSheet55.create({
20972
21675
  });
20973
21676
 
20974
21677
  // src/RedactoPrivacyCenter/components/Navbar.tsx
20975
- import { Fragment as Fragment19, jsx as jsx67, jsxs as jsxs47 } from "react/jsx-runtime";
21678
+ import { Fragment as Fragment19, jsx as jsx71, jsxs as jsxs48 } from "react/jsx-runtime";
20976
21679
  function Navbar({ mode = "primary", onBack }) {
20977
- const { t } = useTranslation30();
21680
+ const { t } = useTranslation32();
20978
21681
  const { currentPage, navigateTo } = useInternalNavigation();
20979
21682
  const { organizationName, email } = useAuth();
20980
21683
  const { colors, branding } = useTheme();
20981
- const [locale, setLocale] = useState25(i18n_default.language || "en");
20982
- const [menuOpen, setMenuOpen] = useState25(false);
21684
+ const [locale, setLocale] = useState26(i18n_default.language || "en");
21685
+ const [menuOpen, setMenuOpen] = useState26(false);
20983
21686
  const unreadCount = useUnreadCount();
20984
21687
  const { status: pageStatus } = usePageStatus();
20985
21688
  const pageChrome = PAGE_CHROME_BY_PAGE[currentPage] || PAGE_CHROME_BY_PAGE["consent-manager"];
20986
21689
  const isDetail = mode === "detail";
20987
- useEffect21(() => {
21690
+ useEffect22(() => {
20988
21691
  const handleLanguageChanged = () => setLocale(i18n_default.language);
20989
21692
  i18n_default.on("languageChanged", handleLanguageChanged);
20990
21693
  return () => {
20991
21694
  i18n_default.off("languageChanged", handleLanguageChanged);
20992
21695
  };
20993
21696
  }, []);
20994
- const handleLanguageChange = useCallback14((value) => {
21697
+ const handleLanguageChange = useCallback15((value) => {
20995
21698
  i18n_default.changeLanguage(value);
20996
21699
  }, []);
20997
21700
  const brandLabel = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
20998
21701
  const accountLabel = brandLabel || email || t("account") || "Account";
20999
- const brandLockup = /* @__PURE__ */ jsxs47(View53, { style: styles55.brandRow, children: [
21000
- /* @__PURE__ */ jsx67(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
21001
- /* @__PURE__ */ jsx67(Text44, { style: [styles55.brandText, { color: colors.text }], numberOfLines: 1, children: brandLabel })
21702
+ const brandLockup = /* @__PURE__ */ jsxs48(View55, { style: styles57.brandRow, children: [
21703
+ /* @__PURE__ */ jsx71(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
21704
+ /* @__PURE__ */ jsx71(Text45, { style: [styles57.brandText, { color: colors.text }], numberOfLines: 1, children: brandLabel })
21002
21705
  ] });
21003
21706
  const handleDetailBack = () => {
21004
21707
  if (currentPage === "case-details") {
@@ -21010,26 +21713,26 @@ function Navbar({ mode = "primary", onBack }) {
21010
21713
  }
21011
21714
  };
21012
21715
  if (isDetail) {
21013
- return /* @__PURE__ */ jsxs47(Fragment19, { children: [
21014
- /* @__PURE__ */ jsx67(
21015
- View53,
21716
+ return /* @__PURE__ */ jsxs48(Fragment19, { children: [
21717
+ /* @__PURE__ */ jsx71(
21718
+ View55,
21016
21719
  {
21017
21720
  style: [
21018
- styles55.container,
21019
- styles55.detailContainer,
21721
+ styles57.container,
21722
+ styles57.detailContainer,
21020
21723
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21021
21724
  ],
21022
- children: /* @__PURE__ */ jsxs47(View53, { style: styles55.detailRow, children: [
21023
- /* @__PURE__ */ jsx67(
21024
- TouchableOpacity24,
21725
+ children: /* @__PURE__ */ jsxs48(View55, { style: styles57.detailRow, children: [
21726
+ /* @__PURE__ */ jsx71(
21727
+ TouchableOpacity25,
21025
21728
  {
21026
- style: styles55.backButton,
21729
+ style: styles57.backButton,
21027
21730
  onPress: handleDetailBack,
21028
21731
  activeOpacity: 0.7,
21029
21732
  hitSlop: DEFAULT_HIT_SLOP,
21030
21733
  accessibilityRole: "button",
21031
21734
  accessibilityLabel: t("back") || "Back",
21032
- children: /* @__PURE__ */ jsx67(Svg4, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx67(
21735
+ children: /* @__PURE__ */ jsx71(Svg4, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx71(
21033
21736
  Path4,
21034
21737
  {
21035
21738
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21041,36 +21744,36 @@ function Navbar({ mode = "primary", onBack }) {
21041
21744
  ) })
21042
21745
  }
21043
21746
  ),
21044
- /* @__PURE__ */ jsxs47(View53, { style: styles55.detailTitleWrap, children: [
21045
- /* @__PURE__ */ jsx67(Text44, { style: [styles55.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21046
- pageStatus ? /* @__PURE__ */ jsx67(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21747
+ /* @__PURE__ */ jsxs48(View55, { style: styles57.detailTitleWrap, children: [
21748
+ /* @__PURE__ */ jsx71(Text45, { style: [styles57.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21749
+ pageStatus ? /* @__PURE__ */ jsx71(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21047
21750
  ] })
21048
21751
  ] })
21049
21752
  }
21050
21753
  ),
21051
- /* @__PURE__ */ jsx67(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21754
+ /* @__PURE__ */ jsx71(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21052
21755
  ] });
21053
21756
  }
21054
- return /* @__PURE__ */ jsxs47(Fragment19, { children: [
21055
- /* @__PURE__ */ jsxs47(
21056
- View53,
21757
+ return /* @__PURE__ */ jsxs48(Fragment19, { children: [
21758
+ /* @__PURE__ */ jsxs48(
21759
+ View55,
21057
21760
  {
21058
21761
  style: [
21059
- styles55.container,
21762
+ styles57.container,
21060
21763
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21061
21764
  ],
21062
21765
  children: [
21063
- /* @__PURE__ */ jsxs47(View53, { style: styles55.appBar, children: [
21064
- onBack ? /* @__PURE__ */ jsx67(
21065
- TouchableOpacity24,
21766
+ /* @__PURE__ */ jsxs48(View55, { style: styles57.appBar, children: [
21767
+ onBack ? /* @__PURE__ */ jsx71(
21768
+ TouchableOpacity25,
21066
21769
  {
21067
- style: styles55.backButton,
21770
+ style: styles57.backButton,
21068
21771
  onPress: () => navigateBack(onBack),
21069
21772
  activeOpacity: 0.7,
21070
21773
  hitSlop: DEFAULT_HIT_SLOP,
21071
21774
  accessibilityRole: "button",
21072
21775
  accessibilityLabel: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out",
21073
- children: /* @__PURE__ */ jsx67(Svg4, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx67(
21776
+ children: /* @__PURE__ */ jsx71(Svg4, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx71(
21074
21777
  Path4,
21075
21778
  {
21076
21779
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21082,39 +21785,39 @@ function Navbar({ mode = "primary", onBack }) {
21082
21785
  ) })
21083
21786
  }
21084
21787
  ) : null,
21085
- /* @__PURE__ */ jsx67(View53, { style: styles55.brandWrap, children: (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ jsx67(BrandImage, { uri: branding.logo_url, height: 34, maxWidth: 170, fallback: brandLockup }) : brandLockup }),
21086
- /* @__PURE__ */ jsxs47(View53, { style: styles55.actions, children: [
21087
- /* @__PURE__ */ jsx67(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
21088
- /* @__PURE__ */ jsx67(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
21089
- /* @__PURE__ */ jsx67(
21090
- TouchableOpacity24,
21788
+ /* @__PURE__ */ jsx71(View55, { style: styles57.brandWrap, children: (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ jsx71(BrandImage, { uri: branding.logo_url, height: 34, maxWidth: 170, fallback: brandLockup }) : brandLockup }),
21789
+ /* @__PURE__ */ jsxs48(View55, { style: styles57.actions, children: [
21790
+ /* @__PURE__ */ jsx71(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
21791
+ /* @__PURE__ */ jsx71(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
21792
+ /* @__PURE__ */ jsx71(
21793
+ TouchableOpacity25,
21091
21794
  {
21092
- style: styles55.avatarButton,
21795
+ style: styles57.avatarButton,
21093
21796
  onPress: () => setMenuOpen(true),
21094
21797
  activeOpacity: 0.7,
21095
21798
  hitSlop: DEFAULT_HIT_SLOP,
21096
21799
  accessibilityRole: "button",
21097
21800
  accessibilityLabel: accountLabel,
21098
- children: /* @__PURE__ */ jsx67(PCAvatar, { name: organizationName || accountLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 })
21801
+ children: /* @__PURE__ */ jsx71(PCAvatar, { name: organizationName || accountLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 })
21099
21802
  }
21100
21803
  )
21101
21804
  ] })
21102
21805
  ] }),
21103
- /* @__PURE__ */ jsx67(View53, { style: styles55.pageHeader, children: /* @__PURE__ */ jsxs47(View53, { style: styles55.titleRow, children: [
21104
- /* @__PURE__ */ jsx67(Text44, { style: [styles55.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21105
- pageStatus ? /* @__PURE__ */ jsx67(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21806
+ /* @__PURE__ */ jsx71(View55, { style: styles57.pageHeader, children: /* @__PURE__ */ jsxs48(View55, { style: styles57.titleRow, children: [
21807
+ /* @__PURE__ */ jsx71(Text45, { style: [styles57.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21808
+ pageStatus ? /* @__PURE__ */ jsx71(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21106
21809
  ] }) })
21107
21810
  ]
21108
21811
  }
21109
21812
  ),
21110
- /* @__PURE__ */ jsx67(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21813
+ /* @__PURE__ */ jsx71(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21111
21814
  ] });
21112
21815
  }
21113
- var styles55 = StyleSheet56.create({
21816
+ var styles57 = StyleSheet58.create({
21114
21817
  container: {
21115
21818
  paddingHorizontal: spacing.lg,
21116
21819
  paddingBottom: spacing.md,
21117
- borderBottomWidth: StyleSheet56.hairlineWidth
21820
+ borderBottomWidth: StyleSheet58.hairlineWidth
21118
21821
  },
21119
21822
  detailContainer: {
21120
21823
  paddingBottom: spacing.sm
@@ -21194,10 +21897,10 @@ var styles55 = StyleSheet56.create({
21194
21897
  });
21195
21898
 
21196
21899
  // src/RedactoPrivacyCenter/components/BottomTabBar.tsx
21197
- import { useState as useState26 } from "react";
21198
- import { Animated as Animated14, StyleSheet as StyleSheet57, Text as Text45, TouchableOpacity as TouchableOpacity25, View as View54 } from "react-native";
21199
- import { useTranslation as useTranslation31 } from "react-i18next";
21200
- import { jsx as jsx68, jsxs as jsxs48 } from "react/jsx-runtime";
21900
+ import { useState as useState27 } from "react";
21901
+ import { Animated as Animated14, StyleSheet as StyleSheet59, Text as Text46, TouchableOpacity as TouchableOpacity26, View as View56 } from "react-native";
21902
+ import { useTranslation as useTranslation33 } from "react-i18next";
21903
+ import { jsx as jsx72, jsxs as jsxs49 } from "react/jsx-runtime";
21201
21904
  var TAB_ITEMS = [
21202
21905
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consents", icon: "shield-check" },
21203
21906
  { page: "form", labelKey: "grievanceRequests", fallback: "Requests", icon: "message-circle-warning" },
@@ -21208,10 +21911,10 @@ var PAD_H = spacing.lg;
21208
21911
  var PILL_WIDTH = 56;
21209
21912
  var PILL_HEIGHT = 34;
21210
21913
  function BottomTabBar({ showFooter = true }) {
21211
- const { t } = useTranslation31();
21914
+ const { t } = useTranslation33();
21212
21915
  const { currentPage, navigateTo } = useInternalNavigation();
21213
21916
  const { colors } = useTheme();
21214
- const [rowWidth, setRowWidth] = useState26(0);
21917
+ const [rowWidth, setRowWidth] = useState27(0);
21215
21918
  const innerWidth = Math.max(0, rowWidth - PAD_H * 2);
21216
21919
  const tabWidth = innerWidth > 0 ? innerWidth / TAB_ITEMS.length : 0;
21217
21920
  const activeIndex = TAB_ITEMS.findIndex(
@@ -21219,13 +21922,13 @@ function BottomTabBar({ showFooter = true }) {
21219
21922
  );
21220
21923
  const { translateX } = useAnimatedTabIndicator(Math.max(0, activeIndex), tabWidth);
21221
21924
  const onLayout = (e) => setRowWidth(e.nativeEvent.layout.width);
21222
- return /* @__PURE__ */ jsxs48(View54, { style: [styles56.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
21223
- /* @__PURE__ */ jsxs48(View54, { style: styles56.container, onLayout, children: [
21224
- tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ jsx68(
21925
+ return /* @__PURE__ */ jsxs49(View56, { style: [styles58.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
21926
+ /* @__PURE__ */ jsxs49(View56, { style: styles58.container, onLayout, children: [
21927
+ tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ jsx72(
21225
21928
  Animated14.View,
21226
21929
  {
21227
21930
  style: [
21228
- styles56.pill,
21931
+ styles58.pill,
21229
21932
  {
21230
21933
  width: PILL_WIDTH,
21231
21934
  left: PAD_H + (tabWidth - PILL_WIDTH) / 2,
@@ -21238,17 +21941,17 @@ function BottomTabBar({ showFooter = true }) {
21238
21941
  TAB_ITEMS.map((item) => {
21239
21942
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
21240
21943
  const label = t(item.labelKey) || item.fallback;
21241
- return /* @__PURE__ */ jsxs48(
21242
- TouchableOpacity25,
21944
+ return /* @__PURE__ */ jsxs49(
21945
+ TouchableOpacity26,
21243
21946
  {
21244
- style: styles56.tab,
21947
+ style: styles58.tab,
21245
21948
  onPress: () => navigateTo(item.page),
21246
21949
  activeOpacity: 0.7,
21247
21950
  accessibilityRole: "tab",
21248
21951
  accessibilityState: { selected: isActive },
21249
21952
  accessibilityLabel: label,
21250
21953
  children: [
21251
- /* @__PURE__ */ jsx68(View54, { style: styles56.iconWrap, children: /* @__PURE__ */ jsx68(
21954
+ /* @__PURE__ */ jsx72(View56, { style: styles58.iconWrap, children: /* @__PURE__ */ jsx72(
21252
21955
  Icon,
21253
21956
  {
21254
21957
  name: item.icon,
@@ -21257,10 +21960,10 @@ function BottomTabBar({ showFooter = true }) {
21257
21960
  strokeWidth: isActive ? 2.1 : 1.85
21258
21961
  }
21259
21962
  ) }),
21260
- /* @__PURE__ */ jsx68(
21261
- Text45,
21963
+ /* @__PURE__ */ jsx72(
21964
+ Text46,
21262
21965
  {
21263
- style: [styles56.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21966
+ style: [styles58.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21264
21967
  numberOfLines: 1,
21265
21968
  children: label
21266
21969
  }
@@ -21271,13 +21974,13 @@ function BottomTabBar({ showFooter = true }) {
21271
21974
  );
21272
21975
  })
21273
21976
  ] }),
21274
- showFooter ? /* @__PURE__ */ jsx68(Footer, { inline: true }) : null,
21275
- /* @__PURE__ */ jsx68(View54, { style: { height: BOTTOM_INSET } })
21977
+ showFooter ? /* @__PURE__ */ jsx72(Footer, { inline: true }) : null,
21978
+ /* @__PURE__ */ jsx72(View56, { style: { height: BOTTOM_INSET } })
21276
21979
  ] });
21277
21980
  }
21278
- var styles56 = StyleSheet57.create({
21981
+ var styles58 = StyleSheet59.create({
21279
21982
  wrapper: {
21280
- borderTopWidth: StyleSheet57.hairlineWidth
21983
+ borderTopWidth: StyleSheet59.hairlineWidth
21281
21984
  },
21282
21985
  container: {
21283
21986
  flexDirection: "row",