@tantainnovative/ndpr-toolkit 3.5.0 → 3.5.5

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.
Files changed (177) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/README.md +12 -7
  3. package/dist/adapters.js +1 -2
  4. package/dist/adapters.mjs +1 -2
  5. package/dist/breach.d.mts +80 -1
  6. package/dist/breach.d.ts +80 -1
  7. package/dist/breach.js +1 -2
  8. package/dist/breach.mjs +1 -2
  9. package/dist/{chunk-PATONNTZ.mjs → chunk-3HOXQNCH.mjs} +1 -2
  10. package/dist/{chunk-MJGOLP5M.js → chunk-3IA3KDII.js} +1 -2
  11. package/dist/{chunk-M2TPT5GB.js → chunk-3JPDTXGC.js} +1 -2
  12. package/dist/{chunk-BKRETVJ6.js → chunk-3YTAOT5O.js} +1 -2
  13. package/dist/{chunk-GOU6FU6Y.js → chunk-4CVBQC66.js} +1 -2
  14. package/dist/{chunk-E4NCJ7RD.mjs → chunk-4G3SRVRI.mjs} +1 -2
  15. package/dist/{chunk-6QPRDQZF.js → chunk-4QXTB3L6.js} +1 -2
  16. package/dist/{chunk-XNSZ7KUH.js → chunk-5GVMKUMP.js} +1 -2
  17. package/dist/chunk-66NQ5CVY.mjs +1 -0
  18. package/dist/{chunk-JBSCER34.js → chunk-6NXXQYQL.js} +1 -2
  19. package/dist/chunk-732C2EVN.js +1 -0
  20. package/dist/chunk-7BJXI2HI.mjs +1 -0
  21. package/dist/{chunk-C5QO3SX4.js → chunk-7IFSWCQP.js} +1 -2
  22. package/dist/{chunk-A4PK7JB2.js → chunk-7ZZO7GVB.js} +1 -2
  23. package/dist/chunk-AME4HJR4.js +1 -0
  24. package/dist/chunk-AOHKVFAS.mjs +322 -0
  25. package/dist/{chunk-HO5M7M4M.js → chunk-B46SJB5V.js} +1 -2
  26. package/dist/chunk-BFAX7JQA.mjs +1 -0
  27. package/dist/{chunk-ID2NYIVE.mjs → chunk-BNHQFZHL.mjs} +2 -3
  28. package/dist/{chunk-RLYTX3MM.js → chunk-BRS52EDT.js} +1 -2
  29. package/dist/{chunk-OPYQIJKY.js → chunk-C7IDR2IV.js} +1 -2
  30. package/dist/{chunk-CISJAQ6W.mjs → chunk-COD3RMTL.mjs} +1 -2
  31. package/dist/chunk-CR2QZTGW.js +1 -0
  32. package/dist/{chunk-6WIP33TW.mjs → chunk-DBZSN4WP.mjs} +1 -2
  33. package/dist/{chunk-74Z23WUA.mjs → chunk-EEQALYOY.mjs} +1 -2
  34. package/dist/chunk-EFIBHKQE.mjs +1 -0
  35. package/dist/{chunk-GKKAK6ES.mjs → chunk-EWVK45Z3.mjs} +1 -2
  36. package/dist/{chunk-QSVVAZVT.mjs → chunk-EXEXUAF6.mjs} +1 -2
  37. package/dist/chunk-EZCGTHQV.js +6 -0
  38. package/dist/{chunk-SYMQJO2W.mjs → chunk-GTYXVAJX.mjs} +2 -3
  39. package/dist/{chunk-6FGCGLH5.mjs → chunk-H3XJV2IR.mjs} +1 -2
  40. package/dist/chunk-HBLGN4SD.js +1 -0
  41. package/dist/{chunk-MCWV7S2G.js → chunk-HHK5LHEG.js} +1 -2
  42. package/dist/{chunk-XHROISIF.mjs → chunk-HWHBINVN.mjs} +1 -2
  43. package/dist/{chunk-3EGQWLJ6.js → chunk-I2LMQWK3.js} +2 -3
  44. package/dist/{chunk-NQNFS3QI.js → chunk-I3Y4LOSL.js} +4 -5
  45. package/dist/chunk-ITCY2Z66.mjs +4 -0
  46. package/dist/{chunk-Z6IIMLZU.mjs → chunk-KDAZQO3N.mjs} +1 -2
  47. package/dist/{chunk-J5WCPZLW.js → chunk-L2BRFMVS.js} +1 -2
  48. package/dist/chunk-L2VO3MEJ.js +1 -0
  49. package/dist/{chunk-R5FW5XUQ.mjs → chunk-LQTARVPU.mjs} +1 -2
  50. package/dist/{chunk-6TA2MVTU.mjs → chunk-LRRENTT5.mjs} +1 -2
  51. package/dist/{chunk-LIM64IV2.js → chunk-LVGT3DLT.js} +2 -3
  52. package/dist/{chunk-TXBZPCGF.mjs → chunk-LWIKDDSU.mjs} +1 -2
  53. package/dist/chunk-MPBPAEZC.mjs +1 -0
  54. package/dist/{chunk-Z73T6MWY.js → chunk-N3MQQUQP.js} +39 -35
  55. package/dist/{chunk-RY3PGVLZ.mjs → chunk-NBZUZYTB.mjs} +1 -2
  56. package/dist/{chunk-HGGLW5TE.js → chunk-NUWVPRNI.js} +1 -2
  57. package/dist/chunk-O45PKBZA.mjs +6 -0
  58. package/dist/chunk-O6CUBNXK.mjs +3 -0
  59. package/dist/{chunk-7SMLHZ4B.js → chunk-P4LNLCSF.js} +1 -2
  60. package/dist/{chunk-VWPGIES4.mjs → chunk-PCU6GKBE.mjs} +1 -2
  61. package/dist/chunk-PGI2LM6P.js +103 -0
  62. package/dist/{chunk-U62QYKVG.mjs → chunk-PJNKQPQP.mjs} +1 -2
  63. package/dist/{chunk-LSNL4XR5.js → chunk-PZRQWPWD.js} +1 -2
  64. package/dist/chunk-Q64735OC.js +144 -0
  65. package/dist/chunk-QPRYXVH2.js +1 -0
  66. package/dist/{chunk-MQFZHA2D.js → chunk-RFPLZDIO.js} +1 -2
  67. package/dist/chunk-RMQ7OLNY.mjs +144 -0
  68. package/dist/{chunk-2AW7KAZO.mjs → chunk-RPXRPGHL.mjs} +1 -2
  69. package/dist/chunk-RYREGZVQ.js +1 -0
  70. package/dist/{chunk-B4Z5MBUC.mjs → chunk-RZ6GC6WN.mjs} +1 -2
  71. package/dist/chunk-S6COXIZA.js +2 -0
  72. package/dist/chunk-SFGW37LE.mjs +1 -0
  73. package/dist/{chunk-3NQQSU4P.js → chunk-SJDDNB6M.js} +1 -2
  74. package/dist/{chunk-H3EYBSVP.mjs → chunk-TMXK4QKK.mjs} +2 -3
  75. package/dist/{chunk-P42Z5CFE.js → chunk-TQZWJGJ2.js} +1 -2
  76. package/dist/{chunk-EPT2K355.mjs → chunk-U5RWJRGA.mjs} +1 -2
  77. package/dist/{chunk-R3OYAJI6.mjs → chunk-UASG46LP.mjs} +1 -2
  78. package/dist/{chunk-RXL6CZAI.js → chunk-UAV7V4EM.js} +1 -2
  79. package/dist/chunk-UI536RU2.js +3 -0
  80. package/dist/{chunk-7AVN424U.js → chunk-UTFBKL73.js} +1 -2
  81. package/dist/{chunk-I54CDQGN.js → chunk-UXUMYP4L.js} +1 -2
  82. package/dist/{chunk-P3PULLYP.mjs → chunk-V7UFP6QU.mjs} +1 -2
  83. package/dist/{chunk-I4M2AA3N.js → chunk-VJTQXVAF.js} +1 -2
  84. package/dist/{chunk-ELKB2AFZ.js → chunk-VWED6UTN.js} +1 -2
  85. package/dist/{chunk-LU7PKE7Y.mjs → chunk-VYAL2TGT.mjs} +1 -2
  86. package/dist/chunk-W47OSMT6.js +2 -0
  87. package/dist/chunk-W65ZWTLD.mjs +1 -0
  88. package/dist/{chunk-5HL4UBFV.js → chunk-WDDCKYWA.js} +1 -2
  89. package/dist/{chunk-DJGS7SSN.mjs → chunk-WTGKZX7J.mjs} +1 -2
  90. package/dist/{chunk-TDDAYVKK.js → chunk-WZYCBW2R.js} +1 -2
  91. package/dist/chunk-X3GCGC3H.mjs +103 -0
  92. package/dist/chunk-XJO4DH3L.mjs +2 -0
  93. package/dist/{chunk-LWXZMKC2.js → chunk-XO3VQYTL.js} +7 -8
  94. package/dist/{chunk-IZCWCE7W.mjs → chunk-XOH4WXOZ.mjs} +1 -2
  95. package/dist/{chunk-SHMJNRHO.mjs → chunk-XP5PL6K7.mjs} +1 -2
  96. package/dist/{chunk-CKGJK4D7.mjs → chunk-Y3MKMAFQ.mjs} +2 -3
  97. package/dist/chunk-YFBDJ4FH.js +1 -0
  98. package/dist/chunk-YTU4FNM2.mjs +1 -0
  99. package/dist/{chunk-TV4U6AIS.js → chunk-Z763UI5U.js} +1 -2
  100. package/dist/chunk-ZHFLBL63.mjs +2 -0
  101. package/dist/{chunk-RRVKUCFR.mjs → chunk-ZIZL37BG.mjs} +1 -2
  102. package/dist/{chunk-WWT2ZSNU.mjs → chunk-ZJYULEER.mjs} +1 -2
  103. package/dist/{chunk-LJNNPAFU.mjs → chunk-ZQZJNKVB.mjs} +1 -2
  104. package/dist/chunk-ZVOIR4QH.js +4 -0
  105. package/dist/consent.js +1 -2
  106. package/dist/consent.mjs +1 -2
  107. package/dist/core.d.mts +98 -19
  108. package/dist/core.d.ts +98 -19
  109. package/dist/core.js +1 -2
  110. package/dist/core.mjs +1 -2
  111. package/dist/cross-border.d.mts +36 -14
  112. package/dist/cross-border.d.ts +36 -14
  113. package/dist/cross-border.js +1 -2
  114. package/dist/cross-border.mjs +1 -2
  115. package/dist/dpia.d.mts +4 -4
  116. package/dist/dpia.d.ts +4 -4
  117. package/dist/dpia.js +1 -2
  118. package/dist/dpia.mjs +1 -2
  119. package/dist/dsr.d.mts +30 -17
  120. package/dist/dsr.d.ts +30 -17
  121. package/dist/dsr.js +1 -2
  122. package/dist/dsr.mjs +1 -2
  123. package/dist/hooks.d.mts +113 -20
  124. package/dist/hooks.d.ts +113 -20
  125. package/dist/hooks.js +1 -2
  126. package/dist/hooks.mjs +1 -2
  127. package/dist/index.d.mts +422 -26
  128. package/dist/index.d.ts +422 -26
  129. package/dist/index.js +1 -2
  130. package/dist/index.mjs +1 -2
  131. package/dist/lawful-basis.js +1 -2
  132. package/dist/lawful-basis.mjs +1 -2
  133. package/dist/policy.js +1 -2
  134. package/dist/policy.mjs +1 -2
  135. package/dist/presets.d.mts +54 -5
  136. package/dist/presets.d.ts +54 -5
  137. package/dist/presets.js +1 -2
  138. package/dist/presets.mjs +1 -2
  139. package/dist/ropa.js +1 -2
  140. package/dist/ropa.mjs +1 -2
  141. package/dist/server.d.mts +89 -19
  142. package/dist/server.d.ts +89 -19
  143. package/dist/server.js +1 -2
  144. package/dist/server.mjs +1 -2
  145. package/dist/styles.css +34 -0
  146. package/dist/unstyled.d.mts +3 -1
  147. package/dist/unstyled.d.ts +3 -1
  148. package/dist/unstyled.js +1 -2
  149. package/dist/unstyled.mjs +1 -2
  150. package/package.json +59 -20
  151. package/dist/chunk-3VQAYQR7.js +0 -7
  152. package/dist/chunk-6HZL2WDU.mjs +0 -2
  153. package/dist/chunk-75TJPK2N.mjs +0 -2
  154. package/dist/chunk-ABDB7LEV.mjs +0 -2
  155. package/dist/chunk-AYKLAEOU.mjs +0 -2
  156. package/dist/chunk-C4YM4UMI.js +0 -2
  157. package/dist/chunk-CKJAECGV.js +0 -2
  158. package/dist/chunk-CPK5D5FY.js +0 -132
  159. package/dist/chunk-CWHBCQGT.mjs +0 -2
  160. package/dist/chunk-E64TU6IU.js +0 -2
  161. package/dist/chunk-F5TXUA4O.mjs +0 -4
  162. package/dist/chunk-GN5C32JB.mjs +0 -2
  163. package/dist/chunk-GRLIPT5V.mjs +0 -132
  164. package/dist/chunk-I557S566.mjs +0 -15
  165. package/dist/chunk-JFFOPHU3.mjs +0 -318
  166. package/dist/chunk-KF3EFJEF.mjs +0 -3
  167. package/dist/chunk-ORFC66EA.js +0 -4
  168. package/dist/chunk-S4GRSNB4.js +0 -2
  169. package/dist/chunk-SCWNM4PC.mjs +0 -2
  170. package/dist/chunk-SKKOMFXH.js +0 -81
  171. package/dist/chunk-TCN22KYP.mjs +0 -7
  172. package/dist/chunk-TUNQUVHU.mjs +0 -81
  173. package/dist/chunk-VIQUXWJC.js +0 -2
  174. package/dist/chunk-WTJGLNTB.js +0 -3
  175. package/dist/chunk-XIM7KMD6.js +0 -2
  176. package/dist/chunk-YPKUHSK4.js +0 -15
  177. package/dist/chunk-ZPKVLTSX.js +0 -2
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ErrorInfo } from 'react';
2
2
  import React__default from 'react';
