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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -121,10 +121,10 @@ __export(privacy_center_exports, {
121
121
  module.exports = __toCommonJS(privacy_center_exports);
122
122
 
123
123
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
124
- var import_react43 = require("react");
124
+ var import_react45 = require("react");
125
125
  var import_react_query2 = require("@tanstack/react-query");
126
- var import_react_i18next29 = require("react-i18next");
127
- var import_react_native64 = require("react-native");
126
+ var import_react_i18next31 = require("react-i18next");
127
+ var import_react_native66 = require("react-native");
128
128
 
129
129
  // src/RedactoPrivacyCenter/lib/i18n.ts
130
130
  var import_i18next = __toESM(require("i18next"));
@@ -541,7 +541,14 @@ var translation_default = {
541
541
  submittingAs: "Submitting as {{email}}",
542
542
  tapToChooseFile: "Tap to choose a file",
543
543
  view: "View",
544
- whatDoYouNeed: "What do you need?"
544
+ whatDoYouNeed: "What do you need?",
545
+ sessionExpiredTitle: "Your session has expired",
546
+ sessionExpiredDescription: "Please sign in again to continue.",
547
+ chooseYourProfile: "Choose your profile",
548
+ loginIdentifierLinkedToMultipleProfiles: "The login identifier is linked to more than one profile. Choose the one you want to view.",
549
+ userIdLabel: "User ID: {{id}}",
550
+ signingInEllipsis: "Signing in\u2026",
551
+ switchProfile: "Switch profile"
545
552
  };
546
553
 
547
554
  // src/RedactoPrivacyCenter/locales/as/translation.json
@@ -955,7 +962,14 @@ var translation_default2 = {
955
962
  submittingAs: "{{email}} \u09B9\u09BF\u099A\u09BE\u09AA\u09C7 \u09A6\u09BE\u0996\u09BF\u09B2 \u0995\u09F0\u09BF \u0986\u099B\u09C7",
956
963
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09BF\u09AC\u09B2\u09C8 \u099F\u09BF\u09AA\u0995",
957
964
  view: "\u099A\u09BE\u0993\u0995",
958
- whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?"
965
+ whatDoYouNeed: "\u0986\u09AA\u09CB\u09A8\u09BE\u0995 \u0995\u09BF \u09B2\u09BE\u0997\u09C7?",
966
+ sessionExpiredTitle: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u099B\u09C7\u099A\u09A8 \u09B6\u09C7\u09B7 \u09B9\u09C8\u099B\u09C7",
967
+ 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",
968
+ chooseYourProfile: "\u0986\u09AA\u09CB\u09A8\u09BE\u09F0 \u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09AC\u09BE\u099B\u09A8\u09BF \u0995\u09F0\u0995",
969
+ 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",
970
+ userIdLabel: "\u09AC\u09CD\u09AF\u09F1\u09B9\u09BE\u09F0\u0995\u09BE\u09F0\u09C0 \u0986\u0987\u09A1\u09BF: {{id}}",
971
+ signingInEllipsis: "\u099B\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u09C8 \u0986\u099B\u09C7\u2026",
972
+ switchProfile: "\u09AA\u09CD\u09F0'\u09AB\u09BE\u0987\u09B2 \u09B8\u09B2\u09A8\u09BF \u0995\u09F0\u0995"
959
973
  };
960
974
 
961
975
  // src/RedactoPrivacyCenter/locales/bn/translation.json
@@ -1369,7 +1383,14 @@ var translation_default3 = {
1369
1383
  submittingAs: "{{email}} \u09B9\u09BF\u09B8\u09BE\u09AC\u09C7 \u099C\u09AE\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE \u09B9\u099A\u09CD\u099B\u09C7",
1370
1384
  tapToChooseFile: "\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A4\u09C7 \u099F\u09CD\u09AF\u09BE\u09AA \u0995\u09B0\u09C1\u09A8",
1371
1385
  view: "\u09A6\u09C7\u0996\u09C1\u09A8",
1372
- whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?"
1386
+ whatDoYouNeed: "\u0986\u09AA\u09A8\u09BE\u09B0 \u0995\u09C0 \u09AA\u09CD\u09B0\u09AF\u09BC\u09CB\u099C\u09A8?",
1387
+ 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",
1388
+ 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",
1389
+ chooseYourProfile: "\u0986\u09AA\u09A8\u09BE\u09B0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AC\u09C7\u099B\u09C7 \u09A8\u09BF\u09A8",
1390
+ 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",
1391
+ userIdLabel: "\u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0\u0995\u09BE\u09B0\u09C0\u09B0 \u0986\u0987\u09A1\u09BF: {{id}}",
1392
+ signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09B9\u099A\u09CD\u099B\u09C7\u2026",
1393
+ switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09A8 \u0995\u09B0\u09C1\u09A8"
1373
1394
  };
1374
1395
 
1375
1396
  // src/RedactoPrivacyCenter/locales/brx/translation.json
@@ -1783,7 +1804,14 @@ var translation_default4 = {
1783
1804
  submittingAs: "{{email}} \u092E\u0939\u0930\u0948 \u0917\u0925\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B",
1784
1805
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916\u0928\u094B \u091F\u0947\u092C \u0916\u093E\u0932\u093E\u092E",
1785
1806
  view: "\u0928\u093E\u092F",
1786
- whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?"
1807
+ whatDoYouNeed: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u094B \u092E\u093E \u0917\u094B\u0928\u093E\u0902?",
1808
+ sessionExpiredTitle: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u0938\u0947\u0938\u0928 \u091C\u094B\u092C\u092C\u093E\u092F",
1809
+ 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",
1810
+ chooseYourProfile: "\u0928\u094B\u0902\u0925\u093E\u0902\u0928\u093F \u092A\u094D\u0930\u092B\u093E\u0907\u0932 \u0938\u093E\u092F\u0916",
1811
+ 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",
1812
+ userIdLabel: "\u092F\u0942\u091C\u0930 \u0906\u0908\u0921\u0940: {{id}}",
1813
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u092F\u0917\u093E\u0938\u093F\u0928\u094B \u0926\u0902\u2026",
1814
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0938\u094B\u0932\u093E\u092F"
1787
1815
  };
1788
1816
 
1789
1817
  // src/RedactoPrivacyCenter/locales/doi/translation.json
@@ -2197,7 +2225,14 @@ var translation_default5 = {
2197
2225
  submittingAs: "{{email}} \u0926\u0947 \u0930\u0942\u092A \u091A \u091C\u092E\u093E\u0902 \u0915\u0930\u0926\u0947",
2198
2226
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0906\u0938\u094D\u0924\u0948 \u091F\u0948\u092A \u0915\u0930\u094B",
2199
2227
  view: "\u0926\u093F\u0915\u094D\u0916\u094B",
2200
- whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?"
2228
+ whatDoYouNeed: "\u0924\u0941\u0938\u0947\u0902 \u0915\u0947\u0939\u094D \u091A\u093E\u0939\u093F\u0926\u093E?",
2229
+ sessionExpiredTitle: "\u0924\u0941\u0902\u0926\u093E \u0938\u0924\u094D\u0930 \u0916\u0924\u092E \u0939\u094B\u0908 \u0917\u0947\u0906 \u0910",
2230
+ 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",
2231
+ chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u094B",
2232
+ 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",
2233
+ userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
2234
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B\u0906 \u0915\u0930\u0926\u093E \u0910\u2026",
2235
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094B"
2201
2236
  };
2202
2237
 
2203
2238
  // src/RedactoPrivacyCenter/locales/gom/translation.json
@@ -2611,7 +2646,14 @@ var translation_default6 = {
2611
2646
  submittingAs: "{{email}} \u092E\u094D\u0939\u0942\u0923 \u0938\u093E\u0926\u0930 \u0915\u0930\u0924\u093E",
2612
2647
  tapToChooseFile: "\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u092A\u093E\u0915 \u091F\u0945\u092A \u0915\u0930\u093E\u0924",
2613
2648
  view: "\u092A\u0933\u092F\u093E\u0924",
2614
- whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?"
2649
+ whatDoYouNeed: "\u0924\u0941\u092E\u0915\u093E\u0902 \u0915\u093F\u0924\u0947\u0902 \u091C\u093E\u092F?",
2650
+ sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947\u0902 \u0938\u0924\u094D\u0930 \u0938\u094B\u0902\u092A\u0932\u093E\u0902",
2651
+ 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.",
2652
+ chooseYourProfile: "\u0924\u0941\u092E\u091A\u0947\u0902 \u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u0928\u093F\u0935\u0921\u093E\u0924",
2653
+ 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.",
2654
+ userIdLabel: "\u0935\u093E\u092A\u0930\u092A\u0940 \u0906\u092F\u0921\u0940: {{id}}",
2655
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u091C\u093E\u0935\u0928 \u0906\u0938\u093E\u2026",
2656
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u092F\u0932 \u092C\u0926\u0932\u093E"
2615
2657
  };
2616
2658
 
2617
2659
  // src/RedactoPrivacyCenter/locales/gu/translation.json
@@ -3025,7 +3067,14 @@ var translation_default7 = {
3025
3067
  submittingAs: "{{email}} \u0AA4\u0AB0\u0AC0\u0A95\u0AC7 \u0AB8\u0AAC\u0AAE\u0ABF\u0A9F \u0A95\u0AB0\u0AC0 \u0AB0\u0AB9\u0ACD\u0AAF\u0ABE \u0A9B\u0ACB",
3026
3068
  tapToChooseFile: "\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0AB5\u0ABE \u0A9F\u0AC5\u0AAA \u0A95\u0AB0\u0ACB",
3027
3069
  view: "\u0A9C\u0AC1\u0A93",
3028
- whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?"
3070
+ whatDoYouNeed: "\u0AA4\u0AAE\u0AA8\u0AC7 \u0AB6\u0AC1\u0A82 \u0A9C\u0ACB\u0A88\u0A8F \u0A9B\u0AC7?",
3071
+ 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",
3072
+ 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.",
3073
+ chooseYourProfile: "\u0AA4\u0AAE\u0ABE\u0AB0\u0AC0 \u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAA\u0AB8\u0A82\u0AA6 \u0A95\u0AB0\u0ACB",
3074
+ 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.",
3075
+ userIdLabel: "\u0AB5\u0AAA\u0AB0\u0ABE\u0AB6\u0A95\u0AB0\u0ACD\u0AA4\u0ABE \u0A86\u0A88\u0AA1\u0AC0: {{id}}",
3076
+ signingInEllipsis: "\u0AB8\u0ABE\u0A87\u0AA8 \u0A87\u0AA8 \u0AA5\u0A88 \u0AB0\u0AB9\u0ACD\u0AAF\u0AC1\u0A82 \u0A9B\u0AC7\u2026",
3077
+ switchProfile: "\u0AAA\u0ACD\u0AB0\u0ACB\u0AAB\u0ABE\u0A87\u0AB2 \u0AAC\u0AA6\u0AB2\u0ACB"
3029
3078
  };
3030
3079
 
3031
3080
  // src/RedactoPrivacyCenter/locales/hi/translation.json
@@ -3439,7 +3488,14 @@ var translation_default8 = {
3439
3488
  submittingAs: "{{email}} \u0915\u0947 \u0930\u0942\u092A \u092E\u0947\u0902 \u0938\u092C\u092E\u093F\u091F \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902",
3440
3489
  tapToChooseFile: "\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091F\u0948\u092A \u0915\u0930\u0947\u0902",
3441
3490
  view: "\u0926\u0947\u0916\u0947\u0902",
3442
- whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?"
3491
+ whatDoYouNeed: "\u0906\u092A\u0915\u094B \u0915\u094D\u092F\u093E \u091A\u093E\u0939\u093F\u090F?",
3492
+ sessionExpiredTitle: "\u0906\u092A\u0915\u093E \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u0939\u094B \u0917\u092F\u093E \u0939\u0948",
3493
+ 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",
3494
+ chooseYourProfile: "\u0905\u092A\u0928\u0940 \u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u091A\u0941\u0928\u0947\u0902",
3495
+ 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",
3496
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
3497
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u094B \u0930\u0939\u093E \u0939\u0948\u2026",
3498
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932 \u092C\u0926\u0932\u0947\u0902"
3443
3499
  };
3444
3500
 
3445
3501
  // src/RedactoPrivacyCenter/locales/kn/translation.json
@@ -3853,7 +3909,14 @@ var translation_default9 = {
3853
3909
  submittingAs: "{{email}} \u0C86\u0C97\u0CBF \u0CB8\u0CB2\u0CCD\u0CB2\u0CBF\u0CB8\u0CB2\u0CBE\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6",
3854
3910
  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",
3855
3911
  view: "\u0CB5\u0CC0\u0C95\u0CCD\u0CB7\u0CBF\u0CB8\u0CBF",
3856
- whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?"
3912
+ whatDoYouNeed: "\u0CA8\u0CBF\u0CAE\u0C97\u0CC6 \u0C8F\u0CA8\u0CC1 \u0CAC\u0CC7\u0C95\u0CC1?",
3913
+ sessionExpiredTitle: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CB8\u0CC6\u0CB7\u0CA8\u0CCD \u0C85\u0CB5\u0CA7\u0CBF \u0CAE\u0CC1\u0C97\u0CBF\u0CA6\u0CBF\u0CA6\u0CC6",
3914
+ 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.",
3915
+ chooseYourProfile: "\u0CA8\u0CBF\u0CAE\u0CCD\u0CAE \u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0C86\u0CAF\u0CCD\u0C95\u0CC6\u0CAE\u0CBE\u0CA1\u0CBF",
3916
+ 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.",
3917
+ userIdLabel: "\u0CAC\u0CB3\u0C95\u0CC6\u0CA6\u0CBE\u0CB0 \u0C90\u0CA1\u0CBF: {{id}}",
3918
+ signingInEllipsis: "\u0CB8\u0CC8\u0CA8\u0CCD \u0C87\u0CA8\u0CCD \u0C86\u0C97\u0CC1\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CC6\u2026",
3919
+ switchProfile: "\u0CAA\u0CCD\u0CB0\u0CCA\u0CAB\u0CC8\u0CB2\u0CCD \u0CAC\u0CA6\u0CB2\u0CBE\u0CAF\u0CBF\u0CB8\u0CBF"
3857
3920
  };
3858
3921
 
3859
3922
  // src/RedactoPrivacyCenter/locales/ks/translation.json
@@ -4267,7 +4330,14 @@ var translation_default10 = {
4267
4330
  submittingAs: "{{email}} \u067E\u0620\u0658\u0679\u06BE \u062C\u0645\u0639 \u06A9\u0631\u0627\u0646",
4268
4331
  tapToChooseFile: "\u0641\u0627\u06CC\u0644 \u0698\u0627\u0631\u0646\u06C1 \u062E\u0672\u0637\u0631\u0655 \u0679\u06CC\u067E \u06A9\u0631\u06CC\u0648",
4269
4332
  view: "\u0648\u064F\u0686\u06BE\u0650\u0648",
4270
- whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F"
4333
+ whatDoYouNeed: "\u062A\u0648\u06C1\u0650 \u06A9\u06CC\u0627 \u0636\u0631\u0648\u0631\u062A \u0686\u06BE\u064F\u061F",
4334
+ sessionExpiredTitle: "\u062A\u064F\u06C1\u0646\u065B\u062F \u0633\u06CC\u0634\u064E\u0646 \u062E\u062A\u0645 \u06AF\u06C4\u0645\u064F\u062A",
4335
+ 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",
4336
+ chooseYourProfile: "\u067E\u0646\u0646\u06C1\u0655 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0698\u0627\u0631\u0655\u0648",
4337
+ 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",
4338
+ userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
4339
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0650\u0646 \u06AF\u0698\u06BE\u0627\u0646 \u0686\u06BE\u064F\u2026",
4340
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0628\u062F\u0644\u0627\u0648"
4271
4341
  };
4272
4342
 
4273
4343
  // src/RedactoPrivacyCenter/locales/mai/translation.json
@@ -4681,7 +4751,14 @@ var translation_default11 = {
4681
4751
  submittingAs: "{{email}} \u0930\u0942\u092A\u092E\u0947 \u091C\u092E\u093E \u0915\u093D \u0930\u0939\u0932 \u091B\u0940",
4682
4752
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u092C\u093E\u0915 \u0932\u0947\u0932 \u091F\u0948\u092A \u0915\u0930\u0942",
4683
4753
  view: "\u0926\u0947\u0916\u0942",
4684
- whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?"
4754
+ whatDoYouNeed: "\u0905\u0939\u093E\u0901\u0915\u0947\u0901 \u0915\u0940 \u091A\u093E\u0939\u0940?",
4755
+ sessionExpiredTitle: "\u0905\u0939\u093E\u0901\u0915 \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u093D \u0917\u0947\u0932 \u0905\u091B\u093F",
4756
+ 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",
4757
+ chooseYourProfile: "\u0905\u092A\u0928 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091A\u0941\u0928\u0942",
4758
+ 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",
4759
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0907\u0921\u0940: {{id}}",
4760
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u092D' \u0930\u0939\u0932 \u0905\u091B\u093F\u2026",
4761
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u0942"
4685
4762
  };
4686
4763
 
4687
4764
  // src/RedactoPrivacyCenter/locales/ml/translation.json
@@ -5095,7 +5172,14 @@ var translation_default12 = {
5095
5172
  submittingAs: "{{email}} \u0D06\u0D2F\u0D3F \u0D38\u0D2E\u0D7C\u0D2A\u0D4D\u0D2A\u0D3F\u0D15\u0D4D\u0D15\u0D41\u0D28\u0D4D\u0D28\u0D41",
5096
5173
  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",
5097
5174
  view: "\u0D15\u0D3E\u0D23\u0D41\u0D15",
5098
- 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?"
5175
+ 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?",
5176
+ 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",
5177
+ 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.",
5178
+ 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",
5179
+ 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.",
5180
+ userIdLabel: "\u0D09\u0D2A\u0D2F\u0D4B\u0D15\u0D4D\u0D24\u0D43 \u0D10\u0D21\u0D3F: {{id}}",
5181
+ signingInEllipsis: "\u0D38\u0D48\u0D7B \u0D07\u0D7B \u0D1A\u0D46\u0D2F\u0D4D\u0D2F\u0D41\u0D28\u0D4D\u0D28\u0D41\u2026",
5182
+ switchProfile: "\u0D2A\u0D4D\u0D30\u0D4A\u0D2B\u0D48\u0D7D \u0D2E\u0D3E\u0D31\u0D4D\u0D31\u0D41\u0D15"
5099
5183
  };
5100
5184
 
5101
5185
  // src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json
@@ -5509,7 +5593,14 @@ var translation_default13 = {
5509
5593
  submittingAs: "{{email}} \uABD1\uABE3\uABCF\uABC5 \uABCA\uABE5\uABD2\uABE0\uABC2\uABE4",
5510
5594
  tapToChooseFile: "\uABD0\uABE5\uABCF\uABDC \uABC8\uABDF\uABC5\uABD5 \uABC7\uABE6\uABDE \uABC7\uABE7",
5511
5595
  view: "\uABCC\uABE6\uABE1\uABCE",
5512
- whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?"
5596
+ whatDoYouNeed: "\uABD1\uABD7\uABE3\uABDD\uABD7 \uABC0\uABD4\uABE4 \uABC7\uABC9\uABE5\uABCF\uABD0\uABD7\uABD5\uABD2\uABE6?",
5597
+ sessionExpiredTitle: "\uABD1\uABD7\uABE3\uABDD\uABD2\uABE4 \uABC1\uABE6\uABC1\uABDF \uABC2\uABE3\uABCF\uABD4\uABE6",
5598
+ 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",
5599
+ chooseYourProfile: "\u09A8\u09B9\u09BE\u0995\u09CD\u0995\u09C0 \u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u0996\u09A8\u09AC\u09BF\u09AF\u09BC\u09C1",
5600
+ 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",
5601
+ userIdLabel: "\uABC3\uABE4\uABD1\uABE3\uABCF\uABD5 \uABD1\uABE5\uABCF\uABD7\uABE4: {{id}}",
5602
+ signingInEllipsis: "\u09B8\u09BE\u0987\u09A8 \u0987\u09A8 \u09A4\u09CC\u09B0\u09BF\u2026",
5603
+ switchProfile: "\u09AA\u09CD\u09B0\u09CB\u09AB\u09BE\u0987\u09B2 \u09B9\u09CB\u0982\u09A6\u09CB\u0995-\u0989"
5513
5604
  };
5514
5605
 
5515
5606
  // src/RedactoPrivacyCenter/locales/mr/translation.json
@@ -5923,7 +6014,14 @@ var translation_default14 = {
5923
6014
  submittingAs: "{{email}} \u092E\u094D\u0939\u0923\u0942\u0928 \u0938\u092C\u092E\u093F\u091F \u0915\u0930\u0924 \u0906\u0939\u0947",
5924
6015
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u0923\u094D\u092F\u093E\u0938\u093E\u0920\u0940 \u091F\u0945\u092A \u0915\u0930\u093E",
5925
6016
  view: "\u092A\u0939\u093E",
5926
- whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?"
6017
+ whatDoYouNeed: "\u0924\u0941\u092E\u094D\u0939\u093E\u0932\u093E \u0915\u093E\u092F \u0939\u0935\u0947 \u0906\u0939\u0947?",
6018
+ sessionExpiredTitle: "\u0924\u0941\u092E\u091A\u0947 \u0938\u0924\u094D\u0930 \u0938\u0902\u092A\u0932\u0947 \u0906\u0939\u0947",
6019
+ 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.",
6020
+ chooseYourProfile: "\u0924\u0941\u092E\u091A\u0940 \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u0928\u093F\u0935\u0921\u093E",
6021
+ 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.",
6022
+ userIdLabel: "\u0935\u093E\u092A\u0930\u0915\u0930\u094D\u0924\u093E \u0906\u092F\u0921\u0940: {{id}}",
6023
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0915\u0930\u0924 \u0906\u0939\u0947\u2026",
6024
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u093E"
5927
6025
  };
5928
6026
 
5929
6027
  // src/RedactoPrivacyCenter/locales/ne/translation.json
@@ -6337,7 +6435,14 @@ var translation_default15 = {
6337
6435
  submittingAs: "{{email}} \u0915\u094B \u0930\u0942\u092A\u092E\u093E \u092A\u0947\u0936 \u0917\u0930\u094D\u0926\u0948",
6338
6436
  tapToChooseFile: "\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928 \u091F\u094D\u092F\u093E\u092A \u0917\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6339
6437
  view: "\u0939\u0947\u0930\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6340
- whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?"
6438
+ whatDoYouNeed: "\u0924\u092A\u093E\u0908\u0902\u0932\u093E\u0908 \u0915\u0947 \u091A\u093E\u0939\u093F\u0928\u094D\u091B?",
6439
+ sessionExpiredTitle: "\u0924\u092A\u093E\u0908\u0902\u0915\u094B \u0938\u0924\u094D\u0930 \u0938\u092E\u093E\u092A\u094D\u0924 \u092D\u090F\u0915\u094B \u091B",
6440
+ 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",
6441
+ chooseYourProfile: "\u0906\u092B\u094D\u0928\u094B \u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u091B\u093E\u0928\u094D\u0928\u0941\u0939\u094B\u0938\u094D",
6442
+ 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",
6443
+ userIdLabel: "\u092A\u094D\u0930\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0906\u0908\u0921\u0940: {{id}}",
6444
+ signingInEllipsis: "\u0938\u093E\u0907\u0928 \u0907\u0928 \u0939\u0941\u0901\u0926\u0948\u091B\u2026",
6445
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093E\u0907\u0932 \u092C\u0926\u0932\u094D\u0928\u0941\u0939\u094B\u0938\u094D"
6341
6446
  };
6342
6447
 
6343
6448
  // src/RedactoPrivacyCenter/locales/or/translation.json
@@ -6751,7 +6856,14 @@ var translation_default16 = {
6751
6856
  submittingAs: "{{email}} \u0B2D\u0B3E\u0B2C\u0B47 \u0B26\u0B3E\u0B16\u0B32 \u0B15\u0B30\u0B41\u0B1B\u0B28\u0B4D\u0B24\u0B3F",
6752
6857
  tapToChooseFile: "\u0B2B\u0B3E\u0B07\u0B32 \u0B2C\u0B3E\u0B1B\u0B3F\u0B2C\u0B3E\u0B15\u0B41 \u0B1F\u0B4D\u0B5F\u0B3E\u0B2A \u0B15\u0B30\u0B28\u0B4D\u0B24\u0B41",
6753
6858
  view: "\u0B26\u0B47\u0B16\u0B28\u0B4D\u0B24\u0B41",
6754
- whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?"
6859
+ whatDoYouNeed: "\u0B06\u0B2A\u0B23 \u0B15\u0B23 \u0B1A\u0B3E\u0B39\u0B3E\u0B28\u0B4D\u0B24\u0B3F?",
6860
+ 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",
6861
+ 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",
6862
+ chooseYourProfile: "\u0B06\u0B2A\u0B23\u0B19\u0B4D\u0B15 \u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B3E\u0B1B\u0B28\u0B4D\u0B24\u0B41",
6863
+ 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",
6864
+ userIdLabel: "\u0B2C\u0B4D\u0B5F\u0B2C\u0B39\u0B3E\u0B30\u0B15\u0B3E\u0B30\u0B40 \u0B06\u0B07\u0B21\u0B3F: {{id}}",
6865
+ signingInEllipsis: "\u0B38\u0B3E\u0B07\u0B28\u0B4D \u0B07\u0B28\u0B4D \u0B39\u0B47\u0B09\u0B1B\u0B3F\u2026",
6866
+ switchProfile: "\u0B2A\u0B4D\u0B30\u0B4B\u0B2B\u0B3E\u0B07\u0B32\u0B4D \u0B2C\u0B26\u0B33\u0B3E\u0B28\u0B4D\u0B24\u0B41"
6755
6867
  };
6756
6868
 
6757
6869
  // src/RedactoPrivacyCenter/locales/pa/translation.json
@@ -7165,7 +7277,14 @@ var translation_default17 = {
7165
7277
  submittingAs: "{{email}} \u0A35\u0A1C\u0A4B\u0A02 \u0A38\u0A2C\u0A2E\u0A3F\u0A1F \u0A15\u0A30 \u0A30\u0A39\u0A47 \u0A39\u0A4B",
7166
7278
  tapToChooseFile: "\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A28 \u0A32\u0A08 \u0A1F\u0A48\u0A2A \u0A15\u0A30\u0A4B",
7167
7279
  view: "\u0A26\u0A47\u0A16\u0A4B",
7168
- whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?"
7280
+ whatDoYouNeed: "\u0A24\u0A41\u0A39\u0A3E\u0A28\u0A42\u0A70 \u0A15\u0A40 \u0A1A\u0A3E\u0A39\u0A40\u0A26\u0A3E \u0A39\u0A48?",
7281
+ sessionExpiredTitle: "\u0A24\u0A41\u0A39\u0A3E\u0A21\u0A3E \u0A38\u0A48\u0A38\u0A3C\u0A28 \u0A38\u0A2E\u0A3E\u0A2A\u0A24 \u0A39\u0A4B \u0A17\u0A3F\u0A06 \u0A39\u0A48",
7282
+ 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",
7283
+ chooseYourProfile: "\u0A06\u0A2A\u0A23\u0A40 \u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A1A\u0A41\u0A23\u0A4B",
7284
+ 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",
7285
+ userIdLabel: "\u0A09\u0A2A\u0A2F\u0A4B\u0A17\u0A15\u0A30\u0A24\u0A3E \u0A06\u0A08\u0A21\u0A40: {{id}}",
7286
+ signingInEllipsis: "\u0A38\u0A3E\u0A08\u0A28 \u0A07\u0A28 \u0A39\u0A4B \u0A30\u0A3F\u0A39\u0A3E \u0A39\u0A48\u2026",
7287
+ switchProfile: "\u0A2A\u0A4D\u0A30\u0A4B\u0A2B\u0A3E\u0A08\u0A32 \u0A2C\u0A26\u0A32\u0A4B"
7169
7288
  };
7170
7289
 
7171
7290
  // src/RedactoPrivacyCenter/locales/sa/translation.json
@@ -7579,7 +7698,14 @@ var translation_default18 = {
7579
7698
  submittingAs: "{{email}} \u0907\u0924\u093F \u0938\u092E\u0930\u094D\u092A\u092F\u0928\u094D",
7580
7699
  tapToChooseFile: "\u0938\u091E\u094D\u091A\u093F\u0915\u093E\u0902 \u091A\u0947\u0924\u0941\u0902 \u0938\u094D\u092A\u0943\u0936\u0924\u0941",
7581
7700
  view: "\u092A\u0936\u094D\u092F",
7582
- whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?"
7701
+ whatDoYouNeed: "\u092D\u0935\u0924\u0903 \u0915\u093F\u092E\u094D \u0906\u0935\u0936\u094D\u092F\u0915\u092E\u094D?",
7702
+ sessionExpiredTitle: "\u092D\u0935\u0924\u0903 \u0938\u0924\u094D\u0930\u0902 \u0938\u092E\u093E\u092A\u094D\u0924\u092E\u094D",
7703
+ 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",
7704
+ chooseYourProfile: "\u0938\u094D\u0935\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u091A\u093F\u0928\u094B\u0924\u0941",
7705
+ 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",
7706
+ userIdLabel: "\u0909\u092A\u092F\u094B\u0915\u094D\u0924\u0943-\u0906\u092F\u0921\u0940: {{id}}",
7707
+ signingInEllipsis: "\u092A\u094D\u0930\u0935\u0947\u0936\u0903 \u0915\u094D\u0930\u093F\u092F\u0924\u0947\u2026",
7708
+ switchProfile: "\u092A\u094D\u0930\u094B\u092B\u093C\u093E\u0907\u0932\u0902 \u092A\u0930\u093F\u0935\u0930\u094D\u0924\u092F\u0924\u0941"
7583
7709
  };
7584
7710
 
7585
7711
  // src/RedactoPrivacyCenter/locales/sat/translation.json
@@ -7993,7 +8119,14 @@ var translation_default19 = {
7993
8119
  submittingAs: "{{email}} \u1C5E\u1C6E\u1C60\u1C5F\u1C5B\u1C6E \u1C61\u1C5A\u1C62\u1C5F \u1C6E\u1C6B\u1C5F",
7994
8120
  tapToChooseFile: "\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C5E\u1C5F\u1C79\u1C5C\u1C64\u1C6B \u1C74\u1C6E\u1C6F \u1C62\u1C6E",
7995
8121
  view: "\u1C67\u1C6E\u1C5E \u1C62\u1C6E",
7996
- whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?"
8122
+ whatDoYouNeed: "\u1C5F\u1C62 \u1C6A\u1C6E\u1C6B \u1C5E\u1C5F\u1C79\u1C60\u1C5B\u1C64?",
8123
+ sessionExpiredTitle: "\u1C5F\u1C62\u1C5F\u1C5C \u1C65\u1C6E\u1C65\u1C5A\u1C71 \u1C62\u1C69\u1C6A\u1C5F\u1C79\u1C6B\u1C6E\u1C71\u1C5F",
8124
+ 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",
8125
+ chooseYourProfile: "\u1C5F\u1C62\u1C5F\u1C5C \u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5F\u1C6A\u1C77\u1C5F\u1C63 \u1C62\u1C6E",
8126
+ 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",
8127
+ userIdLabel: "\u1C75\u1C6E\u1C75\u1C77\u1C5F\u1C68\u1C64\u1C6D\u1C5F\u1C79 \u1C5F\u1C6D\u1C70\u1C64: {{id}}",
8128
+ signingInEllipsis: "\u1C65\u1C5F\u1C6D\u1C64\u1C71 \u1C64\u1C71 \u1C6E\u1C6B\u1C5F\u1C6D\u2026",
8129
+ switchProfile: "\u1C6F\u1C68\u1C73\u1C6F\u1C77\u1C5F\u1C6D\u1C64\u1C5E \u1C75\u1C5A\u1C6B\u1C5A\u1C5E \u1C62\u1C6E"
7997
8130
  };
7998
8131
 
7999
8132
  // src/RedactoPrivacyCenter/locales/sd/translation.json
@@ -8407,7 +8540,14 @@ var translation_default20 = {
8407
8540
  submittingAs: "{{email}} \u0637\u0648\u0631 \u062C\u0645\u0639 \u06AA\u0631\u064A \u0631\u0647\u064A\u0627 \u0622\u0647\u064A\u0648",
8408
8541
  tapToChooseFile: "\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u06BB \u0644\u0627\u0621\u0650 \u067D\u064A\u067E \u06AA\u0631\u064A\u0648",
8409
8542
  view: "\u068F\u0633\u0648",
8410
- whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F"
8543
+ whatDoYouNeed: "\u062A\u0648\u0647\u0627\u0646 \u06A9\u064A \u0687\u0627 \u06AF\u0647\u0631\u062C\u064A\u061F",
8544
+ sessionExpiredTitle: "\u062A\u0648\u0647\u0627\u0646 \u062C\u0648 \u0633\u064A\u0634\u0646 \u062E\u062A\u0645 \u067F\u064A \u0648\u064A\u0648 \u0622\u0647\u064A",
8545
+ 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.",
8546
+ chooseYourProfile: "\u067E\u0646\u0647\u0646\u062C\u0648 \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0686\u0648\u0646\u068A\u064A\u0648",
8547
+ 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.",
8548
+ userIdLabel: "\u064A\u0648\u0632\u0631 \u0622\u0626\u064A\u068A\u064A: {{id}}",
8549
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u067F\u064A \u0631\u0647\u064A\u0648 \u0622\u0647\u064A\u2026",
8550
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u064A\u0644 \u06AA\u0631\u064A\u0648"
8411
8551
  };
8412
8552
 
8413
8553
  // src/RedactoPrivacyCenter/locales/ta/translation.json
@@ -8821,7 +8961,14 @@ var translation_default21 = {
8821
8961
  submittingAs: "{{email}} \u0B86\u0B95 \u0B9A\u0BAE\u0BB0\u0BCD\u0BAA\u0BCD\u0BAA\u0BBF\u0B95\u0BCD\u0B95\u0BBF\u0BB1\u0BC0\u0BB0\u0BCD\u0B95\u0BB3\u0BCD",
8822
8962
  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",
8823
8963
  view: "\u0BAA\u0BBE\u0BB0\u0BCD",
8824
- whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?"
8964
+ whatDoYouNeed: "\u0B89\u0B99\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BC1 \u0B8E\u0BA9\u0BCD\u0BA9 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD?",
8965
+ 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",
8966
+ 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.",
8967
+ 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",
8968
+ 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.",
8969
+ userIdLabel: "\u0BAA\u0BAF\u0BA9\u0BB0\u0BCD \u0B90\u0B9F\u0BBF: {{id}}",
8970
+ signingInEllipsis: "\u0B89\u0BB3\u0BCD\u0BA8\u0BC1\u0BB4\u0BC8\u0B95\u0BBF\u0BB1\u0BA4\u0BC1\u2026",
8971
+ switchProfile: "\u0B9A\u0BC1\u0BAF\u0BB5\u0BBF\u0BB5\u0BB0\u0BA4\u0BCD\u0BA4\u0BC8 \u0BAE\u0BBE\u0BB1\u0BCD\u0BB1\u0BC1"
8825
8972
  };
8826
8973
 
8827
8974
  // src/RedactoPrivacyCenter/locales/te/translation.json
@@ -9235,7 +9382,14 @@ var translation_default22 = {
9235
9382
  submittingAs: "{{email}} \u0C17\u0C3E \u0C38\u0C2E\u0C30\u0C4D\u0C2A\u0C3F\u0C38\u0C4D\u0C24\u0C41\u0C28\u0C4D\u0C28\u0C3E\u0C30\u0C41",
9236
9383
  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",
9237
9384
  view: "\u0C35\u0C40\u0C15\u0C4D\u0C37\u0C3F\u0C02\u0C1A\u0C02\u0C21\u0C3F",
9238
- whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?"
9385
+ whatDoYouNeed: "\u0C2E\u0C40\u0C15\u0C41 \u0C0F\u0C2E\u0C3F \u0C15\u0C3E\u0C35\u0C3E\u0C32\u0C3F?",
9386
+ sessionExpiredTitle: "\u0C2E\u0C40 \u0C38\u0C46\u0C37\u0C28\u0C4D \u0C17\u0C21\u0C41\u0C35\u0C41 \u0C2E\u0C41\u0C17\u0C3F\u0C38\u0C3F\u0C02\u0C26\u0C3F",
9387
+ 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.",
9388
+ chooseYourProfile: "\u0C2E\u0C40 \u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C0E\u0C02\u0C1A\u0C41\u0C15\u0C4B\u0C02\u0C21\u0C3F",
9389
+ 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.",
9390
+ userIdLabel: "\u0C35\u0C3F\u0C28\u0C3F\u0C2F\u0C4B\u0C17\u0C26\u0C3E\u0C30\u0C41 \u0C10\u0C21\u0C3F: {{id}}",
9391
+ signingInEllipsis: "\u0C38\u0C48\u0C28\u0C4D \u0C07\u0C28\u0C4D \u0C05\u0C35\u0C41\u0C24\u0C4B\u0C02\u0C26\u0C3F\u2026",
9392
+ switchProfile: "\u0C2A\u0C4D\u0C30\u0C4A\u0C2B\u0C48\u0C32\u0C4D\u200C\u0C28\u0C41 \u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C02\u0C21\u0C3F"
9239
9393
  };
9240
9394
 
9241
9395
  // src/RedactoPrivacyCenter/locales/ur/translation.json
@@ -9649,7 +9803,14 @@ var translation_default23 = {
9649
9803
  submittingAs: "{{email}} \u06A9\u06D2 \u0637\u0648\u0631 \u067E\u0631 \u062C\u0645\u0639 \u06A9\u0631 \u0631\u06C1\u06D2 \u06C1\u06CC\u06BA",
9650
9804
  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",
9651
9805
  view: "\u062F\u06CC\u06A9\u06BE\u06CC\u06BA",
9652
- whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F"
9806
+ whatDoYouNeed: "\u0622\u067E \u06A9\u0648 \u06A9\u06CC\u0627 \u0686\u0627\u06C1\u06CC\u06D2\u061F",
9807
+ sessionExpiredTitle: "\u0622\u067E \u06A9\u0627 \u0633\u06CC\u0634\u0646 \u062E\u062A\u0645 \u06C1\u0648 \u06AF\u06CC\u0627 \u06C1\u06D2",
9808
+ 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",
9809
+ chooseYourProfile: "\u0627\u067E\u0646\u06CC \u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u0645\u0646\u062A\u062E\u0628 \u06A9\u0631\u06CC\u06BA",
9810
+ 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",
9811
+ userIdLabel: "\u0635\u0627\u0631\u0641 \u0622\u0626\u06CC \u0688\u06CC: {{id}}",
9812
+ signingInEllipsis: "\u0633\u0627\u0626\u0646 \u0627\u0646 \u06C1\u0648 \u0631\u06C1\u0627 \u06C1\u06D2\u2026",
9813
+ switchProfile: "\u067E\u0631\u0648\u0641\u0627\u0626\u0644 \u062A\u0628\u062F\u06CC\u0644 \u06A9\u0631\u06CC\u06BA"
9653
9814
  };
9654
9815
 
9655
9816
  // src/RedactoPrivacyCenter/lib/locales.ts
@@ -9863,7 +10024,57 @@ function useSafeInsets() {
9863
10024
  // src/RedactoPrivacyCenter/context/BaseUrlContext.tsx
9864
10025
  var import_react2 = require("react");
9865
10026
 
10027
+ // src/shared/sandbox.ts
10028
+ var SANDBOX_TOKEN_HEADER = "X-Consent-Token";
10029
+
10030
+ // src/RedactoPrivacyCenter/lib/sandbox.ts
10031
+ var sandboxConfig = null;
10032
+ var setSandboxConfig = (config) => {
10033
+ sandboxConfig = config;
10034
+ };
10035
+ var getSandboxConfig = () => sandboxConfig;
10036
+ var isSandboxMode = () => sandboxConfig !== null;
10037
+ var sandboxAuthHeaders = () => {
10038
+ if (!sandboxConfig) {
10039
+ return null;
10040
+ }
10041
+ return {
10042
+ [SANDBOX_TOKEN_HEADER]: sandboxConfig.token
10043
+ };
10044
+ };
10045
+ var sandboxBodyIdentity = () => {
10046
+ if (!sandboxConfig) {
10047
+ return null;
10048
+ }
10049
+ if (sandboxConfig.ucic) {
10050
+ return { org_user_id: sandboxConfig.ucic };
10051
+ }
10052
+ return sandboxConfig.subject.includes("@") ? { primary_email: sandboxConfig.subject } : { primary_mobile: sandboxConfig.subject };
10053
+ };
10054
+ var sandboxQueryIdentity = () => sandboxBodyIdentity();
10055
+ var sandboxContact = () => sandboxConfig ? sandboxConfig.ucic || sandboxConfig.subject : null;
10056
+
9866
10057
  // src/RedactoPrivacyCenter/api/fetcher.ts
10058
+ var ApiError = class _ApiError extends Error {
10059
+ constructor(message, options = {}) {
10060
+ super(message);
10061
+ this.name = "ApiError";
10062
+ this.status = options.status;
10063
+ this.detail = options.detail;
10064
+ Object.setPrototypeOf(this, _ApiError.prototype);
10065
+ }
10066
+ };
10067
+ var TERMINAL_REFRESH_STATUSES = /* @__PURE__ */ new Set([400, 401, 403, 422]);
10068
+ function isTerminalRefreshError(error) {
10069
+ const e = error;
10070
+ if (!e) return false;
10071
+ if (typeof e.status === "number") {
10072
+ return TERMINAL_REFRESH_STATUSES.has(e.status);
10073
+ }
10074
+ const message = (typeof e.message === "string" ? e.message : "").toLowerCase();
10075
+ if (!message) return false;
10076
+ 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]");
10077
+ }
9867
10078
  async function apiFetch(url, options = {}) {
9868
10079
  const { getAuthToken, headers = {}, ...fetchOptions } = options;
9869
10080
  const requestHeaders = new Headers();
@@ -9888,11 +10099,18 @@ async function apiFetch(url, options = {}) {
9888
10099
  }
9889
10100
  }
9890
10101
  if (getAuthToken) {
9891
- const token = await getAuthToken();
9892
- if (token) {
9893
- const trimmedToken = token.trim();
9894
- requestHeaders.set("X-Auth-Token", trimmedToken);
9895
- requestHeaders.set("x-auth-token", trimmedToken);
10102
+ const sandboxHeaders = sandboxAuthHeaders();
10103
+ if (sandboxHeaders) {
10104
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
10105
+ requestHeaders.set(key, value);
10106
+ });
10107
+ } else {
10108
+ const token = await getAuthToken();
10109
+ if (token) {
10110
+ const trimmedToken = token.trim();
10111
+ requestHeaders.set("X-Auth-Token", trimmedToken);
10112
+ requestHeaders.set("x-auth-token", trimmedToken);
10113
+ }
9896
10114
  }
9897
10115
  }
9898
10116
  const fetchOptionsFinal = {
@@ -9921,7 +10139,7 @@ async function apiFetch(url, options = {}) {
9921
10139
  } catch {
9922
10140
  }
9923
10141
  }
9924
- throw new Error(errorMessage);
10142
+ throw new ApiError(errorMessage, { status: response.status });
9925
10143
  }
