@redacto.io/consent-sdk-react-native 5.0.0-beta.7 → 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.
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-B2TXWC2C.mjs";
6
6
 
7
7
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
8
- import { useEffect as useEffect20 } from "react";
8
+ import { useEffect as useEffect21 } from "react";
9
9
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
10
10
  import { I18nextProvider } from "react-i18next";
11
- 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";
12
12
 
13
13
  // src/RedactoPrivacyCenter/lib/i18n.ts
14
14
  import i18n from "i18next";
@@ -425,7 +425,14 @@ var translation_default = {
425
425
  submittingAs: "Submitting as {{email}}",
426
426
  tapToChooseFile: "Tap to choose a file",
427
427
  view: "View",
428
- 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"
429
436
  };
430
437
 
431
438
  // src/RedactoPrivacyCenter/locales/as/translation.json
@@ -839,7 +846,14 @@ var translation_default2 = {
839
846
  submittingAs: "{{email}} \u09B9\u09BF\u099A\u09BE\u09AA\u09C7 \u09A6\u09BE\u0996\u09BF\u09B2 \u0995\u09F0\u09BF \u0986\u099B\u09C7",
840
847
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09BF\u09AC\u09B2\u09C8 \u099F\u09BF\u09AA\u0995",
841
848
  view: "\u099A\u09BE\u0993\u0995",
842
- 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"
843
857
  };
844
858
 
845
859
  // src/RedactoPrivacyCenter/locales/bn/translation.json
@@ -1253,7 +1267,14 @@ var translation_default3 = {
1253
1267
  submittingAs: "{{email}} \u09B9\u09BF\u09B8\u09BE\u09AC\u09C7 \u099C\u09AE\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7",
1254
1268
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A4\u09C7 \u099F\u09CD\u09AF\u09BE\u09AA \u0995\u09B0\u09C1\u09A8",
1255
1269
  view: "\u09A6\u09C7\u0996\u09C1\u09A8",
1256
- 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"
1257
1278
  };
1258
1279
 
1259
1280
  // src/RedactoPrivacyCenter/locales/brx/translation.json
@@ -1667,7 +1688,14 @@ var translation_default4 = {
1667
1688
  submittingAs: "{{email}} \u092E\u0939\u0930\u0948 \u0917\u0925\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B",
1668
1689
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916\u0928\u094B \u091F\u0947\u092C \u0916\u093E\u0932\u093E\u092E",
1669
1690
  view: "\u0928\u093E\u092F",
1670
- 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"
1671
1699
  };
1672
1700
 
1673
1701
  // src/RedactoPrivacyCenter/locales/doi/translation.json
@@ -2081,7 +2109,14 @@ var translation_default5 = {
2081
2109
  submittingAs: "{{email}} \u0926\u0947 \u0930\u0942\u092A \u091A \u091C\u092E\u093E\u0902 \u0915\u0930\u0926\u0947",
2082
2110
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u091F\u0948\u092A \u0915\u0930\u094B",
2083
2111
  view: "\u0926\u093F\u0915\u094D\u0916\u094B",
2084
- 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"
2085
2120
  };
2086
2121
 
2087
2122
  // src/RedactoPrivacyCenter/locales/gom/translation.json
@@ -2495,7 +2530,14 @@ var translation_default6 = {
2495
2530
  submittingAs: "{{email}} \u092E\u094D\u0939\u0942\u0923 \u0938\u093E\u0926\u0930 \u0915\u0930\u0924\u093E",
2496
2531
  tapToChooseFile: "\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u092A\u093E\u0915 \u091F\u0945\u092A \u0915\u0930\u093E\u0924",
2497
2532
  view: "\u092A\u0933\u092F\u093E\u0924",
2498
- 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"
2499
2541
  };
2500
2542
 
2501
2543
  // src/RedactoPrivacyCenter/locales/gu/translation.json
@@ -2909,7 +2951,14 @@ var translation_default7 = {
2909
2951
  submittingAs: "{{email}} \u0AA4\u0AB0\u0AC0\u0A95\u0AC7 \u0AB8\u0AAC\u0AAE\u0ABF\u0A9F \u0A95\u0AB0\u0AC0 \u0AB0\u0AB9\u0ACD\u0AAF\u0ABE \u0A9B\u0ACB",
2910
2952
  tapToChooseFile: "\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0AB5\u0ABE \u0A9F\u0AC5\u0AAA \u0A95\u0AB0\u0ACB",
2911
2953
  view: "\u0A9C\u0AC1\u0A93",
2912
- 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"
2913
2962
  };
2914
2963
 
2915
2964
  // src/RedactoPrivacyCenter/locales/hi/translation.json
@@ -3323,7 +3372,14 @@ var translation_default8 = {
3323
3372
  submittingAs: "{{email}} \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u092C\u092E\u093F\u091F \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902",
3324
3373
  tapToChooseFile: "\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091F\u0948\u092A \u0915\u0930\u0947\u0902",
3325
3374
  view: "\u0926\u0947\u0916\u0947\u0902",
3326
- 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"
3327
3383
  };
3328
3384
 
3329
3385
  // src/RedactoPrivacyCenter/locales/kn/translation.json
@@ -3737,7 +3793,14 @@ var translation_default9 = {
3737
3793
  submittingAs: "{{email}} \u0C86\u0C97\u0CBF \u0CB8\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6",
3738
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",
3739
3795
  view: "\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CBF",
3740
- 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"
3741
3804
  };
3742
3805
 
3743
3806
  // src/RedactoPrivacyCenter/locales/ks/translation.json
@@ -4151,7 +4214,14 @@ var translation_default10 = {
4151
4214
  submittingAs: "{{email}} \u067E\u0620\u0658\u0679\u06BE \u062C\u0645\u0639 \u06A9\u0631\u0627\u0646",
4152
4215
  tapToChooseFile: "\u0641\u0627\u06CC\u0644 \u0698\u0627\u0631\u0646\u06C1 \u062E\u0672\u0637\u0631\u0655 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u0648",
4153
4216
  view: "\u0648\u064F\u0686\u06BE\u0650\u0648",
4154
- 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"
4155
4225
  };
4156
4226
 
4157
4227
  // src/RedactoPrivacyCenter/locales/mai/translation.json
@@ -4565,7 +4635,14 @@ var translation_default11 = {
4565
4635
  submittingAs: "{{email}} \u0930\u0942\u092A\u092E\u0947 \u091C\u092E\u093E \u0915\u093D \u0930\u0939\u0932 \u091B\u0940",
4566
4636
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u092C\u093E\u0915 \u0932\u0947\u0932 \u091F\u0948\u092A \u0915\u0930\u0942",
4567
4637
  view: "\u0926\u0947\u0916\u0942",
4568
- 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"
4569
4646
  };
4570
4647
 
4571
4648
  // src/RedactoPrivacyCenter/locales/ml/translation.json
@@ -4979,7 +5056,14 @@ var translation_default12 = {
4979
5056
  submittingAs: "{{email}} \u0D06\u0D2F\u0D3F \u0D38\u0D2E\u0D7C\u0D2A\u0D4D\u0D2A\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41",
4980
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",
4981
5058
  view: "\u0D15\u0D3E\u0D23\u0D41\u0D15",
4982
- 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"
4983
5067
  };
4984
5068
 
4985
5069
  // src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json
@@ -5393,7 +5477,14 @@ var translation_default13 = {
5393
5477
  submittingAs: "{{email}} \uABD1\uABE3\uABCF\uABC5 \uABCA\uABE5\uABD2\uABE0\uABC2\uABE4",
5394
5478
  tapToChooseFile: "\uABD0\uABE5\uABCF\uABDC \uABC8\uABDF\uABC5\uABD5 \uABC7\uABE6\uABDE \uABC7\uABE7",
5395
5479
  view: "\uABCC\uABE6\uABE1\uABCE",
5396
- 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"
5397
5488
  };
5398
5489
 
5399
5490
  // src/RedactoPrivacyCenter/locales/mr/translation.json
@@ -5807,7 +5898,14 @@ var translation_default14 = {
5807
5898
  submittingAs: "{{email}} \u092E\u094D\u0939\u0923\u0942\u0928 \u0938\u092C\u092E\u093F\u091F \u0915\u0930\u0924 \u0906\u0939\u0947",
5808
5899
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u091F\u0945\u092A \u0915\u0930\u093E",
5809
5900
  view: "\u092A\u0939\u093E",
5810
- 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"
5811
5909
  };
5812
5910
 
5813
5911
  // src/RedactoPrivacyCenter/locales/ne/translation.json
@@ -6221,7 +6319,14 @@ var translation_default15 = {
6221
6319
  submittingAs: "{{email}} \u0915\u094B \u0930\u0942\u092A\u092E\u093E \u092A\u0947\u0936 \u0917\u0930\u094D\u0926\u0948",
6222
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",
6223
6321
  view: "\u0939\u0947\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6224
- 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"
6225
6330
  };
6226
6331
 
6227
6332
  // src/RedactoPrivacyCenter/locales/or/translation.json
@@ -6635,7 +6740,14 @@ var translation_default16 = {
6635
6740
  submittingAs: "{{email}} \u0B2D\u0B3E\u0B2C\u0B47 \u0B26\u0B3E\u0B16\u0B32 \u0B15\u0B30\u0B41\u0B1B\u0B28\u0B4D\u0B24\u0B3F",
6636
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",
6637
6742
  view: "\u0B26\u0B47\u0B16\u0B28\u0B4D\u0B24\u0B41",
6638
- 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"
6639
6751
  };
6640
6752
 
6641
6753
  // src/RedactoPrivacyCenter/locales/pa/translation.json
@@ -7049,7 +7161,14 @@ var translation_default17 = {
7049
7161
  submittingAs: "{{email}} \u0A35\u0A1C\u0A4B\u0A02 \u0A38\u0A2C\u0A2E\u0A3F\u0A1F \u0A15\u0A30 \u0A30\u0A39\u0A47 \u0A39\u0A4B",
7050
7162
  tapToChooseFile: "\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A28 \u0A32\u0A08 \u0A1F\u0A48\u0A2A \u0A15\u0A30\u0A4B",
7051
7163
  view: "\u0A26\u0A47\u0A16\u0A4B",
7052
- 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"
7053
7172
  };
7054
7173
 
7055
7174
  // src/RedactoPrivacyCenter/locales/sa/translation.json
@@ -7463,7 +7582,14 @@ var translation_default18 = {
7463
7582
  submittingAs: "{{email}} \u0907\u0924\u093F \u0938\u092E\u0930\u094D\u092A\u092F\u0928\u094D",
7464
7583
  tapToChooseFile: "\u0938\u091E\u094D\u091A\u093F\u0915\u093E\u0902 \u091A\u0947\u0924\u0941\u0902 \u0938\u094D\u092A\u0943\u0936\u0924\u0941",
7465
7584
  view: "\u092A\u0936\u094D\u092F",
7466
- 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"
7467
7593
  };
7468
7594
 
7469
7595
  // src/RedactoPrivacyCenter/locales/sat/translation.json
@@ -7877,7 +8003,14 @@ var translation_default19 = {
7877
8003
  submittingAs: "{{email}} \u1C5E\u1C6E\u1C60\u1C5F\u1C5B\u1C6E \u1C61\u1C5A\u1C62\u1C5F \u1C6E\u1C6B\u1C5F",
7878
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",
7879
8005
  view: "\u1C67\u1C6E\u1C5E \u1C62\u1C6E",
7880
- 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"
7881
8014
  };
7882
8015
 
7883
8016
  // src/RedactoPrivacyCenter/locales/sd/translation.json
@@ -8291,7 +8424,14 @@ var translation_default20 = {
8291
8424
  submittingAs: "{{email}} \u0637\u0648\u0631 \u062C\u0645\u0639 \u06AA\u0631\u064A \u0631\u0647\u064A\u0627 \u0622\u0647\u064A\u0648",
8292
8425
  tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u06BB \u0644\u0627\u0621\u0650 \u067D\u064A\u067E \u06AA\u0631\u064A\u0648",
8293
8426
  view: "\u068F\u0633\u0648",
8294
- 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"
8295
8435
  };
8296
8436
 
8297
8437
  // src/RedactoPrivacyCenter/locales/ta/translation.json
@@ -8705,7 +8845,14 @@ var translation_default21 = {
8705
8845
  submittingAs: "{{email}} \u0B86\u0B95 \u0B9A\u0BAE\u0BB0\u0BCD\u0BAA\u0BCD\u0BAA\u0BBF\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD",
8706
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",
8707
8847
  view: "\u0BAA\u0BBE\u0BB0\u0BCD",
8708
- 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"
8709
8856
  };
8710
8857
 
8711
8858
  // src/RedactoPrivacyCenter/locales/te/translation.json
@@ -9119,7 +9266,14 @@ var translation_default22 = {
9119
9266
  submittingAs: "{{email}} \u0C17\u0C3E \u0C38\u0C2E\u0C30\u0C4D\u0C2A\u0C3F\u0C38\u0C4D\u0C24\u0C41\u0C28\u0C4D\u0C28\u0C3E\u0C30\u0C41",
9120
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",
9121
9268
  view: "\u0C35\u0C40\u0C15\u0C4D\u0C37\u0C3F\u0C02\u0C1A\u0C02\u0C21\u0C3F",
9122
- 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"
9123
9277
  };
9124
9278
 
9125
9279
  // src/RedactoPrivacyCenter/locales/ur/translation.json
@@ -9533,7 +9687,14 @@ var translation_default23 = {
9533
9687
  submittingAs: "{{email}} \u06A9\u06D2 \u0637\u0648\u0631 \u067E\u0631 \u062C\u0645\u0639 \u06A9\u0631 \u0631\u06C1\u06D2 \u06C1\u06CC\u06BA",
9534
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",
9535
9689
  view: "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA",
9536
- 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"
9537
9698
  };