3
3
  import { ReactNode } from 'react';
4
+ import { RefObject } from 'react';
4
5
 
5
6
  /**
6
7
  * Adequacy status of a destination country
@@ -101,6 +102,44 @@ export declare interface BreachFormSubmission {
101
102
  dataTypes: string[];
102
103
  /** Estimated number of affected data subjects */
103
104
  estimatedAffectedSubjects?: number;
105
+ /**
106
+ * Approximate number of personal data RECORDS concerned. Distinct from
107
+ * subject count (one subject may have many records). NDPA Section 40(2).
108
+ */
109
+ approximateRecordCount?: number;
110
+ /**
111
+ * Categories of data subjects affected (e.g. customers, employees, minors).
112
+ * NDPA Section 40(2).
113
+ */
114
+ dataSubjectCategories?: string[];
115
+ /** Whether sensitive personal data (NDPA Section 30) is involved */
116
+ involvesSensitiveData?: boolean;
117
+ /**
118
+ * Likely consequences of the breach for affected data subjects.
119
+ * Required content for the NDPC report and Section 40(3) communications.
120
+ */
121
+ likelyConsequences?: string;
122
+ /**
123
+ * Measures taken or proposed to mitigate adverse effects.
124
+ * NDPA Section 40(3).
125
+ */
126
+ mitigationMeasures?: string;
127
+ /**
128
+ * Data Protection Officer contact details (Section 32(3)(c) — DPO is the
129
+ * named NDPC contact). Falls back to organisation-level DPO if omitted.
130
+ */
131
+ dpoContact?: {
132
+ name: string;
133
+ email: string;
134
+ phone?: string;
135
+ };
136
+ /**
137
+ * Whether this is a phased / interim report submitted under Section 40(2)
138
+ * before complete information is available.
139
+ */
140
+ isPhasedReport?: boolean;
141
+ /** ID of the prior phased report this report supplements, if any. */
142
+ supplementsReportId?: string;
104
143
  /** Current status of the breach */