9926
10144
  const contentLength = response.headers.get("Content-Length");
9927
10145
  const contentType = response.headers.get("Content-Type") || "";
@@ -9983,14 +10201,29 @@ function arrayBufferToBase64(buffer) {
9983
10201
  return result;
9984
10202
  }
9985
10203
  function createConsentClient(baseUrl, ledgerBaseUrl) {
9986
- const useLedger = Boolean(ledgerBaseUrl);
10204
+ const ledgerConfigured = Boolean(ledgerBaseUrl);
10205
+ const useLedger = () => ledgerConfigured && !isSandboxMode();
9987
10206
  const ledgerBase = (ledgerBaseUrl != null ? ledgerBaseUrl : "").replace(/\/$/, "");
9988
10207
  function ledgerUrl(baseRequest, path) {
9989
- if (!useLedger) {
10208
+ if (!useLedger()) {
9990
10209
  throw new Error("ledgerUrl called without a configured ledgerBaseUrl");
9991
10210
  }
9992
10211
  return `${ledgerBase}/public/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}${path}`;
9993
10212
  }
10213
+ function appendSandboxIdentity(queryParams) {
10214
+ const identity = sandboxQueryIdentity();
10215
+ if (identity) {
10216
+ Object.entries(identity).forEach(([key, value]) => {
10217
+ queryParams.append(key, value);
10218
+ });
10219
+ }
10220
+ }
10221
+ function sandboxIdentitySuffix() {
10222
+ const queryParams = new URLSearchParams();
10223
+ appendSandboxIdentity(queryParams);
10224
+ const queryString = queryParams.toString();
10225
+ return queryString ? `?${queryString}` : "";
10226
+ }
9994
10227
  async function privacyCenterApiFetch(url, options) {
9995
10228
  const { authToken, getAuthToken, headers = {}, ...fetchOptions } = options;
9996
10229
  const requestHeaders = new Headers();
@@ -10014,11 +10247,18 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10014
10247
  );
10015
10248
  }
10016
10249
  }
10017
- const token = authToken || (getAuthToken ? await getAuthToken() : null);
10018
- if (token) {
10019
- const trimmedToken = token.trim();
10020
- const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
10021
- requestHeaders.set("Authorization", bearerToken);
10250
+ const sandboxHeaders = sandboxAuthHeaders();
10251
+ if (sandboxHeaders) {
10252
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
10253
+ requestHeaders.set(key, value);
10254
+ });
10255
+ } else {
10256
+ const token = authToken || (getAuthToken ? await getAuthToken() : null);
10257
+ if (token) {
10258
+ const trimmedToken = token.trim();
10259
+ const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
10260
+ requestHeaders.set("Authorization", bearerToken);
10261
+ }
10022
10262
  }