9538
9699
 
9539
9700
  // src/RedactoPrivacyCenter/lib/locales.ts
@@ -9779,6 +9940,26 @@ var sandboxQueryIdentity = () => sandboxBodyIdentity();
9779
9940
  var sandboxContact = () => sandboxConfig ? sandboxConfig.ucic || sandboxConfig.subject : null;
9780
9941
 
9781
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
+ }
9782
9963
  async function apiFetch(url, options = {}) {
9783
9964
  const { getAuthToken, headers = {}, ...fetchOptions } = options;
9784
9965
  const requestHeaders = new Headers();
@@ -9843,7 +10024,7 @@ async function apiFetch(url, options = {}) {
9843
10024
  } catch {
9844
10025
  }
9845
10026
  }
9846
- throw new Error(errorMessage);
10027
+ throw new ApiError(errorMessage, { status: response.status });
9847
10028
  }
9848
10029
  const contentLength = response.headers.get("Content-Length");
9849
10030
  const contentType = response.headers.get("Content-Type") || "";
@@ -10261,6 +10442,32 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10261
10442
  authToken: authToken || baseRequest.authToken
10262
10443
  });
10263
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
+ },
10264
10471
  /**
10265
10472
  * Get receipts (privacy center)
10266
10473
  */
@@ -11557,6 +11764,40 @@ var acknowledgeNotification = async (organizationId, workspaceId, notificationUu
11557
11764
  var isRefreshing = false;
11558
11765
  var refreshPromise = null;
11559
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
+ };
11560
11801
  var tokenStore = {};
11561
11802
  var getStoredValue = (key) => {
11562
11803
  var _a3;
@@ -11647,6 +11888,7 @@ var ensureValidToken = async (organizationId, workspaceId, _slug, authContext, c
11647
11888
  return accessToken;
11648
11889
  }
11649
11890
  if (isRefreshing && refreshPromise) return refreshPromise;
11891
+ if (isRefreshBlocked(authContext)) return null;
11650
11892
  isRefreshing = true;
11651
11893
  refreshPromise = performTokenRefresh(
11652
11894
  organizationId,
@@ -11674,6 +11916,7 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11674
11916
  if (!refreshToken || typeof refreshToken !== "string" || refreshToken.trim() === "") {
11675
11917
  if (authContext == null ? void 0 : authContext.onError)
11676
11918
  authContext.onError(new Error("No refresh token available"));
11919
+ notifySessionExpired();
11677
11920
  signOutPrivacyCenter();
11678
11921
  return null;
11679
11922
  }
@@ -11703,11 +11946,13 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11703
11946
  if (newRefreshToken)
11704
11947
  setStoredValue("refresh_token", newRefreshToken);
11705
11948
  }
11949
+ resetRefreshCircuit();
11706
11950
  return newAccessToken;
11707
11951
  }
11708
11952
  }
11709
11953
  if (authContext == null ? void 0 : authContext.onError)
11710
11954
  authContext.onError(new Error("Refresh token expired or revoked"));
11955
+ markRefreshTokenDead(refreshToken);
11711
11956
  signOutPrivacyCenter();
11712
11957
  return null;
11713
11958
  } catch (error) {
@@ -11715,7 +11960,12 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11715
11960
  authContext.onError(
11716
11961
  error instanceof Error ? error : new Error(String(error))
11717
11962
  );
11718
- signOutPrivacyCenter();
11963
+ if (isTerminalRefreshError(error)) {
11964
+ markRefreshTokenDead(refreshToken);
11965
+ signOutPrivacyCenter();
11966
+ } else {
11967
+ noteTransientRefreshFailure();
11968
+ }
11719
11969
  return null;
11720
11970
  }
11721
11971
  };
@@ -12153,8 +12403,17 @@ function DataAvailabilityProvider({ children }) {
12153
12403
  mountedRef.current = false;
12154
12404
  };
12155
12405
  }, []);
12406
+ useEffect3(() => {
12407
+ setSessionExpiredListener(() => {
12408
+ if (!mountedRef.current) return;
12409
+ runIdRef.current += 1;
12410
+ setStatus("session-expired");
12411
+ });
12412
+ return () => setSessionExpiredListener(null);
12413
+ }, []);
12156
12414
  const runCheck = useCallback4(async () => {
12157
12415
  if (!organizationId || !workspaceId) return;
12416
+ if (isRefreshBlocked(authContext)) return;
12158
12417
  const runId = ++runIdRef.current;
12159
12418
  setStatus("checking");
12160
12419
  const contact = email;
@@ -18290,6 +18549,7 @@ function useUnreadCount() {
18290
18549
  const loadRef = useRef8();
18291
18550
  loadRef.current = async () => {
18292
18551
  if (!organizationId || !workspaceId) return;
18552
+ if (isRefreshBlocked(authContext)) return;
18293
18553
  const res = await fetchUnreadCount(organizationId, workspaceId, authContext, consentClient);
18294
18554
  if (res && typeof res.count === "number") setCount(res.count);
18295
18555
  };
@@ -18615,17 +18875,255 @@ function PrivacyCenterEmptyState() {
18615
18875
  return /* @__PURE__ */ jsx49(PCEmpty, { iconName: "shield", title: t("noDataTitle"), description: t("noDataDescription") });
18616
18876
  }
18617
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
+
18618
19116
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
18619
- import { useState as useState23, useMemo as useMemo20, useEffect as useEffect18 } from "react";
18620
- import { View as View45, Text as Text37, StyleSheet as StyleSheet47, ActivityIndicator as ActivityIndicator8, Platform as Platform7 } from "react-native";
18621
- 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";
18622
19120
 
18623
19121
  // src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx
18624
- import { View as View38, Text as Text30, ScrollView as ScrollView8, StyleSheet as StyleSheet40 } from "react-native";
18625
- import { useTranslation as useTranslation20 } from "react-i18next";
18626
- 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";
18627
19125
  function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18628
- const { t } = useTranslation20();
19126
+ const { t } = useTranslation22();
18629
19127
  const { colors } = useTheme();
18630
19128
  const { listBottom } = usePrivacyCenterInsets({ hasFooter: true });
18631
19129
  const details = selectedCase.request_details;
@@ -18657,36 +19155,36 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18657
19155
  }
18658
19156
  const description = selectedCase.description_display || selectedCase.description;
18659
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);
18660
- return /* @__PURE__ */ jsxs32(ScrollView8, { style: [styles39.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles39.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
18661
- /* @__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) => {
18662
19160
  const isLast = i === steps.length - 1;
18663
- return /* @__PURE__ */ jsxs32(View38, { style: styles39.stepRow, children: [
18664
- /* @__PURE__ */ jsxs32(View38, { style: styles39.gutter, children: [
18665
- /* @__PURE__ */ jsx50(
18666
- View38,
19161
+ return /* @__PURE__ */ jsxs33(View40, { style: styles41.stepRow, children: [
19162
+ /* @__PURE__ */ jsxs33(View40, { style: styles41.gutter, children: [
19163
+ /* @__PURE__ */ jsx54(
19164
+ View40,
18667
19165
  {
18668
19166
  style: [
18669
- styles39.dot,
19167
+ styles41.dot,
18670
19168
  step.state === "upcoming" ? { backgroundColor: colors.canvasSubtle, borderWidth: 2, borderColor: step.danger ? colors.error : colors.border } : { backgroundColor: step.color }
18671
19169
  ],
18672
- 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
18673
19171
  }
18674
19172
  ),
18675
- !isLast ? /* @__PURE__ */ jsx50(View38, { style: [styles39.connector, { backgroundColor: colors.border }] }) : null
19173
+ !isLast ? /* @__PURE__ */ jsx54(View40, { style: [styles41.connector, { backgroundColor: colors.border }] }) : null
18676
19174
  ] }),
18677
- /* @__PURE__ */ jsxs32(View38, { style: [styles39.stepContent, isLast && styles39.stepContentLast], children: [
18678
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
18679
- 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
18680
19178
  ] })
18681
19179
  ] }, `${step.label}-${i}`);
18682
19180
  }) }),
18683
- hasDetails ? /* @__PURE__ */ jsxs32(View38, { style: [styles39.card, elevation.card, { backgroundColor: colors.surface }], children: [
18684
- description ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18685
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
18686
- /* @__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 })
18687
19185
  ] }) : null,
18688
- (details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18689
- /* @__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" }),
18690
19188
  details.purposes.map((rawP, idx) => {
18691
19189
  const p = (rawP == null ? void 0 : rawP.purpose) ? rawP.purpose : rawP;
18692
19190
  const purposeId = (p == null ? void 0 : p.uuid) || (p == null ? void 0 : p.purpose_uuid) || (rawP == null ? void 0 : rawP.purpose_uuid) || idx;
@@ -18694,10 +19192,10 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18694
19192
  const purposeDescription = (p == null ? void 0 : p.description) || (rawP == null ? void 0 : rawP.description);
18695
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)) : [];
18696
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 : [];
18697
- return /* @__PURE__ */ jsxs32(View38, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet40.hairlineWidth }], children: [
18698
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemTitle, { color: colors.text }], children: purposeName }),
18699
- purposeDescription ? /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
18700
- 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: [
18701
19199
  dataElementUuids.length,
18702
19200
  " ",
18703
19201
  t("dataElements") || "data elements"
@@ -18705,44 +19203,44 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18705
19203
  ] }, purposeId);
18706
19204
  })
18707
19205
  ] }) : null,