105
144
  status: 'ongoing' | 'contained' | 'resolved';
106
145
  /** Initial actions taken to address the breach */
@@ -230,10 +269,51 @@ export declare interface BreachReport {
230
269
  affectedSystems: string[];
231
270
  /** Types of data involved in the breach */
232
271
  dataTypes: string[];
233
- /** Whether sensitive personal data is involved (NDPA Section 27) */
272
+ /** Whether sensitive personal data is involved (NDPA Section 30) */
234
273
  involvesSensitiveData?: boolean;
235
274
  /** Estimated number of data subjects affected */
236
275
  estimatedAffectedSubjects?: number;
276
+ /**
277
+ * Approximate number of personal data RECORDS concerned (distinct from subject count).
278
+ * Required content under NDPA Section 40(1)(a) and Section 40(2).
279
+ */
280
+ approximateRecordCount?: number;
281
+ /**
282
+ * Categories of data subjects affected (e.g. customers, employees, minors, patients).
283
+ * Required content under NDPA Section 40(1)(a) and Section 40(2).
284
+ */
285
+ dataSubjectCategories?: string[];
286
+ /**
287
+ * Likely consequences of the breach for affected data subjects (e.g. identity theft,
288
+ * financial loss, reputational damage). Reported to the NDPC and, where applicable,
289
+ * communicated to data subjects under Section 40(3).
290
+ */
291
+ likelyConsequences?: string;
292
+ /**
293
+ * Measures taken or proposed to mitigate adverse effects of the breach.
294
+ * Required content for Section 40(3) communications to data subjects.
295
+ */
296
+ mitigationMeasures?: string;
297
+ /**
298
+ * Whether this is a phased / interim report submitted before full investigation
299
+ * is complete. The NDPC permits phased reporting where complete information is
300
+ * not available within 72 hours.
301
+ */
302
+ isPhasedReport?: boolean;
303
+ /**
304
+ * ID of the prior phased report this report supplements, if any.
305
+ */
306
+ supplementsReportId?: string;
307
+ /**
308
+ * Data Protection Officer contact details. The DPO is the named contact point
309
+ * for the NDPC per NDPA Section 32(3)(c). Required content in the regulatory
310
+ * report (Section 40(2)).
311
+ */
312
+ dpoContact?: {
313
+ name: string;
314
+ email: string;
315
+ phone?: string;
316
+ };
237
317
  /** Whether the breach is ongoing or contained */
238
318
  status: 'ongoing' | 'contained' | 'resolved';
239
319
  /** Initial actions taken to address the breach */
@@ -452,6 +532,26 @@ export declare function calculateBreachSeverity(report: BreachReport, assessment
452
532
  justification: string;
453
533
  };
454
534
 
535
+ /** A single gap found during NDPA compliance evaluation. */
536
+ declare interface ComplianceGap {
537
+ /** Machine-readable requirement identifier. */
538
+ requirementId: string;
539
+ /** Human-readable name of the requirement. */
540
+ requirement: string;
541
+ /** Reference to the relevant NDPA section. */
542
+ ndpaSection: string;
543
+ /** How severe the gap is. */
544
+ severity: 'critical' | 'important' | 'recommended';
545
+ /** Explanation of what is missing. */
546
+ message: string;
547
+ /** Suggested fix type for the UI. */
548
+ fixType: 'add_section' | 'add_content' | 'fill_field';
549
+ /** Label for the fix action button. */
550
+ fixLabel: string;
551
+ /** Pre-written content the user can insert to close the gap. */
552
+ suggestedContent?: string;
553
+ }
554
+
455
555
  export declare interface ComplianceInput {
456
556
  consent: {
457
557
  hasConsentMechanism: boolean;
@@ -531,6 +631,22 @@ export declare interface ComplianceReport {
531
631
  generatedAt: string;
532
632
  }
533
633
 
634
+ /** Result of evaluating a policy against NDPA requirements. */
635
+ declare interface ComplianceResult {
636
+ /** Points earned. */
637
+ score: number;
638
+ /** Maximum achievable points (115). */
639
+ maxScore: number;
640
+ /** Percentage score (0-100). */
641
+ percentage: number;
642
+ /** Overall compliance rating. */
643
+ rating: 'compliant' | 'nearly_compliant' | 'not_compliant';
644
+ /** List of identified compliance gaps. */
645
+ gaps: ComplianceGap[];
646
+ /** List of requirement ids that passed. */
647
+ passed: string[];
648
+ }
649
+
534
650
  export declare interface ConsentAnalyticsEvent {
535
651
  action: 'shown' | 'accepted_all' | 'rejected_all' | 'customized' | 'dismissed';
536
652
  timestamp: number;
@@ -1153,6 +1269,29 @@ declare interface CrossBorderTransferManagerProps {
1153
1269
  unstyled?: boolean;
1154
1270
  }
1155
1271
 
1272
+ /** A user-defined section added to the policy outside the generated ones. */
1273
+ declare interface CustomSection {
1274
+ id: string;
1275
+ title: string;
1276
+ content: string;
1277
+ order: number;
1278
+ required: false;
1279
+ }
1280
+
1281
+ /** A logical category of personal data the organisation may collect. */
1282
+ declare interface DataCategory {
1283
+ /** Machine-readable identifier. */
1284
+ id: string;
1285
+ /** Human-readable label shown in the wizard. */
1286
+ label: string;
1287
+ /** Grouping for display and compliance checks. */
1288
+ group: 'identity' | 'financial' | 'behavioral' | 'sensitive' | 'children';
1289
+ /** Specific data points within this category. */
1290
+ dataPoints: string[];
1291
+ /** Whether this category is currently selected by the user. */
1292
+ selected: boolean;
1293
+ }
1294
+
1156
1295
  /**
1157
1296
  * Default NDPA-compliant privacy policy sections.
1158
1297
  * Each section uses {{variable}} placeholders that are resolved at generation time.
@@ -1165,11 +1304,17 @@ export declare const DEFAULT_POLICY_SECTIONS: PolicySection[];
1165
1304
  */
1166
1305
  export declare const DEFAULT_POLICY_VARIABLES: PolicyVariable[];
1167
1306
 
1307
+ /** Options for DOCX export of the finalised policy. */
1308
+ declare interface DOCXExportOptions {
1309
+ includeTOC?: boolean;
1310
+ filename?: string;
1311
+ }
1312
+
1168
1313
  /** A map of question IDs to their answer values */
1169
- declare type DPIAAnswerMap = Record<string, DPIAAnswerValue>;
1314
+ export declare type DPIAAnswerMap = Record<string, DPIAAnswerValue>;
1170
1315
 
1171
1316
  /** Possible value types for a DPIA answer */
1172
- declare type DPIAAnswerValue = string | number | boolean | string[];
1317
+ export declare type DPIAAnswerValue = string | number | boolean | string[];
1173
1318
 
1174
1319
  /**
1175
1320
  * Data Protection Impact Assessment types aligned with NDPA 2023 Sections 38-39
@@ -1214,8 +1359,8 @@ export declare interface DPIAQuestion {
1214
1359
  }
1215
1360
 
1216
1361
  /**
1217
- * DPIA questionnaire component. Implements NDPA Section 38 requirements
1218
- * for conducting Data Protection Impact Assessments on high-risk processing activities.
1362
+ * DPIA questionnaire component. Implements NDPA Section 28 requirements
1363
+ * for conducting Data Privacy Impact Assessments on high-risk processing activities.
1219
1364
  */
1220
1365
  export declare const DPIAQuestionnaire: React__default.FC<DPIAQuestionnaireProps>;
1221
1366
 
@@ -1685,7 +1830,7 @@ export declare interface DSRRequest {
1685
1830
  }
1686
1831
 
1687
1832
  /**
1688
- * Data Subject Request form component. Implements NDPA Part IV, Sections 29-36
1833
+ * Data Subject Request form component. Implements NDPA Part VI (Sections 34-38)
1689
1834
  * covering data subject rights including access, rectification, erasure, and portability.
1690
1835
  */
1691
1836
  export declare const DSRRequestForm: React__default.FC<DSRRequestFormProps>;
@@ -1896,20 +2041,25 @@ declare interface DSRTrackerProps {
1896
2041
  }
1897
2042
 
1898
2043
  /**
1899
- * Data Subject Rights types aligned with NDPA 2023 Part IV (Sections 29-36)
2044
+ * Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
2045
+ * and the related provisions in Part V (Section 27 — information to the data subject)
2046
+ * and Part X (Section 46 — complaint to the Commission).
2047
+ *
2048
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
1900
2049
  */
1901
2050
  /**
1902
- * Types of data subject requests per NDPA Part IV
1903
- * - 'information': Right to be informed (Section 29)
1904
- * - 'access': Right of access (Section 30)
1905
- * - 'rectification': Right to rectification (Section 31)
1906
- * - 'erasure': Right to erasure (Section 32)
1907
- * - 'restriction': Right to restrict processing (Section 33)
1908
- * - 'portability': Right to data portability (Section 34)
1909
- * - 'objection': Right to object (Section 35)
1910
- * - 'automated_decision_making': Rights related to automated decision-making (Section 36)
2051
+ * Types of data subject requests per NDPA Part VI
2052
+ * - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
2053
+ * - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
2054
+ * - 'rectification': Right to rectification (Section 34(1)(c))
2055
+ * - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
2056
+ * - 'restriction': Right to restrict processing (Section 34(1)(e))
2057
+ * - 'portability': Right to data portability (Section 38)
2058
+ * - 'objection': Right to object (Section 36)
2059
+ * - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
2060
+ * - 'withdraw_consent': Right to withdraw consent (Section 35)
1911
2061
  */
1912
- export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
2062
+ export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
1913
2063
 
1914
2064
  export declare type EffortLevel = 'low' | 'medium' | 'high';
1915
2065
 
@@ -1995,6 +2145,33 @@ export declare function getLawfulBasisDescription(basis: LawfulBasis): string;
1995
2145
  */
1996
2146
  export declare function getTransferMechanismDescription(mechanism: TransferMechanism): string;
1997
2147
 
2148
+ /** Options for HTML export of the finalised policy. */
2149
+ declare interface HTMLExportOptions {
2150
+ includeStyles?: boolean;
2151
+ includePrintCSS?: boolean;
2152
+ customCSS?: string;
2153
+ /**
2154
+ * Theme controlling the embedded design tokens.
2155
+ *
2156
+ * - `'light'` (default): emits the light token palette only. No
2157
+ * `prefers-color-scheme: dark` block is included, so a visitor's OS
2158
+ * dark-mode setting will NOT recolour the policy. This is the right
2159
+ * default for an embedded compliance widget — most consumer host sites
2160
+ * are single-theme and Shadow DOM does not isolate `prefers-color-scheme`.
2161
+ * - `'dark'`: emits the dark token palette as the primary style.
2162
+ * - `'auto'`: emits light tokens plus a `@media (prefers-color-scheme: dark)`
2163
+ * block that swaps to dark on the user's OS preference. Use this when
2164
+ * your host site genuinely follows OS dark mode and you want the policy
2165
+ * to match.
2166
+ *
2167
+ * Pre-3.4.1 the export effectively behaved like `'auto'` unconditionally,
2168
+ * which leaked dark colours into light-only host sites via Shadow DOM.
2169
+ *
2170
+ * @default 'light'
2171
+ */
2172
+ theme?: 'light' | 'dark' | 'auto';
2173
+ }
2174
+
1998
2175
  /**
1999
2176
  * Identifies compliance gaps in the Record of Processing Activities.
2000
2177
  * Finds records that are missing required information per NDPA 2023.
@@ -2004,13 +2181,24 @@ export declare function getTransferMechanismDescription(mechanism: TransferMecha
2004
2181
  */
2005
2182
  export declare function identifyComplianceGaps(ropa: RecordOfProcessingActivities): ROPAComplianceGap[];
2006
2183
 
2184
+ /**
2185
+ * Policy engine types for the adaptive privacy policy generator.
2186
+ * These types power the wizard-driven policy builder, compliance checker,
2187
+ * and export functionality — all aligned with the NDPA 2023.
2188
+ */
2189
+
2190
+ /** Industry verticals with sector-specific compliance requirements. */
2191
+ declare type Industry = 'fintech' | 'healthcare' | 'ecommerce' | 'saas' | 'education' | 'government' | 'other';
2192
+
2007
2193
  /**
2008
2194
  * Returns whether NDPC approval is required for a given transfer mechanism.
2009
- * Approval is required for standard contractual clauses (Section 42),
2010
- * binding corporate rules (Section 43), and specific NDPC authorization (Section 44).
2195
+ * Under NDPA Section 42(5), the Commission may approve binding corporate rules,
2196
+ * codes of conduct, certification mechanisms, or similar instruments. Standard
2197
+ * contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
2198
+ * and the Commission may approve them per Section 42(4).
2011
2199
  *
2012
2200
  * @param mechanism The transfer mechanism
2013
- * @returns Whether NDPC approval is required
2201
+ * @returns Whether NDPC approval is typically required
2014
2202
  */
2015
2203
  export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
2016
2204
 
@@ -2151,6 +2339,43 @@ export declare interface LawfulBasisValidationResult {
2151
2339
  warnings: string[];
2152
2340
  }
2153
2341
 
2342
+ /**
2343
+ * Full disclaimer suitable for PDF/DOCX footers and exported artifacts.
2344
+ */
2345
+ export declare const LEGAL_DISCLAIMER_LONG: string;
2346
+
2347
+ /**
2348
+ * Short disclaimer suitable for component captions and dashboard footers.
2349
+ * One line, no markdown.
2350
+ */
2351
+ export declare const LEGAL_DISCLAIMER_SHORT = "Generated for guidance only. Not legal advice \u2014 verify with your DPO or counsel.";
2352
+
2353
+ /**
2354
+ * Returns the long disclaimer wrapped with a leading heading suitable for
2355
+ * embedding at the foot of an exported document.
2356
+ */
2357
+ export declare function legalDisclaimerBlock(heading?: string): string;
2358
+
2359
+ /**
2360
+ * Renders the standard "not legal advice" notice produced by this toolkit.
2361
+ * Use under any component that surfaces an NDPA section citation or generates
2362
+ * an artifact (privacy policy, breach report, DPIA result, etc.).
2363
+ */
2364
+ export declare const LegalNotice: React__default.FC<LegalNoticeProps>;
2365
+
2366
+ export declare interface LegalNoticeProps {
2367
+ /**
2368
+ * Disclaimer length. `short` is a one-liner appropriate for captions and
2369
+ * footers; `long` is the full notice for export documents and dialogs.
2370
+ * @default 'short'
2371
+ */
2372
+ variant?: 'short' | 'long';
2373
+ /** Custom className for the wrapping element */
2374
+ className?: string;
2375
+ /** When true, renders nothing (escape hatch for unstyled mode) */
2376
+ hidden?: boolean;
2377
+ }
2378
+
2154
2379
  /**
2155
2380
  * Represents a Legitimate Interest Assessment (LIA)
2156
2381
  * Required when the lawful basis is 'legitimate_interests'
@@ -2463,6 +2688,38 @@ declare interface OrganizationInfo_2 {
2463
2688
  dpoPhone?: string;
2464
2689
  }
2465
2690
 
2691
+ /** Organisation size tiers — affects complexity of generated language. */
2692
+ declare type OrgSize = 'startup' | 'midsize' | 'enterprise';
2693
+
2694
+ /** Options for PDF export of the finalised policy. */
2695
+ declare interface PDFExportOptions {
2696
+ includeCoverPage?: boolean;
2697
+ includeTOC?: boolean;
2698
+ includeComplianceBadge?: boolean;
2699
+ logoUrl?: string;
2700
+ filename?: string;
2701
+ }
2702
+
2703
+ /** Represents an in-progress policy being built in the wizard. */
2704
+ declare interface PolicyDraft {
2705
+ /** Unique identifier for the draft. */
2706
+ id: string;
2707
+ /** The template context driving section generation. */
2708
+ templateContext: TemplateContext;
2709
+ /** Custom sections added by the user. */
2710
+ customSections: CustomSection[];
2711
+ /** Per-section content overrides keyed by section id. */
2712
+ sectionOverrides: Record<string, string>;
2713
+ /** Ordered list of section ids defining the final order. */
2714
+ sectionOrder: string[];
2715
+ /** Current wizard step (0-indexed). */
2716
+ currentStep: number;
2717
+ /** Timestamp of the last save. */
2718
+ lastSavedAt: number;
2719
+ /** The draft is always in "draft" status until finalised. */
2720
+ status: 'draft';
2721
+ }
2722
+
2466
2723
  export declare const PolicyExporter: React__default.FC<PolicyExporterProps>;
2467
2724
 
2468
2725
  export declare interface PolicyExporterClassNames {
@@ -2922,6 +3179,9 @@ export declare interface ProcessingActivity {
2922
3179
  };
2923
3180
  }
2924
3181
 
3182
+ /** Lawful processing purposes recognised under the NDPA. */
3183
+ declare type ProcessingPurpose = 'service_delivery' | 'marketing' | 'analytics' | 'research' | 'legal_compliance' | 'fraud_prevention';
3184
+
2925
3185
  /**
2926
3186
  * Record of Processing Activities (ROPA) types aligned with NDPA 2023
2927
3187
  * Data controllers must maintain comprehensive records of all processing activities
@@ -3222,7 +3482,9 @@ export declare interface RequestType {
3222
3482
  /** Description of what this request type entails */
3223
3483
  description: string;
3224
3484
  /**
3225
- * NDPA section reference (e.g., "Section 30" for access requests)
3485
+ * NDPA 2023 section reference for this right
3486
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
3487
+ * Used for display purposes only — verify the exact subsection with counsel.
3226
3488
  */
3227
3489
  ndpaSection?: string;
3228
3490
  /**
@@ -3527,6 +3789,42 @@ declare interface StorageAdapter<T = unknown> {
3527
3789
  remove(): void | Promise<void>;
3528
3790
  }
3529
3791
 
3792
+ /** Full context used to generate an adaptive privacy policy. */
3793
+ declare interface TemplateContext {
3794
+ /** Organisation details, extended with industry and size. */
3795
+ org: OrganizationInfo & {
3796
+ industry: Industry;
3797
+ orgSize: OrgSize;
3798
+ country: string;
3799
+ };
3800
+ /** Data categories the organisation collects. */
3801
+ dataCategories: DataCategory[];
3802
+ /** Processing purposes relevant to the organisation. */
3803
+ purposes: ProcessingPurpose[];
3804
+ /** Whether the organisation processes children's data. */
3805
+ hasChildrenData: boolean;
3806
+ /** Whether the organisation processes sensitive/special-category data. */
3807
+ hasSensitiveData: boolean;
3808
+ /** Whether the organisation processes financial data. */
3809
+ hasFinancialData: boolean;
3810
+ /** Whether data is transferred outside Nigeria. */
3811
+ hasCrossBorderTransfer: boolean;
3812
+ /** Whether automated decision-making or profiling is used. */
3813
+ hasAutomatedDecisions: boolean;
3814
+ /** Third-party processors that receive personal data. */
3815
+ thirdPartyProcessors: ThirdPartyProcessor[];
3816
+ }
3817
+
3818
+ /** A third-party entity that processes data on behalf of the organisation. */
3819
+ declare interface ThirdPartyProcessor {
3820
+ /** Name of the third party. */
3821
+ name: string;
3822
+ /** Purpose of sharing data with this processor. */
3823
+ purpose: string;
3824
+ /** Country where the processor is located. */
3825
+ country: string;
3826
+ }
3827
+
3530
3828
  /**
3531
3829
  * Transfer Impact Assessment (TIA) for cross-border transfers
3532
3830
  */
@@ -3570,8 +3868,11 @@ export declare interface TransferImpactAssessment {
3570
3868
  }
3571
3869
 
3572
3870
  /**
3573
- * Cross-Border Data Transfer types aligned with NDPA 2023 Part VI (Sections 41-45)
3574
- * Personal data may only be transferred outside Nigeria under specific conditions
3871
+ * Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
3872
+ * Personal data may only be transferred outside Nigeria under the bases listed in
3873
+ * Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
3874
+ *
3875
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
3575
3876
  */
3576
3877
  /**
3577
3878
  * Transfer mechanisms recognized under the NDPA
@@ -3597,6 +3898,55 @@ export declare interface TransferValidationResult {
3597
3898
  warnings: string[];
3598
3899
  }
3599
3900
 
3901
+ export declare function useAdaptivePolicyWizard(options?: UseAdaptivePolicyWizardOptions): UseAdaptivePolicyWizardReturn;
3902
+
3903
+ export declare interface UseAdaptivePolicyWizardOptions {
3904
+ adapter?: StorageAdapter<PolicyDraft>;
3905
+ onComplete?: (policy: PrivacyPolicy) => void;
3906
+ onComplianceChange?: (score: number, gaps: ComplianceGap[]) => void;
3907
+ }
3908
+
3909
+ export declare interface UseAdaptivePolicyWizardReturn {
3910
+ currentStep: number;
3911
+ goToStep: (step: number) => void;
3912
+ nextStep: () => void;
3913
+ prevStep: () => void;
3914
+ canProceed: boolean;
3915
+ context: TemplateContext;
3916
+ updateContext: (updates: Partial<TemplateContext>) => void;
3917
+ updateOrg: (updates: Partial<TemplateContext['org']>) => void;
3918
+ toggleDataCategory: (categoryId: string) => void;
3919
+ togglePurpose: (purpose: string) => void;
3920
+ addProcessor: (processor: {
3921
+ name: string;
3922
+ purpose: string;
3923
+ country: string;
3924
+ }) => void;
3925
+ removeProcessor: (index: number) => void;
3926
+ policy: PrivacyPolicy | null;
3927
+ sections: PolicySection[];
3928
+ customSections: CustomSection[];
3929
+ addCustomSection: (section: Omit<CustomSection, 'id' | 'required'>) => void;
3930
+ updateCustomSection: (id: string, updates: Partial<CustomSection>) => void;
3931
+ removeCustomSection: (id: string) => void;
3932
+ reorderSections: (sectionId: string, direction: 'up' | 'down') => void;
3933
+ editSectionContent: (sectionId: string, content: string) => void;
3934
+ sectionOverrides: Record<string, string>;
3935
+ complianceScore: number;
3936
+ complianceResult: ComplianceResult;
3937
+ complianceGaps: ComplianceGap[];
3938
+ applyFix: (gapId: string) => void;
3939
+ handleExportPDF: (options?: PDFExportOptions) => Promise<Blob>;
3940
+ handleExportDOCX: (options?: DOCXExportOptions) => Promise<Blob>;
3941
+ handleExportHTML: (options?: HTMLExportOptions) => string;
3942
+ handleExportMarkdown: () => string;
3943
+ isDraftSaved: boolean;
3944
+ lastSavedAt: number | null;
3945
+ saveDraft: () => Promise<void>;
3946
+ discardDraft: () => void;
3947
+ isLoading: boolean;
3948
+ }
3949
+
3600
3950
  /**
3601
3951
  * Hook for managing data breach notifications in compliance with the NDPA (Section 40)
3602
3952
  */
@@ -3705,6 +4055,12 @@ declare interface UseBreachReturn {
3705
4055
  isLoading: boolean;
3706
4056
  }
3707
4057
 
4058
+ export declare function useComplianceScore({ input }: UseComplianceScoreOptions): ComplianceReport;
4059
+
4060
+ declare interface UseComplianceScoreOptions {
4061
+ input: ComplianceInput;
4062
+ }
4063
+
3708
4064
  /**
3709
4065
  * Hook for managing user consent in compliance with NDPA
3710
4066
  */
@@ -4073,9 +4429,10 @@ declare interface UseDSRReturn {
4073
4429
  */
4074
4430
  requests: DSRRequest[];
4075
4431
  /**
4076
- * Submit a new request
4432
+ * Submit a new request. The hook assigns `id`, `status`, `createdAt`,
4433
+ * `updatedAt`, and `dueDate` — pass everything else.
4077
4434
  */
4078
- submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'submittedAt' | 'updatedAt' | 'estimatedCompletionDate'>) => DSRRequest;
4435
+ submitRequest: (requestData: Omit<DSRRequest, 'id' | 'status' | 'createdAt' | 'updatedAt' | 'dueDate'>) => DSRRequest;
4079
4436
  /**
4080
4437
  * Update an existing request
4081
4438
  */
@@ -4087,7 +4444,12 @@ declare interface UseDSRReturn {
4087
4444
  /**
4088
4445
  * Get requests by status
4089
4446
  */
4090
- getRequestsByStatus: (status: RequestStatus) => DSRRequest[];
4447
+ /**
4448
+ * Filter requests by status. Accepts both the modern `DSRStatus` union and
4449
+ * the deprecated `RequestStatus` for backward compatibility — pass the
4450
+ * modern values (`'pending' | 'awaitingVerification' | 'inProgress' | ...`).
4451
+ */
4452
+ getRequestsByStatus: (status: DSRStatus | RequestStatus) => DSRRequest[];
4091
4453
  /**
4092
4454
  * Get requests by type
4093
4455
  */
@@ -4110,6 +4472,40 @@ declare interface UseDSRReturn {
4110
4472
  isLoading: boolean;
4111
4473
  }
4112
4474
 
4475
+ /**
4476
+ * Trap keyboard focus inside a container while it is active, and restore
4477
+ * focus to the element that was active before activation when the container
4478
+ * deactivates. Centralises the trap/restore logic that was previously
4479
+ * duplicated (and broken — no restore) inside ConsentBanner.
4480
+ *
4481
+ * @example
4482
+ * ```tsx
4483
+ * const ref = useFocusTrap<HTMLDivElement>({ active: isOpen, onEscape: close });
4484
+ * return <div ref={ref}>...</div>;
4485
+ * ```
4486
+ */
4487
+ export declare function useFocusTrap<T extends HTMLElement = HTMLElement>(options: UseFocusTrapOptions): RefObject<T | null>;
4488
+
4489
+ export declare interface UseFocusTrapOptions {
4490
+ /**
4491
+ * Whether the focus trap is active. When transitioning from false → true,
4492
+ * the hook captures `document.activeElement` and moves focus into the
4493
+ * container; when transitioning back to false, the captured element is
4494
+ * re-focused (WCAG 2.4.3 — focus order).
4495
+ */
4496
+ active: boolean;
4497
+ /**
4498
+ * Optional callback fired on Escape keydown while the trap is active.
4499
+ * Typical use is to close the surrounding dialog.
4500
+ */
4501
+ onEscape?: () => void;
4502
+ /**
4503
+ * If false, do not auto-focus the first interactive element inside the
4504
+ * container on activation. Defaults to true.
4505
+ */
4506
+ autoFocus?: boolean;
4507
+ }
4508
+
4113
4509
  /**
4114
4510
  * Hook for managing lawful basis documentation for processing activities
4115
4511
  * in compliance with NDPA 2023 Section 25.
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- 'use strict';var chunkLWXZMKC2_js=require('./chunk-LWXZMKC2.js'),chunkHGGLW5TE_js=require('./chunk-HGGLW5TE.js'),chunkLSNL4XR5_js=require('./chunk-LSNL4XR5.js'),chunkNQNFS3QI_js=require('./chunk-NQNFS3QI.js'),chunkXNSZ7KUH_js=require('./chunk-XNSZ7KUH.js'),chunkRXL6CZAI_js=require('./chunk-RXL6CZAI.js');require('./chunk-C5QO3SX4.js');var chunkTV4U6AIS_js=require('./chunk-TV4U6AIS.js'),chunk7AVN424U_js=require('./chunk-7AVN424U.js'),chunkMCWV7S2G_js=require('./chunk-MCWV7S2G.js'),chunkM2TPT5GB_js=require('./chunk-M2TPT5GB.js'),chunkLIM64IV2_js=require('./chunk-LIM64IV2.js'),chunkS4GRSNB4_js=require('./chunk-S4GRSNB4.js');require('./chunk-CPK5D5FY.js');var chunkTDDAYVKK_js=require('./chunk-TDDAYVKK.js'),chunkC4YM4UMI_js=require('./chunk-C4YM4UMI.js'),chunkGOU6FU6Y_js=require('./chunk-GOU6FU6Y.js'),chunk3NQQSU4P_js=require('./chunk-3NQQSU4P.js'),chunkRLYTX3MM_js=require('./chunk-RLYTX3MM.js'),chunkXIM7KMD6_js=require('./chunk-XIM7KMD6.js'),chunkMJGOLP5M_js=require('./chunk-MJGOLP5M.js'),chunk7SMLHZ4B_js=require('./chunk-7SMLHZ4B.js');require('./chunk-A4PK7JB2.js');var chunkHO5M7M4M_js=require('./chunk-HO5M7M4M.js'),chunkVIQUXWJC_js=require('./chunk-VIQUXWJC.js'),chunkZPKVLTSX_js=require('./chunk-ZPKVLTSX.js'),chunkCKJAECGV_js=require('./chunk-CKJAECGV.js'),chunkJ5WCPZLW_js=require('./chunk-J5WCPZLW.js'),chunk3VQAYQR7_js=require('./chunk-3VQAYQR7.js'),chunk5HL4UBFV_js=require('./chunk-5HL4UBFV.js'),chunkOPYQIJKY_js=require('./chunk-OPYQIJKY.js'),chunkP42Z5CFE_js=require('./chunk-P42Z5CFE.js'),chunkSKKOMFXH_js=require('./chunk-SKKOMFXH.js'),chunkWTJGLNTB_js=require('./chunk-WTJGLNTB.js'),chunkI4M2AA3N_js=require('./chunk-I4M2AA3N.js'),chunkBKRETVJ6_js=require('./chunk-BKRETVJ6.js'),chunkI54CDQGN_js=require('./chunk-I54CDQGN.js'),chunkE64TU6IU_js=require('./chunk-E64TU6IU.js');require('./chunk-ELKB2AFZ.js'),require('./chunk-MQFZHA2D.js');Object.defineProperty(exports,"PolicyExporter",{enumerable:true,get:function(){return chunkLWXZMKC2_js.c}});Object.defineProperty(exports,"PolicyGenerator",{enumerable:true,get:function(){return chunkLWXZMKC2_js.a}});Object.defineProperty(exports,"PolicyPreview",{enumerable:true,get:function(){return chunkLWXZMKC2_js.b}});Object.defineProperty(exports,"NDPRDashboard",{enumerable:true,get:function(){return chunkHGGLW5TE_js.a}});Object.defineProperty(exports,"LawfulBasisTracker",{enumerable:true,get:function(){return chunkLSNL4XR5_js.a}});Object.defineProperty(exports,"CrossBorderTransferManager",{enumerable:true,get:function(){return chunkNQNFS3QI_js.a}});Object.defineProperty(exports,"ROPAManager",{enumerable:true,get:function(){return chunkXNSZ7KUH_js.a}});Object.defineProperty(exports,"NDPRProvider",{enumerable:true,get:function(){return chunkRXL6CZAI_js.a}});Object.defineProperty(exports,"useNDPRConfig",{enumerable:true,get:function(){return chunkRXL6CZAI_js.b}});Object.defineProperty(exports,"useDefaultPrivacyPolicy",{enumerable:true,get:function(){return chunkTV4U6AIS_js.b}});Object.defineProperty(exports,"usePrivacyPolicy",{enumerable:true,get:function(){return chunkTV4U6AIS_js.a}});Object.defineProperty(exports,"useLawfulBasis",{enumerable:true,get:function(){return chunk7AVN424U_js.a}});Object.defineProperty(exports,"useCrossBorderTransfer",{enumerable:true,get:function(){return chunkMCWV7S2G_js.a}});Object.defineProperty(exports,"useROPA",{enumerable:true,get:function(){return chunkM2TPT5GB_js.a}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkLIM64IV2_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkLIM64IV2_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkLIM64IV2_js.e}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkLIM64IV2_js.b}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunkS4GRSNB4_js.a}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkTDDAYVKK_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkTDDAYVKK_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkTDDAYVKK_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkTDDAYVKK_js.a}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkC4YM4UMI_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkC4YM4UMI_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkC4YM4UMI_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkC4YM4UMI_js.g}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunkGOU6FU6Y_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunkGOU6FU6Y_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunkGOU6FU6Y_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunkGOU6FU6Y_js.a}});Object.defineProperty(exports,"ConsentStorage",{enumerable:true,get:function(){return chunk3NQQSU4P_js.a}});Object.defineProperty(exports,"ConsentManager",{enumerable:true,get:function(){return chunkRLYTX3MM_js.a}});Object.defineProperty(exports,"ConsentBanner",{enumerable:true,get:function(){return chunkXIM7KMD6_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunkMJGOLP5M_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunkMJGOLP5M_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunkMJGOLP5M_js.b}});Object.defineProperty(exports,"useConsent",{enumerable:true,get:function(){return chunk7SMLHZ4B_js.a}});Object.defineProperty(exports,"validateConsent",{enumerable:true,get:function(){return chunkHO5M7M4M_js.a}});Object.defineProperty(exports,"validateConsentOptions",{enumerable:true,get:function(){return chunkHO5M7M4M_js.b}});Object.defineProperty(exports,"DSRDashboard",{enumerable:true,get:function(){return chunkVIQUXWJC_js.a}});Object.defineProperty(exports,"DSRTracker",{enumerable:true,get:function(){return chunkVIQUXWJC_js.b}});Object.defineProperty(exports,"DSRRequestForm",{enumerable:true,get:function(){return chunkZPKVLTSX_js.a}});Object.defineProperty(exports,"useDSR",{enumerable:true,get:function(){return chunkCKJAECGV_js.a}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkJ5WCPZLW_js.b}});Object.defineProperty(exports,"DPIAReport",{enumerable:true,get:function(){return chunk3VQAYQR7_js.a}});Object.defineProperty(exports,"StepIndicator",{enumerable:true,get:function(){return chunk3VQAYQR7_js.b}});Object.defineProperty(exports,"DPIAQuestionnaire",{enumerable:true,get:function(){return chunk5HL4UBFV_js.a}});Object.defineProperty(exports,"useDPIA",{enumerable:true,get:function(){return chunkOPYQIJKY_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkP42Z5CFE_js.a}});Object.defineProperty(exports,"BreachNotificationManager",{enumerable:true,get:function(){return chunkSKKOMFXH_js.b}});Object.defineProperty(exports,"BreachRiskAssessment",{enumerable:true,get:function(){return chunkSKKOMFXH_js.a}});Object.defineProperty(exports,"RegulatoryReportGenerator",{enumerable:true,get:function(){return chunkSKKOMFXH_js.c}});Object.defineProperty(exports,"BreachReportForm",{enumerable:true,get:function(){return chunkWTJGLNTB_js.a}});Object.defineProperty(exports,"useBreach",{enumerable:true,get:function(){return chunkI4M2AA3N_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunkBKRETVJ6_js.a}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkI54CDQGN_js.a}});Object.defineProperty(exports,"resolveClass",{enumerable:true,get:function(){return chunkE64TU6IU_js.a}});//# sourceMappingURL=index.js.map
3
- //# sourceMappingURL=index.js.map
2
+ 'use strict';var chunkXO3VQYTL_js=require('./chunk-XO3VQYTL.js'),chunkNUWVPRNI_js=require('./chunk-NUWVPRNI.js'),chunkPZRQWPWD_js=require('./chunk-PZRQWPWD.js'),chunkI3Y4LOSL_js=require('./chunk-I3Y4LOSL.js'),chunk5GVMKUMP_js=require('./chunk-5GVMKUMP.js'),chunkUAV7V4EM_js=require('./chunk-UAV7V4EM.js');require('./chunk-7IFSWCQP.js');var chunkRYREGZVQ_js=require('./chunk-RYREGZVQ.js'),chunkZ763UI5U_js=require('./chunk-Z763UI5U.js'),chunkUTFBKL73_js=require('./chunk-UTFBKL73.js'),chunkHHK5LHEG_js=require('./chunk-HHK5LHEG.js'),chunk3JPDTXGC_js=require('./chunk-3JPDTXGC.js'),chunkUI536RU2_js=require('./chunk-UI536RU2.js');require('./chunk-N3MQQUQP.js');var chunkLVGT3DLT_js=require('./chunk-LVGT3DLT.js'),chunkQPRYXVH2_js=require('./chunk-QPRYXVH2.js');require('./chunk-Q64735OC.js');var chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunkSJDDNB6M_js=require('./chunk-SJDDNB6M.js'),chunkBRS52EDT_js=require('./chunk-BRS52EDT.js'),chunk732C2EVN_js=require('./chunk-732C2EVN.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunkP4LNLCSF_js=require('./chunk-P4LNLCSF.js'),chunkL2VO3MEJ_js=require('./chunk-L2VO3MEJ.js');require('./chunk-7ZZO7GVB.js');var chunkB46SJB5V_js=require('./chunk-B46SJB5V.js'),chunkCR2QZTGW_js=require('./chunk-CR2QZTGW.js'),chunkW47OSMT6_js=require('./chunk-W47OSMT6.js'),chunkHBLGN4SD_js=require('./chunk-HBLGN4SD.js'),chunkL2BRFMVS_js=require('./chunk-L2BRFMVS.js'),chunkEZCGTHQV_js=require('./chunk-EZCGTHQV.js'),chunkWDDCKYWA_js=require('./chunk-WDDCKYWA.js'),chunkC7IDR2IV_js=require('./chunk-C7IDR2IV.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunkPGI2LM6P_js=require('./chunk-PGI2LM6P.js'),chunkS6COXIZA_js=require('./chunk-S6COXIZA.js'),chunkVJTQXVAF_js=require('./chunk-VJTQXVAF.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunkAME4HJR4_js=require('./chunk-AME4HJR4.js');require('./chunk-VWED6UTN.js'),require('./chunk-RFPLZDIO.js');var jsxRuntime=require('react/jsx-runtime');var xe=({variant:t="short",className:e,hidden:s})=>{if(s)return null;let a=t==="long"?chunkZVOIR4QH_js.b:chunkZVOIR4QH_js.a;return jsxRuntime.jsx("p",{role:"note",className:e!=null?e:"ndpr-legal-notice","data-ndpr-legal-notice":t,children:a})};Object.defineProperty(exports,"PolicyExporter",{enumerable:true,get:function(){return chunkXO3VQYTL_js.c}});Object.defineProperty(exports,"PolicyGenerator",{enumerable:true,get:function(){return chunkXO3VQYTL_js.a}});Object.defineProperty(exports,"PolicyPreview",{enumerable:true,get:function(){return chunkXO3VQYTL_js.b}});Object.defineProperty(exports,"NDPRDashboard",{enumerable:true,get:function(){return chunkNUWVPRNI_js.a}});Object.defineProperty(exports,"LawfulBasisTracker",{enumerable:true,get:function(){return chunkPZRQWPWD_js.a}});Object.defineProperty(exports,"CrossBorderTransferManager",{enumerable:true,get:function(){return chunkI3Y4LOSL_js.a}});Object.defineProperty(exports,"ROPAManager",{enumerable:true,get:function(){return chunk5GVMKUMP_js.a}});Object.defineProperty(exports,"NDPRProvider",{enumerable:true,get:function(){return chunkUAV7V4EM_js.a}});Object.defineProperty(exports,"useNDPRConfig",{enumerable:true,get:function(){return chunkUAV7V4EM_js.b}});Object.defineProperty(exports,"useComplianceScore",{enumerable:true,get:function(){return chunkRYREGZVQ_js.a}});Object.defineProperty(exports,"useDefaultPrivacyPolicy",{enumerable:true,get:function(){return chunkZ763UI5U_js.b}});Object.defineProperty(exports,"usePrivacyPolicy",{enumerable:true,get:function(){return chunkZ763UI5U_js.a}});Object.defineProperty(exports,"useLawfulBasis",{enumerable:true,get:function(){return chunkUTFBKL73_js.a}});Object.defineProperty(exports,"useCrossBorderTransfer",{enumerable:true,get:function(){return chunkHHK5LHEG_js.a}});Object.defineProperty(exports,"useROPA",{enumerable:true,get:function(){return chunk3JPDTXGC_js.a}});Object.defineProperty(exports,"useAdaptivePolicyWizard",{enumerable:true,get:function(){return chunkUI536RU2_js.a}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkLVGT3DLT_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkLVGT3DLT_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkLVGT3DLT_js.e}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkLVGT3DLT_js.b}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunkQPRYXVH2_js.a}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkWZYCBW2R_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkWZYCBW2R_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkWZYCBW2R_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkWZYCBW2R_js.a}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunk4CVBQC66_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunk4CVBQC66_js.a}});Object.defineProperty(exports,"ConsentStorage",{enumerable:true,get:function(){return chunkSJDDNB6M_js.a}});Object.defineProperty(exports,"ConsentManager",{enumerable:true,get:function(){return chunkBRS52EDT_js.a}});Object.defineProperty(exports,"ConsentBanner",{enumerable:true,get:function(){return chunk732C2EVN_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunk3IA3KDII_js.b}});Object.defineProperty(exports,"useConsent",{enumerable:true,get:function(){return chunkP4LNLCSF_js.a}});Object.defineProperty(exports,"useFocusTrap",{enumerable:true,get:function(){return chunkL2VO3MEJ_js.a}});Object.defineProperty(exports,"validateConsent",{enumerable:true,get:function(){return chunkB46SJB5V_js.a}});Object.defineProperty(exports,"validateConsentOptions",{enumerable:true,get:function(){return chunkB46SJB5V_js.b}});Object.defineProperty(exports,"DSRDashboard",{enumerable:true,get:function(){return chunkCR2QZTGW_js.a}});Object.defineProperty(exports,"DSRTracker",{enumerable:true,get:function(){return chunkCR2QZTGW_js.b}});Object.defineProperty(exports,"DSRRequestForm",{enumerable:true,get:function(){return chunkW47OSMT6_js.a}});Object.defineProperty(exports,"useDSR",{enumerable:true,get:function(){return chunkHBLGN4SD_js.a}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkL2BRFMVS_js.b}});Object.defineProperty(exports,"DPIAReport",{enumerable:true,get:function(){return chunkEZCGTHQV_js.a}});Object.defineProperty(exports,"StepIndicator",{enumerable:true,get:function(){return chunkEZCGTHQV_js.b}});Object.defineProperty(exports,"DPIAQuestionnaire",{enumerable:true,get:function(){return chunkWDDCKYWA_js.a}});Object.defineProperty(exports,"useDPIA",{enumerable:true,get:function(){return chunkC7IDR2IV_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});Object.defineProperty(exports,"BreachNotificationManager",{enumerable:true,get:function(){return chunkPGI2LM6P_js.b}});Object.defineProperty(exports,"BreachRiskAssessment",{enumerable:true,get:function(){return chunkPGI2LM6P_js.a}});Object.defineProperty(exports,"RegulatoryReportGenerator",{enumerable:true,get:function(){return chunkPGI2LM6P_js.c}});Object.defineProperty(exports,"BreachReportForm",{enumerable:true,get:function(){return chunkS6COXIZA_js.a}});Object.defineProperty(exports,"useBreach",{enumerable:true,get:function(){return chunkVJTQXVAF_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunk3YTAOT5O_js.a}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkUXUMYP4L_js.a}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_LONG",{enumerable:true,get:function(){return chunkZVOIR4QH_js.b}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_SHORT",{enumerable:true,get:function(){return chunkZVOIR4QH_js.a}});Object.defineProperty(exports,"legalDisclaimerBlock",{enumerable:true,get:function(){return chunkZVOIR4QH_js.c}});Object.defineProperty(exports,"resolveClass",{enumerable:true,get:function(){return chunkAME4HJR4_js.a}});exports.LegalNotice=xe;