10023
10263
  const fetchOptionsFinal = {
10024
10264
  ...fetchOptions,
@@ -10099,18 +10339,20 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10099
10339
  async createCaseRequest(baseRequest, payload, authToken, options) {
10100
10340
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/case`;
10101
10341
  const { useSessionAuth = false, getAuthToken, ...fetchOptions } = options || {};
10342
+ const contact = sandboxContact();
10343
+ const requestPayload = contact && payload && typeof payload === "object" ? { ...payload, contact } : payload;
10102
10344
  if (useSessionAuth) {
10103
10345
  return apiFetch(url, {
10104
10346
  ...fetchOptions,
10105
10347
  method: "POST",
10106
- body: JSON.stringify(payload),
10348
+ body: JSON.stringify(requestPayload),
10107
10349
  getAuthToken
10108
10350
  });
10109
10351
  }
10110
10352
  return privacyCenterApiFetch(url, {
10111
10353
  ...fetchOptions,
10112
10354
  method: "POST",
10113
- body: JSON.stringify(payload),
10355
+ body: JSON.stringify(requestPayload),
10114
10356
  authToken: authToken || baseRequest.authToken
10115
10357
  });
10116
10358
  },
@@ -10191,9 +10433,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10191
10433
  if (params.status) queryParams.append("status", params.status);
10192
10434
  if (params.product_uuid) queryParams.append("product_uuid", params.product_uuid);
10193
10435
  if (params.language) queryParams.append("language", params.language);
10436
+ appendSandboxIdentity(queryParams);
10194
10437
  const queryString = queryParams.toString();
10195
10438
  const consentsSuffix = `/user-consents${queryString ? `?${queryString}` : ""}`;
10196
- const url = useLedger ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
10439
+ const url = useLedger() ? ledgerUrl(baseRequest, consentsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${consentsSuffix}`;
10197
10440
  return privacyCenterApiFetch(url, {
10198
10441
  ...options,
10199
10442
  method: "GET",
@@ -10212,9 +10455,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10212
10455
  if (params.search) queryParams.append("search", params.search);
10213
10456
  if (params.language) queryParams.append("language", params.language);
10214
10457
  if (params.nominator_uuid) queryParams.append("nominator_uuid", params.nominator_uuid);
10458
+ appendSandboxIdentity(queryParams);
10215
10459
  const queryString = queryParams.toString();
10216
10460
  const purposesSuffix = `/user-consents/${productUuid}/purposes${queryString ? `?${queryString}` : ""}`;
10217
- const url = useLedger ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
10461
+ const url = useLedger() ? ledgerUrl(baseRequest, purposesSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${purposesSuffix}`;
10218
10462
  return privacyCenterApiFetch(url, {
10219
10463
  ...options,
10220
10464
  method: "GET",
@@ -10236,9 +10480,13 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10236
10480
  * used with its `{ purpose_uuid, contact, ... }` payload.
10237
10481
  */
10238
10482
  async manageConsent(baseRequest, purposeId, contact, status, authToken, options, nominatorContact, dataElementUuids, noticeUuid, dataElements, language) {
10239
- if (!useLedger) {
10483
+ if (!useLedger()) {
10240
10484
  const url2 = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/manage-consent?status=${status}`;
10241
- const body2 = { purpose_uuid: purposeId, contact };
10485
+ const sandboxSingleContact = sandboxContact();
10486
+ const body2 = {
10487
+ purpose_uuid: purposeId,
10488
+ contact: sandboxSingleContact != null ? sandboxSingleContact : contact
10489
+ };
10242
10490
  if (nominatorContact) {
10243
10491
  body2.nominator_contact = nominatorContact;
10244
10492
  }
@@ -10301,6 +10549,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10301
10549
  if (offset !== void 0) queryParams.append("offset", offset.toString());
10302
10550
  if (limit !== void 0) queryParams.append("limit", limit.toString());
10303
10551
  if (language) queryParams.append("language", language);
10552
+ appendSandboxIdentity(queryParams);
10304
10553
  const queryString = queryParams.toString();
10305
10554
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/activities${queryString ? `?${queryString}` : ""}`;
10306
10555
  return privacyCenterApiFetch(url, {
@@ -10308,6 +10557,32 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10308
10557
  authToken: authToken || baseRequest.authToken
10309
10558
  });
10310
10559
  },
10560
+ /**
10561
+ * List all data principals that share this session's contact
10562
+ * (shared-contact profile picker). Identity is derived server-side from the
10563
+ * JWT — the caller sends nothing but its bearer token.
10564
+ */
10565
+ async listIdentities(baseRequest, authToken, options) {
10566
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities`;
10567
+ return privacyCenterApiFetch(url, {
10568
+ ...options,
10569
+ authToken: authToken || baseRequest.authToken
10570
+ });
10571
+ },
10572
+ /**
10573
+ * Re-scope the session to a chosen principal uuid (must be one of the
10574
+ * principals sharing this session's contact). Returns fresh access/refresh
10575
+ * tokens scoped to that principal.
10576
+ */
10577
+ async selectPrincipal(baseRequest, principalUuid, authToken, options) {
10578
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/identities/select`;
10579
+ return privacyCenterApiFetch(url, {
10580
+ ...options,
10581
+ method: "POST",
10582
+ body: JSON.stringify({ uuid: principalUuid }),
10583
+ authToken: authToken || baseRequest.authToken
10584
+ });
10585
+ },
10311
10586
  /**
10312
10587
  * Get receipts (privacy center)
10313
10588
  */
@@ -10321,9 +10596,10 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10321
10596
  if (params.created_before) queryParams.append("created_before", params.created_before);
10322
10597
  if (params.notice_uuid) queryParams.append("notice_uuid", params.notice_uuid);
10323
10598
  if (params.language) queryParams.append("language", params.language);
10599
+ appendSandboxIdentity(queryParams);
10324
10600
  const queryString = queryParams.toString();
10325
10601
  const receiptsSuffix = `/receipts${queryString ? `?${queryString}` : ""}`;
10326
- const url = useLedger ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
10602
+ const url = useLedger() ? ledgerUrl(baseRequest, receiptsSuffix) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center${receiptsSuffix}`;
10327
10603
  return privacyCenterApiFetch(url, {
10328
10604
  ...options,
10329
10605
  method: "GET",
@@ -10337,11 +10613,16 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10337
10613
  * the RN UI writes to a temp file to open/share. 404 => not found.
10338
10614
  */
10339
10615
  async getReceiptPdf(baseRequest, receiptUuid, authToken) {
10340
- const url = useLedger ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
10616
+ const url = useLedger() ? ledgerUrl(baseRequest, `/receipts/${receiptUuid}/download`) : `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/receipts/${receiptUuid}/pdf`;
10341
10617
  const token = authToken || baseRequest.authToken;
10342
10618
  const requestHeaders = new Headers();
10343
10619
  requestHeaders.set("Accept", "application/pdf");
10344
- if (token) {
10620
+ const sandboxHeaders = sandboxAuthHeaders();
10621
+ if (sandboxHeaders) {
10622
+ Object.entries(sandboxHeaders).forEach(([key, value]) => {
10623
+ requestHeaders.set(key, value);
10624
+ });
10625
+ } else if (token) {
10345
10626
  const trimmedToken = token.trim();
10346
10627
  const bearerToken = trimmedToken.startsWith("Bearer ") ? trimmedToken : `Bearer ${trimmedToken}`;
10347
10628
  requestHeaders.set("Authorization", bearerToken);
@@ -10367,6 +10648,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10367
10648
  if (offset !== void 0) queryParams.append("offset", offset.toString());
10368
10649
  if (limit !== void 0) queryParams.append("limit", limit.toString());
10369
10650
  if (language) queryParams.append("language", language);
10651
+ appendSandboxIdentity(queryParams);
10370
10652
  const queryString = queryParams.toString();
10371
10653
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases?${queryString}`;
10372
10654
  return privacyCenterApiFetch(url, {
@@ -10378,7 +10660,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10378
10660
  * Get case messages (privacy center)
10379
10661
  */
10380
10662
  async getCaseMessages(baseRequest, caseUuid, authToken, options) {
10381
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
10663
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
10382
10664
  return privacyCenterApiFetch(url, {
10383
10665
  ...options,
10384
10666
  authToken: authToken || baseRequest.authToken
@@ -10388,7 +10670,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10388
10670
  * Send a message in a case (privacy center)
10389
10671
  */
10390
10672
  async sendCaseMessage(baseRequest, caseUuid, body, documentUuids, authToken, options) {
10391
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages`;
10673
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/messages${sandboxIdentitySuffix()}`;
10392
10674
  return privacyCenterApiFetch(url, {
10393
10675
  ...options,
10394
10676
  method: "POST",
@@ -10400,7 +10682,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10400
10682
  * Upload a document for a case (privacy center)
10401
10683
  */
10402
10684
  async uploadCaseDocument(baseRequest, caseUuid, formData, authToken, options) {
10403
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document`;
10685
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/cases/${caseUuid}/upload-document${sandboxIdentitySuffix()}`;
10404
10686
  return privacyCenterApiFetch(url, {
10405
10687
  ...options,
10406
10688
  method: "POST",
@@ -10433,6 +10715,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10433
10715
  if ((params == null ? void 0 : params.limit) !== void 0) queryParams.append("limit", params.limit.toString());
10434
10716
  if (params == null ? void 0 : params.include_summary) queryParams.append("include_summary", "true");
10435
10717
  if (params == null ? void 0 : params.language) queryParams.append("language", params.language);
10718
+ appendSandboxIdentity(queryParams);
10436
10719
  const queryString = queryParams.toString();
10437
10720
  const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${queryString ? `?${queryString}` : ""}`;
10438
10721
  return privacyCenterApiFetch(url, {
@@ -10444,7 +10727,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10444
10727
  * Get notification summary (aggregated counts only)
10445
10728
  */
10446
10729
  async getNotificationSummary(baseRequest, authToken) {
10447
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary`;
10730
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/summary${sandboxIdentitySuffix()}`;
10448
10731
  return privacyCenterApiFetch(url, {
10449
10732
  method: "GET",
10450
10733
  authToken: authToken || baseRequest.authToken
@@ -10454,7 +10737,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10454
10737
  * Get unread notification count (lightweight, for the header badge)
10455
10738
  */
10456
10739
  async getUnreadCount(baseRequest, authToken) {
10457
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count`;
10740
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/unread-count${sandboxIdentitySuffix()}`;
10458
10741
  return privacyCenterApiFetch(url, {
10459
10742
  method: "GET",
10460
10743
  authToken: authToken || baseRequest.authToken
@@ -10464,7 +10747,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10464
10747
  * Mark a single notification as read
10465
10748
  */
10466
10749
  async markNotificationRead(baseRequest, notificationUuid, authToken) {
10467
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read`;
10750
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/read${sandboxIdentitySuffix()}`;
10468
10751
  return privacyCenterApiFetch(url, {
10469
10752
  method: "PATCH",
10470
10753
  authToken: authToken || baseRequest.authToken
@@ -10474,7 +10757,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10474
10757
  * Mark all notifications as read
10475
10758
  */
10476
10759
  async markAllNotificationsRead(baseRequest, authToken) {
10477
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read`;
10760
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/mark-all-read${sandboxIdentitySuffix()}`;
10478
10761
  return privacyCenterApiFetch(url, {
10479
10762
  method: "POST",
10480
10763
  authToken: authToken || baseRequest.authToken
@@ -10484,7 +10767,7 @@ function createConsentClient(baseUrl, ledgerBaseUrl) {
10484
10767
  * Acknowledge a notification (sets is_read and is_acknowledged to true)
10485
10768
  */
10486
10769
  async acknowledgeNotification(baseRequest, notificationUuid, authToken) {
10487
- const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge`;
10770
+ const url = `${baseUrl}/organisations/${baseRequest.organisationUuid}/workspaces/${baseRequest.workspaceUuid}/dsar/privacy-center/notifications/${notificationUuid}/acknowledge${sandboxIdentitySuffix()}`;
10488
10771
  return privacyCenterApiFetch(url, {
10489
10772
  method: "POST",
10490
10773
  authToken: authToken || baseRequest.authToken
@@ -11596,6 +11879,40 @@ var acknowledgeNotification = async (organizationId, workspaceId, notificationUu
11596
11879
  var isRefreshing = false;
11597
11880
  var refreshPromise = null;
11598
11881
  var TOKEN_EXPIRY_BUFFER_SECONDS = 30;
11882
+ var deadRefreshToken = null;
11883
+ var transientRefreshFailureUntil = 0;
11884
+ var transientRefreshBackoffMs = 0;
11885
+ var MIN_REFRESH_BACKOFF_MS = 3e4;
11886
+ var MAX_REFRESH_BACKOFF_MS = 3e5;
11887
+ var sessionExpiredListener = null;
11888
+ var setSessionExpiredListener = (fn) => {
11889
+ sessionExpiredListener = fn;
11890
+ };
11891
+ var notifySessionExpired = () => {
11892
+ sessionExpiredListener == null ? void 0 : sessionExpiredListener();
11893
+ };
11894
+ var activeRefreshToken = (authContext) => (authContext == null ? void 0 : authContext.refreshToken) || getStoredValue("refresh_token") || null;
11895
+ var isRefreshBlocked = (authContext) => {
11896
+ const active = activeRefreshToken(authContext);
11897
+ if (active !== null && active === deadRefreshToken) return true;
11898
+ return Date.now() < transientRefreshFailureUntil;
11899
+ };
11900
+ var noteTransientRefreshFailure = () => {
11901
+ transientRefreshBackoffMs = Math.min(
11902
+ Math.max(transientRefreshBackoffMs * 2, MIN_REFRESH_BACKOFF_MS),
11903
+ MAX_REFRESH_BACKOFF_MS
11904
+ );
11905
+ transientRefreshFailureUntil = Date.now() + transientRefreshBackoffMs;
11906
+ };
11907
+ var markRefreshTokenDead = (token) => {
11908
+ if (token) deadRefreshToken = token;
11909
+ notifySessionExpired();
11910
+ };
11911
+ var resetRefreshCircuit = () => {
11912
+ deadRefreshToken = null;
11913
+ transientRefreshFailureUntil = 0;
11914
+ transientRefreshBackoffMs = 0;
11915
+ };
11599
11916
  var tokenStore = {};
11600
11917
  var getStoredValue = (key) => {
11601
11918
  var _a3;
@@ -11677,11 +11994,16 @@ var compareEmails = (email1, email2) => {
11677
11994
  return decodeURIComponent(email1.trim()).toLowerCase() === email2.trim().toLowerCase();
11678
11995
  };
11679
11996
  var ensureValidToken = async (organizationId, workspaceId, _slug, authContext, consentClient) => {
11997
+ const sandbox = getSandboxConfig();
11998
+ if (sandbox) {
11999
+ return sandbox.token;
12000
+ }
11680
12001
  const accessToken = (authContext == null ? void 0 : authContext.accessToken) || getStoredValue("access_token");
11681
12002
  if (accessToken && typeof accessToken === "string" && accessToken.trim() !== "" && !isJwtExpired(accessToken, TOKEN_EXPIRY_BUFFER_SECONDS)) {
11682
12003
  return accessToken;
11683
12004
  }
11684
12005
  if (isRefreshing && refreshPromise) return refreshPromise;
12006
+ if (isRefreshBlocked(authContext)) return null;
11685
12007
  isRefreshing = true;
11686
12008
  refreshPromise = performTokenRefresh(
11687
12009
  organizationId,
@@ -11709,6 +12031,7 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11709
12031
  if (!refreshToken || typeof refreshToken !== "string" || refreshToken.trim() === "") {
11710
12032
  if (authContext == null ? void 0 : authContext.onError)
11711
12033
  authContext.onError(new Error("No refresh token available"));
12034
+ notifySessionExpired();
11712
12035
  signOutPrivacyCenter();
11713
12036
  return null;
11714
12037
  }
@@ -11738,11 +12061,13 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11738
12061
  if (newRefreshToken)
11739
12062
  setStoredValue("refresh_token", newRefreshToken);
11740
12063
  }
12064
+ resetRefreshCircuit();
11741
12065
  return newAccessToken;
11742
12066
  }
11743
12067
  }
11744
12068
  if (authContext == null ? void 0 : authContext.onError)
11745
12069
  authContext.onError(new Error("Refresh token expired or revoked"));
12070
+ markRefreshTokenDead(refreshToken);
11746
12071
  signOutPrivacyCenter();
11747
12072
  return null;
11748
12073
  } catch (error) {
@@ -11750,7 +12075,12 @@ var performTokenRefresh = async (organizationId, workspaceId, authContext, conse
11750
12075
  authContext.onError(
11751
12076
  error instanceof Error ? error : new Error(String(error))
11752
12077
  );
11753
- signOutPrivacyCenter();
12078
+ if (isTerminalRefreshError(error)) {
12079
+ markRefreshTokenDead(refreshToken);
12080
+ signOutPrivacyCenter();
12081
+ } else {
12082
+ noteTransientRefreshFailure();
12083
+ }
11754
12084
  return null;
11755
12085
  }
11756
12086
  };
@@ -11814,15 +12144,73 @@ function syncJwtDataToStore(token) {
11814
12144
  if (authData.workspaceId) setStoredValue("pc_workspace_id", authData.workspaceId);
11815
12145
  return authData;
11816
12146
  }
11817
- function AuthProvider({ children, accessToken: initialAccessToken, refreshToken: initialRefreshToken, onError }) {
11818
- const initialAuth = extractJwtAuthData(initialAccessToken);
12147
+ function configureSandbox(props) {
12148
+ var _a3, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
12149
+ const token = (_a3 = props.token) == null ? void 0 : _a3.trim();
12150
+ if (!token) {
12151
+ setSandboxConfig(null);
12152
+ return null;
12153
+ }
12154
+ const organisationUuid = (_c = (_b = props.organisationUuid) == null ? void 0 : _b.trim()) != null ? _c : "";
12155
+ const workspaceUuid = (_e = (_d = props.workspaceUuid) == null ? void 0 : _d.trim()) != null ? _e : "";
12156
+ const ucic = (_g = (_f = props.sandboxUcic) == null ? void 0 : _f.trim()) != null ? _g : "";
12157
+ const subject = (_i = (_h = props.sandboxSubject) == null ? void 0 : _h.trim()) != null ? _i : "";
12158
+ const slug = (_k = (_j = props.slug) == null ? void 0 : _j.trim()) != null ? _k : "";
12159
+ if (!organisationUuid || !workspaceUuid) {
12160
+ throw new Error("Sandbox mode requires organisationUuid and workspaceUuid props");
12161
+ }
12162
+ if (!ucic && !subject) {
12163
+ throw new Error("Sandbox mode requires a UCIC, email, or mobile");
12164
+ }
12165
+ setSandboxConfig({
12166
+ token,
12167
+ ucic: ucic || void 0,
12168
+ subject,
12169
+ organisationUuid,
12170
+ workspaceUuid,
12171
+ slug
12172
+ });
12173
+ const contact = ucic || subject;
12174
+ setStoredValue("access_token", token);
12175
+ if (organisationUuid) setStoredValue("pc_org_id", organisationUuid);
12176
+ if (workspaceUuid) setStoredValue("pc_workspace_id", workspaceUuid);
12177
+ if (contact) setStoredValue("email", contact);
12178
+ return {
12179
+ email: contact || null,
12180
+ organizationId: organisationUuid || null,
12181
+ workspaceId: workspaceUuid || null,
12182
+ organizationName: null
12183
+ };
12184
+ }
12185
+ function AuthProvider(props) {
12186
+ const {
12187
+ children,
12188
+ accessToken: initialAccessToken,
12189
+ refreshToken: initialRefreshToken,
12190
+ token: sandboxToken,
12191
+ sandboxUcic,
12192
+ sandboxSubject,
12193
+ organisationUuid,
12194
+ workspaceUuid,
12195
+ slug,
12196
+ onError
12197
+ } = props;
12198
+ const [sandboxAuth] = (0, import_react3.useState)(() => configureSandbox(props));
12199
+ const sandboxActive = sandboxAuth !== null;
12200
+ const initialAuth = sandboxAuth != null ? sandboxAuth : extractJwtAuthData(initialAccessToken);
11819
12201
  const [accessToken, setAccessToken] = (0, import_react3.useState)(() => {
12202
+ if (sandboxActive) {
12203
+ return sandboxToken != null ? sandboxToken : "";
12204
+ }
11820
12205
  if (initialAccessToken && initialAccessToken.trim() !== "") {
11821
12206
  syncJwtDataToStore(initialAccessToken);
11822
12207
  }
11823
12208
  return initialAccessToken;
11824
12209
  });
11825
12210
  const [refreshToken, setRefreshToken] = (0, import_react3.useState)(() => {
12211
+ if (sandboxActive) {
12212
+ return "";
12213
+ }
11826
12214
  if (initialRefreshToken && initialRefreshToken.trim() !== "") {
11827
12215
  setStoredValue("refresh_token", initialRefreshToken);
11828
12216
  }
@@ -11833,6 +12221,20 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11833
12221
  const [workspaceId, setWorkspaceId] = (0, import_react3.useState)(initialAuth.workspaceId);
11834
12222
  const [organizationName, setOrganizationName] = (0, import_react3.useState)(initialAuth.organizationName);
11835
12223
  (0, import_react3.useEffect)(() => {
12224
+ if (!sandboxActive) {
12225
+ return;
12226
+ }
12227
+ const seeded = configureSandbox(props);
12228
+ if (seeded) {
12229
+ setEmail(seeded.email);
12230
+ setOrganizationId(seeded.organizationId);
12231
+ setWorkspaceId(seeded.workspaceId);
12232
+ setOrganizationName(seeded.organizationName);
12233
+ }
12234
+ return () => setSandboxConfig(null);
12235
+ }, [sandboxActive, sandboxToken, sandboxUcic, sandboxSubject, organisationUuid, workspaceUuid, slug]);
12236
+ (0, import_react3.useEffect)(() => {
12237
+ if (sandboxActive) return;
11836
12238
  if (accessToken) {
11837
12239
  const authData = syncJwtDataToStore(accessToken);
11838
12240
  setEmail(authData.email);
@@ -11840,11 +12242,13 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11840
12242
  setWorkspaceId(authData.workspaceId);
11841
12243
  setOrganizationName(authData.organizationName);
11842
12244
  }
11843
- }, [accessToken]);
12245
+ }, [accessToken, sandboxActive]);
11844
12246
  (0, import_react3.useEffect)(() => {
12247
+ if (sandboxActive) return;
11845
12248
  if (refreshToken) setStoredValue("refresh_token", refreshToken);
11846
- }, [refreshToken]);
12249
+ }, [refreshToken, sandboxActive]);
11847
12250
  (0, import_react3.useEffect)(() => {
12251
+ if (sandboxActive) return;
11848
12252
  setAccessToken(initialAccessToken);
11849
12253
  if (initialAccessToken && initialAccessToken.trim() !== "") {
11850
12254
  const authData = syncJwtDataToStore(initialAccessToken);
@@ -11853,10 +12257,11 @@ function AuthProvider({ children, accessToken: initialAccessToken, refreshToken:
11853
12257
  setWorkspaceId(authData.workspaceId);
11854
12258
  setOrganizationName(authData.organizationName);
11855
12259
  }
11856
- }, [initialAccessToken]);
12260
+ }, [initialAccessToken, sandboxActive]);
11857
12261
  (0, import_react3.useEffect)(() => {
12262
+ if (sandboxActive) return;
11858
12263
  setRefreshToken(initialRefreshToken);
11859
- }, [initialRefreshToken]);
12264
+ }, [initialRefreshToken, sandboxActive]);
11860
12265
  const updateTokens = (0, import_react3.useCallback)((newAccessToken, newRefreshToken) => {
11861
12266
  setAccessToken(newAccessToken);
11862
12267
  if (newRefreshToken) setRefreshToken(newRefreshToken);
@@ -12099,8 +12504,17 @@ function DataAvailabilityProvider({ children }) {
12099
12504
  mountedRef.current = false;
12100
12505
  };
12101
12506
  }, []);
12507
+ (0, import_react7.useEffect)(() => {
12508
+ setSessionExpiredListener(() => {
12509
+ if (!mountedRef.current) return;
12510
+ runIdRef.current += 1;
12511
+ setStatus("session-expired");
12512
+ });
12513
+ return () => setSessionExpiredListener(null);
12514
+ }, []);
12102
12515
  const runCheck = (0, import_react7.useCallback)(async () => {
12103
12516
  if (!organizationId || !workspaceId) return;
12517
+ if (isRefreshBlocked(authContext)) return;
12104
12518
  const runId = ++runIdRef.current;
12105
12519
  setStatus("checking");
12106
12520
  const contact = email;
@@ -14128,7 +14542,7 @@ var import_react_i18next11 = require("react-i18next");
14128
14542
 
14129
14543
  // src/RedactoPrivacyCenter/lib/consentManagerUtils.ts
14130
14544
  function purposeItemToUserConsent(purpose, group) {
14131
- var _a3, _b, _c, _d;
14545
+ var _a3, _b, _c, _d, _e;
14132
14546
  return {
14133
14547
  purpose_uuid: purpose.purpose_uuid,
14134
14548
  purpose: purpose.name,
@@ -14142,6 +14556,7 @@ function purposeItemToUserConsent(purpose, group) {
14142
14556
  product_name: group.product_name,
14143
14557
  product_description: group.product_description,
14144
14558
  nominator_info: (_d = group.nominator) != null ? _d : void 0,
14559
+ revoke_warning_message: (_e = purpose.revoke_warning_message) != null ? _e : null,
14145
14560
  notice_uuid: purpose.notice_uuid
14146
14561
  };
14147
14562
  }
@@ -14439,7 +14854,7 @@ var ModifyConsentModal = ({
14439
14854
  action: "revoke",
14440
14855
  buttonLabel: t("revokeConsent"),
14441
14856
  buttonColor: colors.error,
14442
- warningMessage: t("revokeConsentWarning"),
14857
+ warningMessage: selectedRecord.revoke_warning_message || t("revokeConsentWarning"),
14443
14858
  description: nominatorLabel ? t("aboutToModifyConsentOnBehalf", { nominator: nominatorLabel }) : t("aboutToModifyConsent")
14444
14859
  };
14445
14860
  }
@@ -18139,6 +18554,7 @@ function useUnreadCount() {
18139
18554
  const loadRef = (0, import_react32.useRef)();
18140
18555
  loadRef.current = async () => {
18141
18556
  if (!organizationId || !workspaceId) return;
18557
+ if (isRefreshBlocked(authContext)) return;
18142
18558
  const res = await fetchUnreadCount(organizationId, workspaceId, authContext, consentClient);
18143
18559
  if (res && typeof res.count === "number") setCount(res.count);
18144
18560
  };
@@ -18464,17 +18880,255 @@ function PrivacyCenterEmptyState() {
18464
18880
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PCEmpty, { iconName: "shield", title: t("noDataTitle"), description: t("noDataDescription") });
18465
18881
  }
18466
18882
 
18883
+ // src/RedactoPrivacyCenter/components/PrivacyCenterSessionExpired.tsx
18884
+ var import_react_i18next21 = require("react-i18next");
18885
+ var import_jsx_runtime50 = require("react/jsx-runtime");
18886
+ function PrivacyCenterSessionExpired() {
18887
+ const { t } = (0, import_react_i18next21.useTranslation)();
18888
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
18889
+ PCEmpty,
18890
+ {
18891
+ iconName: "shield",
18892
+ title: t("sessionExpiredTitle"),
18893
+ description: t("sessionExpiredDescription")
18894
+ }
18895
+ );
18896
+ }
18897
+
18898
+ // src/RedactoPrivacyCenter/components/SelectUserGate.tsx
18899
+ var import_react36 = require("react");
18900
+ var import_react_native51 = require("react-native");
18901
+
18902
+ // src/RedactoPrivacyCenter/context/ProfileSwitchContext.tsx
18903
+ var import_react35 = require("react");
18904
+ var import_jsx_runtime51 = require("react/jsx-runtime");
18905
+ var ProfileSwitchContext = (0, import_react35.createContext)({
18906
+ switchProfile: null
18907
+ });
18908
+ function ProfileSwitchProvider({
18909
+ switchProfile,
18910
+ children
18911
+ }) {
18912
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ProfileSwitchContext.Provider, { value: { switchProfile }, children });
18913
+ }
18914
+ function useProfileSwitch() {
18915
+ return (0, import_react35.useContext)(ProfileSwitchContext);
18916
+ }
18917
+
18918
+ // src/RedactoPrivacyCenter/components/SelectUser.tsx
18919
+ var import_react_native50 = require("react-native");
18920
+ var import_react_i18next22 = require("react-i18next");
18921
+
18922
+ // src/RedactoPrivacyCenter/lib/identityLabels.ts
18923
+ var identityPrimaryValue = (candidate) => {
18924
+ const orgUserId = candidate.org_user_id || "";
18925
+ const email = candidate.primary_email || "";
18926
+ const mobile = candidate.primary_mobile || "";
18927
+ return { orgUserId, fallback: email || mobile || candidate.uuid };
18928
+ };
18929
+ var identitySecondaryLabels = (candidate, primaryLabel) => {
18930
+ const email = candidate.primary_email || "";
18931
+ const mobile = candidate.primary_mobile || "";
18932
+ return [email, mobile].filter(
18933
+ (value, index, all) => value !== "" && value !== primaryLabel && all.indexOf(value) === index
18934
+ );
18935
+ };
18936
+ var selectableIdentities = (candidates) => candidates.filter((candidate) => Boolean(candidate.uuid));
18937
+
18938
+ // src/RedactoPrivacyCenter/components/SelectUser.tsx
18939
+ var import_jsx_runtime52 = require("react/jsx-runtime");
18940
+ var SelectUser = ({
18941
+ candidates,
18942
+ onSelect,
18943
+ busyUuid,
18944
+ error
18945
+ }) => {
18946
+ const { t } = (0, import_react_i18next22.useTranslation)();
18947
+ const { colors } = useTheme();
18948
+ const selectable = selectableIdentities(candidates);
18949
+ const busy = busyUuid !== null;
18950
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native50.ScrollView, { contentContainerStyle: styles39.container, children: [
18951
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.title, styles39.heading, { color: colors.text }], children: t("chooseYourProfile") }),
18952
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.body, styles39.subtitle, { color: colors.textSecondary }], children: t("loginIdentifierLinkedToMultipleProfiles") }),
18953
+ error ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.caption, styles39.error, { color: colors.error }], children: error }) : null,
18954
+ selectable.map((candidate) => {
18955
+ const { orgUserId, fallback } = identityPrimaryValue(candidate);
18956
+ const primaryLabel = orgUserId ? t("userIdLabel", { id: orgUserId }) : fallback;
18957
+ const secondaryLabels = identitySecondaryLabels(candidate, primaryLabel);
18958
+ const isBusy = busyUuid === candidate.uuid;
18959
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
18960
+ import_react_native50.TouchableOpacity,
18961
+ {
18962
+ accessibilityRole: "button",
18963
+ disabled: busy,
18964
+ onPress: () => onSelect(candidate.uuid),
18965
+ style: [
18966
+ styles39.row,
18967
+ {
18968
+ backgroundColor: colors.surface,
18969
+ borderColor: isBusy ? colors.primary : colors.border
18970
+ }
18971
+ ],
18972
+ children: [
18973
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native50.View, { style: styles39.rowText, children: [
18974
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.label, { color: colors.text }], children: primaryLabel }),
18975
+ secondaryLabels.map((label) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
18976
+ import_react_native50.Text,
18977
+ {
18978
+ style: [typography.caption, styles39.secondary, { color: colors.textSecondary }],
18979
+ children: label
18980
+ },
18981
+ label
18982
+ ))
18983
+ ] }),
18984
+ isBusy ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native50.Text, { style: [typography.caption, { color: colors.textSecondary }], children: t("signingInEllipsis") }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary })
18985
+ ]
18986
+ },
18987
+ candidate.uuid
18988
+ );
18989
+ })
18990
+ ] });
18991
+ };
18992
+ var styles39 = import_react_native50.StyleSheet.create({
18993
+ container: { padding: spacing.lg },
18994
+ heading: { textAlign: "center" },
18995
+ subtitle: { textAlign: "center", marginTop: spacing.xs, marginBottom: spacing.lg },
18996
+ error: { textAlign: "center", marginBottom: spacing.md },
18997
+ row: {
18998
+ flexDirection: "row",
18999
+ alignItems: "center",
19000
+ borderWidth: 1,
19001
+ borderRadius: radii.md,
19002
+ padding: spacing.md,
19003
+ marginBottom: spacing.sm
19004
+ },
19005
+ rowText: { flex: 1 },
19006
+ secondary: { marginTop: 2 }
19007
+ });
19008
+
19009
+ // src/RedactoPrivacyCenter/components/SelectUserGate.tsx
19010
+ var import_jsx_runtime53 = require("react/jsx-runtime");
19011
+ function SelectUserGate({ children }) {
19012
+ var _a3, _b;
19013
+ const { accessToken, organizationId, workspaceId, updateTokens } = useAuth();
19014
+ const { consentClient } = useBaseUrl();
19015
+ const { colors } = useTheme();
19016
+ const insets = useSafeInsets();
19017
+ const [phase, setPhase] = (0, import_react36.useState)("checking");
19018
+ const [candidates, setCandidates] = (0, import_react36.useState)([]);
19019
+ const [busyUuid, setBusyUuid] = (0, import_react36.useState)(null);
19020
+ const [selectError, setSelectError] = (0, import_react36.useState)(null);
19021
+ const [pinnedOrgUserId, setPinnedOrgUserId] = (0, import_react36.useState)(null);
19022
+ const tokenOrgUserId = ((_b = (_a3 = decodeJwtToken(accessToken)) == null ? void 0 : _a3.user_data) == null ? void 0 : _b.org_user_id) || "";
19023
+ (0, import_react36.useEffect)(() => {
19024
+ let cancelled = false;
19025
+ if (isSandboxMode() || !organizationId || !workspaceId || !accessToken) {
19026
+ setPhase("resolved");
19027
+ return;
19028
+ }
19029
+ const isPinned = Boolean(pinnedOrgUserId) && pinnedOrgUserId === tokenOrgUserId;
19030
+ setPhase(isPinned ? "resolved" : "checking");
19031
+ (async () => {
19032
+ var _a4;
19033
+ try {
19034
+ const res = await consentClient.listIdentities({
19035
+ organisationUuid: organizationId,
19036
+ workspaceUuid: workspaceId,
19037
+ authToken: accessToken
19038
+ });
19039
+ if (cancelled) return;
19040
+ const list = (_a4 = res == null ? void 0 : res.identities) != null ? _a4 : [];
19041
+ setCandidates(list);
19042
+ setPhase(list.length > 1 && !isPinned ? "picking" : "resolved");
19043
+ } catch {
19044
+ if (cancelled) return;
19045
+ setCandidates([]);
19046
+ setPhase("resolved");
19047
+ }
19048
+ })();
19049
+ return () => {
19050
+ cancelled = true;
19051
+ };
19052
+ }, [organizationId, workspaceId, tokenOrgUserId]);
19053
+ const handleSelect = (0, import_react36.useCallback)(
19054
+ async (principalUuid) => {
19055
+ var _a4, _b2;
19056
+ if (!principalUuid || busyUuid || !organizationId || !workspaceId) return;
19057
+ setBusyUuid(principalUuid);
19058
+ setSelectError(null);
19059
+ try {
19060
+ const res = await consentClient.selectPrincipal(
19061
+ {
19062
+ organisationUuid: organizationId,
19063
+ workspaceUuid: workspaceId,
19064
+ authToken: accessToken
19065
+ },
19066
+ principalUuid
19067
+ );
19068
+ if (!(res == null ? void 0 : res.token) || !(res == null ? void 0 : res.refresh_token)) {
19069
+ throw new Error("select-principal returned no tokens");
19070
+ }
19071
+ const pinned = ((_b2 = (_a4 = decodeJwtToken(res.token)) == null ? void 0 : _a4.user_data) == null ? void 0 : _b2.org_user_id) || null;
19072
+ setPinnedOrgUserId(pinned);
19073
+ setPhase("resolved");
19074
+ updateTokens(res.token, res.refresh_token);
19075
+ } catch (error) {
19076
+ setSelectError(
19077
+ error instanceof Error ? error.message : "Failed to switch profile"
19078
+ );
19079
+ } finally {
19080
+ setBusyUuid(null);
19081
+ }
19082
+ },
19083
+ [accessToken, busyUuid, consentClient, organizationId, workspaceId, updateTokens]
19084
+ );
19085
+ const canSwitch = candidates.length > 1;
19086
+ const switchProfile = (0, import_react36.useCallback)(() => {
19087
+ if (!canSwitch) return;
19088
+ setSelectError(null);
19089
+ setPhase("picking");
19090
+ }, [canSwitch]);
19091
+ if (phase === "checking" || phase === "picking") {
19092
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
19093
+ import_react_native51.View,
19094
+ {
19095
+ style: [
19096
+ styles40.screen,
19097
+ {
19098
+ backgroundColor: colors.canvasSubtle,
19099
+ paddingTop: insets.top,
19100
+ paddingBottom: insets.bottom
19101
+ }
19102
+ ],
19103
+ children: phase === "checking" ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PCLoader, {}) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
19104
+ SelectUser,
19105
+ {
19106
+ candidates,
19107
+ onSelect: handleSelect,
19108
+ busyUuid,
19109
+ error: selectError
19110
+ }
19111
+ )
19112
+ }
19113
+ );
19114
+ }
19115
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ProfileSwitchProvider, { switchProfile: canSwitch ? switchProfile : null, children });
19116
+ }
19117
+ var styles40 = import_react_native51.StyleSheet.create({
19118
+ screen: { flex: 1 }
19119
+ });
19120
+
18467
19121
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
18468
- var import_react39 = require("react");
18469
- var import_react_native57 = require("react-native");
18470
- var import_react_i18next26 = require("react-i18next");
19122
+ var import_react41 = require("react");
19123
+ var import_react_native59 = require("react-native");
19124
+ var import_react_i18next28 = require("react-i18next");
18471
19125
 
18472
19126
  // src/RedactoPrivacyCenter/components/CaseDetails/RequestDetailsTab.tsx
18473
- var import_react_native50 = require("react-native");
18474
- var import_react_i18next21 = require("react-i18next");
18475
- var import_jsx_runtime50 = require("react/jsx-runtime");
19127
+ var import_react_native52 = require("react-native");
19128
+ var import_react_i18next23 = require("react-i18next");
19129
+ var import_jsx_runtime54 = require("react/jsx-runtime");
18476
19130
  function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18477
- const { t } = (0, import_react_i18next21.useTranslation)();
19131
+ const { t } = (0, import_react_i18next23.useTranslation)();
18478
19132
  const { colors } = useTheme();
18479
19133
  const { listBottom } = usePrivacyCenterInsets({ hasFooter: true });
18480
19134
  const details = selectedCase.request_details;
@@ -18506,36 +19160,36 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18506
19160
  }
18507
19161
  const description = selectedCase.description_display || selectedCase.description;
18508
19162
  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);
18509
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.ScrollView, { style: [styles39.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles39.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
18510
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: styles39.timeline, children: steps.map((step, i) => {
19163
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.ScrollView, { style: [styles41.container, { backgroundColor: colors.canvasSubtle }], contentContainerStyle: [styles41.content, { flexGrow: 1, paddingBottom: listBottom }], showsVerticalScrollIndicator: false, children: [
19164
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.timeline, children: steps.map((step, i) => {
18511
19165
  const isLast = i === steps.length - 1;
18512
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.stepRow, children: [
18513
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.gutter, children: [
18514
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
18515
- import_react_native50.View,
19166
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.stepRow, children: [
19167
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.gutter, children: [
19168
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
19169
+ import_react_native52.View,
18516
19170
  {
18517
19171
  style: [
18518
- styles39.dot,
19172
+ styles41.dot,
18519
19173
  step.state === "upcoming" ? { backgroundColor: colors.canvasSubtle, borderWidth: 2, borderColor: step.danger ? colors.error : colors.border } : { backgroundColor: step.color }
18520
19174
  ],
18521
- children: step.state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon, { name: "check", size: 11, color: colors.primaryText, strokeWidth: 3 }) : step.state === "current" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: [styles39.dotInner, { backgroundColor: colors.primaryText }] }) : null
19175
+ children: step.state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon, { name: "check", size: 11, color: colors.primaryText, strokeWidth: 3 }) : step.state === "current" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: [styles41.dotInner, { backgroundColor: colors.primaryText }] }) : null
18522
19176
  }
18523
19177
  ),
18524
- !isLast ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: [styles39.connector, { backgroundColor: colors.border }] }) : null
19178
+ !isLast ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: [styles41.connector, { backgroundColor: colors.border }] }) : null
18525
19179
  ] }),
18526
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: [styles39.stepContent, isLast && styles39.stepContentLast], children: [
18527
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
18528
- step.date ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.stepDate, { color: step.danger ? colors.error : colors.textSecondary }], children: step.date }) : null
19180
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.stepContent, isLast && styles41.stepContentLast], children: [
19181
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.stepLabel, { color: step.danger ? colors.error : colors.text }], children: step.label }),
19182
+ step.date ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.stepDate, { color: step.danger ? colors.error : colors.textSecondary }], children: step.date }) : null
18529
19183
  ] })
18530
19184
  ] }, `${step.label}-${i}`);
18531
19185
  }) }),
18532
- hasDetails ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: [styles39.card, elevation.card, { backgroundColor: colors.surface }], children: [
18533
- description ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.block, children: [
18534
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
18535
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.descriptionText, { color: colors.text }], children: description })
19186
+ hasDetails ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.card, elevation.card, { backgroundColor: colors.surface }], children: [
19187
+ description ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
19188
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("descriptionLabel") || "Description" }),
19189
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.descriptionText, { color: colors.text }], children: description })
18536
19190
  ] }) : null,
18537
- (details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.block, children: [
18538
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("purposesInvolved") || t("purposes") || "Purposes" }),
19191
+ (details == null ? void 0 : details.purposes) && details.purposes.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
19192
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("purposesInvolved") || t("purposes") || "Purposes" }),
18539
19193
  details.purposes.map((rawP, idx) => {
18540
19194
  const p = (rawP == null ? void 0 : rawP.purpose) ? rawP.purpose : rawP;
18541
19195
  const purposeId = (p == null ? void 0 : p.uuid) || (p == null ? void 0 : p.purpose_uuid) || (rawP == null ? void 0 : rawP.purpose_uuid) || idx;
@@ -18543,10 +19197,10 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18543
19197
  const purposeDescription = (p == null ? void 0 : p.description) || (rawP == null ? void 0 : rawP.description);
18544
19198
  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)) : [];
18545
19199
  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 : [];
18546
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native50.StyleSheet.hairlineWidth }], children: [
18547
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.itemTitle, { color: colors.text }], children: purposeName }),
18548
- purposeDescription ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
18549
- dataElements.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: styles39.chipRow, children: dataElements.map((de) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PCBadge, { status: "info", label: de.name }, de.uuid)) }) : dataElementUuids.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.Text, { style: [styles39.itemDesc, { color: colors.textSecondary }], children: [
19200
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native52.StyleSheet.hairlineWidth }], children: [
19201
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemTitle, { color: colors.text }], children: purposeName }),
19202
+ purposeDescription ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemDesc, { color: colors.textSecondary }], numberOfLines: 3, children: purposeDescription }) : null,
19203
+ dataElements.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.chipRow, children: dataElements.map((de) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PCBadge, { status: "info", label: de.name }, de.uuid)) }) : dataElementUuids.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.Text, { style: [styles41.itemDesc, { color: colors.textSecondary }], children: [
18550
19204
  dataElementUuids.length,
18551
19205
  " ",
18552
19206
  t("dataElements") || "data elements"
@@ -18554,44 +19208,44 @@ function RequestDetailsTab({ selectedCase, requestTypeLabel }) {
18554
19208
  ] }, purposeId);
18555
19209
  })
18556
19210
  ] }) : null,
18557
- (details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.block, children: [
18558
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
18559
- details.correction_data.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: [styles39.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native50.StyleSheet.hairlineWidth }], children: [
18560
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.itemTitle, { color: colors.text }], children: item.name }),
18561
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.correctionValues, children: [
18562
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.correctionValue, children: [
18563
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
18564
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.correctionText, { color: colors.text }], children: item.curr_value || "-" })
19211
+ (details == null ? void 0 : details.correction_data) && details.correction_data.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
19212
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("correctionData") || "Correction" }),
19213
+ details.correction_data.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: [styles41.itemRow, idx > 0 && { borderTopColor: colors.hairline, borderTopWidth: import_react_native52.StyleSheet.hairlineWidth }], children: [
19214
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.itemTitle, { color: colors.text }], children: item.name }),
19215
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValues, children: [
19216
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValue, children: [
19217
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("currentValue") || "Current" }),
19218
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionText, { color: colors.text }], children: item.curr_value || "-" })
18565
19219
  ] }),
18566
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
18567
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.correctionValue, children: [
18568
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
18569
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.correctionText, { color: colors.primary }], children: item.new_value || "-" })
19220
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon, { name: "chevron-right", size: 16, color: colors.textSecondary, strokeWidth: 2.2 }),
19221
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.correctionValue, children: [
19222
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionLabel, { color: colors.textSecondary }], children: t("newValue") || "New" }),
19223
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.correctionText, { color: colors.primary }], children: item.new_value || "-" })
18570
19224
  ] })
18571
19225
  ] })
18572
19226
  ] }, idx))
18573
19227
  ] }) : null,
18574
- (details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.block, children: [
18575
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
18576
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: styles39.chipRow, children: details.grievance_types.map((g, idx) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(PCBadge, { status: "warning", label: (g.grievance || "").replace(/_/g, " ") }, idx)) })
19228
+ (details == null ? void 0 : details.grievance_types) && details.grievance_types.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
19229
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("grievanceTypes") || "Grievance" }),
19230
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: styles41.chipRow, children: details.grievance_types.map((g, idx) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PCBadge, { status: "warning", label: (g.grievance || "").replace(/_/g, " ") }, idx)) })
18577
19231
  ] }) : null,
18578
- (details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.block, children: [
18579
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
18580
- details.nomination_data.nominee_email ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.kvRow, children: [
18581
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
18582
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.kvValue, { color: colors.text }], children: details.nomination_data.nominee_email })
19232
+ (details == null ? void 0 : details.nomination_data) ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.block, children: [
19233
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.blockLabel, { color: colors.textSecondary }], children: t("nominationData") || "Nomination" }),
19234
+ details.nomination_data.nominee_email ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.kvRow, children: [
19235
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("email") || "Email" }),
19236
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_email })
18583
19237
  ] }) : null,
18584
- details.nomination_data.nominee_mobile ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native50.View, { style: styles39.kvRow, children: [
18585
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
18586
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.Text, { style: [styles39.kvValue, { color: colors.text }], children: details.nomination_data.nominee_mobile })
19238
+ details.nomination_data.nominee_mobile ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native52.View, { style: styles41.kvRow, children: [
19239
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvLabel, { color: colors.textSecondary }], children: t("mobile") || "Mobile" }),
19240
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.Text, { style: [styles41.kvValue, { color: colors.text }], children: details.nomination_data.nominee_mobile })
18587
19241
  ] }) : null
18588
19242
  ] }) : null
18589
19243
  ] }) : null,
18590
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native50.View, { style: { marginTop: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Footer, {}) })
19244
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native52.View, { style: { marginTop: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Footer, {}) })
18591
19245
  ] });
18592
19246
  }
18593
19247
  var DOT = 22;
18594
- var styles39 = import_react_native50.StyleSheet.create({
19248
+ var styles41 = import_react_native52.StyleSheet.create({
18595
19249
  container: {
18596
19250
  flex: 1
18597
19251
  },
@@ -18712,51 +19366,51 @@ var styles39 = import_react_native50.StyleSheet.create({
18712
19366
  });
18713
19367
 
18714
19368
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
18715
- var import_react38 = require("react");
18716
- var import_react_native56 = require("react-native");
18717
- var import_react_i18next25 = require("react-i18next");
19369
+ var import_react40 = require("react");
19370
+ var import_react_native58 = require("react-native");
19371
+ var import_react_i18next27 = require("react-i18next");
18718
19372
 
18719
19373
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
18720
- var import_react36 = __toESM(require("react"));
18721
- var import_react_i18next23 = require("react-i18next");
19374
+ var import_react38 = __toESM(require("react"));
19375
+ var import_react_i18next25 = require("react-i18next");
18722
19376
 
18723
19377
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18724
- var import_react35 = __toESM(require("react"));
18725
- var import_react_native52 = require("react-native");
19378
+ var import_react37 = __toESM(require("react"));
19379
+ var import_react_native54 = require("react-native");
18726
19380
 
18727
19381
  // src/RedactoPrivacyCenter/components/CaseDetails/AttachmentCard.tsx
18728
- var import_react_native51 = require("react-native");
18729
- var import_jsx_runtime51 = require("react/jsx-runtime");
19382
+ var import_react_native53 = require("react-native");
19383
+ var import_jsx_runtime55 = require("react/jsx-runtime");
18730
19384
  function AttachmentCard({ doc }) {
18731
19385
  const { colors } = useTheme();
18732
19386
  const downloadUrl = getDownloadUrl(doc.file_url);
18733
19387
  const handlePress = () => {
18734
19388
  if (downloadUrl) {
18735
- import_react_native51.Linking.openURL(downloadUrl);
19389
+ import_react_native53.Linking.openURL(downloadUrl);
18736
19390
  }
18737
19391
  };
18738
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
18739
- import_react_native51.TouchableOpacity,
19392
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
19393
+ import_react_native53.TouchableOpacity,
18740
19394
  {
18741
- style: [styles40.container, { backgroundColor: colors.surface, borderColor: colors.border }],
19395
+ style: [styles42.container, { backgroundColor: colors.surface, borderColor: colors.border }],
18742
19396
  onPress: handlePress,
18743
19397
  disabled: !downloadUrl,
18744
19398
  activeOpacity: 0.7,
18745
19399
  children: [
18746
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
18747
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native51.View, { style: styles40.info, children: [
18748
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native51.Text, { style: [styles40.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
18749
- doc.file_size ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native51.Text, { style: [styles40.fileSize, { color: colors.textSecondary }], children: formatFileSize(doc.file_size) }) : null
19400
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: "file-text", size: 18, color: colors.textSecondary }),
19401
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react_native53.View, { style: styles42.info, children: [
19402
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native53.Text, { style: [styles42.fileName, { color: colors.text }], numberOfLines: 1, children: doc.file_name || "Document" }),
19403
+ doc.file_size ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native53.Text, { style: [styles42.fileSize, { color: colors.textSecondary }], children: formatFileSize(doc.file_size) }) : null
18750
19404
  ] })
18751
19405
  ]
18752
19406
  }
18753
19407
  );
18754
19408
  }
18755
- var styles40 = import_react_native51.StyleSheet.create({
19409
+ var styles42 = import_react_native53.StyleSheet.create({
18756
19410
  container: {
18757
19411
  flexDirection: "row",
18758
19412
  alignItems: "center",
18759
- borderWidth: import_react_native51.StyleSheet.hairlineWidth,
19413
+ borderWidth: import_react_native53.StyleSheet.hairlineWidth,
18760
19414
  borderRadius: radii.md,
18761
19415
  paddingHorizontal: spacing.sm + 2,
18762
19416
  paddingVertical: spacing.sm,
@@ -18776,11 +19430,11 @@ var styles40 = import_react_native51.StyleSheet.create({
18776
19430
  });
18777
19431
 
18778
19432
  // src/RedactoPrivacyCenter/components/CaseDetails/ChatBubble.tsx
18779
- var import_jsx_runtime52 = require("react/jsx-runtime");
19433
+ var import_jsx_runtime56 = require("react/jsx-runtime");
18780
19434
  var AVATAR_SIZE = 28;
18781
19435
  var AVATAR_GUTTER = 36;
18782
19436
  function TeamAvatar({ tint }) {
18783
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native52.View, { style: [styles41.avatar, { backgroundColor: withAlpha(tint, 0.13) }], children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon, { name: "shield-check", size: 15, color: tint, strokeWidth: 2 }) });
19437
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: [styles43.avatar, { backgroundColor: withAlpha(tint, 0.13) }], children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "shield-check", size: 15, color: tint, strokeWidth: 2 }) });
18784
19438
  }
18785
19439
  function ChatBubbleImpl({
18786
19440
  message,
@@ -18807,28 +19461,28 @@ function ChatBubbleImpl({
18807
19461
  borderBottomRightRadius: BUBBLE_RADIUS,
18808
19462
  borderBottomLeftRadius: tailRadius
18809
19463
  };
18810
- const bubble = /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native52.View, { style: [styles41.bubble, bubbleStyle], children: [
18811
- !isPrincipal && isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native52.Text, { style: [styles41.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
18812
- message.body ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native52.Text, { style: [styles41.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
18813
- message.documents && message.documents.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native52.View, { style: styles41.attachments, children: message.documents.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(AttachmentCard, { doc }, doc.uuid)) }) : null
19464
+ const bubble = /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native54.View, { style: [styles43.bubble, bubbleStyle], children: [
19465
+ !isPrincipal && isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.Text, { style: [styles43.bubbleSender, { color: colors.primary }], numberOfLines: 1, children: senderLabel }) : null,
19466
+ message.body ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.Text, { style: [styles43.body, { color: isPrincipal ? colors.primaryText : colors.text }], children: message.body }) : null,
19467
+ message.documents && message.documents.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: styles43.attachments, children: message.documents.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AttachmentCard, { doc }, doc.uuid)) }) : null
18814
19468
  ] });
18815
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
18816
- import_react_native52.View,
19469
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
19470
+ import_react_native54.View,
18817
19471
  {
18818
19472
  style: [
18819
- styles41.row,
18820
- isPrincipal ? styles41.rowRight : styles41.rowLeft,
19473
+ styles43.row,
19474
+ isPrincipal ? styles43.rowRight : styles43.rowLeft,
18821
19475
  { marginTop: isFirstInGroup ? spacing.md : 2 }
18822
19476
  ],
18823
19477
  children: [
18824
- !isPrincipal ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native52.View, { style: styles41.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(TeamAvatar, { tint: colors.primary }) : null }) : null,
18825
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_native52.View, { style: [styles41.column, isPrincipal ? styles41.columnRight : styles41.columnLeft], children: [
19478
+ !isPrincipal ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native54.View, { style: styles43.avatarSlot, children: isFirstInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TeamAvatar, { tint: colors.primary }) : null }) : null,
19479
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native54.View, { style: [styles43.column, isPrincipal ? styles43.columnRight : styles43.columnLeft], children: [
18826
19480
  bubble,
18827
- isLastInGroup ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
18828
- import_react_native52.Text,
19481
+ isLastInGroup ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
19482
+ import_react_native54.Text,
18829
19483
  {
18830
19484
  style: [
18831
- styles41.timestamp,
19485
+ styles43.timestamp,
18832
19486
  { color: colors.textSecondary, textAlign: isPrincipal ? "right" : "left" }
18833
19487
  ],
18834
19488
  children: formatMessageTime(timestamp)
@@ -18839,8 +19493,8 @@ function ChatBubbleImpl({
18839
19493
  }
18840
19494
  );
18841
19495
  }
18842
- var ChatBubble = import_react35.default.memo(ChatBubbleImpl);
18843
- var styles41 = import_react_native52.StyleSheet.create({
19496
+ var ChatBubble = import_react37.default.memo(ChatBubbleImpl);
19497
+ var styles43 = import_react_native54.StyleSheet.create({
18844
19498
  row: {
18845
19499
  flexDirection: "row",
18846
19500
  paddingHorizontal: spacing.md,
@@ -18900,9 +19554,9 @@ var styles41 = import_react_native52.StyleSheet.create({
18900
19554
  });
18901
19555
 
18902
19556
  // src/RedactoPrivacyCenter/components/CaseDetails/DocumentRequestCard.tsx
18903
- var import_react_native53 = require("react-native");
18904
- var import_react_i18next22 = require("react-i18next");
18905
- var import_jsx_runtime53 = require("react/jsx-runtime");
19557
+ var import_react_native55 = require("react-native");
19558
+ var import_react_i18next24 = require("react-i18next");
19559
+ var import_jsx_runtime57 = require("react/jsx-runtime");
18906
19560
  var STATUS_BADGE_MAP = {
18907
19561
  pending: "warning",
18908
19562
  under_review: "info",
@@ -18922,20 +19576,20 @@ function humanize(value) {
18922
19576
  }
18923
19577
  function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized = false }) {
18924
19578
  var _a3;
18925
- const { t } = (0, import_react_i18next22.useTranslation)();
19579
+ const { t } = (0, import_react_i18next24.useTranslation)();
18926
19580
  const { colors } = useTheme();
18927
19581
  const meta = message.document_request_metadata;
18928
19582
  if (!meta) return null;
18929
19583
  const status = meta.document_request_status;
18930
19584
  const canUpload = (status === "pending" || status === "replacement_requested") && !isCaseFinalized;
18931
19585
  const requestEventUuid = meta.document_request_uuid;
18932
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native53.View, { style: [styles42.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
18933
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native53.View, { style: styles42.header, children: [
18934
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native53.View, { style: styles42.titleRow, children: [
18935
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
18936
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native53.Text, { style: [styles42.title, { color: colors.text }], children: meta.title || t("documentRequestedLabel") || "Document Requested" })
19586
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: [styles44.container, { borderColor: colors.border, backgroundColor: colors.surface }], children: [
19587
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: styles44.header, children: [
19588
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: styles44.titleRow, children: [
19589
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Icon, { name: "file-check", size: 16, color: colors.primary, strokeWidth: 2 }),
19590
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.title, { color: colors.text }], children: meta.title || t("documentRequestedLabel") || "Document Requested" })
18937
19591
  ] }),
18938
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
19592
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
18939
19593
  PCBadge,
18940
19594
  {
18941
19595
  status: STATUS_BADGE_MAP[status] || "info",
@@ -18943,30 +19597,30 @@ function DocumentRequestCard({ message, onUpload, isSubmitting, isCaseFinalized
18943
19597
  }
18944
19598
  )
18945
19599
  ] }),
18946
- meta.accepted_document ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native53.Text, { style: [styles42.accepted, { color: colors.textSecondary }], children: t("acceptedLabel", {
19600
+ meta.accepted_document ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.accepted, { color: colors.textSecondary }], children: t("acceptedLabel", {
18947
19601
  accepted: meta.accepted_document,
18948
19602
  defaultValue: `Accepted: ${meta.accepted_document}`
18949
19603
  }) }) : null,
18950
- meta.rejection_reason ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native53.View, { style: [styles42.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
18951
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native53.Text, { style: [styles42.rejectionLabel, { color: colors.error }], children: [
19604
+ meta.rejection_reason ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.View, { style: [styles44.rejectionBox, { backgroundColor: colors.errorSoft }], children: [
19605
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native55.Text, { style: [styles44.rejectionLabel, { color: colors.error }], children: [
18952
19606
  t("rejectionReasonLabel") || "Rejection reason",
18953
19607
  ":"
18954
19608
  ] }),
18955
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native53.Text, { style: [styles42.rejectionText, { color: colors.error }], children: meta.rejection_reason })
19609
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.rejectionText, { color: colors.error }], children: meta.rejection_reason })
18956
19610
  ] }) : null,
18957
- canUpload && requestEventUuid ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
18958
- import_react_native53.TouchableOpacity,
19611
+ canUpload && requestEventUuid ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
19612
+ import_react_native55.TouchableOpacity,
18959
19613
  {
18960
- style: [styles42.uploadButton, { backgroundColor: colors.primary }],
19614
+ style: [styles44.uploadButton, { backgroundColor: colors.primary }],
18961
19615
  onPress: () => onUpload(requestEventUuid),
18962
19616
  disabled: isSubmitting,
18963
19617
  activeOpacity: 0.7,
18964
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native53.Text, { style: [styles42.uploadButtonText, { color: colors.primaryText }], children: isSubmitting ? t("loading") || "Loading..." : t("uploadAndSubmit") || "Upload & Submit" })
19618
+ children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native55.Text, { style: [styles44.uploadButtonText, { color: colors.primaryText }], children: isSubmitting ? t("loading") || "Loading..." : t("uploadAndSubmit") || "Upload & Submit" })
18965
19619
  }
18966
19620
  ) : null
18967
19621
  ] });
18968
19622
  }
18969
- var styles42 = import_react_native53.StyleSheet.create({
19623
+ var styles44 = import_react_native55.StyleSheet.create({
18970
19624
  container: {
18971
19625
  borderWidth: 1.5,
18972
19626
  borderStyle: "dashed",
@@ -19019,20 +19673,20 @@ var styles42 = import_react_native53.StyleSheet.create({
19019
19673
  });
19020
19674
 
19021
19675
  // src/RedactoPrivacyCenter/components/CaseDetails/StatusEvent.tsx
19022
- var import_react_native54 = require("react-native");
19023
- var import_jsx_runtime54 = require("react/jsx-runtime");
19676
+ var import_react_native56 = require("react-native");
19677
+ var import_jsx_runtime58 = require("react/jsx-runtime");
19024
19678
  function StatusEvent({ icon, color, bgColor, borderColor, text, subText, timestamp }) {
19025
19679
  const { colors } = useTheme();
19026
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native54.View, { style: [styles43.container, { backgroundColor: bgColor }], children: [
19027
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native54.View, { style: [styles43.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
19028
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native54.View, { style: styles43.textContainer, children: [
19029
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native54.Text, { style: [styles43.text, { color }], children: text }),
19030
- subText ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native54.Text, { style: [styles43.subText, { color: colors.textSecondary }], numberOfLines: 2, children: subText }) : null
19680
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native56.View, { style: [styles45.container, { backgroundColor: bgColor }], children: [
19681
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.View, { style: [styles45.iconBubble, { backgroundColor: `${color}1F` }], children: icon }),
19682
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native56.View, { style: styles45.textContainer, children: [
19683
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.text, { color }], children: text }),
19684
+ subText ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.subText, { color: colors.textSecondary }], numberOfLines: 2, children: subText }) : null
19031
19685
  ] }),
19032
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native54.Text, { style: [styles43.timestamp, { color: colors.textSecondary }], children: formatMessageTime(timestamp) })
19686
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native56.Text, { style: [styles45.timestamp, { color: colors.textSecondary }], children: formatMessageTime(timestamp) })
19033
19687
  ] });
19034
19688
  }
19035
- var styles43 = import_react_native54.StyleSheet.create({
19689
+ var styles45 = import_react_native56.StyleSheet.create({
19036
19690
  container: {
19037
19691
  flexDirection: "row",
19038
19692
  alignItems: "center",
@@ -19071,10 +19725,10 @@ var styles43 = import_react_native54.StyleSheet.create({
19071
19725
  });
19072
19726
 
19073
19727
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageItem.tsx
19074
- var import_jsx_runtime55 = require("react/jsx-runtime");
19075
- var CheckIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
19076
- var XIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
19077
- var RefreshIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: "refresh-cw", size: 14, color, strokeWidth: 2.2 });
19728
+ var import_jsx_runtime59 = require("react/jsx-runtime");
19729
+ var CheckIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "check", size: 14, color, strokeWidth: 2.6 });
19730
+ var XIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "x", size: 14, color, strokeWidth: 2.6 });
19731
+ var RefreshIcon = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "refresh-cw", size: 14, color, strokeWidth: 2.2 });
19078
19732
  function MessageItemImpl({
19079
19733
  message,
19080
19734
  onUploadForRequest,
@@ -19084,14 +19738,14 @@ function MessageItemImpl({
19084
19738
  isLastInGroup = true
19085
19739
  }) {
19086
19740
  var _a3, _b;
19087
- const { t } = (0, import_react_i18next23.useTranslation)();
19741
+ const { t } = (0, import_react_i18next25.useTranslation)();
19088
19742
  const isPrincipal = message.sender_role === "data_principal";
19089
19743
  const senderLabel = isPrincipal ? t("senderYou") || "You" : t("senderPrivacyTeam") || "Privacy Team";
19090
19744
  switch (message.message_type) {
19091
19745
  case "message_sent":
19092
19746
  case "document_submitted":
19093
19747
  case "document_replaced":
19094
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19748
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19095
19749
  ChatBubble,
19096
19750
  {
19097
19751
  message,
@@ -19103,8 +19757,8 @@ function MessageItemImpl({
19103
19757
  }
19104
19758
  );
19105
19759
  case "document_requested":
19106
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
19107
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19760
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_jsx_runtime59.Fragment, { children: [
19761
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19108
19762
  ChatBubble,
19109
19763
  {
19110
19764
  message,
@@ -19115,7 +19769,7 @@ function MessageItemImpl({
19115
19769
  isLastInGroup
19116
19770
  }
19117
19771
  ),
19118
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19772
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19119
19773
  DocumentRequestCard,
19120
19774
  {
19121
19775
  message,
@@ -19126,10 +19780,10 @@ function MessageItemImpl({
19126
19780
  )
19127
19781
  ] });
19128
19782
  case "document_approved":
19129
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19783
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19130
19784
  StatusEvent,
19131
19785
  {
19132
- icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CheckIcon, { color: "#059669" }),
19786
+ icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CheckIcon, { color: "#059669" }),
19133
19787
  color: "#059669",
19134
19788
  bgColor: "rgba(16, 185, 129, 0.08)",
19135
19789
  borderColor: "rgba(16, 185, 129, 0.2)",
@@ -19138,10 +19792,10 @@ function MessageItemImpl({
19138
19792
  }
19139
19793
  );
19140
19794
  case "document_rejected":
19141
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19795
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19142
19796
  StatusEvent,
19143
19797
  {
19144
- icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(XIcon, { color: "#DC2626" }),
19798
+ icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(XIcon, { color: "#DC2626" }),
19145
19799
  color: "#DC2626",
19146
19800
  bgColor: "rgba(220, 38, 38, 0.08)",
19147
19801
  borderColor: "rgba(220, 38, 38, 0.2)",
@@ -19151,10 +19805,10 @@ function MessageItemImpl({
19151
19805
  }
19152
19806
  );
19153
19807
  case "document_replacement_requested":
19154
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19808
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19155
19809
  StatusEvent,
19156
19810
  {
19157
- icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(RefreshIcon, { color: "#D97706" }),
19811
+ icon: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(RefreshIcon, { color: "#D97706" }),
19158
19812
  color: "#D97706",
19159
19813
  bgColor: "rgba(245, 158, 11, 0.08)",
19160
19814
  borderColor: "rgba(245, 158, 11, 0.2)",
@@ -19164,7 +19818,7 @@ function MessageItemImpl({
19164
19818
  }
19165
19819
  );
19166
19820
  default:
19167
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
19821
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19168
19822
  ChatBubble,
19169
19823
  {
19170
19824
  message,
@@ -19177,13 +19831,13 @@ function MessageItemImpl({
19177
19831
  );
19178
19832
  }
19179
19833
  }
19180
- var MessageItem = import_react36.default.memo(MessageItemImpl);
19834
+ var MessageItem = import_react38.default.memo(MessageItemImpl);
19181
19835
 
19182
19836
  // src/RedactoPrivacyCenter/components/CaseDetails/MessageComposer.tsx
19183
- var import_react37 = require("react");
19184
- var import_react_native55 = require("react-native");
19185
- var import_react_i18next24 = require("react-i18next");
19186
- var import_jsx_runtime56 = require("react/jsx-runtime");
19837
+ var import_react39 = require("react");
19838
+ var import_react_native57 = require("react-native");
19839
+ var import_react_i18next26 = require("react-i18next");
19840
+ var import_jsx_runtime60 = require("react/jsx-runtime");
19187
19841
  function MessageComposer({
19188
19842
  messageText,
19189
19843
  onMessageTextChange,
@@ -19195,15 +19849,15 @@ function MessageComposer({
19195
19849
  isUploading,
19196
19850
  isCaseFinalized = false
19197
19851
  }) {
19198
- const { t } = (0, import_react_i18next24.useTranslation)();
19852
+ const { t } = (0, import_react_i18next26.useTranslation)();
19199
19853
  const { colors } = useTheme();
19200
19854
  const canSend = (messageText.trim().length > 0 || pendingUpload) && !isSending && !isUploading && !isCaseFinalized;
19201
- const activate = (0, import_react37.useRef)(new import_react_native55.Animated.Value(canSend ? 1 : 0)).current;
19202
- (0, import_react37.useEffect)(() => {
19203
- import_react_native55.Animated.timing(activate, {
19855
+ const activate = (0, import_react39.useRef)(new import_react_native57.Animated.Value(canSend ? 1 : 0)).current;
19856
+ (0, import_react39.useEffect)(() => {
19857
+ import_react_native57.Animated.timing(activate, {
19204
19858
  toValue: canSend ? 1 : 0,
19205
19859
  duration: 180,
19206
- easing: import_react_native55.Easing.out(import_react_native55.Easing.quad),
19860
+ easing: import_react_native57.Easing.out(import_react_native57.Easing.quad),
19207
19861
  useNativeDriver: false
19208
19862
  }).start();
19209
19863
  }, [canSend, activate]);
@@ -19211,30 +19865,30 @@ function MessageComposer({
19211
19865
  inputRange: [0, 1],
19212
19866
  outputRange: [colors.border, colors.primary]
19213
19867
  });
19214
- const pressScale = (0, import_react37.useRef)(new import_react_native55.Animated.Value(1)).current;
19868
+ const pressScale = (0, import_react39.useRef)(new import_react_native57.Animated.Value(1)).current;
19215
19869
  const handlePressIn = () => {
19216
- import_react_native55.Animated.spring(pressScale, { toValue: 0.88, useNativeDriver: true, speed: 30, bounciness: 0 }).start();
19870
+ import_react_native57.Animated.spring(pressScale, { toValue: 0.88, useNativeDriver: true, speed: 30, bounciness: 0 }).start();
19217
19871
  };
19218
19872
  const handlePressOut = () => {
19219
- import_react_native55.Animated.spring(pressScale, { toValue: 1, useNativeDriver: true, speed: 20, bounciness: 6 }).start();
19873
+ import_react_native57.Animated.spring(pressScale, { toValue: 1, useNativeDriver: true, speed: 20, bounciness: 6 }).start();
19220
19874
  };
19221
- const pillIn = (0, import_react37.useRef)(new import_react_native55.Animated.Value(0)).current;
19222
- (0, import_react37.useEffect)(() => {
19223
- import_react_native55.Animated.timing(pillIn, {
19875
+ const pillIn = (0, import_react39.useRef)(new import_react_native57.Animated.Value(0)).current;
19876
+ (0, import_react39.useEffect)(() => {
19877
+ import_react_native57.Animated.timing(pillIn, {
19224
19878
  toValue: pendingUpload ? 1 : 0,
19225
19879
  duration: 220,
19226
- easing: import_react_native55.Easing.out(import_react_native55.Easing.cubic),
19880
+ easing: import_react_native57.Easing.out(import_react_native57.Easing.cubic),
19227
19881
  useNativeDriver: true
19228
19882
  }).start();
19229
19883
  }, [pendingUpload, pillIn]);
19230
19884
  const pillOpacity = pillIn;
19231
19885
  const pillTranslateY = pillIn.interpolate({ inputRange: [0, 1], outputRange: [8, 0] });
19232
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native55.View, { style: [styles44.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
19233
- pendingUpload && /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
19234
- import_react_native55.Animated.View,
19886
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.View, { style: [styles46.container, { borderTopColor: colors.hairline, backgroundColor: colors.canvasSubtle, paddingBottom: spacing.sm }], children: [
19887
+ pendingUpload && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
19888
+ import_react_native57.Animated.View,
19235
19889
  {
19236
19890
  style: [
19237
- styles44.uploadPill,
19891
+ styles46.uploadPill,
19238
19892
  {
19239
19893
  backgroundColor: colors.primarySoft,
19240
19894
  opacity: pillOpacity,
@@ -19242,34 +19896,34 @@ function MessageComposer({
19242
19896
  }
19243
19897
  ],
19244
19898
  children: [
19245
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "file", size: 14, color: colors.primary }),
19246
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native55.Text, { style: [styles44.uploadFileName, { color: colors.primary }], numberOfLines: 1, children: [
19899
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "file", size: 14, color: colors.primary }),
19900
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.Text, { style: [styles46.uploadFileName, { color: colors.primary }], numberOfLines: 1, children: [
19247
19901
  pendingUpload.file_name,
19248
19902
  " (",
19249
19903
  formatFileSize(pendingUpload.file_size),
19250
19904
  ")"
19251
19905
  ] }),
19252
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.TouchableOpacity, { onPress: onRemovePendingUpload, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "x", size: 14, color: colors.textSecondary, strokeWidth: 2.4 }) })
19906
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.TouchableOpacity, { onPress: onRemovePendingUpload, hitSlop: { top: 8, bottom: 8, left: 8, right: 8 }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "x", size: 14, color: colors.textSecondary, strokeWidth: 2.4 }) })
19253
19907
  ]
19254
19908
  }
19255
19909
  ),
19256
- /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_react_native55.View, { style: [styles44.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles44.pillDisabled], children: [
19257
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
19258
- import_react_native55.TouchableOpacity,
19910
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native57.View, { style: [styles46.pill, { backgroundColor: colors.surface, borderColor: colors.border }, isCaseFinalized && styles46.pillDisabled], children: [
19911
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
19912
+ import_react_native57.TouchableOpacity,
19259
19913
  {
19260
- style: styles44.attachButton,
19914
+ style: styles46.attachButton,
19261
19915
  onPress: onAttachClick,
19262
19916
  disabled: isUploading || isCaseFinalized,
19263
19917
  activeOpacity: 0.6,
19264
19918
  hitSlop: DEFAULT_HIT_SLOP,
19265
19919
  accessibilityLabel: t("uploadFile") || "Attach file",
19266
- children: isUploading ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.ActivityIndicator, { size: "small", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "paperclip", size: 20, color: colors.textSecondary })
19920
+ children: isUploading ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.ActivityIndicator, { size: "small", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "paperclip", size: 20, color: colors.textSecondary })
19267
19921
  }
19268
19922
  ),
19269
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
19270
- import_react_native55.TextInput,
19923
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
19924
+ import_react_native57.TextInput,
19271
19925
  {
19272
- style: [styles44.input, { color: colors.text }],
19926
+ style: [styles46.input, { color: colors.text }],
19273
19927
  value: messageText,
19274
19928
  onChangeText: onMessageTextChange,
19275
19929
  placeholder: t("messageInputPlaceholder", { defaultValue: "Message\u2026" }),
@@ -19279,8 +19933,8 @@ function MessageComposer({
19279
19933
  editable: !isSending && !isCaseFinalized
19280
19934
  }
19281
19935
  ),
19282
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.Animated.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
19283
- import_react_native55.TouchableOpacity,
19936
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.Animated.View, { style: { transform: [{ scale: pressScale }] }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
19937
+ import_react_native57.TouchableOpacity,
19284
19938
  {
19285
19939
  onPress: onSend,
19286
19940
  onPressIn: handlePressIn,
@@ -19288,15 +19942,15 @@ function MessageComposer({
19288
19942
  disabled: !canSend,
19289
19943
  activeOpacity: 0.85,
19290
19944
  accessibilityLabel: t("send") || "Send",
19291
- children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.Animated.View, { style: [styles44.sendButton, { backgroundColor: sendBgColor }], children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.ActivityIndicator, { size: "small", color: colors.primaryText }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native55.View, { style: styles44.sendIcon, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "send", size: 18, color: canSend ? colors.primaryText : colors.textSecondary }) }) })
19945
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.Animated.View, { style: [styles46.sendButton, { backgroundColor: sendBgColor }], children: isSending ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.ActivityIndicator, { size: "small", color: colors.primaryText }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native57.View, { style: styles46.sendIcon, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "send", size: 18, color: canSend ? colors.primaryText : colors.textSecondary }) }) })
19292
19946
  }
19293
19947
  ) })
19294
19948
  ] })
19295
19949
  ] });
19296
19950
  }
19297
- var styles44 = import_react_native55.StyleSheet.create({
19951
+ var styles46 = import_react_native57.StyleSheet.create({
19298
19952
  container: {
19299
- borderTopWidth: import_react_native55.StyleSheet.hairlineWidth,
19953
+ borderTopWidth: import_react_native57.StyleSheet.hairlineWidth,
19300
19954
  paddingHorizontal: spacing.md,
19301
19955
  paddingVertical: spacing.sm
19302
19956
  },
@@ -19319,7 +19973,7 @@ var styles44 = import_react_native55.StyleSheet.create({
19319
19973
  pill: {
19320
19974
  flexDirection: "row",
19321
19975
  alignItems: "center",
19322
- borderWidth: import_react_native55.StyleSheet.hairlineWidth,
19976
+ borderWidth: import_react_native57.StyleSheet.hairlineWidth,
19323
19977
  borderRadius: radii.xxl + 4,
19324
19978
  paddingHorizontal: spacing.xs + 2,
19325
19979
  paddingVertical: spacing.xs,
@@ -19358,7 +20012,7 @@ var styles44 = import_react_native55.StyleSheet.create({
19358
20012
  });
19359
20013
 
19360
20014
  // src/RedactoPrivacyCenter/components/CaseDetails/MessagesTab.tsx
19361
- var import_jsx_runtime57 = require("react/jsx-runtime");
20015
+ var import_jsx_runtime61 = require("react/jsx-runtime");
19362
20016
  var STREAK_GAP_MS = 5 * 60 * 1e3;
19363
20017
  function isStreakBoundary(a, b) {
19364
20018
  if (!a || !b) return true;
@@ -19388,11 +20042,11 @@ function sameDay(a, b) {
19388
20042
  }
19389
20043
  var MESSAGE_POLL_INTERVAL = 3e4;
19390
20044
  function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19391
- const { t } = (0, import_react_i18next25.useTranslation)();
20045
+ const { t } = (0, import_react_i18next27.useTranslation)();
19392
20046
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19393
20047
  const { consentClient } = useBaseUrl();
19394
20048
  const { colors } = useTheme();
19395
- const authContext = (0, import_react38.useMemo)(() => ({
20049
+ const authContext = (0, import_react40.useMemo)(() => ({
19396
20050
  accessToken,
19397
20051
  refreshToken,
19398
20052
  onError,
@@ -19404,13 +20058,13 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19404
20058
  caseUuid,
19405
20059
  authContext
19406
20060
  );
19407
- const [messageText, setMessageText] = (0, import_react38.useState)("");
19408
- const [pendingUpload, setPendingUpload] = (0, import_react38.useState)(null);
19409
- const [isSending, setIsSending] = (0, import_react38.useState)(false);
19410
- const [isUploading, setIsUploading] = (0, import_react38.useState)(false);
19411
- const [isSubmittingForRequest, setIsSubmittingForRequest] = (0, import_react38.useState)(false);
19412
- const flatListRef = (0, import_react38.useRef)(null);
19413
- (0, import_react38.useEffect)(() => {
20061
+ const [messageText, setMessageText] = (0, import_react40.useState)("");
20062
+ const [pendingUpload, setPendingUpload] = (0, import_react40.useState)(null);
20063
+ const [isSending, setIsSending] = (0, import_react40.useState)(false);
20064
+ const [isUploading, setIsUploading] = (0, import_react40.useState)(false);
20065
+ const [isSubmittingForRequest, setIsSubmittingForRequest] = (0, import_react40.useState)(false);
20066
+ const flatListRef = (0, import_react40.useRef)(null);
20067
+ (0, import_react40.useEffect)(() => {
19414
20068
  if (messages && messages.length > 0) {
19415
20069
  setTimeout(() => {
19416
20070
  var _a3;
@@ -19418,16 +20072,19 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19418
20072
  }, 100);
19419
20073
  }
19420
20074
  }, [messages == null ? void 0 : messages.length]);
19421
- const refetchRef = (0, import_react38.useRef)(refetch);
20075
+ const refetchRef = (0, import_react40.useRef)(refetch);
19422
20076
  refetchRef.current = refetch;
19423
- (0, import_react38.useEffect)(() => {
20077
+ const authContextRef = (0, import_react40.useRef)(authContext);
20078
+ authContextRef.current = authContext;
20079
+ (0, import_react40.useEffect)(() => {
19424
20080
  if (isCaseFinalized) return;
19425
20081
  const id = setInterval(() => {
20082
+ if (isRefreshBlocked(authContextRef.current)) return;
19426
20083
  refetchRef.current();
19427
20084
  }, MESSAGE_POLL_INTERVAL);
19428
20085
  return () => clearInterval(id);
19429
20086
  }, [isCaseFinalized]);
19430
- const handleSend = (0, import_react38.useCallback)(async () => {
20087
+ const handleSend = (0, import_react40.useCallback)(async () => {
19431
20088
  if (isCaseFinalized) return;
19432
20089
  if (!messageText.trim() && !pendingUpload) return;
19433
20090
  if (!organizationId || !workspaceId) return;
@@ -19452,7 +20109,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19452
20109
  setIsSending(false);
19453
20110
  }
19454
20111
  }, [isCaseFinalized, messageText, pendingUpload, organizationId, workspaceId, caseUuid, authContext, consentClient, refetch]);
19455
- const handleAttach = (0, import_react38.useCallback)(async () => {
20112
+ const handleAttach = (0, import_react40.useCallback)(async () => {
19456
20113
  if (isCaseFinalized) return;
19457
20114
  if (!organizationId || !workspaceId) return;
19458
20115
  try {
@@ -19487,10 +20144,10 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19487
20144
  setIsUploading(false);
19488
20145
  }
19489
20146
  }, [isCaseFinalized, organizationId, workspaceId, caseUuid, authContext, consentClient]);
19490
- const handleUploadForRequest = (0, import_react38.useCallback)((_requestEventUuid) => {
20147
+ const handleUploadForRequest = (0, import_react40.useCallback)((_requestEventUuid) => {
19491
20148
  handleAttach();
19492
20149
  }, [handleAttach]);
19493
- const messagesList = (0, import_react38.useMemo)(() => {
20150
+ const messagesList = (0, import_react40.useMemo)(() => {
19494
20151
  const list = messages ? [...messages] : [];
19495
20152
  list.sort((a, b) => {
19496
20153
  const ta = new Date(a.created_at).getTime();
@@ -19499,17 +20156,17 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19499
20156
  });
19500
20157
  return list;
19501
20158
  }, [messages]);
19502
- const keyExtractor = (0, import_react38.useCallback)((item) => item.uuid, []);
19503
- const renderMessage = (0, import_react38.useCallback)(
20159
+ const keyExtractor = (0, import_react40.useCallback)((item) => item.uuid, []);
20160
+ const renderMessage = (0, import_react40.useCallback)(
19504
20161
  ({ item, index }) => {
19505
20162
  const prev = index > 0 ? messagesList[index - 1] : void 0;
19506
20163
  const next = index < messagesList.length - 1 ? messagesList[index + 1] : void 0;
19507
20164
  const isFirstInGroup = isStreakBoundary(prev, item);
19508
20165
  const isLastInGroup = isStreakBoundary(item, next);
19509
20166
  const dateSeparator = getDateSeparator(prev == null ? void 0 : prev.created_at, item.created_at, t);
19510
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
19511
- dateSeparator ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.View, { style: styles45.daySeparator, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.View, { style: [styles45.dayPill, { backgroundColor: colors.surfaceAlt }], children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.Text, { style: [styles45.dayPillText, { color: colors.textSecondary }], children: dateSeparator }) }) }) : null,
19512
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
20167
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
20168
+ dateSeparator ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.daySeparator, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: [styles47.dayPill, { backgroundColor: colors.surfaceAlt }], children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.dayPillText, { color: colors.textSecondary }], children: dateSeparator }) }) }) : null,
20169
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
19513
20170
  MessageItem,
19514
20171
  {
19515
20172
  message: item,
@@ -19525,32 +20182,32 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19525
20182
  [messagesList, handleUploadForRequest, isSubmittingForRequest, isCaseFinalized, colors, t]
19526
20183
  );
19527
20184
  if (isLoading) {
19528
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.View, { style: styles45.centered, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.ActivityIndicator, { size: "large", color: colors.primary }) });
20185
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.centered, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.ActivityIndicator, { size: "large", color: colors.primary }) });
19529
20186
  }
19530
20187
  if (error) {
19531
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.View, { style: styles45.centered, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.Text, { style: [styles45.errorText, { color: colors.error }], children: t("errorLoadingMessages") || "Error loading messages" }) });
20188
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: styles47.centered, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.errorText, { color: colors.error }], children: t("errorLoadingMessages") || "Error loading messages" }) });
19532
20189
  }
19533
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native56.View, { style: [styles45.container, { backgroundColor: colors.canvasSubtle }], children: [
19534
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native56.View, { style: styles45.secureRow, children: [
19535
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
19536
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.Text, { 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"}` })
20190
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: [styles47.container, { backgroundColor: colors.canvasSubtle }], children: [
20191
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: styles47.secureRow, children: [
20192
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: "lock", size: 12, color: colors.textSecondary, strokeWidth: 2.2 }),
20193
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { 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"}` })
19537
20194
  ] }),
19538
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
19539
- import_react_native56.FlatList,
20195
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
20196
+ import_react_native58.FlatList,
19540
20197
  {
19541
20198
  ref: flatListRef,
19542
- style: styles45.list,
20199
+ style: styles47.list,
19543
20200
  data: messagesList,
19544
20201
  keyExtractor,
19545
20202
  renderItem: renderMessage,
19546
20203
  contentContainerStyle: [
19547
- styles45.messagesList,
19548
- messagesList.length ? styles45.messagesListFill : styles45.messagesListCenter
20204
+ styles47.messagesList,
20205
+ messagesList.length ? styles47.messagesListFill : styles47.messagesListCenter
19549
20206
  ],
19550
- ListEmptyComponent: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native56.View, { style: styles45.emptyContainer, children: [
19551
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.View, { style: [styles45.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
19552
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.Text, { style: [styles45.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
19553
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_native56.Text, { style: [styles45.emptySubtitle, { color: colors.textSecondary }], children: t("noMessagesYetSubtitle", "Start the conversation below") })
20207
+ ListEmptyComponent: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native58.View, { style: styles47.emptyContainer, children: [
20208
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.View, { style: [styles47.emptyIconWrap, { backgroundColor: colors.primarySoft }], children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: "messages-square", size: 28, color: colors.primary, strokeWidth: 2 }) }),
20209
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.emptyTitle, { color: colors.text }], children: t("noMessagesYet") || "No messages yet" }),
20210
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native58.Text, { style: [styles47.emptySubtitle, { color: colors.textSecondary }], children: t("noMessagesYetSubtitle", "Start the conversation below") })
19554
20211
  ] }),
19555
20212
  onContentSizeChange: () => {
19556
20213
  var _a3;
@@ -19562,7 +20219,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19562
20219
  removeClippedSubviews: true
19563
20220
  }
19564
20221
  ),
19565
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
20222
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
19566
20223
  MessageComposer,
19567
20224
  {
19568
20225
  messageText,
@@ -19578,7 +20235,7 @@ function MessagesTab({ caseUuid, isCaseFinalized = false }) {
19578
20235
  )
19579
20236
  ] });
19580
20237
  }
19581
- var styles45 = import_react_native56.StyleSheet.create({
20238
+ var styles47 = import_react_native58.StyleSheet.create({
19582
20239
  container: {
19583
20240
  flex: 1
19584
20241
  },
@@ -19661,17 +20318,17 @@ var styles45 = import_react_native56.StyleSheet.create({
19661
20318
  });
19662
20319
 
19663
20320
  // src/RedactoPrivacyCenter/components/CaseDetails/CaseDetailsPage.tsx
19664
- var import_jsx_runtime58 = require("react/jsx-runtime");
20321
+ var import_jsx_runtime62 = require("react/jsx-runtime");
19665
20322
  function CaseDetailsPage() {
19666
20323
  var _a3, _b;
19667
- const { t } = (0, import_react_i18next26.useTranslation)();
20324
+ const { t } = (0, import_react_i18next28.useTranslation)();
19668
20325
  const { navigateTo, selectedCase, setSelectedCase, pendingCaseUuid } = useInternalNavigation();
19669
20326
  const { accessToken, refreshToken, email, organizationId, workspaceId, onError, updateTokens } = useAuth();
19670
20327
  const { colors } = useTheme();
19671
20328
  const { keyboardOffset } = usePrivacyCenterInsets();
19672
20329
  const requestTypeLabels = useRequestTypeLabels();
19673
- const [activeTab, setActiveTab] = (0, import_react39.useState)("request-details");
19674
- const authContext = (0, import_react39.useMemo)(() => ({
20330
+ const [activeTab, setActiveTab] = (0, import_react41.useState)("request-details");
20331
+ const authContext = (0, import_react41.useMemo)(() => ({
19675
20332
  accessToken,
19676
20333
  refreshToken,
19677
20334
  onError,
@@ -19684,7 +20341,7 @@ function CaseDetailsPage() {
19684
20341
  email != null ? email : void 0,
19685
20342
  authContext
19686
20343
  );
19687
- (0, import_react39.useEffect)(() => {
20344
+ (0, import_react41.useEffect)(() => {
19688
20345
  if (!cases) return;
19689
20346
  if (cases.length === 0) {
19690
20347
  navigateTo("form");
@@ -19698,33 +20355,33 @@ function CaseDetailsPage() {
19698
20355
  navigateTo("form");
19699
20356
  }
19700
20357
  }, [cases, targetUuid, setSelectedCase, navigateTo]);
19701
- (0, import_react39.useEffect)(() => {
20358
+ (0, import_react41.useEffect)(() => {
19702
20359
  if (!selectedCase && !targetUuid && !isLoading) {
19703
20360
  navigateTo("form");
19704
20361
  }
19705
20362
  }, [selectedCase, targetUuid, isLoading, navigateTo]);
19706
20363
  if (!selectedCase) {
19707
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.View, { style: styles46.centered, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.ActivityIndicator, { size: "large", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.Text, { style: [styles46.emptyText, { color: colors.textSecondary }], children: t("noCasesYet") || "No case selected" }) });
20364
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: styles48.centered, children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.ActivityIndicator, { size: "large", color: colors.primary }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.emptyText, { color: colors.textSecondary }], children: t("noCasesYet") || "No case selected" }) });
19708
20365
  }
19709
20366
  const requestTypeLabel = requestTypeLabels[(_b = selectedCase.request_type) == null ? void 0 : _b.toUpperCase()] || selectedCase.request_type_display || formatCaseStatus(selectedCase.request_type || "");
19710
20367
  const tabs = [
19711
20368
  { id: "request-details", label: t("requestDetails") || "Request Details" },
19712
20369
  { id: "messages", label: t("messages") || "Messages" }
19713
20370
  ];
19714
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
20371
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
19715
20372
  KeyboardAvoidingViewCompat,
19716
20373
  {
19717
- style: [styles46.container, { backgroundColor: colors.canvasSubtle }],
20374
+ style: [styles48.container, { backgroundColor: colors.canvasSubtle }],
19718
20375
  behavior: "padding",
19719
- keyboardVerticalOffset: import_react_native57.Platform.OS === "ios" ? keyboardOffset : 0,
20376
+ keyboardVerticalOffset: import_react_native59.Platform.OS === "ios" ? keyboardOffset : 0,
19720
20377
  children: [
19721
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native57.View, { style: styles46.headerWrap, children: [
19722
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.View, { style: [styles46.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native57.View, { style: styles46.heroInner, children: [
19723
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.View, { style: [styles46.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
19724
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native57.View, { style: styles46.heroBody, children: [
19725
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_native57.View, { style: styles46.heroTopRow, children: [
19726
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.View, { style: [styles46.typeChip, { backgroundColor: withAlpha(getRequestTypeColor(selectedCase.request_type, colors), 0.12) }], children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.Text, { style: [styles46.typeChipText, { color: getRequestTypeColor(selectedCase.request_type, colors) }], numberOfLines: 1, children: requestTypeLabel }) }),
19727
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
20378
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.headerWrap, children: [
20379
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.heroCard, elevation.card, { backgroundColor: colors.surface }], children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroInner, children: [
20380
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.accent, { backgroundColor: getCaseStatusColor(selectedCase.status, colors) }] }),
20381
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroBody, children: [
20382
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native59.View, { style: styles48.heroTopRow, children: [
20383
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: [styles48.typeChip, { backgroundColor: withAlpha(getRequestTypeColor(selectedCase.request_type, colors), 0.12) }], children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.typeChipText, { color: getRequestTypeColor(selectedCase.request_type, colors) }], numberOfLines: 1, children: requestTypeLabel }) }),
20384
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
19728
20385
  PCBadge,
19729
20386
  {
19730
20387
  status: getCaseStatusVariant(selectedCase.status),
@@ -19733,10 +20390,10 @@ function CaseDetailsPage() {
19733
20390
  }
19734
20391
  )
19735
20392
  ] }),
19736
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.Text, { style: [styles46.caseId, { color: colors.text }], numberOfLines: 1, children: selectedCase.case_id })
20393
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.Text, { style: [styles48.caseId, { color: colors.text }], numberOfLines: 1, children: selectedCase.case_id })
19737
20394
  ] })
19738
20395
  ] }) }),
19739
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
20396
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
19740
20397
  Segmented,
19741
20398
  {
19742
20399
  options: tabs.map((tab) => ({ value: tab.id, label: tab.label })),
@@ -19745,18 +20402,18 @@ function CaseDetailsPage() {
19745
20402
  }
19746
20403
  )
19747
20404
  ] }),
19748
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_native57.View, { style: styles46.tabContent, children: activeTab === "request-details" ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
20405
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native59.View, { style: styles48.tabContent, children: activeTab === "request-details" ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
19749
20406
  RequestDetailsTab,
19750
20407
  {
19751
20408
  selectedCase,
19752
20409
  requestTypeLabel
19753
20410
  }
19754
- ) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
20411
+ ) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(MessagesTab, { caseUuid: selectedCase.uuid, isCaseFinalized: isTerminalCaseStatus(selectedCase.status) }) })
19755
20412
  ]
19756
20413
  }
19757
20414
  );
19758
20415
  }
19759
- var styles46 = import_react_native57.StyleSheet.create({
20416
+ var styles48 = import_react_native59.StyleSheet.create({
19760
20417
  container: {
19761
20418
  flex: 1
19762
20419
  },
@@ -19821,36 +20478,36 @@ var styles46 = import_react_native57.StyleSheet.create({
19821
20478
  });
19822
20479
 
19823
20480
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
19824
- var import_react42 = require("react");
19825
- var import_react_native63 = require("react-native");
19826
- var import_react_i18next28 = require("react-i18next");
20481
+ var import_react44 = require("react");
20482
+ var import_react_native65 = require("react-native");
20483
+ var import_react_i18next30 = require("react-i18next");
19827
20484
 
19828
20485
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
19829
- var import_react_native61 = require("react-native");
19830
- var import_react_i18next27 = require("react-i18next");
20486
+ var import_react_native63 = require("react-native");
20487
+ var import_react_i18next29 = require("react-i18next");
19831
20488
 
19832
20489
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationCTAButton.tsx
19833
- var import_react_native58 = require("react-native");
19834
- var import_jsx_runtime59 = require("react/jsx-runtime");
20490
+ var import_react_native60 = require("react-native");
20491
+ var import_jsx_runtime63 = require("react/jsx-runtime");
19835
20492
  var NotificationCTAButton = ({ cta, onPress }) => {
19836
20493
  const { colors } = useTheme();
19837
20494
  const tone = cta.style === "danger" ? colors.error : colors.primary;
19838
20495
  const isPrimary = cta.style === "primary" || cta.style === "danger";
19839
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
19840
- import_react_native58.TouchableOpacity,
20496
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
20497
+ import_react_native60.TouchableOpacity,
19841
20498
  {
19842
20499
  onPress,
19843
20500
  activeOpacity: 0.7,
19844
20501
  style: [
19845
- styles47.button,
20502
+ styles49.button,
19846
20503
  isPrimary ? { backgroundColor: tone } : { backgroundColor: colors.primarySoft }
19847
20504
  ],
19848
20505
  accessibilityRole: "button",
19849
- children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_native58.Text, { style: [styles47.label, { color: isPrimary ? colors.primaryText : colors.primary }], numberOfLines: 1, children: cta.label })
20506
+ children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native60.Text, { style: [styles49.label, { color: isPrimary ? colors.primaryText : colors.primary }], numberOfLines: 1, children: cta.label })
19850
20507
  }
19851
20508
  );
19852
20509
  };
19853
- var styles47 = import_react_native58.StyleSheet.create({
20510
+ var styles49 = import_react_native60.StyleSheet.create({
19854
20511
  button: {
19855
20512
  paddingHorizontal: spacing.lg,
19856
20513
  paddingVertical: spacing.sm,
@@ -19865,8 +20522,8 @@ var styles47 = import_react_native58.StyleSheet.create({
19865
20522
  });
19866
20523
 
19867
20524
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationIcon.tsx
19868
- var import_react_native59 = require("react-native");
19869
- var import_jsx_runtime60 = require("react/jsx-runtime");
20525
+ var import_react_native61 = require("react-native");
20526
+ var import_jsx_runtime64 = require("react/jsx-runtime");
19870
20527
  var CATEGORY_ICON = {
19871
20528
  guardian: "user-round",
19872
20529
  consent: "clock",
@@ -19879,18 +20536,18 @@ var NotificationIcon = ({ notificationType, size = 40 }) => {
19879
20536
  var _a3;
19880
20537
  const category = (_a3 = TYPE_TO_ICON_CATEGORY[notificationType]) != null ? _a3 : "system";
19881
20538
  const color = ICON_COLORS[category];
19882
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
19883
- import_react_native59.View,
20539
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
20540
+ import_react_native61.View,
19884
20541
  {
19885
20542
  style: [
19886
- styles48.wrap,
20543
+ styles50.wrap,
19887
20544
  { width: size, height: size, borderRadius: radii.md, backgroundColor: withAlpha(color, 0.13) }
19888
20545
  ],
19889
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: CATEGORY_ICON[category], size: Math.round(size * 0.5), color, strokeWidth: 2 })
20546
+ children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon, { name: CATEGORY_ICON[category], size: Math.round(size * 0.5), color, strokeWidth: 2 })
19890
20547
  }
19891
20548
  );
19892
20549
  };
19893
- var styles48 = import_react_native59.StyleSheet.create({
20550
+ var styles50 = import_react_native61.StyleSheet.create({
19894
20551
  wrap: {
19895
20552
  alignItems: "center",
19896
20553
  justifyContent: "center"
@@ -19898,15 +20555,15 @@ var styles48 = import_react_native59.StyleSheet.create({
19898
20555
  });
19899
20556
 
19900
20557
  // src/RedactoPrivacyCenter/components/NotificationHub/SwipeableRow.tsx
19901
- var import_react40 = require("react");
19902
- var import_react_native60 = require("react-native");
19903
- var import_jsx_runtime61 = require("react/jsx-runtime");
20558
+ var import_react42 = require("react");
20559
+ var import_react_native62 = require("react-native");
20560
+ var import_jsx_runtime65 = require("react/jsx-runtime");
19904
20561
  var ACTION_WIDTH = 80;
19905
20562
  var CLAIM_THRESHOLD = 8;
19906
20563
  var SwipeableRow = ({ actions, background, children }) => {
19907
20564
  const { colors } = useTheme();
19908
- const translateX = (0, import_react40.useRef)(new import_react_native60.Animated.Value(0)).current;
19909
- const baseX = (0, import_react40.useRef)(0);
20565
+ const translateX = (0, import_react42.useRef)(new import_react_native62.Animated.Value(0)).current;
20566
+ const baseX = (0, import_react42.useRef)(0);
19910
20567
  const maxOpen = actions.length * ACTION_WIDTH;
19911
20568
  const toneColor2 = {
19912
20569
  primary: colors.primary,
@@ -19915,10 +20572,10 @@ var SwipeableRow = ({ actions, background, children }) => {
19915
20572
  };
19916
20573
  const settle = (to) => {
19917
20574
  baseX.current = to;
19918
- import_react_native60.Animated.spring(translateX, { toValue: to, useNativeDriver: true, bounciness: 0, speed: 18 }).start();
20575
+ import_react_native62.Animated.spring(translateX, { toValue: to, useNativeDriver: true, bounciness: 0, speed: 18 }).start();
19919
20576
  };
19920
- const panResponder = (0, import_react40.useMemo)(
19921
- () => import_react_native60.PanResponder.create({
20577
+ const panResponder = (0, import_react42.useMemo)(
20578
+ () => import_react_native62.PanResponder.create({
19922
20579
  onMoveShouldSetPanResponder: (_, g) => {
19923
20580
  const horizontal = Math.abs(g.dx) > Math.abs(g.dy) * 1.5;
19924
20581
  if (!horizontal) return false;
@@ -19939,37 +20596,37 @@ var SwipeableRow = ({ actions, background, children }) => {
19939
20596
  [maxOpen]
19940
20597
  );
19941
20598
  if (actions.length === 0) {
19942
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment, { children });
20599
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_jsx_runtime65.Fragment, { children });
19943
20600
  }
19944
20601
  const runAction = (action) => {
19945
20602
  settle(0);
19946
20603
  action.onPress();
19947
20604
  };
19948
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_react_native60.View, { style: styles49.root, children: [
19949
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native60.View, { style: styles49.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
19950
- import_react_native60.TouchableOpacity,
20605
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react_native62.View, { style: styles51.root, children: [
20606
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.View, { style: styles51.actionsLayer, pointerEvents: "box-none", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
20607
+ import_react_native62.TouchableOpacity,
19951
20608
  {
19952
- style: [styles49.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
20609
+ style: [styles51.action, { width: ACTION_WIDTH, backgroundColor: toneColor2[action.tone] }],
19953
20610
  onPress: () => runAction(action),
19954
20611
  activeOpacity: 0.85,
19955
20612
  accessibilityRole: "button",
19956
20613
  accessibilityLabel: action.label,
19957
20614
  children: [
19958
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
19959
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native60.Text, { style: [styles49.actionLabel, { color: colors.primaryText }], numberOfLines: 1, children: action.label })
20615
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon, { name: action.icon, size: 20, color: colors.primaryText, strokeWidth: 2.2 }),
20616
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.Text, { style: [styles51.actionLabel, { color: colors.primaryText }], numberOfLines: 1, children: action.label })
19960
20617
  ]
19961
20618
  },
19962
20619
  action.key
19963
20620
  )) }),
19964
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_react_native60.Animated.View, { style: [{ backgroundColor: background, transform: [{ translateX }] }], ...panResponder.panHandlers, children })
20621
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native62.Animated.View, { style: [{ backgroundColor: background, transform: [{ translateX }] }], ...panResponder.panHandlers, children })
19965
20622
  ] });
19966
20623
  };
19967
- var styles49 = import_react_native60.StyleSheet.create({
20624
+ var styles51 = import_react_native62.StyleSheet.create({
19968
20625
  root: {
19969
20626
  position: "relative"
19970
20627
  },
19971
20628
  actionsLayer: {
19972
- ...import_react_native60.StyleSheet.absoluteFillObject,
20629
+ ...import_react_native62.StyleSheet.absoluteFillObject,
19973
20630
  flexDirection: "row",
19974
20631
  justifyContent: "flex-end"
19975
20632
  },
@@ -20002,10 +20659,10 @@ var formatTimeAgo = (dateString, t) => {
20002
20659
  };
20003
20660
 
20004
20661
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationRow.tsx
20005
- var import_jsx_runtime62 = require("react/jsx-runtime");
20662
+ var import_jsx_runtime66 = require("react/jsx-runtime");
20006
20663
  var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) => {
20007
20664
  var _a3, _b;
20008
- const { t } = (0, import_react_i18next27.useTranslation)();
20665
+ const { t } = (0, import_react_i18next29.useTranslation)();
20009
20666
  const { colors } = useTheme();
20010
20667
  const isUnread = !notification.is_read;
20011
20668
  const statusLabel = notification.status_label_display || notification.status_label;
@@ -20032,35 +20689,35 @@ var NotificationRow = ({ notification, onPress, onMarkRead, onAcknowledge }) =>
20032
20689
  onPress: onAcknowledge
20033
20690
  });
20034
20691
  }
20035
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native61.TouchableOpacity, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles50.row, children: [
20036
- isUnread ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.View, { style: [styles50.accent, { backgroundColor: accent }] }) : null,
20037
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
20038
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native61.View, { style: styles50.content, children: [
20039
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native61.View, { style: styles50.titleRow, children: [
20040
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
20041
- import_react_native61.Text,
20692
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SwipeableRow, { actions, background: colors.surface, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.TouchableOpacity, { onPress, activeOpacity: 0.6, accessibilityRole: "button", style: styles52.row, children: [
20693
+ isUnread ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.accent, { backgroundColor: accent }] }) : null,
20694
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NotificationIcon, { notificationType: notification.notification_type, size: 36 }),
20695
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.content, children: [
20696
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.titleRow, children: [
20697
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
20698
+ import_react_native63.Text,
20042
20699
  {
20043
- style: [styles50.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20700
+ style: [styles52.title, { color: colors.text, fontWeight: isUnread ? "700" : "600" }],
20044
20701
  numberOfLines: 2,
20045
20702
  children: notification.title
20046
20703
  }
20047
20704
  ),
20048
- isUnread ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.View, { style: [styles50.unreadDot, { backgroundColor: colors.primary }] }) : null
20705
+ isUnread ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.unreadDot, { backgroundColor: colors.primary }] }) : null
20049
20706
  ] }),
20050
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react_native61.View, { style: styles50.metaRow, children: [
20051
- statusLabel ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
20052
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.View, { style: [styles50.statusDot, { backgroundColor: accent }] }),
20053
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.Text, { style: [styles50.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
20054
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.Text, { style: [styles50.metaDivider, { color: colors.textSecondary }], children: "\xB7" })
20707
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native63.View, { style: styles52.metaRow, children: [
20708
+ statusLabel ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
20709
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: [styles52.statusDot, { backgroundColor: accent }] }),
20710
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaText, { color: colors.textSecondary }], numberOfLines: 1, children: statusLabel }),
20711
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaDivider, { color: colors.textSecondary }], children: "\xB7" })
20055
20712
  ] }) : null,
20056
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.Text, { style: [styles50.metaText, { color: colors.textSecondary }], children: formatTimeAgo(notification.created_at, t) })
20713
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.Text, { style: [styles52.metaText, { color: colors.textSecondary }], children: formatTimeAgo(notification.created_at, t) })
20057
20714
  ] }),
20058
- showAcknowledge && ackCta ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.View, { style: styles50.ackWrap, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(NotificationCTAButton, { cta: ackCta, onPress: onAcknowledge }) }) : null
20715
+ showAcknowledge && ackCta ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: styles52.ackWrap, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NotificationCTAButton, { cta: ackCta, onPress: onAcknowledge }) }) : null
20059
20716
  ] }),
20060
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_native61.View, { style: styles50.chevron, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary }) })
20717
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native63.View, { style: styles52.chevron, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Icon, { name: "chevron-right", size: 18, color: colors.textSecondary }) })
20061
20718
  ] }) });