18708
- (details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18709
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
18710
- details.correction_data.map((item, idx) => /* @__PURE__ */ jsxs32(View38, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: StyleSheet40.hairlineWidth }], children: [
18711
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.itemTitle, { color: colors.text }], children: item.name }),
18712
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValues, children: [
18713
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValue, children: [
18714
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
18715
- /* @__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 || "-" })
18716
19214
  ] }),
18717
- /* @__PURE__ */ jsx50(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
18718
- /* @__PURE__ */ jsxs32(View38, { style: styles39.correctionValue, children: [
18719
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
18720
- /* @__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 || "-" })
18721
19219
  ] })
18722
19220
  ] })
18723
19221
  ] }, idx))
18724
19222
  ] }) : null,
18725
- (details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18726
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
18727
- /* @__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)) })
18728
19226
  ] }) : null,
18729
- (details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ jsxs32(View38, { style: styles39.block, children: [
18730
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
18731
- details.nomination_data.nominee_email ? /* @__PURE__ */ jsxs32(View38, { style: styles39.kvRow, children: [
18732
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
18733
- /* @__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 })
18734
19232
  ] }) : null,
18735
- details.nomination_data.nominee_mobile ? /* @__PURE__ */ jsxs32(View38, { style: styles39.kvRow, children: [
18736
- /* @__PURE__ */ jsx50(Text30, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
18737
- /* @__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 })
18738
19236
  ] }) : null
18739
19237
  ] }) : null
18740
19238
  ] }) : null,
18741
- /* @__PURE__ */ jsx50(View38, { style: { marginTop: "auto" }, children: /* @__PURE__ */ jsx50(Footer, {}) })
19239
+ /* @__PURE__ */ jsx54(View40, { style: { marginTop: "auto" }, children: /* @__PURE__ */ jsx54(Footer, {}) })
18742
19240
  ] });
18743
19241
  }
18744
19242
  var DOT = 22;
18745
- var styles39 = StyleSheet40.create({
19243
+ var styles41 = StyleSheet42.create({
18746
19244
  container: {
18747
19245
  flex: 1
18748
19246
  },
@@ -18863,21 +19361,21 @@ var styles39 = StyleSheet40.create({
18863
19361
  });
18864
19362
 
18865
19363
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
18866
- import { useState as useState22, useRef as useRef10, useEffect as useEffect17, useCallback as useCallback11, useMemo as useMemo19 } from "react";
18867
- import { View as View44, Text as Text36, FlatList as FlatList2, StyleSheet as StyleSheet46, ActivityIndicator as ActivityIndicator7 } from "react-native";
18868
- 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";
18869
19367
 
18870
19368
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
18871
- import React22 from "react";
18872
- import { useTranslation as useTranslation22 } from "react-i18next";
19369
+ import React23 from "react";
19370
+ import { useTranslation as useTranslation24 } from "react-i18next";
18873
19371
 
18874
19372
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18875
- import React21 from "react";
18876
- 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";
18877
19375
 
18878
19376
  // src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx
18879
- import { View as View39, Text as Text31, TouchableOpacity as TouchableOpacity15, Linking, StyleSheet as StyleSheet41 } from "react-native";
18880
- 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";
18881
19379
  function AttachmentCard({ doc }) {
18882
19380
  const { colors } = useTheme();
18883
19381
  const downloadUrl = getDownloadUrl(doc.file_url);
@@ -18886,28 +19384,28 @@ function AttachmentCard({ doc }) {
18886
19384
  Linking.openURL(downloadUrl);
18887
19385
  }
18888
19386
  };
18889
- return /* @__PURE__ */ jsxs33(
18890
- TouchableOpacity15,
19387
+ return /* @__PURE__ */ jsxs34(
19388
+ TouchableOpacity16,
18891
19389
  {
18892
- style: [styles40.container, { backgroundColor: colors.surface, borderColor: colors.border }],
19390
+ style: [styles42.container, { backgroundColor: colors.surface, borderColor: colors.border }],
18893
19391
  onPress: handlePress,
18894
19392
  disabled: !downloadUrl,
18895
19393
  activeOpacity: 0.7,
18896
19394
  children: [
18897
- /* @__PURE__ */ jsx51(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
18898
- /* @__PURE__ */ jsxs33(View39, { style: styles40.info, children: [
18899
- /* @__PURE__ */ jsx51(Text31, { style: [styles40.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
18900
- 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
18901
19399
  ] })
18902
19400
  ]
18903
19401
  }
18904
19402
  );
18905
19403
  }
18906
- var styles40 = StyleSheet41.create({
19404
+ var styles42 = StyleSheet43.create({
18907
19405
  container: {
18908
19406
  flexDirection: "row",
18909
19407
  alignItems: "center",
18910
- borderWidth: StyleSheet41.hairlineWidth,
19408
+ borderWidth: StyleSheet43.hairlineWidth,
18911
19409
  borderRadius: radii.md,
18912
19410
  paddingHorizontal: spacing.sm + 2,
18913
19411
  paddingVertical: spacing.sm,
@@ -18927,11 +19425,11 @@ var styles40 = StyleSheet41.create({
18927
19425
  });
18928
19426
 
18929
19427
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18930
- import { jsx as jsx52, jsxs as jsxs34 } from "react/jsx-runtime";
19428
+ import { jsx as jsx56, jsxs as jsxs35 } from "react/jsx-runtime";
18931
19429
  var AVATAR_SIZE = 28;
18932
19430
  var AVATAR_GUTTER = 36;
18933
19431
  function TeamAvatar({ tint }) {
18934
- 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 }) });
18935
19433
  }
18936
19434
  function ChatBubbleImpl({
18937
19435
  message,
@@ -18958,28 +19456,28 @@ function ChatBubbleImpl({
18958
19456
  borderBottomRightRadius: BUBBLE_RADIUS,
18959
19457
  borderBottomLeftRadius: tailRadius
18960
19458
  };
18961
- const bubble = /* @__PURE__ */ jsxs34(View40, { style: [styles41.bubble, bubbleStyle], children: [
18962
- !isPrincipal && isFirstInGroup ? /* @__PURE__ */ jsx52(Text32, { style: [styles41.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
18963
- message.body ? /* @__PURE__ */ jsx52(Text32, { style: [styles41.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
18964
- 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
18965
19463
  ] });
18966
- return /* @__PURE__ */ jsxs34(
18967
- View40,
19464
+ return /* @__PURE__ */ jsxs35(
19465
+ View42,
18968
19466
  {
18969
19467
  style: [
18970
- styles41.row,
18971
- isPrincipal ? styles41.rowRight : styles41.rowLeft,
19468
+ styles43.row,
19469
+ isPrincipal ? styles43.rowRight : styles43.rowLeft,
18972
19470
  { marginTop: isFirstInGroup ? spacing.md : 2 }
18973
19471
  ],
18974
19472
  children: [
18975
- !isPrincipal ? /* @__PURE__ */ jsx52(View40, { style: styles41.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ jsx52(TeamAvatar, { tint: colors.primary }) : null }) : null,
18976
- /* @__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: [
18977
19475
  bubble,
18978
- isLastInGroup ? /* @__PURE__ */ jsx52(
18979
- Text32,
19476
+ isLastInGroup ? /* @__PURE__ */ jsx56(
19477
+ Text33,
18980
19478
  {
18981
19479
  style: [
18982
- styles41.timestamp,
19480
+ styles43.timestamp,
18983
19481
  { color: colors.textSecondary, textAlign: isPrincipal ? "right" : "left" }
18984
19482
  ],
18985
19483
  children: formatMessageTime(timestamp)
@@ -18990,8 +19488,8 @@ function ChatBubbleImpl({
18990
19488
  }
18991
19489
  );
18992
19490
  }
18993
- var ChatBubble = React21.memo(ChatBubbleImpl);
18994
- var styles41 = StyleSheet42.create({
19491
+ var ChatBubble = React22.memo(ChatBubbleImpl);
19492
+ var styles43 = StyleSheet44.create({
18995
19493
  row: {
18996
19494
  flexDirection: "row",
18997
19495
  paddingHorizontal: spacing.md,
@@ -19051,9 +19549,9 @@ var styles41 = StyleSheet42.create({
19051
19549
  });
19052
19550
 
19053
19551
  // src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx
19054
- import { View as View41, Text as Text33, TouchableOpacity as TouchableOpacity16, StyleSheet as StyleSheet43 } from "react-native";
19055
- import { useTranslation as useTranslation21 } from "react-i18next";
19056
- 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";
19057
19555
  var STATUS_BADGE_MAP = {
19058
19556
  pending: "warning",
19059
19557
  under_review: "info",
@@ -19073,20 +19571,20 @@ function humanize(value) {
19073
19571
  }
19074
19572
  function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized = false }) {
19075
19573
  var _a3;
19076
- const { t } = useTranslation21();
19574
+ const { t } = useTranslation23();
19077
19575
  const { colors } = useTheme();
19078
19576
  const meta = message.document_request_metadata;
19079
19577
  if (!meta) return null;
19080
19578
  const status = meta.document_request_status;
19081
19579
  const canUpload = (status === "pending" || status === "replacement_requested") && !isCaseFinalized;
19082
19580
  const requestEventUuid = meta.document_request_uuid;
19083
- return /* @__PURE__ */ jsxs35(View41, { style: [styles42.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
19084
- /* @__PURE__ */ jsxs35(View41, { style: styles42.header, children: [
19085
- /* @__PURE__ */ jsxs35(View41, { style: styles42.titleRow, children: [
19086
- /* @__PURE__ */ jsx53(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
19087
- /* @__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" })
19088
19586
  ] }),
19089
- /* @__PURE__ */ jsx53(
19587
+ /* @__PURE__ */ jsx57(
19090
19588
  PCBadge,
19091
19589
  {
19092
19590
  status: STATUS_BADGE_MAP[status] || "info",
@@ -19094,30 +19592,30 @@ function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized
19094
19592
  }
19095
19593
  )
19096
19594
  ] }),
19097
- 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", {
19098
19596
  accepted: meta.accepted_document,
19099
19597
  defaultValue: `Accepted: ${meta.accepted_document}`
19100
19598
  }) }) : null,
19101
- meta.rejection_reason ? /* @__PURE__ */ jsxs35(View41, { style: [styles42.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
19102
- /* @__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: [
19103
19601
  t("rejectionReasonLabel") || "Rejection reason",
19104
19602
  ":"
19105
19603
  ] }),
19106
- /* @__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 })
19107
19605
  ] }) : null,
19108
- canUpload && requestEventUuid ? /* @__PURE__ */ jsx53(
19109
- TouchableOpacity16,
19606
+ canUpload && requestEventUuid ? /* @__PURE__ */ jsx57(
19607
+ TouchableOpacity17,
19110
19608
  {
19111
- style: [styles42.uploadButton, { backgroundColor: colors.primary }],
19609
+ style: [styles44.uploadButton, { backgroundColor: colors.primary }],
19112
19610
  onPress: () => onUpload(requestEventUuid),
19113
19611
  disabled: isSubmitting,
19114
19612
  activeOpacity: 0.7,
19115
- 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" })
19116
19614
  }
19117
19615
  ) : null
19118
19616
  ] });
19119
19617
  }
19120
- var styles42 = StyleSheet43.create({
19618
+ var styles44 = StyleSheet45.create({
19121
19619
  container: {
19122
19620
  borderWidth: 1.5,
19123
19621
  borderStyle: "dashed",
@@ -19170,20 +19668,20 @@ var styles42 = StyleSheet43.create({
19170
19668
  });
19171
19669
 
19172
19670
  // src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx
19173
- import { StyleSheet as StyleSheet44, Text as Text34, View as View42 } from "react-native";
19174
- 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";
19175
19673
  function StatusEvent({ icon, color, bgColor, borderColor, text, subText, timestamp }) {
19176
19674
  const { colors } = useTheme();
19177
- return /* @__PURE__ */ jsxs36(View42, { style: [styles43.container, { backgroundColor: bgColor }], children: [
19178
- /* @__PURE__ */ jsx54(View42, { style: [styles43.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
19179
- /* @__PURE__ */ jsxs36(View42, { style: styles43.textContainer, children: [
19180
- /* @__PURE__ */ jsx54(Text34, { style: [styles43.text, { color }], children: text }),
19181
- 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
19182
19680
  ] }),
19183
- /* @__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) })
19184
19682
  ] });
19185
19683
  }
19186
- var styles43 = StyleSheet44.create({
19684
+ var styles45 = StyleSheet46.create({
19187
19685
  container: {
19188
19686
  flexDirection: "row",
19189
19687
  alignItems: "center",
@@ -19222,10 +19720,10 @@ var styles43 = StyleSheet44.create({
19222
19720
  });
19223
19721
 
19224
19722
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
19225
- import { Fragment as Fragment12, jsx as jsx55, jsxs as jsxs37 } from "react/jsx-runtime";
19226
- var CheckIcon = ({ color }) => /* @__PURE__ */ jsx55(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
19227
- var XIcon = ({ color }) => /* @__PURE__ */ jsx55(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
19228
- 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 });
19229
19727
  function MessageItemImpl({
19230
19728
  message,
19231
19729
  onUploadForRequest,
@@ -19235,14 +19733,14 @@ function MessageItemImpl({
19235
19733
  isLastInGroup = true
19236
19734
  }) {
19237
19735
  var _a3, _b;
19238
- const { t } = useTranslation22();
19736
+ const { t } = useTranslation24();
19239
19737
  const isPrincipal = message.sender_role === "data_principal";
19240
19738
  const senderLabel = isPrincipal ? t("senderYou") || "You" : t("senderPrivacyTeam") || "Privacy Team";
19241
19739
  switch (message.message_type) {
19242
19740
  case "message_sent":
19243
19741
  case "document_submitted":
19244
19742
  case "document_replaced":
19245
- return /* @__PURE__ */ jsx55(
19743
+ return /* @__PURE__ */ jsx59(
19246
19744
  ChatBubble,
19247
19745
  {
19248
19746
  message,
@@ -19254,8 +19752,8 @@ function MessageItemImpl({
19254
19752
  }
19255
19753
  );
19256
19754
  case "document_requested":
19257
- return /* @__PURE__ */ jsxs37(Fragment12, { children: [
19258
- /* @__PURE__ */ jsx55(
19755
+ return /* @__PURE__ */ jsxs38(Fragment12, { children: [
19756
+ /* @__PURE__ */ jsx59(
19259
19757
  ChatBubble,
19260
19758
  {
19261
19759
  message,
@@ -19266,7 +19764,7 @@ function MessageItemImpl({
19266
19764
  isLastInGroup
19267
19765
  }
19268
19766
  ),
19269
- /* @__PURE__ */ jsx55(
19767
+ /* @__PURE__ */ jsx59(
19270
19768
  DocumentRequestCard,
19271
19769
  {
19272
19770
  message,
@@ -19277,10 +19775,10 @@ function MessageItemImpl({
19277
19775
  )
19278
19776
  ] });
19279
19777
  case "document_approved":
19280
- return /* @__PURE__ */ jsx55(
19778
+ return /* @__PURE__ */ jsx59(
19281
19779
  StatusEvent,
19282
19780
  {
19283
- icon: /* @__PURE__ */ jsx55(CheckIcon, { color: "#059669" }),
19781
+ icon: /* @__PURE__ */ jsx59(CheckIcon, { color: "#059669" }),
19284
19782
  color: "#059669",
19285
19783
  bgColor: "rgba(16, 185, 129, 0.08)",
19286
19784
  borderColor: "rgba(16, 185, 129, 0.2)",
@@ -19289,10 +19787,10 @@ function MessageItemImpl({
19289
19787
  }
19290
19788
  );
19291
19789
  case "document_rejected":
19292
- return /* @__PURE__ */ jsx55(
19790
+ return /* @__PURE__ */ jsx59(
19293
19791
  StatusEvent,
19294
19792
  {
19295
- icon: /* @__PURE__ */ jsx55(XIcon, { color: "#DC2626" }),
19793
+ icon: /* @__PURE__ */ jsx59(XIcon, { color: "#DC2626" }),
19296
19794
  color: "#DC2626",
19297
19795
  bgColor: "rgba(220, 38, 38, 0.08)",
19298
19796
  borderColor: "rgba(220, 38, 38, 0.2)",
@@ -19302,10 +19800,10 @@ function MessageItemImpl({
19302
19800
  }
19303
19801
  );
19304
19802
  case "document_replacement_requested":
19305
- return /* @__PURE__ */ jsx55(
19803
+ return /* @__PURE__ */ jsx59(
19306
19804
  StatusEvent,
19307
19805
  {
19308
- icon: /* @__PURE__ */ jsx55(RefreshIcon, { color: "#D97706" }),
19806
+ icon: /* @__PURE__ */ jsx59(RefreshIcon, { color: "#D97706" }),
19309
19807
  color: "#D97706",
19310
19808
  bgColor: "rgba(245, 158, 11, 0.08)",
19311
19809
  borderColor: "rgba(245, 158, 11, 0.2)",
@@ -19315,7 +19813,7 @@ function MessageItemImpl({
19315
19813
  }
19316
19814
  );
19317
19815
  default:
19318
- return /* @__PURE__ */ jsx55(
19816
+ return /* @__PURE__ */ jsx59(
19319
19817
  ChatBubble,
19320
19818
  {
19321
19819
  message,
@@ -19328,22 +19826,22 @@ function MessageItemImpl({
19328
19826
  );
19329
19827
  }
19330
19828
  }
19331
- var MessageItem = React22.memo(MessageItemImpl);
19829
+ var MessageItem = React23.memo(MessageItemImpl);
19332
19830
 
19333
19831
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx
19334
- import { useEffect as useEffect16, useRef as useRef9 } from "react";
19832
+ import { useEffect as useEffect17, useRef as useRef9 } from "react";
19335
19833
  import {
19336
19834
  ActivityIndicator as ActivityIndicator6,
19337
19835
  Animated as Animated12,
19338
19836
  Easing as Easing3,
19339
- StyleSheet as StyleSheet45,
19340
- Text as Text35,
19837
+ StyleSheet as StyleSheet47,
19838
+ Text as Text36,
19341
19839
  TextInput as TextInput3,
19342
- TouchableOpacity as TouchableOpacity17,
19343
- View as View43
19840
+ TouchableOpacity as TouchableOpacity18,
19841
+ View as View45
19344
19842
  } from "react-native";
19345
- import { useTranslation as useTranslation23 } from "react-i18next";
19346
- 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";
19347
19845
  function MessageComposer({
19348
19846
  messageText,
19349
19847
  onMessageTextChange,
@@ -19355,11 +19853,11 @@ function MessageComposer({
19355
19853
  isUploading,
19356
19854
  isCaseFinalized = false
19357
19855
  }) {
19358
- const { t } = useTranslation23();
19856
+ const { t } = useTranslation25();
19359
19857
  const { colors } = useTheme();
19360
19858
  const canSend = (messageText.trim().length > 0 || pendingUpload) && !isSending && !isUploading && !isCaseFinalized;
19361
19859
  const activate = useRef9(new Animated12.Value(canSend ? 1 : 0)).current;
19362
- useEffect16(() => {
19860
+ useEffect17(() => {
19363
19861
  Animated12.timing(activate, {
19364
19862
  toValue: canSend ? 1 : 0,
19365
19863
  duration: 180,
@@ -19379,7 +19877,7 @@ function MessageComposer({
19379
19877
  Animated12.spring(pressScale, { toValue: 1, useNativeDriver: true, speed: 20, bounciness: 6 }).start();
19380
19878
  };
19381
19879
  const pillIn = useRef9(new Animated12.Value(0)).current;
19382
- useEffect16(() => {
19880
+ useEffect17(() => {
19383
19881
  Animated12.timing(pillIn, {
19384
19882
  toValue: pendingUpload ? 1 : 0,
19385
19883
  duration: 220,
@@ -19389,12 +19887,12 @@ function MessageComposer({
19389
19887
  }, [pendingUpload, pillIn]);
19390
19888
  const pillOpacity = pillIn;
19391
19889
  const pillTranslateY = pillIn.interpolate({ inputRange: [0, 1], outputRange: [8, 0] });
19392
- return /* @__PURE__ */ jsxs38(View43, { style: [styles44.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
19393
- 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(
19394
19892
  Animated12.View,
19395
19893
  {
19396
19894
  style: [
19397
- styles44.uploadPill,
19895
+ styles46.uploadPill,
19398
19896
  {
19399
19897
  backgroundColor: colors.primarySoft,
19400
19898
  opacity: pillOpacity,
@@ -19402,34 +19900,34 @@ function MessageComposer({
19402
19900
  }
19403
19901
  ],
19404
19902
  children: [
19405
- /* @__PURE__ */ jsx56(Icon, { name: "file", size: 14, color: colors.primary }),
19406
- /* @__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: [
19407
19905
  pendingUpload.file_name,
19408
19906
  " (",
19409
19907
  formatFileSize(pendingUpload.file_size),
19410
19908
  ")"
19411
19909
  ] }),
19412
- /* @__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 }) })
19413
19911
  ]
19414
19912
  }
19415
19913
  ),
19416
- /* @__PURE__ */ jsxs38(View43, { style: [styles44.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles44.pillDisabled], children: [
19417
- /* @__PURE__ */ jsx56(
19418
- TouchableOpacity17,
19914
+ /* @__PURE__ */ jsxs39(View45, { style: [styles46.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles46.pillDisabled], children: [
19915
+ /* @__PURE__ */ jsx60(
19916
+ TouchableOpacity18,
19419
19917
  {
19420
- style: styles44.attachButton,
19918
+ style: styles46.attachButton,
19421
19919
  onPress: onAttachClick,
19422
19920
  disabled: isUploading || isCaseFinalized,
19423
19921
  activeOpacity: 0.6,
19424
19922
  hitSlop: DEFAULT_HIT_SLOP,
19425
19923
  accessibilityLabel: t("uploadFile") || "Attach file",
19426
- 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 })
19427
19925
  }
19428
19926
  ),
19429
- /* @__PURE__ */ jsx56(
19927
+ /* @__PURE__ */ jsx60(
19430
19928
  TextInput3,
19431
19929
  {
19432
- style: [styles44.input, { color: colors.text }],
19930
+ style: [styles46.input, { color: colors.text }],
19433
19931
  value: messageText,
19434
19932
  onChangeText: onMessageTextChange,
19435
19933
  placeholder: t("messageInputPlaceholder", { defaultValue: "Message\u2026" }),
@@ -19439,8 +19937,8 @@ function MessageComposer({
19439
19937
  editable: !isSending && !isCaseFinalized
19440
19938
  }
19441
19939
  ),
19442
- /* @__PURE__ */ jsx56(Animated12.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ jsx56(
19443
- TouchableOpacity17,
19940
+ /* @__PURE__ */ jsx60(Animated12.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ jsx60(
19941
+ TouchableOpacity18,
19444
19942
  {
19445
19943
  onPress: onSend,
19446
19944
  onPressIn: handlePressIn,
@@ -19448,15 +19946,15 @@ function MessageComposer({
19448
19946
  disabled: !canSend,
19449
19947
  activeOpacity: 0.85,
19450
19948
  accessibilityLabel: t("send") || "Send",
19451
- 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 }) }) })
19452
19950
  }
19453
19951
  ) })
19454
19952
  ] })
19455
19953
  ] });
19456
19954
  }
19457
- var styles44 = StyleSheet45.create({
19955
+ var styles46 = StyleSheet47.create({
19458
19956
  container: {
19459
- borderTopWidth: StyleSheet45.hairlineWidth,
19957
+ borderTopWidth: StyleSheet47.hairlineWidth,
19460
19958
  paddingHorizontal: spacing.md,
19461
19959
  paddingVertical: spacing.sm
19462
19960
  },
@@ -19479,7 +19977,7 @@ var styles44 = StyleSheet45.create({
19479
19977
  pill: {
19480
19978
  flexDirection: "row",
19481
19979
  alignItems: "center",
19482
- borderWidth: StyleSheet45.hairlineWidth,
19980
+ borderWidth: StyleSheet47.hairlineWidth,
19483
19981
  borderRadius: radii.xxl + 4,
19484
19982
  paddingHorizontal: spacing.xs + 2,
19485
19983
  paddingVertical: spacing.xs,
@@ -19518,7 +20016,7 @@ var styles44 = StyleSheet45.create({
19518
20016
  });
19519
20017
 
19520
20018
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
19521
- 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";
19522
20020
  var STREAK_GAP_MS = 5 * 60 * 1e3;
19523
20021
  function isStreakBoundary(a, b) {
19524
20022
  if (!a || !b) return true;
@@ -19548,7 +20046,7 @@ function sameDay(a, b) {
19548
20046
  }
19549
20047
  var MESSAGE_POLL_INTERVAL = 3e4;
19550
20048
  function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19551
- const { t } = useTranslation24();
20049
+ const { t } = useTranslation26();
19552
20050
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19553
20051
  const { consentClient } = useBaseUrl();
19554
20052
  const { colors } = useTheme();
@@ -19564,13 +20062,13 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19564
20062
  caseUuid,
19565
20063
  authContext
19566
20064
  );
19567
- const [messageText, setMessageText] = useState22("");
19568
- const [pendingUpload, setPendingUpload] = useState22(null);
19569
- const [isSending, setIsSending] = useState22(false);
19570
- const [isUploading, setIsUploading] = useState22(false);
19571
- 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);
19572
20070
  const flatListRef = useRef10(null);
19573
- useEffect17(() => {
20071
+ useEffect18(() => {
19574
20072
  if (messages && messages.length > 0) {
19575
20073
  setTimeout(() => {
19576
20074
  var _a3;
@@ -19580,14 +20078,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19580
20078
  }, [messages == null ? void 0 : messages.length]);
19581
20079
  const refetchRef = useRef10(refetch);
19582
20080
  refetchRef.current = refetch;
19583
- useEffect17(() => {
20081
+ const authContextRef = useRef10(authContext);
20082
+ authContextRef.current = authContext;
20083
+ useEffect18(() => {
19584
20084
  if (isCaseFinalized) return;
19585
20085
  const id = setInterval(() => {
20086
+ if (isRefreshBlocked(authContextRef.current)) return;
19586
20087
  refetchRef.current();
19587
20088
  }, MESSAGE_POLL_INTERVAL);
19588
20089
  return () => clearInterval(id);
19589
20090
  }, [isCaseFinalized]);
19590
- const handleSend = useCallback11(async () => {
20091
+ const handleSend = useCallback12(async () => {
19591
20092
  if (isCaseFinalized) return;
19592
20093
  if (!messageText.trim() && !pendingUpload) return;
19593
20094
  if (!organizationId || !workspaceId) return;
@@ -19612,7 +20113,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19612
20113
  setIsSending(false);
19613
20114
  }
19614
20115
  }, [isCaseFinalized, messageText, pendingUpload, organizationId, workspaceId, caseUuid, authContext, consentClient, refetch]);
19615
- const handleAttach = useCallback11(async () => {
20116
+ const handleAttach = useCallback12(async () => {
19616
20117
  if (isCaseFinalized) return;
19617
20118
  if (!organizationId || !workspaceId) return;
19618
20119
  try {
@@ -19647,7 +20148,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19647
20148
  setIsUploading(false);
19648
20149
  }
19649
20150
  }, [isCaseFinalized, organizationId, workspaceId, caseUuid, authContext, consentClient]);
19650
- const handleUploadForRequest = useCallback11((_requestEventUuid) => {
20151
+ const handleUploadForRequest = useCallback12((_requestEventUuid) => {
19651
20152
  handleAttach();
19652
20153
  }, [handleAttach]);
19653
20154
  const messagesList = useMemo19(() => {
@@ -19659,17 +20160,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19659
20160
  });
19660
20161
  return list;
19661
20162
  }, [messages]);
19662
- const keyExtractor = useCallback11((item) => item.uuid, []);
19663
- const renderMessage = useCallback11(
20163
+ const keyExtractor = useCallback12((item) => item.uuid, []);
20164
+ const renderMessage = useCallback12(
19664
20165
  ({ item, index }) => {
19665
20166
  const prev = index > 0 ? messagesList[index - 1] : void 0;
19666
20167
  const next = index < messagesList.length - 1 ? messagesList[index + 1] : void 0;
19667
20168
  const isFirstInGroup = isStreakBoundary(prev, item);
19668
20169
  const isLastInGroup = isStreakBoundary(item, next);
19669
20170
  const dateSeparator = getDateSeparator(prev == null ? void 0 : prev.created_at, item.created_at, t);
19670
- return /* @__PURE__ */ jsxs39(Fragment13, { children: [
19671
- 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,
19672
- /* @__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(
19673
20174
  MessageItem,
19674
20175
  {
19675
20176
  message: item,
@@ -19685,32 +20186,32 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19685
20186
  [messagesList, handleUploadForRequest, isSubmittingForRequest, isCaseFinalized, colors, t]
19686
20187
  );
19687
20188
  if (isLoading) {
19688
- 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 }) });
19689
20190
  }
19690
20191
  if (error) {
19691
- 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" }) });
19692
20193
  }
19693
- return /* @__PURE__ */ jsxs39(View44, { style: [styles45.container, { backgroundColor: colors.canvasSubtle }], children: [
19694
- /* @__PURE__ */ jsxs39(View44, { style: styles45.secureRow, children: [
19695
- /* @__PURE__ */ jsx57(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
19696
- /* @__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"}` })
19697
20198
  ] }),
19698
- /* @__PURE__ */ jsx57(
20199
+ /* @__PURE__ */ jsx61(
19699
20200
  FlatList2,
19700
20201
  {
19701
20202
  ref: flatListRef,
19702
- style: styles45.list,
20203
+ style: styles47.list,
19703
20204
  data: messagesList,
19704
20205
  keyExtractor,
19705
20206
  renderItem: renderMessage,
19706
20207
  contentContainerStyle: [
19707
- styles45.messagesList,
19708
- messagesList.length ? styles45.messagesListFill : styles45.messagesListCenter
20208
+ styles47.messagesList,
20209
+ messagesList.length ? styles47.messagesListFill : styles47.messagesListCenter
19709
20210
  ],
19710
- ListEmptyComponent: /* @__PURE__ */ jsxs39(View44, { style: styles45.emptyContainer, children: [
19711
- /* @__PURE__ */ jsx57(View44, { style: [styles45.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ jsx57(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
19712
- /* @__PURE__ */ jsx57(Text36, { style: [styles45.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
19713
- /* @__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") })
19714
20215
  ] }),
19715
20216
  onContentSizeChange: () => {
19716
20217
  var _a3;
@@ -19722,7 +20223,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19722
20223
  removeClippedSubviews: true
19723
20224
  }
19724
20225
  ),
19725
- /* @__PURE__ */ jsx57(
20226
+ /* @__PURE__ */ jsx61(
19726
20227
  MessageComposer,
19727
20228
  {
19728
20229
  messageText,
@@ -19738,7 +20239,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19738
20239
  )
19739
20240
  ] });
19740
20241
  }
19741
- var styles45 = StyleSheet46.create({
20242
+ var styles47 = StyleSheet48.create({
19742
20243
  container: {
19743
20244
  flex: 1
19744
20245
  },
@@ -19821,16 +20322,16 @@ var styles45 = StyleSheet46.create({
19821
20322
  });
19822
20323
 
19823
20324
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
19824
- import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
20325
+ import { jsx as jsx62, jsxs as jsxs41 } from "react/jsx-runtime";
19825
20326
  function CaseDetailsPage() {
19826
20327
  var _a3, _b;
19827
- const { t } = useTranslation25();
20328
+ const { t } = useTranslation27();
19828
20329
  const { navigateTo, selectedCase, setSelectedCase, pendingCaseUuid } = useInternalNavigation();
19829
20330
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19830
20331
  const { colors } = useTheme();
19831
20332
  const { keyboardOffset } = usePrivacyCenterInsets();
19832
20333
  const requestTypeLabels = useRequestTypeLabels();
19833
- const [activeTab, setActiveTab] = useState23("request-details");
20334
+ const [activeTab, setActiveTab] = useState24("request-details");
19834
20335
  const authContext = useMemo20(() => ({
19835
20336
  accessToken,
19836
20337
  refreshToken,
@@ -19844,7 +20345,7 @@ function CaseDetailsPage() {
19844
20345
  email != null ? email : void 0,
19845
20346
  authContext
19846
20347
  );
19847
- useEffect18(() => {
20348
+ useEffect19(() => {
19848
20349
  if (!cases) return;
19849
20350
  if (cases.length === 0) {
19850
20351
  navigateTo("form");
@@ -19858,33 +20359,33 @@ function CaseDetailsPage() {
19858
20359
  navigateTo("form");
19859
20360
  }
19860
20361
  }, [cases, targetUuid, setSelectedCase, navigateTo]);
19861
- useEffect18(() => {
20362
+ useEffect19(() => {
19862
20363
  if (!selectedCase && !targetUuid && !isLoading) {
19863
20364
  navigateTo("form");
19864
20365
  }
19865
20366
  }, [selectedCase, targetUuid, isLoading, navigateTo]);
19866
20367
  if (!selectedCase) {
19867
- 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" }) });
19868
20369
  }
19869
20370
  const requestTypeLabel = requestTypeLabels[(_b = selectedCase.request_type) == null ? void 0 : _b.toUpperCase()] || selectedCase.request_type_display || formatCaseStatus(selectedCase.request_type || "");
19870
20371
  const tabs = [
19871
20372
  { id: "request-details", label: t("requestDetails") || "Request Details" },
19872
20373
  { id: "messages", label: t("messages") || "Messages" }
19873
20374
  ];
19874
- return /* @__PURE__ */ jsxs40(
20375
+ return /* @__PURE__ */ jsxs41(
19875
20376
  KeyboardAvoidingViewCompat,
19876
20377
  {
19877
- style: [styles46.container, { backgroundColor: colors.canvasSubtle }],
20378
+ style: [styles48.container, { backgroundColor: colors.canvasSubtle }],
19878
20379
  behavior: "padding",
19879
20380
  keyboardVerticalOffset: Platform7.OS === "ios" ? keyboardOffset : 0,
19880
20381
  children: [
19881
- /* @__PURE__ */ jsxs40(View45, { style: styles46.headerWrap, children: [
19882
- /* @__PURE__ */ jsx58(View45, { style: [styles46.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ jsxs40(View45, { style: styles46.heroInner, children: [
19883
- /* @__PURE__ */ jsx58(View45, { style: [styles46.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
19884
- /* @__PURE__ */ jsxs40(View45, { style: styles46.heroBody, children: [
19885
- /* @__PURE__ */ jsxs40(View45, { style: styles46.heroTopRow, children: [
19886
- /* @__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 }) }),
19887
- /* @__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(
19888
20389
  PCBadge,
19889
20390
  {
19890
20391
  status: getCaseStatusVariant(selectedCase.status),
@@ -19893,10 +20394,10 @@ function CaseDetailsPage() {
19893
20394
  }
19894
20395
  )
19895
20396
  ] }),
19896
- /* @__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 })
19897
20398
  ] })
19898
20399
  ] }) }),
19899
- /* @__PURE__ */ jsx58(
20400
+ /* @__PURE__ */ jsx62(
19900
20401
  Segmented,
19901
20402
  {
19902
20403
  options: tabs.map((tab) => ({ value: tab.id, label: tab.label })),
@@ -19905,18 +20406,18 @@ function CaseDetailsPage() {
19905
20406
  }
19906
20407
  )
19907
20408
  ] }),
19908
- /* @__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(
19909
20410
  RequestDetailsTab,
19910
20411
  {
19911
20412
  selectedCase,
19912
20413
  requestTypeLabel
19913
20414
  }
19914
- ) : /* @__PURE__ */ jsx58(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
20415
+ ) : /* @__PURE__ */ jsx62(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
19915
20416
  ]
19916
20417
  }
19917
20418
  );
19918
20419
  }
19919
- var styles46 = StyleSheet47.create({
20420
+ var styles48 = StyleSheet49.create({
19920
20421
  container: {
19921
20422
  flex: 1
19922
20423
  },
@@ -19981,36 +20482,36 @@ var styles46 = StyleSheet47.create({
19981
20482
  });
19982
20483
 
19983
20484
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
19984
- import { useCallback as useCallback13, useEffect as useEffect19, useMemo as useMemo23, useRef as useRef12, useState as useState24 } from "react";
19985
- import { FlatList as FlatList3, RefreshControl as RefreshControl5, StyleSheet as StyleSheet52, Text as Text41, TouchableOpacity as TouchableOpacity21, View as View49 } from "react-native";
19986
- 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";
19987
20488
 
19988
20489
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
19989
- import { StyleSheet as StyleSheet51, Text as Text40, TouchableOpacity as TouchableOpacity20, View as View48 } from "react-native";
19990
- 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";
19991
20492
 
19992
20493
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx
19993
- import { StyleSheet as StyleSheet48, Text as Text38, TouchableOpacity as TouchableOpacity18 } from "react-native";
19994
- 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";
19995
20496
  var NotificationCTAButton = ({ cta, onPress }) => {
19996
20497
  const { colors } = useTheme();
19997
20498
  const tone = cta.style === "danger" ? colors.error : colors.primary;
19998
20499
  const isPrimary = cta.style === "primary" || cta.style === "danger";
19999
- return /* @__PURE__ */ jsx59(
20000
- TouchableOpacity18,
20500
+ return /* @__PURE__ */ jsx63(
20501
+ TouchableOpacity19,
20001
20502
  {
20002
20503
  onPress,
20003
20504
  activeOpacity: 0.7,
20004
20505
  style: [
20005
- styles47.button,
20506
+ styles49.button,
20006
20507
  isPrimary ? { backgroundColor: tone } : { backgroundColor: colors.primarySoft }
20007
20508
  ],
20008
20509
  accessibilityRole: "button",
20009
- 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 })
20010
20511
  }
20011
20512
  );
20012
20513
  };
20013
- var styles47 = StyleSheet48.create({
20514
+ var styles49 = StyleSheet50.create({
20014
20515
  button: {
20015
20516
  paddingHorizontal: spacing.lg,
20016
20517
  paddingVertical: spacing.sm,
@@ -20025,8 +20526,8 @@ var styles47 = StyleSheet48.create({
20025
20526
  });
20026
20527
 
20027
20528
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx
20028
- import { StyleSheet as StyleSheet49, View as View46 } from "react-native";
20029
- 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";
20030
20531
  var CATEGORY_ICON = {
20031
20532
  guardian: "user-round",
20032
20533
  consent: "clock",
@@ -20039,18 +20540,18 @@ var NotificationIcon = ({ notificationType, size = 40 }) => {
20039
20540
  var _a3;
20040
20541
  const category = (_a3 = TYPE_TO_ICON_CATEGORY[notificationType]) != null ? _a3 : "system";
20041
20542
  const color = ICON_COLORS[category];
20042
- return /* @__PURE__ */ jsx60(
20043
- View46,
20543
+ return /* @__PURE__ */ jsx64(
20544
+ View48,
20044
20545
  {
20045
20546
  style: [
20046
- styles48.wrap,
20547
+ styles50.wrap,
20047
20548
  { width: size, height: size, borderRadius: radii.md, backgroundColor: withAlpha(color, 0.13) }
20048
20549
  ],
20049
- 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 })
20050
20551
  }
20051
20552
  );
20052
20553
  };
20053
- var styles48 = StyleSheet49.create({
20554
+ var styles50 = StyleSheet51.create({
20054
20555
  wrap: {
20055
20556
  alignItems: "center",
20056
20557
  justifyContent: "center"
@@ -20059,8 +20560,8 @@ var styles48 = StyleSheet49.create({
20059
20560
 
20060
20561
  // src/RedactoPrivacyCenter/components/NotificationHub/SwipeableRow.tsx
20061
20562
  import { useMemo as useMemo21, useRef as useRef11 } from "react";
20062
- import { Animated as Animated13, PanResponder as PanResponder2, StyleSheet as StyleSheet50, Text as Text39, TouchableOpacity as TouchableOpacity19, View as View47 } from "react-native";
20063
- 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";
20064
20565
  var ACTION_WIDTH = 80;
20065
20566
  var CLAIM_THRESHOLD = 8;
20066
20567
  var SwipeableRow = ({ actions, background, children }) => {
@@ -20099,37 +20600,37 @@ var SwipeableRow = ({ actions, background, children }) => {
20099
20600
  [maxOpen]
20100
20601
  );
20101
20602
  if (actions.length === 0) {
20102
- return /* @__PURE__ */ jsx61(Fragment14, { children });
20603
+ return /* @__PURE__ */ jsx65(Fragment14, { children });
20103
20604
  }
20104
20605
  const runAction = (action) => {
20105
20606
  settle(0);
20106
20607
  action.onPress();
20107
20608
  };
20108
- return /* @__PURE__ */ jsxs41(View47, { style: styles49.root, children: [
20109
- /* @__PURE__ */ jsx61(View47, { style: styles49.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ jsxs41(
20110
- 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,
20111
20612
  {
20112
- style: [styles49.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
20613
+ style: [styles51.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
20113
20614
  onPress: () => runAction(action),
20114
20615
  activeOpacity: 0.85,
20115
20616
  accessibilityRole: "button",
20116
20617
  accessibilityLabel: action.label,
20117
20618
  children: [
20118
- /* @__PURE__ */ jsx61(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
20119
- /* @__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 })
20120
20621
  ]
20121
20622
  },
20122
20623
  action.key
20123
20624
  )) }),
20124
- /* @__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 })
20125
20626
  ] });
20126
20627
  };
20127
- var styles49 = StyleSheet50.create({
20628
+ var styles51 = StyleSheet52.create({
20128
20629
  root: {
20129
20630
  position: "relative"
20130
20631
  },
20131
20632
  actionsLayer: {
20132
- ...StyleSheet50.absoluteFillObject,
20633
+ ...StyleSheet52.absoluteFillObject,
20133
20634
  flexDirection: "row",
20134
20635
  justifyContent: "flex-end"
20135
20636
  },
@@ -20162,10 +20663,10 @@ var formatTimeAgo = (dateString, t) => {
20162
20663
  };
20163
20664
 
20164
20665
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
20165
- 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";
20166
20667
  var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) => {
20167
20668
  var _a3, _b;
20168
- const { t } = useTranslation26();
20669
+ const { t } = useTranslation28();
20169
20670
  const { colors } = useTheme();
20170
20671
  const isUnread = !notification.is_read;
20171
20672
  const statusLabel = notification.status_label_display || notification.status_label;
@@ -20192,35 +20693,35 @@ var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) =>
20192
20693
  onPress: onAcknowledge
20193
20694
  });
20194
20695
  }
20195
- return /* @__PURE__ */ jsx62(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ jsxs42(TouchableOpacity20, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles50.row, children: [
20196
- isUnread ? /* @__PURE__ */ jsx62(View48, { style: [styles50.accent, { backgroundColor: accent }] }) : null,
20197
- /* @__PURE__ */ jsx62(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
20198
- /* @__PURE__ */ jsxs42(View48, { style: styles50.content, children: [
20199
- /* @__PURE__ */ jsxs42(View48, { style: styles50.titleRow, children: [
20200
- /* @__PURE__ */ jsx62(
20201
- 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,
20202
20703
  {
20203
- style: [styles50.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20704
+ style: [styles52.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20204
20705
  numberOfLines: 2,
20205
20706
  children: notification.title
20206
20707
  }
20207
20708
  ),
20208
- isUnread ? /* @__PURE__ */ jsx62(View48, { style: [styles50.unreadDot, { backgroundColor: colors.primary }] }) : null
20709
+ isUnread ? /* @__PURE__ */ jsx66(View50, { style: [styles52.unreadDot, { backgroundColor: colors.primary }] }) : null
20209
20710
  ] }),
20210
- /* @__PURE__ */ jsxs42(View48, { style: styles50.metaRow, children: [
20211
- statusLabel ? /* @__PURE__ */ jsxs42(Fragment15, { children: [
20212
- /* @__PURE__ */ jsx62(View48, { style: [styles50.statusDot, { backgroundColor: accent }] }),
20213
- /* @__PURE__ */ jsx62(Text40, { style: [styles50.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
20214
- /* @__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" })
20215
20716
  ] }) : null,
20216
- /* @__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) })
20217
20718
  ] }),
20218
- 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
20219
20720
  ] }),
20220
- /* @__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 }) })
20221
20722
  ] }) });
20222
20723
  };
20223
- var styles50 = StyleSheet51.create({
20724
+ var styles52 = StyleSheet53.create({
20224
20725
  row: {
20225
20726
  flexDirection: "row",
20226
20727
  alignItems: "center",
@@ -20283,7 +20784,7 @@ var styles50 = StyleSheet51.create({
20283
20784
  });
20284
20785
 
20285
20786
  // src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts
20286
- import { useCallback as useCallback12, useMemo as useMemo22 } from "react";
20787
+ import { useCallback as useCallback13, useMemo as useMemo22 } from "react";
20287
20788
  import { Linking as Linking2 } from "react-native";
20288
20789
  var useNotificationActions = () => {
20289
20790
  const { navigateTo, setSelectedCase } = useInternalNavigation();
@@ -20294,14 +20795,14 @@ var useNotificationActions = () => {
20294
20795
  () => ({ accessToken, refreshToken, onError, updateTokens }),
20295
20796
  [accessToken, refreshToken, onError, updateTokens]
20296
20797
  );
20297
- const hasAcknowledgeCTA = useCallback12(
20798
+ const hasAcknowledgeCTA = useCallback13(
20298
20799
  (notification) => {
20299
20800
  var _a3, _b;
20300
20801
  return (_b = (_a3 = notification.ctas) == null ? void 0 : _a3.some((cta) => cta.action_type === "acknowledge")) != null ? _b : false;
20301
20802
  },
20302
20803
  []
20303
20804
  );
20304
- const handleMarkRead = useCallback12(
20805
+ const handleMarkRead = useCallback13(
20305
20806
  async (notificationUuid) => {
20306
20807
  if (!organizationId || !workspaceId) return false;
20307
20808
  const result = await markNotificationRead(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20309,12 +20810,12 @@ var useNotificationActions = () => {
20309
20810
  },
20310
20811
  [organizationId, workspaceId, authContext, consentClient]
20311
20812
  );
20312
- const handleMarkAllRead = useCallback12(async () => {
20813
+ const handleMarkAllRead = useCallback13(async () => {
20313
20814
  if (!organizationId || !workspaceId) return false;
20314
20815
  const result = await markAllRead(organizationId, workspaceId, authContext, consentClient);
20315
20816
  return result !== null;
20316
20817
  }, [organizationId, workspaceId, authContext, consentClient]);
20317
- const handleAcknowledge = useCallback12(
20818
+ const handleAcknowledge = useCallback13(
20318
20819
  async (notificationUuid) => {
20319
20820
  if (!organizationId || !workspaceId) return false;
20320
20821
  const result = await acknowledgeNotification(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20322,7 +20823,7 @@ var useNotificationActions = () => {
20322
20823
  },
20323
20824
  [organizationId, workspaceId, authContext, consentClient]
20324
20825
  );
20325
- const handleCTAClick = useCallback12(
20826
+ const handleCTAClick = useCallback13(
20326
20827
  async (notification, cta) => {
20327
20828
  var _a3;
20328
20829
  if (cta.action_type === "acknowledge") {
@@ -20379,7 +20880,7 @@ var useNotificationActions = () => {
20379
20880
  };
20380
20881
 
20381
20882
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
20382
- 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";
20383
20884
  var EMPTY_SUMMARY = { total: 0, unread: 0, action_needed: 0, acknowledged: 0 };
20384
20885
  var READ_FILTER_TO_PARAM = {
20385
20886
  all: void 0,
@@ -20387,7 +20888,7 @@ var READ_FILTER_TO_PARAM = {
20387
20888
  read: true
20388
20889
  };
20389
20890
  var NotificationsScreen = () => {
20390
- const { t } = useTranslation27();
20891
+ const { t } = useTranslation29();
20391
20892
  const { colors } = useTheme();
20392
20893
  const { langParam } = useCurrentLanguage();
20393
20894
  const { listBottom } = usePrivacyCenterInsets();
@@ -20404,15 +20905,15 @@ var NotificationsScreen = () => {
20404
20905
  handleAcknowledge,
20405
20906
  handleCTAClick
20406
20907
  } = useNotificationActions();
20407
- const [notifications, setNotifications] = useState24([]);
20408
- const [summary, setSummary] = useState24(EMPTY_SUMMARY);
20409
- const [activeTab, setActiveTab] = useState24("all");
20410
- const [readFilter, setReadFilter] = useState24("all");
20411
- const [isLoading, setIsLoading] = useState24(true);
20412
- const [isRefreshing2, setIsRefreshing] = useState24(false);
20413
- 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);
20414
20915
  const isFiltered = activeTab !== "all" || readFilter !== "all";
20415
- const loadNotifications = useCallback13(
20916
+ const loadNotifications = useCallback14(
20416
20917
  async (includeSummary = false, silent = false) => {
20417
20918
  if (!organizationId || !workspaceId) return;
20418
20919
  if (!silent) setIsLoading(true);
@@ -20442,18 +20943,21 @@ var NotificationsScreen = () => {
20442
20943
  },
20443
20944
  [organizationId, workspaceId, activeTab, readFilter, authContext, consentClient, langParam]
20444
20945
  );
20445
- useEffect19(() => {
20946
+ useEffect20(() => {
20446
20947
  loadNotifications(true);
20447
20948
  }, [loadNotifications]);
20448
20949
  const loadRef = useRef12(loadNotifications);
20449
20950
  loadRef.current = loadNotifications;
20450
- useEffect19(() => {
20951
+ const authContextRef = useRef12(authContext);
20952
+ authContextRef.current = authContext;
20953
+ useEffect20(() => {
20451
20954
  const id = setInterval(() => {
20955
+ if (isRefreshBlocked(authContextRef.current)) return;
20452
20956
  loadRef.current(false, true);
20453
20957
  }, POLL_INTERVAL);
20454
20958
  return () => clearInterval(id);
20455
20959
  }, []);
20456
- const onNotificationClick = useCallback13(
20960
+ const onNotificationClick = useCallback14(
20457
20961
  async (notification) => {
20458
20962
  const shouldMarkRead = !notification.is_read;
20459
20963
  const shouldAutoAcknowledge = !notification.is_acknowledged && !hasAcknowledgeCTA(notification);
@@ -20474,7 +20978,7 @@ var NotificationsScreen = () => {
20474
20978
  },
20475
20979
  [hasAcknowledgeCTA, handleAcknowledge, handleMarkRead]
20476
20980
  );
20477
- const onRowPress = useCallback13(
20981
+ const onRowPress = useCallback14(
20478
20982
  async (notification) => {
20479
20983
  var _a3;
20480
20984
  const linkCta = (_a3 = notification.ctas) == null ? void 0 : _a3.find((cta) => cta.action_type === "link" && cta.url);
@@ -20492,7 +20996,7 @@ var NotificationsScreen = () => {
20492
20996
  },
20493
20997
  [handleCTAClick, onNotificationClick]
20494
20998
  );
20495
- const onMarkReadRow = useCallback13(
20999
+ const onMarkReadRow = useCallback14(
20496
21000
  async (notification) => {
20497
21001
  if (notification.is_read) return;
20498
21002
  const ok = await handleMarkRead(notification.uuid);
@@ -20502,7 +21006,7 @@ var NotificationsScreen = () => {
20502
21006
  },
20503
21007
  [handleMarkRead]
20504
21008
  );
20505
- const onAcknowledgeRow = useCallback13(
21009
+ const onAcknowledgeRow = useCallback14(
20506
21010
  async (notification) => {
20507
21011
  if (notification.is_acknowledged) return;
20508
21012
  const ok = await handleAcknowledge(notification.uuid);
@@ -20519,7 +21023,14 @@ var NotificationsScreen = () => {
20519
21023
  },
20520
21024
  [handleAcknowledge]
20521
21025
  );
20522
- 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(() => {
20523
21034
  setIsRefreshing(true);
20524
21035
  loadNotifications(true, true);
20525
21036
  }, [loadNotifications]);
@@ -20527,14 +21038,14 @@ var NotificationsScreen = () => {
20527
21038
  () => groupByTime(notifications, (item) => item.created_at, classifyTime),
20528
21039
  [notifications, classifyTime]
20529
21040
  );
20530
- const header = /* @__PURE__ */ jsxs43(View49, { style: styles51.header, children: [
20531
- /* @__PURE__ */ jsxs43(View49, { style: styles51.titleRow, children: [
20532
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
20533
- /* @__PURE__ */ jsx63(
20534
- 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,
20535
21046
  {
20536
21047
  style: [
20537
- styles51.filterBtn,
21048
+ styles53.filterBtn,
20538
21049
  {
20539
21050
  backgroundColor: isFiltered ? colors.primarySoft : colors.surface,
20540
21051
  borderColor: isFiltered ? colors.primary : colors.border
@@ -20543,30 +21054,30 @@ var NotificationsScreen = () => {
20543
21054
  onPress: () => setFilterOpen(true),
20544
21055
  accessibilityRole: "button",
20545
21056
  accessibilityLabel: t("filter") || "Filter",
20546
- 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 })
20547
21058
  }
20548
21059
  )
20549
21060
  ] }),
20550
- summary.unread > 0 ? /* @__PURE__ */ jsxs43(TouchableOpacity21, { style: styles51.markAllBtn, onPress: handleMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
20551
- /* @__PURE__ */ jsx63(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
20552
- /* @__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" })
20553
21064
  ] }) : null
20554
21065
  ] });
20555
- return /* @__PURE__ */ jsxs43(Fragment16, { children: [
20556
- /* @__PURE__ */ jsx63(
21066
+ return /* @__PURE__ */ jsxs44(Fragment16, { children: [
21067
+ /* @__PURE__ */ jsx67(
20557
21068
  FlatList3,
20558
21069
  {
20559
21070
  data: sections,
20560
21071
  keyExtractor: (section2) => section2.key,
20561
- style: [styles51.list, { backgroundColor: colors.canvasSubtle }],
20562
- contentContainerStyle: [styles51.listContent, { flexGrow: 1, paddingBottom: listBottom }],
21072
+ style: [styles53.list, { backgroundColor: colors.canvasSubtle }],
21073
+ contentContainerStyle: [styles53.listContent, { flexGrow: 1, paddingBottom: listBottom }],
20563
21074
  ListHeaderComponent: header,
20564
21075
  showsVerticalScrollIndicator: false,
20565
- refreshControl: /* @__PURE__ */ jsx63(RefreshControl5, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
20566
- renderItem: ({ item: section2 }) => /* @__PURE__ */ jsxs43(View49, { style: styles51.section, children: [
20567
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
20568
- /* @__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: [
20569
- /* @__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(
20570
21081
  NotificationRow,
20571
21082
  {
20572
21083
  notification: item,
@@ -20575,19 +21086,19 @@ var NotificationsScreen = () => {
20575
21086
  onAcknowledge: () => onAcknowledgeRow(item)
20576
21087
  }
20577
21088
  ),
20578
- 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
20579
21090
  ] }, item.uuid)) }) })
20580
21091
  ] }),
20581
- 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: [
20582
- /* @__PURE__ */ jsxs43(View49, { style: styles51.skeletonRow, children: [
20583
- /* @__PURE__ */ jsx63(Skeleton, { width: 36, height: 36, radius: radii.md }),
20584
- /* @__PURE__ */ jsxs43(View49, { style: styles51.skeletonLines, children: [
20585
- /* @__PURE__ */ jsx63(Skeleton, { width: "70%", height: 13 }),
20586
- /* @__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 })
20587
21098
  ] })
20588
21099
  ] }),
20589
- i < 3 ? /* @__PURE__ */ jsx63(View49, { style: [styles51.separator, { backgroundColor: colors.hairline }] }) : null
20590
- ] }, 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(
20591
21102
  PCEmpty,
20592
21103
  {
20593
21104
  iconName: "circle-check",
@@ -20596,14 +21107,14 @@ var NotificationsScreen = () => {
20596
21107
  }
20597
21108
  ) }),
20598
21109
  ListFooterComponentStyle: { marginTop: "auto" },
20599
- ListFooterComponent: /* @__PURE__ */ jsx63(Footer, {})
21110
+ ListFooterComponent: /* @__PURE__ */ jsx67(Footer, {})
20600
21111
  }
20601
21112
  ),
20602
- /* @__PURE__ */ jsx63(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ jsxs43(View49, { style: styles51.filterSheet, children: [
20603
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
20604
- /* @__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) => {
20605
21116
  const selected = tab.key === activeTab;
20606
- return /* @__PURE__ */ jsx63(
21117
+ return /* @__PURE__ */ jsx67(
20607
21118
  FilterChip,
20608
21119
  {
20609
21120
  label: tab.label,
@@ -20613,12 +21124,12 @@ var NotificationsScreen = () => {
20613
21124
  tab.key
20614
21125
  );
20615
21126
  }) }),
20616
- /* @__PURE__ */ jsx63(Text41, { style: [styles51.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
20617
- /* @__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: [
20618
21129
  { key: "all", label: t("all") || "All" },
20619
21130
  { key: "unread", label: t("unread") || "Unread" },
20620
21131
  { key: "read", label: t("read", { defaultValue: "Read" }) }
20621
- ].map((opt) => /* @__PURE__ */ jsx63(
21132
+ ].map((opt) => /* @__PURE__ */ jsx67(
20622
21133
  FilterChip,
20623
21134
  {
20624
21135
  label: opt.label,
@@ -20627,13 +21138,13 @@ var NotificationsScreen = () => {
20627
21138
  },
20628
21139
  opt.key
20629
21140
  )) }),
20630
- /* @__PURE__ */ jsx63(
20631
- TouchableOpacity21,
21141
+ /* @__PURE__ */ jsx67(
21142
+ TouchableOpacity22,
20632
21143
  {
20633
- style: [styles51.applyBtn, { backgroundColor: colors.primary }],
21144
+ style: [styles53.applyBtn, { backgroundColor: colors.primary }],
20634
21145
  onPress: () => setFilterOpen(false),
20635
21146
  accessibilityRole: "button",
20636
- 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" }) })
20637
21148
  }
20638
21149
  )
20639
21150
  ] }) })
@@ -20641,25 +21152,25 @@ var NotificationsScreen = () => {
20641
21152
  };
20642
21153
  var FilterChip = ({ label, selected, onPress }) => {
20643
21154
  const { colors } = useTheme();
20644
- return /* @__PURE__ */ jsx63(
20645
- TouchableOpacity21,
21155
+ return /* @__PURE__ */ jsx67(
21156
+ TouchableOpacity22,
20646
21157
  {
20647
21158
  onPress,
20648
21159
  activeOpacity: 0.7,
20649
21160
  accessibilityRole: "button",
20650
21161
  accessibilityState: { selected },
20651
21162
  style: [
20652
- styles51.chip,
21163
+ styles53.chip,
20653
21164
  {
20654
21165
  backgroundColor: selected ? colors.primary : colors.surfaceAlt,
20655
21166
  borderColor: selected ? colors.primary : colors.border
20656
21167
  }
20657
21168
  ],
20658
- 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 })
20659
21170
  }
20660
21171
  );
20661
21172
  };
20662
- var styles51 = StyleSheet52.create({
21173
+ var styles53 = StyleSheet54.create({
20663
21174
  list: {
20664
21175
  flex: 1
20665
21176
  },
@@ -20693,7 +21204,7 @@ var styles51 = StyleSheet52.create({
20693
21204
  filterBtn: {
20694
21205
  width: 40,
20695
21206
  height: 40,
20696
- borderWidth: StyleSheet52.hairlineWidth,
21207
+ borderWidth: StyleSheet54.hairlineWidth,
20697
21208
  borderRadius: radii.md,
20698
21209
  justifyContent: "center",
20699
21210
  alignItems: "center"
@@ -20714,7 +21225,7 @@ var styles51 = StyleSheet52.create({
20714
21225
  overflow: "hidden"
20715
21226
  },
20716
21227
  separator: {
20717
- height: StyleSheet52.hairlineWidth,
21228
+ height: StyleSheet54.hairlineWidth,
20718
21229
  marginLeft: spacing.lg + 36 + spacing.md
20719
21230
  },
20720
21231
  emptyWrap: {
@@ -20752,7 +21263,7 @@ var styles51 = StyleSheet52.create({
20752
21263
  justifyContent: "center",
20753
21264
  paddingHorizontal: spacing.lg,
20754
21265
  borderRadius: radii.pill,
20755
- borderWidth: StyleSheet52.hairlineWidth
21266
+ borderWidth: StyleSheet54.hairlineWidth
20756
21267
  },
20757
21268
  chipLabel: {
20758
21269
  ...typography.label
@@ -20771,7 +21282,7 @@ var styles51 = StyleSheet52.create({
20771
21282
  });
20772
21283
 
20773
21284
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
20774
- 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";
20775
21286
  var privacyCenterQueryClient = new QueryClient();
20776
21287
  function PrivacyCenterContent({ onBack }) {
20777
21288
  const { currentPage } = useInternalNavigation();
@@ -20781,24 +21292,24 @@ function PrivacyCenterContent({ onBack }) {
20781
21292
  const chromeMode = getPageChromeMode(currentPage);
20782
21293
  const canvasIsLight = isLightColor(colors.canvasSubtle);
20783
21294
  const barStyle = canvasIsLight ? "dark-content" : "light-content";
20784
- useEffect20(() => {
21295
+ useEffect21(() => {
20785
21296
  StatusBar2.setBarStyle(barStyle, true);
20786
21297
  if (Platform8.OS === "android") {
20787
21298
  setNavBarIconStyle(canvasIsLight ? "dark" : "light");
20788
21299
  }
20789
21300
  }, [barStyle, canvasIsLight]);
20790
- return /* @__PURE__ */ jsxs44(View50, { style: [styles52.container, { backgroundColor: colors.canvasSubtle }], children: [
20791
- /* @__PURE__ */ jsx64(StatusBar2, { barStyle, translucent: true }),
20792
- /* @__PURE__ */ jsx64(View50, { style: styles52.mainColumn, children: brandingLoading ? /* @__PURE__ */ jsx64(PCLoader, {}) : /* @__PURE__ */ jsxs44(Fragment17, { children: [
20793
- /* @__PURE__ */ jsx64(SlimTopBar, { mode: chromeMode, onBack }),
20794
- /* @__PURE__ */ jsx64(View50, { style: [styles52.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ jsx64(PCLoader, {}) : status === "empty" ? /* @__PURE__ */ jsx64(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ jsxs44(Fragment17, { children: [
20795
- currentPage === "home" && /* @__PURE__ */ jsx64(HomeHub, {}),
20796
- currentPage === "consent-manager" && /* @__PURE__ */ jsx64(ConsentManager, {}),
20797
- currentPage === "form" && /* @__PURE__ */ jsx64(FormPage, {}),
20798
- currentPage === "activity" && /* @__PURE__ */ jsx64(ActivitiesList, {}),
20799
- currentPage === "receipts" && /* @__PURE__ */ jsx64(ReceiptsList, {}),
20800
- currentPage === "case-details" && /* @__PURE__ */ jsx64(CaseDetailsPage, {}),
20801
- 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, {})
20802
21313
  ] }) })
20803
21314
  ] }) })
20804
21315
  ] });
@@ -20823,7 +21334,7 @@ function RedactoPrivacyCenter({
20823
21334
  initialCaseUuid,
20824
21335
  onBack
20825
21336
  }) {
20826
- 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(
20827
21338
  AuthProvider,
20828
21339
  {
20829
21340
  accessToken: accessToken != null ? accessToken : "",
@@ -20835,11 +21346,11 @@ function RedactoPrivacyCenter({
20835
21346
  workspaceUuid,
20836
21347
  slug,
20837
21348
  onError,
20838
- 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 }) }) }) }) })
20839
21350
  }
20840
21351
  ) }) }) }) }) }) });
20841
21352
  }
20842
- var styles52 = StyleSheet53.create({
21353
+ var styles54 = StyleSheet55.create({
20843
21354
  container: {
20844
21355
  flex: 1
20845
21356
  },
@@ -20854,78 +21365,78 @@ var styles52 = StyleSheet53.create({
20854
21365
 
20855
21366
  // src/RedactoPrivacyCenter/components/SideMenu.tsx
20856
21367
  import {
20857
- StyleSheet as StyleSheet54,
20858
- Text as Text42,
20859
- TouchableOpacity as TouchableOpacity22,
20860
- View as View51
21368
+ StyleSheet as StyleSheet56,
21369
+ Text as Text43,
21370
+ TouchableOpacity as TouchableOpacity23,
21371
+ View as View53
20861
21372
  } from "react-native";
20862
- import { useTranslation as useTranslation28 } from "react-i18next";
21373
+ import { useTranslation as useTranslation30 } from "react-i18next";
20863
21374
  import Svg2, { Path as Path2 } from "react-native-svg";
20864
- 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";
20865
21376
  var MENU_ITEMS = [
20866
21377
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consent Manager", icon: "shield-check" },
20867
21378
  { page: "form", labelKey: "grievanceRequests", fallback: "Privacy Requests", icon: "message-circle-warning" },
20868
21379
  { page: "activity", labelKey: "activity", fallback: "Activity", icon: "activity" }
20869
21380
  ];
20870
21381
  function SideMenu({ onBack } = {}) {
20871
- const { t } = useTranslation28();
21382
+ const { t } = useTranslation30();
20872
21383
  const { currentPage, navigateTo } = useInternalNavigation();
20873
21384
  const { organizationName, email } = useAuth();
20874
21385
  const { colors } = useTheme();
20875
21386
  const orgInitial = organizationName ? organizationName.charAt(0).toUpperCase() : "R";
20876
21387
  const displayName = organizationName || "Organization";
20877
- return /* @__PURE__ */ jsxs45(View51, { style: [styles53.container, { backgroundColor: colors.surface }], children: [
20878
- /* @__PURE__ */ jsxs45(View51, { style: styles53.orgSection, children: [
20879
- /* @__PURE__ */ jsx65(View51, { style: [styles53.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ jsx65(Text42, { style: [styles53.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
20880
- /* @__PURE__ */ jsxs45(View51, { style: styles53.orgInfo, children: [
20881
- /* @__PURE__ */ jsx65(Text42, { style: [styles53.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
20882
- 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
20883
21394
  ] })
20884
21395
  ] }),
20885
- /* @__PURE__ */ jsx65(View51, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20886
- /* @__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) => {
20887
21398
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
20888
- return /* @__PURE__ */ jsxs45(
20889
- TouchableOpacity22,
21399
+ return /* @__PURE__ */ jsxs46(
21400
+ TouchableOpacity23,
20890
21401
  {
20891
21402
  style: [
20892
- styles53.menuItem,
20893
- isActive && [styles53.menuItemActive, { backgroundColor: `${colors.primary}14` }]
21403
+ styles55.menuItem,
21404
+ isActive && [styles55.menuItemActive, { backgroundColor: `${colors.primary}14` }]
20894
21405
  ],
20895
21406
  onPress: () => navigateTo(item.page),
20896
21407
  activeOpacity: 0.7,
20897
21408
  accessibilityRole: "button",
20898
21409
  accessibilityState: { selected: isActive },
20899
21410
  children: [
20900
- /* @__PURE__ */ jsx65(View51, { style: styles53.menuIconWrap, children: /* @__PURE__ */ jsx65(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
20901
- /* @__PURE__ */ jsx65(
20902
- 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,
20903
21414
  {
20904
21415
  style: [
20905
- styles53.menuLabel,
21416
+ styles55.menuLabel,
20906
21417
  { color: isActive ? colors.primary : colors.text },
20907
- isActive && styles53.menuLabelActive
21418
+ isActive && styles55.menuLabelActive
20908
21419
  ],
20909
21420
  children: t(item.labelKey) || item.fallback
20910
21421
  }
20911
21422
  ),
20912
- isActive ? /* @__PURE__ */ jsx65(View51, { style: [styles53.activeIndicator, { backgroundColor: colors.primary }] }) : null
21423
+ isActive ? /* @__PURE__ */ jsx69(View53, { style: [styles55.activeIndicator, { backgroundColor: colors.primary }] }) : null
20913
21424
  ]
20914
21425
  },
20915
21426
  item.page
20916
21427
  );
20917
21428
  }) }),
20918
- onBack ? /* @__PURE__ */ jsxs45(Fragment18, { children: [
20919
- /* @__PURE__ */ jsx65(View51, { style: { flex: 1 } }),
20920
- /* @__PURE__ */ jsx65(View51, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20921
- /* @__PURE__ */ jsxs45(
20922
- 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,
20923
21434
  {
20924
- style: styles53.backBtn,
21435
+ style: styles55.backBtn,
20925
21436
  onPress: () => navigateBack(onBack),
20926
21437
  activeOpacity: 0.7,
20927
21438
  children: [
20928
- /* @__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(
20929
21440
  Path2,
20930
21441
  {
20931
21442
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -20934,7 +21445,7 @@ function SideMenu({ onBack } = {}) {
20934
21445
  strokeLinecap: "round",
20935
21446
  strokeLinejoin: "round"
20936
21447
  }
20937
- ) : /* @__PURE__ */ jsx65(
21448
+ ) : /* @__PURE__ */ jsx69(
20938
21449
  Path2,
20939
21450
  {
20940
21451
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -20944,14 +21455,14 @@ function SideMenu({ onBack } = {}) {
20944
21455
  strokeLinejoin: "round"
20945
21456
  }
20946
21457
  ) }),
20947
- /* @__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" })
20948
21459
  ]
20949
21460
  }
20950
21461
  )
20951
21462
  ] }) : null
20952
21463
  ] });
20953
21464
  }
20954
- var styles53 = StyleSheet54.create({
21465
+ var styles55 = StyleSheet56.create({
20955
21466
  container: {
20956
21467
  flex: 1,
20957
21468
  paddingTop: 12
@@ -21037,42 +21548,68 @@ var styles53 = StyleSheet54.create({
21037
21548
  });
21038
21549
 
21039
21550
  // src/RedactoPrivacyCenter/components/Navbar.tsx
21040
- import { useCallback as useCallback14, useEffect as useEffect21, useState as useState25 } from "react";
21041
- import { StyleSheet as StyleSheet56, Text as Text44, TouchableOpacity as TouchableOpacity24, View as View53 } from "react-native";
21042
- 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";
21043
21554
  import Svg4, { Path as Path4 } from "react-native-svg";
21044
21555
 
21045
21556
  // src/RedactoPrivacyCenter/components/UserOrgMenu.tsx
21046
- import { Image as Image4, StyleSheet as StyleSheet55, Text as Text43, TouchableOpacity as TouchableOpacity23, View as View52 } from "react-native";
21047
- 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";
21048
21559
  import Svg3, { Path as Path3 } from "react-native-svg";
21049
- import { jsx as jsx66, jsxs as jsxs46 } from "react/jsx-runtime";
21560
+ import { jsx as jsx70, jsxs as jsxs47 } from "react/jsx-runtime";
21050
21561
  var UserOrgMenu = ({ visible, onClose, onBack }) => {
21051
- const { t } = useTranslation29();
21562
+ const { t } = useTranslation31();
21052
21563
  const { organizationName, email } = useAuth();
21053
21564
  const { colors, branding } = useTheme();
21565
+ const { switchProfile } = useProfileSwitch();
21054
21566
  const brandName = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
21055
21567
  const handleAction = () => {
21056
21568
  onClose();
21057
21569
  navigateBack(onBack);
21058
21570
  };
21059
- return /* @__PURE__ */ jsxs46(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
21060
- /* @__PURE__ */ jsxs46(View52, { style: styles54.identity, children: [
21061
- (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 }),
21062
- /* @__PURE__ */ jsxs46(View52, { style: styles54.identityText, children: [
21063
- /* @__PURE__ */ jsx66(Text43, { style: [styles54.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
21064
- 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
21065
21577
  ] })
21066
21578
  ] }),
21067
- onBack ? /* @__PURE__ */ jsxs46(
21068
- TouchableOpacity23,
21579
+ switchProfile ? /* @__PURE__ */ jsxs47(
21580
+ TouchableOpacity24,
21069
21581
  {
21070
- style: [styles54.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
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,
21606
+ {
21607
+ style: [styles56.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
21071
21608
  onPress: handleAction,
21072
21609
  activeOpacity: 0.7,
21073
21610
  accessibilityRole: "button",
21074
21611
  children: [
21075
- /* @__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(
21076
21613
  Path3,
21077
21614
  {
21078
21615
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -21081,7 +21618,7 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
21081
21618
  strokeLinecap: "round",
21082
21619
  strokeLinejoin: "round"
21083
21620
  }
21084
- ) : /* @__PURE__ */ jsx66(
21621
+ ) : /* @__PURE__ */ jsx70(
21085
21622
  Path3,
21086
21623
  {
21087
21624
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21091,13 +21628,13 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
21091
21628
  strokeLinejoin: "round"
21092
21629
  }
21093
21630
  ) }),
21094
- /* @__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" })
21095
21632
  ]
21096
21633
  }
21097
21634
  ) : null
21098
21635
  ] });
21099
21636
  };
21100
- var styles54 = StyleSheet55.create({
21637
+ var styles56 = StyleSheet57.create({
21101
21638
  identity: {
21102
21639
  flexDirection: "row",
21103
21640
  alignItems: "center",
@@ -21138,33 +21675,33 @@ var styles54 = StyleSheet55.create({
21138
21675
  });
21139
21676
 
21140
21677
  // src/RedactoPrivacyCenter/components/Navbar.tsx
21141
- 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";
21142
21679
  function Navbar({ mode = "primary", onBack }) {
21143
- const { t } = useTranslation30();
21680
+ const { t } = useTranslation32();
21144
21681
  const { currentPage, navigateTo } = useInternalNavigation();
21145
21682
  const { organizationName, email } = useAuth();
21146
21683
  const { colors, branding } = useTheme();
21147
- const [locale, setLocale] = useState25(i18n_default.language || "en");
21148
- const [menuOpen, setMenuOpen] = useState25(false);
21684
+ const [locale, setLocale] = useState26(i18n_default.language || "en");
21685
+ const [menuOpen, setMenuOpen] = useState26(false);
21149
21686
  const unreadCount = useUnreadCount();
21150
21687
  const { status: pageStatus } = usePageStatus();
21151
21688
  const pageChrome = PAGE_CHROME_BY_PAGE[currentPage] || PAGE_CHROME_BY_PAGE["consent-manager"];
21152
21689
  const isDetail = mode === "detail";
21153
- useEffect21(() => {
21690
+ useEffect22(() => {
21154
21691
  const handleLanguageChanged = () => setLocale(i18n_default.language);
21155
21692
  i18n_default.on("languageChanged", handleLanguageChanged);
21156
21693
  return () => {
21157
21694
  i18n_default.off("languageChanged", handleLanguageChanged);
21158
21695
  };
21159
21696
  }, []);
21160
- const handleLanguageChange = useCallback14((value) => {
21697
+ const handleLanguageChange = useCallback15((value) => {
21161
21698
  i18n_default.changeLanguage(value);
21162
21699
  }, []);
21163
21700
  const brandLabel = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
21164
21701
  const accountLabel = brandLabel || email || t("account") || "Account";
21165
- const brandLockup = /* @__PURE__ */ jsxs47(View53, { style: styles55.brandRow, children: [
21166
- /* @__PURE__ */ jsx67(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
21167
- /* @__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 })
21168
21705
  ] });
21169
21706
  const handleDetailBack = () => {
21170
21707
  if (currentPage === "case-details") {
@@ -21176,26 +21713,26 @@ function Navbar({ mode = "primary", onBack }) {
21176
21713
  }
21177
21714
  };
21178
21715
  if (isDetail) {
21179
- return /* @__PURE__ */ jsxs47(Fragment19, { children: [
21180
- /* @__PURE__ */ jsx67(
21181
- View53,
21716
+ return /* @__PURE__ */ jsxs48(Fragment19, { children: [
21717
+ /* @__PURE__ */ jsx71(
21718
+ View55,
21182
21719
  {
21183
21720
  style: [
21184
- styles55.container,
21185
- styles55.detailContainer,
21721
+ styles57.container,
21722
+ styles57.detailContainer,
21186
21723
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21187
21724
  ],
21188
- children: /* @__PURE__ */ jsxs47(View53, { style: styles55.detailRow, children: [
21189
- /* @__PURE__ */ jsx67(
21190
- TouchableOpacity24,
21725
+ children: /* @__PURE__ */ jsxs48(View55, { style: styles57.detailRow, children: [
21726
+ /* @__PURE__ */ jsx71(
21727
+ TouchableOpacity25,
21191
21728
  {
21192
- style: styles55.backButton,
21729
+ style: styles57.backButton,
21193
21730
  onPress: handleDetailBack,
21194
21731
  activeOpacity: 0.7,
21195
21732
  hitSlop: DEFAULT_HIT_SLOP,
21196
21733
  accessibilityRole: "button",
21197
21734
  accessibilityLabel: t("back") || "Back",
21198
- 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(
21199
21736
  Path4,
21200
21737
  {
21201
21738
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21207,36 +21744,36 @@ function Navbar({ mode = "primary", onBack }) {
21207
21744
  ) })
21208
21745
  }
21209
21746
  ),
21210
- /* @__PURE__ */ jsxs47(View53, { style: styles55.detailTitleWrap, children: [
21211
- /* @__PURE__ */ jsx67(Text44, { style: [styles55.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21212
- 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
21213
21750
  ] })
21214
21751
  ] })
21215
21752
  }
21216
21753
  ),
21217
- /* @__PURE__ */ jsx67(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21754
+ /* @__PURE__ */ jsx71(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21218
21755
  ] });
21219
21756
  }
21220
- return /* @__PURE__ */ jsxs47(Fragment19, { children: [
21221
- /* @__PURE__ */ jsxs47(
21222
- View53,
21757
+ return /* @__PURE__ */ jsxs48(Fragment19, { children: [
21758
+ /* @__PURE__ */ jsxs48(
21759
+ View55,
21223
21760
  {
21224
21761
  style: [
21225
- styles55.container,
21762
+ styles57.container,
21226
21763
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21227
21764
  ],
21228
21765
  children: [
21229
- /* @__PURE__ */ jsxs47(View53, { style: styles55.appBar, children: [
21230
- onBack ? /* @__PURE__ */ jsx67(
21231
- TouchableOpacity24,
21766
+ /* @__PURE__ */ jsxs48(View55, { style: styles57.appBar, children: [
21767
+ onBack ? /* @__PURE__ */ jsx71(
21768
+ TouchableOpacity25,
21232
21769
  {
21233
- style: styles55.backButton,
21770
+ style: styles57.backButton,
21234
21771
  onPress: () => navigateBack(onBack),
21235
21772
  activeOpacity: 0.7,
21236
21773
  hitSlop: DEFAULT_HIT_SLOP,
21237
21774
  accessibilityRole: "button",
21238
21775
  accessibilityLabel: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out",
21239
- 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(
21240
21777
  Path4,
21241
21778
  {
21242
21779
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21248,39 +21785,39 @@ function Navbar({ mode = "primary", onBack }) {
21248
21785
  ) })
21249
21786
  }
21250
21787
  ) : null,
21251
- /* @__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 }),
21252
- /* @__PURE__ */ jsxs47(View53, { style: styles55.actions, children: [
21253
- /* @__PURE__ */ jsx67(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
21254
- /* @__PURE__ */ jsx67(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
21255
- /* @__PURE__ */ jsx67(
21256
- 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,
21257
21794
  {
21258
- style: styles55.avatarButton,
21795
+ style: styles57.avatarButton,
21259
21796
  onPress: () => setMenuOpen(true),
21260
21797
  activeOpacity: 0.7,
21261
21798
  hitSlop: DEFAULT_HIT_SLOP,
21262
21799
  accessibilityRole: "button",
21263
21800
  accessibilityLabel: accountLabel,
21264
- 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 })
21265
21802
  }
21266
21803
  )
21267
21804
  ] })
21268
21805
  ] }),
21269
- /* @__PURE__ */ jsx67(View53, { style: styles55.pageHeader, children: /* @__PURE__ */ jsxs47(View53, { style: styles55.titleRow, children: [
21270
- /* @__PURE__ */ jsx67(Text44, { style: [styles55.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21271
- 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
21272
21809
  ] }) })
21273
21810
  ]
21274
21811
  }
21275
21812
  ),
21276
- /* @__PURE__ */ jsx67(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21813
+ /* @__PURE__ */ jsx71(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21277
21814
  ] });
21278
21815
  }
21279
- var styles55 = StyleSheet56.create({
21816
+ var styles57 = StyleSheet58.create({
21280
21817
  container: {
21281
21818
  paddingHorizontal: spacing.lg,
21282
21819
  paddingBottom: spacing.md,
21283
- borderBottomWidth: StyleSheet56.hairlineWidth
21820
+ borderBottomWidth: StyleSheet58.hairlineWidth
21284
21821
  },
21285
21822
  detailContainer: {
21286
21823
  paddingBottom: spacing.sm
@@ -21360,10 +21897,10 @@ var styles55 = StyleSheet56.create({
21360
21897
  });
21361
21898
 
21362
21899
  // src/RedactoPrivacyCenter/components/BottomTabBar.tsx
21363
- import { useState as useState26 } from "react";
21364
- import { Animated as Animated14, StyleSheet as StyleSheet57, Text as Text45, TouchableOpacity as TouchableOpacity25, View as View54 } from "react-native";
21365
- import { useTranslation as useTranslation31 } from "react-i18next";
21366
- 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";
21367
21904
  var TAB_ITEMS = [
21368
21905
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consents", icon: "shield-check" },
21369
21906
  { page: "form", labelKey: "grievanceRequests", fallback: "Requests", icon: "message-circle-warning" },
@@ -21374,10 +21911,10 @@ var PAD_H = spacing.lg;
21374
21911
  var PILL_WIDTH = 56;
21375
21912
  var PILL_HEIGHT = 34;
21376
21913
  function BottomTabBar({ showFooter = true }) {
21377
- const { t } = useTranslation31();
21914
+ const { t } = useTranslation33();
21378
21915
  const { currentPage, navigateTo } = useInternalNavigation();
21379
21916
  const { colors } = useTheme();
21380
- const [rowWidth, setRowWidth] = useState26(0);
21917
+ const [rowWidth, setRowWidth] = useState27(0);
21381
21918
  const innerWidth = Math.max(0, rowWidth - PAD_H * 2);
21382
21919
  const tabWidth = innerWidth > 0 ? innerWidth / TAB_ITEMS.length : 0;
21383
21920
  const activeIndex = TAB_ITEMS.findIndex(
@@ -21385,13 +21922,13 @@ function BottomTabBar({ showFooter = true }) {
21385
21922
  );
21386
21923
  const { translateX } = useAnimatedTabIndicator(Math.max(0, activeIndex), tabWidth);
21387
21924
  const onLayout = (e) => setRowWidth(e.nativeEvent.layout.width);
21388
- return /* @__PURE__ */ jsxs48(View54, { style: [styles56.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
21389
- /* @__PURE__ */ jsxs48(View54, { style: styles56.container, onLayout, children: [
21390
- 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(
21391
21928
  Animated14.View,
21392
21929
  {
21393
21930
  style: [
21394
- styles56.pill,
21931
+ styles58.pill,
21395
21932
  {
21396
21933
  width: PILL_WIDTH,
21397
21934
  left: PAD_H + (tabWidth - PILL_WIDTH) / 2,
@@ -21404,17 +21941,17 @@ function BottomTabBar({ showFooter = true }) {
21404
21941
  TAB_ITEMS.map((item) => {
21405
21942
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
21406
21943
  const label = t(item.labelKey) || item.fallback;
21407
- return /* @__PURE__ */ jsxs48(
21408
- TouchableOpacity25,
21944
+ return /* @__PURE__ */ jsxs49(
21945
+ TouchableOpacity26,
21409
21946
  {
21410
- style: styles56.tab,
21947
+ style: styles58.tab,
21411
21948
  onPress: () => navigateTo(item.page),
21412
21949
  activeOpacity: 0.7,
21413
21950
  accessibilityRole: "tab",
21414
21951
  accessibilityState: { selected: isActive },
21415
21952
  accessibilityLabel: label,
21416
21953
  children: [
21417
- /* @__PURE__ */ jsx68(View54, { style: styles56.iconWrap, children: /* @__PURE__ */ jsx68(
21954
+ /* @__PURE__ */ jsx72(View56, { style: styles58.iconWrap, children: /* @__PURE__ */ jsx72(
21418
21955
  Icon,
21419
21956
  {
21420
21957
  name: item.icon,
@@ -21423,10 +21960,10 @@ function BottomTabBar({ showFooter = true }) {
21423
21960
  strokeWidth: isActive ? 2.1 : 1.85
21424
21961
  }
21425
21962
  ) }),
21426
- /* @__PURE__ */ jsx68(
21427
- Text45,
21963
+ /* @__PURE__ */ jsx72(
21964
+ Text46,
21428
21965
  {
21429
- style: [styles56.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21966
+ style: [styles58.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21430
21967
  numberOfLines: 1,
21431
21968
  children: label
21432
21969
  }
@@ -21437,13 +21974,13 @@ function BottomTabBar({ showFooter = true }) {
21437
21974
  );
21438
21975
  })
21439
21976
  ] }),
21440
- showFooter ? /* @__PURE__ */ jsx68(Footer, { inline: true }) : null,
21441
- /* @__PURE__ */ jsx68(View54, { style: { height: BOTTOM_INSET } })
21977
+ showFooter ? /* @__PURE__ */ jsx72(Footer, { inline: true }) : null,
21978
+ /* @__PURE__ */ jsx72(View56, { style: { height: BOTTOM_INSET } })
21442
21979
  ] });
21443
21980
  }
21444
- var styles56 = StyleSheet57.create({
21981
+ var styles58 = StyleSheet59.create({
21445
21982
  wrapper: {
21446
- borderTopWidth: StyleSheet57.hairlineWidth
21983
+ borderTopWidth: StyleSheet59.hairlineWidth
21447
21984
  },
21448
21985
  container: {
21449
21986
  flexDirection: "row",