20062
20719
  };
20063
- var styles50 = import_react_native61.StyleSheet.create({
20720
+ var styles52 = import_react_native63.StyleSheet.create({
20064
20721
  row: {
20065
20722
  flexDirection: "row",
20066
20723
  alignItems: "center",
@@ -20123,25 +20780,25 @@ var styles50 = import_react_native61.StyleSheet.create({
20123
20780
  });
20124
20781
 
20125
20782
  // src/RedactoPrivacyCenter/components/NotificationHub/useNotificationActions.ts
20126
- var import_react41 = require("react");
20127
- var import_react_native62 = require("react-native");
20783
+ var import_react43 = require("react");
20784
+ var import_react_native64 = require("react-native");
20128
20785
  var useNotificationActions = () => {
20129
20786
  const { navigateTo, setSelectedCase } = useInternalNavigation();
20130
20787
  const { accessToken, refreshToken, onError, updateTokens, organizationId, workspaceId, email } = useAuth();
20131
20788
  const { consentClient } = useBaseUrl();
20132
20789
  const { langParam } = useCurrentLanguage();
20133
- const authContext = (0, import_react41.useMemo)(
20790
+ const authContext = (0, import_react43.useMemo)(
20134
20791
  () => ({ accessToken, refreshToken, onError, updateTokens }),
20135
20792
  [accessToken, refreshToken, onError, updateTokens]
20136
20793
  );
20137
- const hasAcknowledgeCTA = (0, import_react41.useCallback)(
20794
+ const hasAcknowledgeCTA = (0, import_react43.useCallback)(
20138
20795
  (notification) => {
20139
20796
  var _a3, _b;
20140
20797
  return (_b = (_a3 = notification.ctas) == null ? void 0 : _a3.some((cta) => cta.action_type === "acknowledge")) != null ? _b : false;
20141
20798
  },
20142
20799
  []
20143
20800
  );
20144
- const handleMarkRead = (0, import_react41.useCallback)(
20801
+ const handleMarkRead = (0, import_react43.useCallback)(
20145
20802
  async (notificationUuid) => {
20146
20803
  if (!organizationId || !workspaceId) return false;
20147
20804
  const result = await markNotificationRead(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20149,12 +20806,12 @@ var useNotificationActions = () => {
20149
20806
  },
20150
20807
  [organizationId, workspaceId, authContext, consentClient]
20151
20808
  );
20152
- const handleMarkAllRead = (0, import_react41.useCallback)(async () => {
20809
+ const handleMarkAllRead = (0, import_react43.useCallback)(async () => {
20153
20810
  if (!organizationId || !workspaceId) return false;
20154
20811
  const result = await markAllRead(organizationId, workspaceId, authContext, consentClient);
20155
20812
  return result !== null;
20156
20813
  }, [organizationId, workspaceId, authContext, consentClient]);
20157
- const handleAcknowledge = (0, import_react41.useCallback)(
20814
+ const handleAcknowledge = (0, import_react43.useCallback)(
20158
20815
  async (notificationUuid) => {
20159
20816
  if (!organizationId || !workspaceId) return false;
20160
20817
  const result = await acknowledgeNotification(organizationId, workspaceId, notificationUuid, authContext, consentClient);
@@ -20162,7 +20819,7 @@ var useNotificationActions = () => {
20162
20819
  },
20163
20820
  [organizationId, workspaceId, authContext, consentClient]
20164
20821
  );
20165
- const handleCTAClick = (0, import_react41.useCallback)(
20822
+ const handleCTAClick = (0, import_react43.useCallback)(
20166
20823
  async (notification, cta) => {
20167
20824
  var _a3;
20168
20825
  if (cta.action_type === "acknowledge") {
@@ -20196,7 +20853,7 @@ var useNotificationActions = () => {
20196
20853
  const url = cta.url;
20197
20854
  if (!/^https?:\/\//i.test(url)) return null;
20198
20855
  try {
20199
- await import_react_native62.Linking.openURL(url);
20856
+ await import_react_native64.Linking.openURL(url);
20200
20857
  return "opened";
20201
20858
  } catch {
20202
20859
  return null;
@@ -20219,7 +20876,7 @@ var useNotificationActions = () => {
20219
20876
  };
20220
20877
 
20221
20878
  // src/RedactoPrivacyCenter/components/NotificationHub/NotificationsScreen.tsx
20222
- var import_jsx_runtime63 = require("react/jsx-runtime");
20879
+ var import_jsx_runtime67 = require("react/jsx-runtime");
20223
20880
  var EMPTY_SUMMARY = { total: 0, unread: 0, action_needed: 0, acknowledged: 0 };
20224
20881
  var READ_FILTER_TO_PARAM = {
20225
20882
  all: void 0,
@@ -20227,7 +20884,7 @@ var READ_FILTER_TO_PARAM = {
20227
20884
  read: true
20228
20885
  };
20229
20886
  var NotificationsScreen = () => {
20230
- const { t } = (0, import_react_i18next28.useTranslation)();
20887
+ const { t } = (0, import_react_i18next30.useTranslation)();
20231
20888
  const { colors } = useTheme();
20232
20889
  const { langParam } = useCurrentLanguage();
20233
20890
  const { listBottom } = usePrivacyCenterInsets();
@@ -20244,15 +20901,15 @@ var NotificationsScreen = () => {
20244
20901
  handleAcknowledge,
20245
20902
  handleCTAClick
20246
20903
  } = useNotificationActions();
20247
- const [notifications, setNotifications] = (0, import_react42.useState)([]);
20248
- const [summary, setSummary] = (0, import_react42.useState)(EMPTY_SUMMARY);
20249
- const [activeTab, setActiveTab] = (0, import_react42.useState)("all");
20250
- const [readFilter, setReadFilter] = (0, import_react42.useState)("all");
20251
- const [isLoading, setIsLoading] = (0, import_react42.useState)(true);
20252
- const [isRefreshing2, setIsRefreshing] = (0, import_react42.useState)(false);
20253
- const [filterOpen, setFilterOpen] = (0, import_react42.useState)(false);
20904
+ const [notifications, setNotifications] = (0, import_react44.useState)([]);
20905
+ const [summary, setSummary] = (0, import_react44.useState)(EMPTY_SUMMARY);
20906
+ const [activeTab, setActiveTab] = (0, import_react44.useState)("all");
20907
+ const [readFilter, setReadFilter] = (0, import_react44.useState)("all");
20908
+ const [isLoading, setIsLoading] = (0, import_react44.useState)(true);
20909
+ const [isRefreshing2, setIsRefreshing] = (0, import_react44.useState)(false);
20910
+ const [filterOpen, setFilterOpen] = (0, import_react44.useState)(false);
20254
20911
  const isFiltered = activeTab !== "all" || readFilter !== "all";
20255
- const loadNotifications = (0, import_react42.useCallback)(
20912
+ const loadNotifications = (0, import_react44.useCallback)(
20256
20913
  async (includeSummary = false, silent = false) => {
20257
20914
  if (!organizationId || !workspaceId) return;
20258
20915
  if (!silent) setIsLoading(true);
@@ -20282,18 +20939,21 @@ var NotificationsScreen = () => {
20282
20939
  },
20283
20940
  [organizationId, workspaceId, activeTab, readFilter, authContext, consentClient, langParam]
20284
20941
  );
20285
- (0, import_react42.useEffect)(() => {
20942
+ (0, import_react44.useEffect)(() => {
20286
20943
  loadNotifications(true);
20287
20944
  }, [loadNotifications]);
20288
- const loadRef = (0, import_react42.useRef)(loadNotifications);
20945
+ const loadRef = (0, import_react44.useRef)(loadNotifications);
20289
20946
  loadRef.current = loadNotifications;
20290
- (0, import_react42.useEffect)(() => {
20947
+ const authContextRef = (0, import_react44.useRef)(authContext);
20948
+ authContextRef.current = authContext;
20949
+ (0, import_react44.useEffect)(() => {
20291
20950
  const id = setInterval(() => {
20951
+ if (isRefreshBlocked(authContextRef.current)) return;
20292
20952
  loadRef.current(false, true);
20293
20953
  }, POLL_INTERVAL);
20294
20954
  return () => clearInterval(id);
20295
20955
  }, []);
20296
- const onNotificationClick = (0, import_react42.useCallback)(
20956
+ const onNotificationClick = (0, import_react44.useCallback)(
20297
20957
  async (notification) => {
20298
20958
  const shouldMarkRead = !notification.is_read;
20299
20959
  const shouldAutoAcknowledge = !notification.is_acknowledged && !hasAcknowledgeCTA(notification);
@@ -20314,7 +20974,7 @@ var NotificationsScreen = () => {
20314
20974
  },
20315
20975
  [hasAcknowledgeCTA, handleAcknowledge, handleMarkRead]
20316
20976
  );
20317
- const onRowPress = (0, import_react42.useCallback)(
20977
+ const onRowPress = (0, import_react44.useCallback)(
20318
20978
  async (notification) => {
20319
20979
  var _a3;
20320
20980
  const linkCta = (_a3 = notification.ctas) == null ? void 0 : _a3.find((cta) => cta.action_type === "link" && cta.url);
@@ -20332,7 +20992,7 @@ var NotificationsScreen = () => {
20332
20992
  },
20333
20993
  [handleCTAClick, onNotificationClick]
20334
20994
  );
20335
- const onMarkReadRow = (0, import_react42.useCallback)(
20995
+ const onMarkReadRow = (0, import_react44.useCallback)(
20336
20996
  async (notification) => {
20337
20997
  if (notification.is_read) return;
20338
20998
  const ok = await handleMarkRead(notification.uuid);
@@ -20342,7 +21002,7 @@ var NotificationsScreen = () => {
20342
21002
  },
20343
21003
  [handleMarkRead]
20344
21004
  );
20345
- const onAcknowledgeRow = (0, import_react42.useCallback)(
21005
+ const onAcknowledgeRow = (0, import_react44.useCallback)(
20346
21006
  async (notification) => {
20347
21007
  if (notification.is_acknowledged) return;
20348
21008
  const ok = await handleAcknowledge(notification.uuid);
@@ -20359,22 +21019,29 @@ var NotificationsScreen = () => {
20359
21019
  },
20360
21020
  [handleAcknowledge]
20361
21021
  );
20362
- const onRefresh = (0, import_react42.useCallback)(() => {
21022
+ const onMarkAllRead = (0, import_react44.useCallback)(async () => {
21023
+ const ok = await handleMarkAllRead();
21024
+ if (!ok) return;
21025
+ setNotifications((prev) => prev.map((item) => ({ ...item, is_read: true })));
21026
+ setSummary((prev) => ({ ...prev, unread: 0 }));
21027
+ if (readFilter !== "all") loadNotifications(true, true);
21028
+ }, [handleMarkAllRead, readFilter, loadNotifications]);
21029
+ const onRefresh = (0, import_react44.useCallback)(() => {
20363
21030
  setIsRefreshing(true);
20364
21031
  loadNotifications(true, true);
20365
21032
  }, [loadNotifications]);
20366
- const sections = (0, import_react42.useMemo)(
21033
+ const sections = (0, import_react44.useMemo)(
20367
21034
  () => groupByTime(notifications, (item) => item.created_at, classifyTime),
20368
21035
  [notifications, classifyTime]
20369
21036
  );
20370
- const header = /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.header, children: [
20371
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.titleRow, children: [
20372
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
20373
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
20374
- import_react_native63.TouchableOpacity,
21037
+ const header = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.header, children: [
21038
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.titleRow, children: [
21039
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.screenTitle, { color: colors.text }], children: t("notifications", { defaultValue: "Notifications" }) }),
21040
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21041
+ import_react_native65.TouchableOpacity,
20375
21042
  {
20376
21043
  style: [
20377
- styles51.filterBtn,
21044
+ styles53.filterBtn,
20378
21045
  {
20379
21046
  backgroundColor: isFiltered ? colors.primarySoft : colors.surface,
20380
21047
  borderColor: isFiltered ? colors.primary : colors.border
@@ -20383,30 +21050,30 @@ var NotificationsScreen = () => {
20383
21050
  onPress: () => setFilterOpen(true),
20384
21051
  accessibilityRole: "button",
20385
21052
  accessibilityLabel: t("filter") || "Filter",
20386
- children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Icon, { name: "sliders-horizontal", size: 18, color: isFiltered ? colors.primary : colors.text })
21053
+ children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon, { name: "sliders-horizontal", size: 18, color: isFiltered ? colors.primary : colors.text })
20387
21054
  }
20388
21055
  )
20389
21056
  ] }),
20390
- summary.unread > 0 ? /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.TouchableOpacity, { style: styles51.markAllBtn, onPress: handleMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
20391
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
20392
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.markAllLabel, { color: colors.primary }], children: t("markAllAsRead") || "Mark all as read" })
21057
+ summary.unread > 0 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.TouchableOpacity, { style: styles53.markAllBtn, onPress: onMarkAllRead, activeOpacity: 0.7, accessibilityRole: "button", children: [
21058
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon, { name: "check-check", size: 15, color: colors.primary, strokeWidth: 2.2 }),
21059
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.markAllLabel, { color: colors.primary }], children: t("markAllAsRead") || "Mark all as read" })
20393
21060
  ] }) : null
20394
21061
  ] });
20395
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
20396
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
20397
- import_react_native63.FlatList,
21062
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
21063
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21064
+ import_react_native65.FlatList,
20398
21065
  {
20399
21066
  data: sections,
20400
21067
  keyExtractor: (section2) => section2.key,
20401
- style: [styles51.list, { backgroundColor: colors.canvasSubtle }],
20402
- contentContainerStyle: [styles51.listContent, { flexGrow: 1, paddingBottom: listBottom }],
21068
+ style: [styles53.list, { backgroundColor: colors.canvasSubtle }],
21069
+ contentContainerStyle: [styles53.listContent, { flexGrow: 1, paddingBottom: listBottom }],
20403
21070
  ListHeaderComponent: header,
20404
21071
  showsVerticalScrollIndicator: false,
20405
- refreshControl: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.RefreshControl, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
20406
- renderItem: ({ item: section2 }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.section, children: [
20407
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
20408
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: [styles51.cardShadow, elevation.card], children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: [styles51.cardClip, { backgroundColor: colors.surface }], children: section2.data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { children: [
20409
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
21072
+ refreshControl: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.RefreshControl, { refreshing: isRefreshing2, onRefresh, tintColor: colors.primary, colors: [colors.primary] }),
21073
+ renderItem: ({ item: section2 }) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.section, children: [
21074
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.sectionTitle, { color: colors.textSecondary }], children: section2.title }),
21075
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardShadow, elevation.card], children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardClip, { backgroundColor: colors.surface }], children: section2.data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { children: [
21076
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
20410
21077
  NotificationRow,
20411
21078
  {
20412
21079
  notification: item,
@@ -20415,19 +21082,19 @@ var NotificationsScreen = () => {
20415
21082
  onAcknowledge: () => onAcknowledgeRow(item)
20416
21083
  }
20417
21084
  ),
20418
- index < section2.data.length - 1 ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: [styles51.separator, { backgroundColor: colors.hairline }] }) : null
21085
+ index < section2.data.length - 1 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
20419
21086
  ] }, item.uuid)) }) })
20420
21087
  ] }),
20421
- ListEmptyComponent: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: styles51.skeletonWrap, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: [styles51.cardClip, elevation.card, { backgroundColor: colors.surface }], children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { children: [
20422
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.skeletonRow, children: [
20423
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Skeleton, { width: 36, height: 36, radius: radii.md }),
20424
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.skeletonLines, children: [
20425
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Skeleton, { width: "70%", height: 13 }),
20426
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Skeleton, { width: "40%", height: 10 })
21088
+ ListEmptyComponent: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.skeletonWrap, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.cardClip, elevation.card, { backgroundColor: colors.surface }], children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { children: [
21089
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.skeletonRow, children: [
21090
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: 36, height: 36, radius: radii.md }),
21091
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.skeletonLines, children: [
21092
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: "70%", height: 13 }),
21093
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Skeleton, { width: "40%", height: 10 })
20427
21094
  ] })
20428
21095
  ] }),
20429
- i < 3 ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: [styles51.separator, { backgroundColor: colors.hairline }] }) : null
20430
- ] }, i)) }) }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: styles51.emptyWrap, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
21096
+ i < 3 ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: [styles53.separator, { backgroundColor: colors.hairline }] }) : null
21097
+ ] }, i)) }) }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.emptyWrap, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
20431
21098
  PCEmpty,
20432
21099
  {
20433
21100
  iconName: "circle-check",
@@ -20436,14 +21103,14 @@ var NotificationsScreen = () => {
20436
21103
  }
20437
21104
  ) }),
20438
21105
  ListFooterComponentStyle: { marginTop: "auto" },
20439
- ListFooterComponent: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Footer, {})
21106
+ ListFooterComponent: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Footer, {})
20440
21107
  }
20441
21108
  ),
20442
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_react_native63.View, { style: styles51.filterSheet, children: [
20443
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
20444
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: styles51.chipWrap, children: filterTabs.map((tab) => {
21109
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(BottomSheet, { visible: filterOpen, onClose: () => setFilterOpen(false), title: t("filter") || "Filter", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native65.View, { style: styles53.filterSheet, children: [
21110
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.filterGroupLabel, { color: colors.textSecondary }], children: t("category", { defaultValue: "Category" }) }),
21111
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.chipWrap, children: filterTabs.map((tab) => {
20445
21112
  const selected = tab.key === activeTab;
20446
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
21113
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
20447
21114
  FilterChip,
20448
21115
  {
20449
21116
  label: tab.label,
@@ -20453,12 +21120,12 @@ var NotificationsScreen = () => {
20453
21120
  tab.key
20454
21121
  );
20455
21122
  }) }),
20456
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
20457
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.View, { style: styles51.chipWrap, children: [
21123
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.filterGroupLabel, { color: colors.textSecondary, marginTop: spacing.lg }], children: t("readStatus", { defaultValue: "Status" }) }),
21124
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.View, { style: styles53.chipWrap, children: [
20458
21125
  { key: "all", label: t("all") || "All" },
20459
21126
  { key: "unread", label: t("unread") || "Unread" },
20460
21127
  { key: "read", label: t("read", { defaultValue: "Read" }) }
20461
- ].map((opt) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
21128
+ ].map((opt) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
20462
21129
  FilterChip,
20463
21130
  {
20464
21131
  label: opt.label,
@@ -20467,13 +21134,13 @@ var NotificationsScreen = () => {
20467
21134
  },
20468
21135
  opt.key
20469
21136
  )) }),
20470
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
20471
- import_react_native63.TouchableOpacity,
21137
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21138
+ import_react_native65.TouchableOpacity,
20472
21139
  {
20473
- style: [styles51.applyBtn, { backgroundColor: colors.primary }],
21140
+ style: [styles53.applyBtn, { backgroundColor: colors.primary }],
20474
21141
  onPress: () => setFilterOpen(false),
20475
21142
  accessibilityRole: "button",
20476
- children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.applyLabel, { color: colors.primaryText }], children: t("done", { defaultValue: "Done" }) })
21143
+ children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.applyLabel, { color: colors.primaryText }], children: t("done", { defaultValue: "Done" }) })
20477
21144
  }
20478
21145
  )
20479
21146
  ] }) })
@@ -20481,25 +21148,25 @@ var NotificationsScreen = () => {
20481
21148
  };
20482
21149
  var FilterChip = ({ label, selected, onPress }) => {
20483
21150
  const { colors } = useTheme();
20484
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
20485
- import_react_native63.TouchableOpacity,
21151
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21152
+ import_react_native65.TouchableOpacity,
20486
21153
  {
20487
21154
  onPress,
20488
21155
  activeOpacity: 0.7,
20489
21156
  accessibilityRole: "button",
20490
21157
  accessibilityState: { selected },
20491
21158
  style: [
20492
- styles51.chip,
21159
+ styles53.chip,
20493
21160
  {
20494
21161
  backgroundColor: selected ? colors.primary : colors.surfaceAlt,
20495
21162
  borderColor: selected ? colors.primary : colors.border
20496
21163
  }
20497
21164
  ],
20498
- children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_react_native63.Text, { style: [styles51.chipLabel, { color: selected ? colors.primaryText : colors.text }], children: label })
21165
+ children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native65.Text, { style: [styles53.chipLabel, { color: selected ? colors.primaryText : colors.text }], children: label })
20499
21166
  }
20500
21167
  );
20501
21168
  };
20502
- var styles51 = import_react_native63.StyleSheet.create({
21169
+ var styles53 = import_react_native65.StyleSheet.create({
20503
21170
  list: {
20504
21171
  flex: 1
20505
21172
  },
@@ -20533,7 +21200,7 @@ var styles51 = import_react_native63.StyleSheet.create({
20533
21200
  filterBtn: {
20534
21201
  width: 40,
20535
21202
  height: 40,
20536
- borderWidth: import_react_native63.StyleSheet.hairlineWidth,
21203
+ borderWidth: import_react_native65.StyleSheet.hairlineWidth,
20537
21204
  borderRadius: radii.md,
20538
21205
  justifyContent: "center",
20539
21206
  alignItems: "center"
@@ -20554,7 +21221,7 @@ var styles51 = import_react_native63.StyleSheet.create({
20554
21221
  overflow: "hidden"
20555
21222
  },
20556
21223
  separator: {
20557
- height: import_react_native63.StyleSheet.hairlineWidth,
21224
+ height: import_react_native65.StyleSheet.hairlineWidth,
20558
21225
  marginLeft: spacing.lg + 36 + spacing.md
20559
21226
  },
20560
21227
  emptyWrap: {
@@ -20592,7 +21259,7 @@ var styles51 = import_react_native63.StyleSheet.create({
20592
21259
  justifyContent: "center",
20593
21260
  paddingHorizontal: spacing.lg,
20594
21261
  borderRadius: radii.pill,
20595
- borderWidth: import_react_native63.StyleSheet.hairlineWidth
21262
+ borderWidth: import_react_native65.StyleSheet.hairlineWidth
20596
21263
  },
20597
21264
  chipLabel: {
20598
21265
  ...typography.label
@@ -20611,7 +21278,7 @@ var styles51 = import_react_native63.StyleSheet.create({
20611
21278
  });
20612
21279
 
20613
21280
  // src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx
20614
- var import_jsx_runtime64 = require("react/jsx-runtime");
21281
+ var import_jsx_runtime68 = require("react/jsx-runtime");
20615
21282
  var privacyCenterQueryClient = new import_react_query2.QueryClient();
20616
21283
  function PrivacyCenterContent({ onBack }) {
20617
21284
  const { currentPage } = useInternalNavigation();
@@ -20621,24 +21288,24 @@ function PrivacyCenterContent({ onBack }) {
20621
21288
  const chromeMode = getPageChromeMode(currentPage);
20622
21289
  const canvasIsLight = isLightColor(colors.canvasSubtle);
20623
21290
  const barStyle = canvasIsLight ? "dark-content" : "light-content";
20624
- (0, import_react43.useEffect)(() => {
20625
- import_react_native64.StatusBar.setBarStyle(barStyle, true);
20626
- if (import_react_native64.Platform.OS === "android") {
21291
+ (0, import_react45.useEffect)(() => {
21292
+ import_react_native66.StatusBar.setBarStyle(barStyle, true);
21293
+ if (import_react_native66.Platform.OS === "android") {
20627
21294
  setNavBarIconStyle(canvasIsLight ? "dark" : "light");
20628
21295
  }
20629
21296
  }, [barStyle, canvasIsLight]);
20630
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_react_native64.View, { style: [styles52.container, { backgroundColor: colors.canvasSubtle }], children: [
20631
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_native64.StatusBar, { barStyle, translucent: true }),
20632
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_native64.View, { style: styles52.mainColumn, children: brandingLoading ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(PCLoader, {}) : /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
20633
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(SlimTopBar, { mode: chromeMode, onBack }),
20634
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_native64.View, { style: [styles52.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(PCLoader, {}) : status === "empty" ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_jsx_runtime64.Fragment, { children: [
20635
- currentPage === "home" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(HomeHub, {}),
20636
- currentPage === "consent-manager" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(ConsentManager, {}),
20637
- currentPage === "form" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(FormPage, {}),
20638
- currentPage === "activity" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(ActivitiesList, {}),
20639
- currentPage === "receipts" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(ReceiptsList, {}),
20640
- currentPage === "case-details" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CaseDetailsPage, {}),
20641
- currentPage === "notifications" && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(NotificationsScreen, {})
21297
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_react_native66.View, { style: [styles54.container, { backgroundColor: colors.canvasSubtle }], children: [
21298
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.StatusBar, { barStyle, translucent: true }),
21299
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.View, { style: styles54.mainColumn, children: brandingLoading ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PCLoader, {}) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
21300
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SlimTopBar, { mode: chromeMode, onBack }),
21301
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native66.View, { style: [styles54.content, { paddingBottom: insets.bottom }], children: status === "checking" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PCLoader, {}) : status === "session-expired" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterSessionExpired, {}) : status === "empty" ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterEmptyState, {}) : /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
21302
+ currentPage === "home" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HomeHub, {}),
21303
+ currentPage === "consent-manager" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ConsentManager, {}),
21304
+ currentPage === "form" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(FormPage, {}),
21305
+ currentPage === "activity" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ActivitiesList, {}),
21306
+ currentPage === "receipts" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ReceiptsList, {}),
21307
+ currentPage === "case-details" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CaseDetailsPage, {}),
21308
+ currentPage === "notifications" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(NotificationsScreen, {})
20642
21309
  ] }) })
20643
21310
  ] }) })
20644
21311
  ] });
@@ -20652,22 +21319,34 @@ function RedactoPrivacyCenter({
20652
21319
  theme: _theme,
20653
21320
  accessToken,
20654
21321
  refreshToken,
21322
+ token,
21323
+ email,
21324
+ mobile,
21325
+ ucic,
21326
+ organisationUuid,
21327
+ workspaceUuid,
20655
21328
  onError,
20656
21329
  initialPage = "home",
20657
21330
  initialCaseUuid,
20658
21331
  onBack
20659
21332
  }) {
20660
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(SafeAreaBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(KeyboardProviderCompat, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_query2.QueryClientProvider, { client: privacyCenterQueryClient, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_react_i18next29.I18nextProvider, { i18n: i18n_default, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(ThemeProvider, { slug, baseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(BaseUrlProvider, { baseUrl, ledgerBaseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
21333
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SafeAreaBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(KeyboardProviderCompat, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_query2.QueryClientProvider, { client: privacyCenterQueryClient, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_i18next31.I18nextProvider, { i18n: i18n_default, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ThemeProvider, { slug, baseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(BaseUrlProvider, { baseUrl, ledgerBaseUrl, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
20661
21334
  AuthProvider,
20662
21335
  {
20663
- accessToken,
20664
- refreshToken,
21336
+ accessToken: accessToken != null ? accessToken : "",
21337
+ refreshToken: refreshToken != null ? refreshToken : "",
21338
+ token,
21339
+ sandboxUcic: ucic,
21340
+ sandboxSubject: email || mobile,
21341
+ organisationUuid,
21342
+ workspaceUuid,
21343
+ slug,
20665
21344
  onError,
20666
- children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(NavigationProvider, { initialPage, initialPendingCaseUuid: initialCaseUuid != null ? initialCaseUuid : null, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DataAvailabilityProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(PageStatusProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(PrivacyCenterContent, { onBack }) }) }) })
21345
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(NavigationProvider, { initialPage, initialPendingCaseUuid: initialCaseUuid != null ? initialCaseUuid : null, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(SelectUserGate, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(DataAvailabilityProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PageStatusProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PrivacyCenterContent, { onBack }) }) }) }) })
20667
21346
  }
20668
21347
  ) }) }) }) }) }) });
20669
21348
  }
20670
- var styles52 = import_react_native64.StyleSheet.create({
21349
+ var styles54 = import_react_native66.StyleSheet.create({
20671
21350
  container: {
20672
21351
  flex: 1
20673
21352
  },
@@ -20681,74 +21360,74 @@ var styles52 = import_react_native64.StyleSheet.create({
20681
21360
  });
20682
21361
 
20683
21362
  // src/RedactoPrivacyCenter/components/SideMenu.tsx
20684
- var import_react_native65 = require("react-native");
20685
- var import_react_i18next30 = require("react-i18next");
21363
+ var import_react_native67 = require("react-native");
21364
+ var import_react_i18next32 = require("react-i18next");
20686
21365
  var import_react_native_svg4 = __toESM(require("react-native-svg"));
20687
- var import_jsx_runtime65 = require("react/jsx-runtime");
21366
+ var import_jsx_runtime69 = require("react/jsx-runtime");
20688
21367
  var MENU_ITEMS = [
20689
21368
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consent Manager", icon: "shield-check" },
20690
21369
  { page: "form", labelKey: "grievanceRequests", fallback: "Privacy Requests", icon: "message-circle-warning" },
20691
21370
  { page: "activity", labelKey: "activity", fallback: "Activity", icon: "activity" }
20692
21371
  ];
20693
21372
  function SideMenu({ onBack } = {}) {
20694
- const { t } = (0, import_react_i18next30.useTranslation)();
21373
+ const { t } = (0, import_react_i18next32.useTranslation)();
20695
21374
  const { currentPage, navigateTo } = useInternalNavigation();
20696
21375
  const { organizationName, email } = useAuth();
20697
21376
  const { colors } = useTheme();
20698
21377
  const orgInitial = organizationName ? organizationName.charAt(0).toUpperCase() : "R";
20699
21378
  const displayName = organizationName || "Organization";
20700
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react_native65.View, { style: [styles53.container, { backgroundColor: colors.surface }], children: [
20701
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react_native65.View, { style: styles53.orgSection, children: [
20702
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: [styles53.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.Text, { style: [styles53.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
20703
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_react_native65.View, { style: styles53.orgInfo, children: [
20704
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.Text, { style: [styles53.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
20705
- email ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.Text, { style: [styles53.orgEmail, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
21379
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: [styles55.container, { backgroundColor: colors.surface }], children: [
21380
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: styles55.orgSection, children: [
21381
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.avatar, { backgroundColor: colors.primary }], children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.avatarText, { color: colors.primaryText }], children: orgInitial }) }),
21382
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_react_native67.View, { style: styles55.orgInfo, children: [
21383
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.orgName, { color: colors.text }], numberOfLines: 1, children: displayName }),
21384
+ email ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.orgEmail, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
20706
21385
  ] })
20707
21386
  ] }),
20708
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20709
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: styles53.menuSection, children: MENU_ITEMS.map((item) => {
21387
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.divider, { backgroundColor: colors.border }] }),
21388
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: styles55.menuSection, children: MENU_ITEMS.map((item) => {
20710
21389
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
20711
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
20712
- import_react_native65.TouchableOpacity,
21390
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
21391
+ import_react_native67.TouchableOpacity,
20713
21392
  {
20714
21393
  style: [
20715
- styles53.menuItem,
20716
- isActive && [styles53.menuItemActive, { backgroundColor: `${colors.primary}14` }]
21394
+ styles55.menuItem,
21395
+ isActive && [styles55.menuItemActive, { backgroundColor: `${colors.primary}14` }]
20717
21396
  ],
20718
21397
  onPress: () => navigateTo(item.page),
20719
21398
  activeOpacity: 0.7,
20720
21399
  accessibilityRole: "button",
20721
21400
  accessibilityState: { selected: isActive },
20722
21401
  children: [
20723
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: styles53.menuIconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
20724
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
20725
- import_react_native65.Text,
21402
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: styles55.menuIconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Icon, { name: item.icon, size: 18, color: isActive ? colors.primary : colors.textSecondary }) }),
21403
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
21404
+ import_react_native67.Text,
20726
21405
  {
20727
21406
  style: [
20728
- styles53.menuLabel,
21407
+ styles55.menuLabel,
20729
21408
  { color: isActive ? colors.primary : colors.text },
20730
- isActive && styles53.menuLabelActive
21409
+ isActive && styles55.menuLabelActive
20731
21410
  ],
20732
21411
  children: t(item.labelKey) || item.fallback
20733
21412
  }
20734
21413
  ),
20735
- isActive ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: [styles53.activeIndicator, { backgroundColor: colors.primary }] }) : null
21414
+ isActive ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.activeIndicator, { backgroundColor: colors.primary }] }) : null
20736
21415
  ]
20737
21416
  },
20738
21417
  item.page
20739
21418
  );
20740
21419
  }) }),
20741
- onBack ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
20742
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: { flex: 1 } }),
20743
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.View, { style: [styles53.divider, { backgroundColor: colors.border }] }),
20744
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
20745
- import_react_native65.TouchableOpacity,
21420
+ onBack ? /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_jsx_runtime69.Fragment, { children: [
21421
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: { flex: 1 } }),
21422
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.View, { style: [styles55.divider, { backgroundColor: colors.border }] }),
21423
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(
21424
+ import_react_native67.TouchableOpacity,
20746
21425
  {
20747
- style: styles53.backBtn,
21426
+ style: styles55.backBtn,
20748
21427
  onPress: () => navigateBack(onBack),
20749
21428
  activeOpacity: 0.7,
20750
21429
  children: [
20751
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native_svg4.default, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", children: onBack === "back" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
21430
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native_svg4.default, { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", children: onBack === "back" ? /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
20752
21431
  import_react_native_svg4.Path,
20753
21432
  {
20754
21433
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -20757,7 +21436,7 @@ function SideMenu({ onBack } = {}) {
20757
21436
  strokeLinecap: "round",
20758
21437
  strokeLinejoin: "round"
20759
21438
  }
20760
- ) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
21439
+ ) : /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
20761
21440
  import_react_native_svg4.Path,
20762
21441
  {
20763
21442
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -20767,14 +21446,14 @@ function SideMenu({ onBack } = {}) {
20767
21446
  strokeLinejoin: "round"
20768
21447
  }
20769
21448
  ) }),
20770
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_react_native65.Text, { style: [styles53.backBtnLabel, { color: colors.textSecondary }], children: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out" })
21449
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(import_react_native67.Text, { style: [styles55.backBtnLabel, { color: colors.textSecondary }], children: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out" })
20771
21450
  ]
20772
21451
  }
20773
21452
  )
20774
21453
  ] }) : null
20775
21454
  ] });
20776
21455
  }
20777
- var styles53 = import_react_native65.StyleSheet.create({
21456
+ var styles55 = import_react_native67.StyleSheet.create({
20778
21457
  container: {
20779
21458
  flex: 1,
20780
21459
  paddingTop: 12
@@ -20860,42 +21539,68 @@ var styles53 = import_react_native65.StyleSheet.create({
20860
21539
  });
20861
21540
 
20862
21541
  // src/RedactoPrivacyCenter/components/Navbar.tsx
20863
- var import_react44 = require("react");
20864
- var import_react_native67 = require("react-native");
20865
- var import_react_i18next32 = require("react-i18next");
21542
+ var import_react46 = require("react");
21543
+ var import_react_native69 = require("react-native");
21544
+ var import_react_i18next34 = require("react-i18next");
20866
21545
  var import_react_native_svg6 = __toESM(require("react-native-svg"));
20867
21546
 
20868
21547
  // src/RedactoPrivacyCenter/components/UserOrgMenu.tsx
20869
- var import_react_native66 = require("react-native");
20870
- var import_react_i18next31 = require("react-i18next");
21548
+ var import_react_native68 = require("react-native");
21549
+ var import_react_i18next33 = require("react-i18next");
20871
21550
  var import_react_native_svg5 = __toESM(require("react-native-svg"));
20872
- var import_jsx_runtime66 = require("react/jsx-runtime");
21551
+ var import_jsx_runtime70 = require("react/jsx-runtime");
20873
21552
  var UserOrgMenu = ({ visible, onClose, onBack }) => {
20874
- const { t } = (0, import_react_i18next31.useTranslation)();
21553
+ const { t } = (0, import_react_i18next33.useTranslation)();
20875
21554
  const { organizationName, email } = useAuth();
20876
21555
  const { colors, branding } = useTheme();
21556
+ const { switchProfile } = useProfileSwitch();
20877
21557
  const brandName = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
20878
21558
  const handleAction = () => {
20879
21559
  onClose();
20880
21560
  navigateBack(onBack);
20881
21561
  };
20882
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
20883
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native66.View, { style: styles54.identity, children: [
20884
- (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native66.Image, { source: { uri: branding.logo_url }, style: styles54.logo, resizeMode: "contain" }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PCAvatar, { name: organizationName || brandName, imageUrl: branding == null ? void 0 : branding.icon_url, size: 52 }),
20885
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_react_native66.View, { style: styles54.identityText, children: [
20886
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native66.Text, { style: [styles54.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
20887
- email ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native66.Text, { style: [styles54.email, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
21562
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(BottomSheet, { visible, onClose, title: t("account") || "Account", children: [
21563
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_react_native68.View, { style: styles56.identity, children: [
21564
+ (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Image, { source: { uri: branding.logo_url }, style: styles56.logo, resizeMode: "contain" }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PCAvatar, { name: organizationName || brandName, imageUrl: branding == null ? void 0 : branding.icon_url, size: 52 }),
21565
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_react_native68.View, { style: styles56.identityText, children: [
21566
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.orgName, { color: colors.text }], numberOfLines: 2, children: brandName }),
21567
+ email ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.email, { color: colors.textSecondary }], numberOfLines: 1, children: email }) : null
20888
21568
  ] })
20889
21569
  ] }),
20890
- onBack ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
20891
- import_react_native66.TouchableOpacity,
21570
+ switchProfile ? /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
21571
+ import_react_native68.TouchableOpacity,
20892
21572
  {
20893
- style: [styles54.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
21573
+ style: [styles56.actionRow, { backgroundColor: withAlpha(colors.primary, 0.1) }],
21574
+ onPress: () => {
21575
+ onClose();
21576
+ switchProfile();
21577
+ },
21578
+ activeOpacity: 0.7,
21579
+ accessibilityRole: "button",
21580
+ children: [
21581
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native_svg5.default, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
21582
+ import_react_native_svg5.Path,
21583
+ {
21584
+ d: "M16 3h5v5 M21 3l-7 7 M8 21H3v-5 M3 21l7-7",
21585
+ stroke: colors.primary,
21586
+ strokeWidth: 2,
21587
+ strokeLinecap: "round",
21588
+ strokeLinejoin: "round"
21589
+ }
21590
+ ) }),
21591
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.actionLabel, { color: colors.primary }], children: t("switchProfile") })
21592
+ ]
21593
+ }
21594
+ ) : null,
21595
+ onBack ? /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
21596
+ import_react_native68.TouchableOpacity,
21597
+ {
21598
+ style: [styles56.actionRow, { backgroundColor: withAlpha(onBack === "signout" ? colors.error : colors.primary, 0.1) }],
20894
21599
  onPress: handleAction,
20895
21600
  activeOpacity: 0.7,
20896
21601
  accessibilityRole: "button",
20897
21602
  children: [
20898
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native_svg5.default, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: onBack === "signout" ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
21603
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native_svg5.default, { width: 18, height: 18, viewBox: "0 0 24 24", fill: "none", children: onBack === "signout" ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
20899
21604
  import_react_native_svg5.Path,
20900
21605
  {
20901
21606
  d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4 M16 17l5-5-5-5 M21 12H9",
@@ -20904,7 +21609,7 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
20904
21609
  strokeLinecap: "round",
20905
21610
  strokeLinejoin: "round"
20906
21611
  }
20907
- ) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
21612
+ ) : /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
20908
21613
  import_react_native_svg5.Path,
20909
21614
  {
20910
21615
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -20914,13 +21619,13 @@ var UserOrgMenu = ({ visible, onClose, onBack }) => {
20914
21619
  strokeLinejoin: "round"
20915
21620
  }
20916
21621
  ) }),
20917
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_react_native66.Text, { style: [styles54.actionLabel, { color: onBack === "signout" ? colors.error : colors.primary }], children: onBack === "signout" ? t("signOut") || "Sign Out" : t("back") || "Back" })
21622
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(import_react_native68.Text, { style: [styles56.actionLabel, { color: onBack === "signout" ? colors.error : colors.primary }], children: onBack === "signout" ? t("signOut") || "Sign Out" : t("back") || "Back" })
20918
21623
  ]
20919
21624
  }
20920
21625
  ) : null
20921
21626
  ] });
20922
21627
  };
20923
- var styles54 = import_react_native66.StyleSheet.create({
21628
+ var styles56 = import_react_native68.StyleSheet.create({
20924
21629
  identity: {
20925
21630
  flexDirection: "row",
20926
21631
  alignItems: "center",
@@ -20961,33 +21666,33 @@ var styles54 = import_react_native66.StyleSheet.create({
20961
21666
  });
20962
21667
 
20963
21668
  // src/RedactoPrivacyCenter/components/Navbar.tsx
20964
- var import_jsx_runtime67 = require("react/jsx-runtime");
21669
+ var import_jsx_runtime71 = require("react/jsx-runtime");
20965
21670
  function Navbar({ mode = "primary", onBack }) {
20966
- const { t } = (0, import_react_i18next32.useTranslation)();
21671
+ const { t } = (0, import_react_i18next34.useTranslation)();
20967
21672
  const { currentPage, navigateTo } = useInternalNavigation();
20968
21673
  const { organizationName, email } = useAuth();
20969
21674
  const { colors, branding } = useTheme();
20970
- const [locale, setLocale] = (0, import_react44.useState)(i18n_default.language || "en");
20971
- const [menuOpen, setMenuOpen] = (0, import_react44.useState)(false);
21675
+ const [locale, setLocale] = (0, import_react46.useState)(i18n_default.language || "en");
21676
+ const [menuOpen, setMenuOpen] = (0, import_react46.useState)(false);
20972
21677
  const unreadCount = useUnreadCount();
20973
21678
  const { status: pageStatus } = usePageStatus();
20974
21679
  const pageChrome = PAGE_CHROME_BY_PAGE[currentPage] || PAGE_CHROME_BY_PAGE["consent-manager"];
20975
21680
  const isDetail = mode === "detail";
20976
- (0, import_react44.useEffect)(() => {
21681
+ (0, import_react46.useEffect)(() => {
20977
21682
  const handleLanguageChanged = () => setLocale(i18n_default.language);
20978
21683
  i18n_default.on("languageChanged", handleLanguageChanged);
20979
21684
  return () => {
20980
21685
  i18n_default.off("languageChanged", handleLanguageChanged);
20981
21686
  };
20982
21687
  }, []);
20983
- const handleLanguageChange = (0, import_react44.useCallback)((value) => {
21688
+ const handleLanguageChange = (0, import_react46.useCallback)((value) => {
20984
21689
  i18n_default.changeLanguage(value);
20985
21690
  }, []);
20986
21691
  const brandLabel = (branding == null ? void 0 : branding.brand_name) || organizationName || t("privacyCenter") || "Privacy Center";
20987
21692
  const accountLabel = brandLabel || email || t("account") || "Account";
20988
- const brandLockup = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.brandRow, children: [
20989
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
20990
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native67.Text, { style: [styles55.brandText, { color: colors.text }], numberOfLines: 1, children: brandLabel })
21693
+ const brandLockup = /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.brandRow, children: [
21694
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCAvatar, { name: organizationName || brandLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 }),
21695
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.brandText, { color: colors.text }], numberOfLines: 1, children: brandLabel })
20991
21696
  ] });
20992
21697
  const handleDetailBack = () => {
20993
21698
  if (currentPage === "case-details") {
@@ -20999,26 +21704,26 @@ function Navbar({ mode = "primary", onBack }) {
20999
21704
  }
21000
21705
  };
21001
21706
  if (isDetail) {
21002
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
21003
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21004
- import_react_native67.View,
21707
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
21708
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21709
+ import_react_native69.View,
21005
21710
  {
21006
21711
  style: [
21007
- styles55.container,
21008
- styles55.detailContainer,
21712
+ styles57.container,
21713
+ styles57.detailContainer,
21009
21714
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21010
21715
  ],
21011
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.detailRow, children: [
21012
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21013
- import_react_native67.TouchableOpacity,
21716
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.detailRow, children: [
21717
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21718
+ import_react_native69.TouchableOpacity,
21014
21719
  {
21015
- style: styles55.backButton,
21720
+ style: styles57.backButton,
21016
21721
  onPress: handleDetailBack,
21017
21722
  activeOpacity: 0.7,
21018
21723
  hitSlop: DEFAULT_HIT_SLOP,
21019
21724
  accessibilityRole: "button",
21020
21725
  accessibilityLabel: t("back") || "Back",
21021
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21726
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21022
21727
  import_react_native_svg6.Path,
21023
21728
  {
21024
21729
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21030,36 +21735,36 @@ function Navbar({ mode = "primary", onBack }) {
21030
21735
  ) })
21031
21736
  }
21032
21737
  ),
21033
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.detailTitleWrap, children: [
21034
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native67.Text, { style: [styles55.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21035
- pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21738
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.detailTitleWrap, children: [
21739
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.detailTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21740
+ pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21036
21741
  ] })
21037
21742
  ] })
21038
21743
  }
21039
21744
  ),
21040
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21745
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21041
21746
  ] });
21042
21747
  }
21043
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
21044
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
21045
- import_react_native67.View,
21748
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
21749
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
21750
+ import_react_native69.View,
21046
21751
  {
21047
21752
  style: [
21048
- styles55.container,
21753
+ styles57.container,
21049
21754
  { backgroundColor: colors.background, borderBottomColor: colors.border, paddingTop: TOP_INSET + spacing.xs }
21050
21755
  ],
21051
21756
  children: [
21052
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.appBar, children: [
21053
- onBack ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21054
- import_react_native67.TouchableOpacity,
21757
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.appBar, children: [
21758
+ onBack ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21759
+ import_react_native69.TouchableOpacity,
21055
21760
  {
21056
- style: styles55.backButton,
21761
+ style: styles57.backButton,
21057
21762
  onPress: () => navigateBack(onBack),
21058
21763
  activeOpacity: 0.7,
21059
21764
  hitSlop: DEFAULT_HIT_SLOP,
21060
21765
  accessibilityRole: "button",
21061
21766
  accessibilityLabel: onBack === "back" ? t("back") || "Back" : t("signOut") || "Sign Out",
21062
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21767
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native_svg6.default, { width: 22, height: 22, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21063
21768
  import_react_native_svg6.Path,
21064
21769
  {
21065
21770
  d: "M19 12H5m0 0l7 7m-7-7l7-7",
@@ -21071,39 +21776,39 @@ function Navbar({ mode = "primary", onBack }) {
21071
21776
  ) })
21072
21777
  }
21073
21778
  ) : null,
21074
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native67.View, { style: styles55.brandWrap, children: (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(BrandImage, { uri: branding.logo_url, height: 34, maxWidth: 170, fallback: brandLockup }) : brandLockup }),
21075
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.actions, children: [
21076
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
21077
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
21078
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21079
- import_react_native67.TouchableOpacity,
21779
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.View, { style: styles57.brandWrap, children: (branding == null ? void 0 : branding.logo_url) ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(BrandImage, { uri: branding.logo_url, height: 34, maxWidth: 170, fallback: brandLockup }) : brandLockup }),
21780
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.actions, children: [
21781
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(NotificationBell, { count: unreadCount, onPress: () => navigateTo("notifications") }),
21782
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCSelect, { value: locale, options: languageOptions, onChange: handleLanguageChange, placeholder: t("language"), compact: true }),
21783
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
21784
+ import_react_native69.TouchableOpacity,
21080
21785
  {
21081
- style: styles55.avatarButton,
21786
+ style: styles57.avatarButton,
21082
21787
  onPress: () => setMenuOpen(true),
21083
21788
  activeOpacity: 0.7,
21084
21789
  hitSlop: DEFAULT_HIT_SLOP,
21085
21790
  accessibilityRole: "button",
21086
21791
  accessibilityLabel: accountLabel,
21087
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PCAvatar, { name: organizationName || accountLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 })
21792
+ children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCAvatar, { name: organizationName || accountLabel, imageUrl: branding == null ? void 0 : branding.icon_url, size: 28 })
21088
21793
  }
21089
21794
  )
21090
21795
  ] })
21091
21796
  ] }),
21092
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native67.View, { style: styles55.pageHeader, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_react_native67.View, { style: styles55.titleRow, children: [
21093
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_react_native67.Text, { style: [styles55.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21094
- pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21797
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.View, { style: styles57.pageHeader, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_react_native69.View, { style: styles57.titleRow, children: [
21798
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_react_native69.Text, { style: [styles57.pageTitle, { color: colors.text }], numberOfLines: 1, children: t(pageChrome.titleKey) }),
21799
+ pageStatus ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PCBadge, { status: pageStatus.tone, label: pageStatus.label }) : null
21095
21800
  ] }) })
21096
21801
  ]
21097
21802
  }
21098
21803
  ),
21099
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21804
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(UserOrgMenu, { visible: menuOpen, onClose: () => setMenuOpen(false), onBack })
21100
21805
  ] });
21101
21806
  }
21102
- var styles55 = import_react_native67.StyleSheet.create({
21807
+ var styles57 = import_react_native69.StyleSheet.create({
21103
21808
  container: {
21104
21809
  paddingHorizontal: spacing.lg,
21105
21810
  paddingBottom: spacing.md,
21106
- borderBottomWidth: import_react_native67.StyleSheet.hairlineWidth
21811
+ borderBottomWidth: import_react_native69.StyleSheet.hairlineWidth
21107
21812
  },
21108
21813
  detailContainer: {
21109
21814
  paddingBottom: spacing.sm
@@ -21183,10 +21888,10 @@ var styles55 = import_react_native67.StyleSheet.create({
21183
21888
  });
21184
21889
 
21185
21890
  // src/RedactoPrivacyCenter/components/BottomTabBar.tsx
21186
- var import_react45 = require("react");
21187
- var import_react_native68 = require("react-native");
21188
- var import_react_i18next33 = require("react-i18next");
21189
- var import_jsx_runtime68 = require("react/jsx-runtime");
21891
+ var import_react47 = require("react");
21892
+ var import_react_native70 = require("react-native");
21893
+ var import_react_i18next35 = require("react-i18next");
21894
+ var import_jsx_runtime72 = require("react/jsx-runtime");
21190
21895
  var TAB_ITEMS = [
21191
21896
  { page: "consent-manager", labelKey: "consentManager", fallback: "Consents", icon: "shield-check" },
21192
21897
  { page: "form", labelKey: "grievanceRequests", fallback: "Requests", icon: "message-circle-warning" },
@@ -21197,10 +21902,10 @@ var PAD_H = spacing.lg;
21197
21902
  var PILL_WIDTH = 56;
21198
21903
  var PILL_HEIGHT = 34;
21199
21904
  function BottomTabBar({ showFooter = true }) {
21200
- const { t } = (0, import_react_i18next33.useTranslation)();
21905
+ const { t } = (0, import_react_i18next35.useTranslation)();
21201
21906
  const { currentPage, navigateTo } = useInternalNavigation();
21202
21907
  const { colors } = useTheme();
21203
- const [rowWidth, setRowWidth] = (0, import_react45.useState)(0);
21908
+ const [rowWidth, setRowWidth] = (0, import_react47.useState)(0);
21204
21909
  const innerWidth = Math.max(0, rowWidth - PAD_H * 2);
21205
21910
  const tabWidth = innerWidth > 0 ? innerWidth / TAB_ITEMS.length : 0;
21206
21911
  const activeIndex = TAB_ITEMS.findIndex(
@@ -21208,13 +21913,13 @@ function BottomTabBar({ showFooter = true }) {
21208
21913
  );
21209
21914
  const { translateX } = useAnimatedTabIndicator(Math.max(0, activeIndex), tabWidth);
21210
21915
  const onLayout = (e) => setRowWidth(e.nativeEvent.layout.width);
21211
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_react_native68.View, { style: [styles56.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
21212
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_react_native68.View, { style: styles56.container, onLayout, children: [
21213
- tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
21214
- import_react_native68.Animated.View,
21916
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_react_native70.View, { style: [styles58.wrapper, { backgroundColor: colors.canvasSubtle, borderTopColor: colors.hairline }], children: [
21917
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_react_native70.View, { style: styles58.container, onLayout, children: [
21918
+ tabWidth > 0 && activeIndex >= 0 ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
21919
+ import_react_native70.Animated.View,
21215
21920
  {
21216
21921
  style: [
21217
- styles56.pill,
21922
+ styles58.pill,
21218
21923
  {
21219
21924
  width: PILL_WIDTH,
21220
21925
  left: PAD_H + (tabWidth - PILL_WIDTH) / 2,
@@ -21227,17 +21932,17 @@ function BottomTabBar({ showFooter = true }) {
21227
21932
  TAB_ITEMS.map((item) => {
21228
21933
  const isActive = currentPage === item.page || item.page === "form" && currentPage === "case-details";
21229
21934
  const label = t(item.labelKey) || item.fallback;
21230
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
21231
- import_react_native68.TouchableOpacity,
21935
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
21936
+ import_react_native70.TouchableOpacity,
21232
21937
  {
21233
- style: styles56.tab,
21938
+ style: styles58.tab,
21234
21939
  onPress: () => navigateTo(item.page),
21235
21940
  activeOpacity: 0.7,
21236
21941
  accessibilityRole: "tab",
21237
21942
  accessibilityState: { selected: isActive },
21238
21943
  accessibilityLabel: label,
21239
21944
  children: [
21240
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native68.View, { style: styles56.iconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
21945
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_react_native70.View, { style: styles58.iconWrap, children: /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
21241
21946
  Icon,
21242
21947
  {
21243
21948
  name: item.icon,
@@ -21246,10 +21951,10 @@ function BottomTabBar({ showFooter = true }) {
21246
21951
  strokeWidth: isActive ? 2.1 : 1.85
21247
21952
  }
21248
21953
  ) }),
21249
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
21250
- import_react_native68.Text,
21954
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
21955
+ import_react_native70.Text,
21251
21956
  {
21252
- style: [styles56.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21957
+ style: [styles58.tabLabel, { color: isActive ? colors.primary : colors.textSecondary }],
21253
21958
  numberOfLines: 1,
21254
21959
  children: label
21255
21960
  }
@@ -21260,13 +21965,13 @@ function BottomTabBar({ showFooter = true }) {
21260
21965
  );
21261
21966
  })
21262
21967
  ] }),
21263
- showFooter ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Footer, { inline: true }) : null,
21264
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_react_native68.View, { style: { height: BOTTOM_INSET } })
21968
+ showFooter ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Footer, { inline: true }) : null,
21969
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_react_native70.View, { style: { height: BOTTOM_INSET } })
21265
21970
  ] });
21266
21971
  }
21267
- var styles56 = import_react_native68.StyleSheet.create({
21972
+ var styles58 = import_react_native70.StyleSheet.create({
21268
21973
  wrapper: {
21269
- borderTopWidth: import_react_native68.StyleSheet.hairlineWidth
21974
+ borderTopWidth: import_react_native70.StyleSheet.hairlineWidth
21270
21975
  },
21271
21976
  container: {
21272
21977
  flexDirection: "row",