@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/server.d.ts CHANGED
@@ -139,10 +139,51 @@ export declare interface BreachReport {
139
139
  affectedSystems: string[];
140
140
  /** Types of data involved in the breach */
141
141
  dataTypes: string[];
142
- /** Whether sensitive personal data is involved (NDPA Section 27) */
142
+ /** Whether sensitive personal data is involved (NDPA Section 30) */
143
143
  involvesSensitiveData?: boolean;
144
144
  /** Estimated number of data subjects affected */
145
145
  estimatedAffectedSubjects?: number;
146
+ /**
147
+ * Approximate number of personal data RECORDS concerned (distinct from subject count).
148
+ * Required content under NDPA Section 40(1)(a) and Section 40(2).
149
+ */
150
+ approximateRecordCount?: number;
151
+ /**
152
+ * Categories of data subjects affected (e.g. customers, employees, minors, patients).
153
+ * Required content under NDPA Section 40(1)(a) and Section 40(2).
154
+ */
155
+ dataSubjectCategories?: string[];
156
+ /**
157
+ * Likely consequences of the breach for affected data subjects (e.g. identity theft,
158
+ * financial loss, reputational damage). Reported to the NDPC and, where applicable,
159
+ * communicated to data subjects under Section 40(3).
160
+ */
161
+ likelyConsequences?: string;
162
+ /**
163
+ * Measures taken or proposed to mitigate adverse effects of the breach.
164
+ * Required content for Section 40(3) communications to data subjects.
165
+ */
166
+ mitigationMeasures?: string;
167
+ /**
168
+ * Whether this is a phased / interim report submitted before full investigation
169
+ * is complete. The NDPC permits phased reporting where complete information is
170
+ * not available within 72 hours.
171
+ */
172
+ isPhasedReport?: boolean;
173
+ /**
174
+ * ID of the prior phased report this report supplements, if any.
175
+ */
176
+ supplementsReportId?: string;
177
+ /**
178
+ * Data Protection Officer contact details. The DPO is the named contact point
179
+ * for the NDPC per NDPA Section 32(3)(c). Required content in the regulatory
180
+ * report (Section 40(2)).
181
+ */
182
+ dpoContact?: {
183
+ name: string;
184
+ email: string;
185
+ phone?: string;
186
+ };
146
187
  /** Whether the breach is ongoing or contained */
147
188
  status: 'ongoing' | 'contained' | 'resolved';
148
189
  /** Initial actions taken to address the breach */
@@ -823,20 +864,25 @@ export declare interface DsrSubmissionValidationResult {
823
864
  }
824
865
 
825
866
  /**
826
- * Data Subject Rights types aligned with NDPA 2023 Part IV (Sections 29-36)
867
+ * Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
868
+ * and the related provisions in Part V (Section 27 — information to the data subject)
869
+ * and Part X (Section 46 — complaint to the Commission).
870
+ *
871
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
827
872
  */
828
873
  /**
829
- * Types of data subject requests per NDPA Part IV
830
- * - 'information': Right to be informed (Section 29)
831
- * - 'access': Right of access (Section 30)
832
- * - 'rectification': Right to rectification (Section 31)
833
- * - 'erasure': Right to erasure (Section 32)
834
- * - 'restriction': Right to restrict processing (Section 33)
835
- * - 'portability': Right to data portability (Section 34)
836
- * - 'objection': Right to object (Section 35)
837
- * - 'automated_decision_making': Rights related to automated decision-making (Section 36)
874
+ * Types of data subject requests per NDPA Part VI
875
+ * - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
876
+ * - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
877
+ * - 'rectification': Right to rectification (Section 34(1)(c))
878
+ * - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
879
+ * - 'restriction': Right to restrict processing (Section 34(1)(e))
880
+ * - 'portability': Right to data portability (Section 38)
881
+ * - 'objection': Right to object (Section 36)
882
+ * - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
883
+ * - 'withdraw_consent': Right to withdraw consent (Section 35)
838
884
  */
839
- export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
885
+ export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
840
886
 
841
887
  export declare type EffortLevel = 'low' | 'medium' | 'high';
842
888
 
@@ -1100,11 +1146,13 @@ export declare type Industry = 'fintech' | 'healthcare' | 'ecommerce' | 'saas' |
1100
1146
 
1101
1147
  /**
1102
1148
  * Returns whether NDPC approval is required for a given transfer mechanism.
1103
- * Approval is required for standard contractual clauses (Section 42),
1104
- * binding corporate rules (Section 43), and specific NDPC authorization (Section 44).
1149
+ * Under NDPA Section 42(5), the Commission may approve binding corporate rules,
1150
+ * codes of conduct, certification mechanisms, or similar instruments. Standard
1151
+ * contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
1152
+ * and the Commission may approve them per Section 42(4).
1105
1153
  *
1106
1154
  * @param mechanism The transfer mechanism
1107
- * @returns Whether NDPC approval is required
1155
+ * @returns Whether NDPC approval is typically required
1108
1156
  */
1109
1157
  export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
1110
1158
 
@@ -1162,6 +1210,23 @@ export declare interface LawfulBasisValidationResult {
1162
1210
  warnings: string[];
1163
1211
  }
1164
1212
 
1213
+ /**
1214
+ * Full disclaimer suitable for PDF/DOCX footers and exported artifacts.
1215
+ */
1216
+ export declare const LEGAL_DISCLAIMER_LONG: string;
1217
+
1218
+ /**
1219
+ * Short disclaimer suitable for component captions and dashboard footers.
1220
+ * One line, no markdown.
1221
+ */
1222
+ export declare const LEGAL_DISCLAIMER_SHORT = "Generated for guidance only. Not legal advice \u2014 verify with your DPO or counsel.";
1223
+
1224
+ /**
1225
+ * Returns the long disclaimer wrapped with a leading heading suitable for
1226
+ * embedding at the foot of an exported document.
1227
+ */
1228
+ export declare function legalDisclaimerBlock(heading?: string): string;
1229
+
1165
1230
  /**
1166
1231
  * Represents a Legitimate Interest Assessment (LIA)
1167
1232
  * Required when the lawful basis is 'legitimate_interests'
@@ -1770,7 +1835,9 @@ export declare interface RequestType {
1770
1835
  /** Description of what this request type entails */
1771
1836
  description: string;
1772
1837
  /**
1773
- * NDPA section reference (e.g., "Section 30" for access requests)
1838
+ * NDPA 2023 section reference for this right
1839
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
1840
+ * Used for display purposes only — verify the exact subsection with counsel.
1774
1841
  */
1775
1842
  ndpaSection?: string;
1776
1843
  /**
@@ -1978,8 +2045,11 @@ export declare interface TransferImpactAssessment {
1978
2045
  }
1979
2046
 
1980
2047
  /**
1981
- * Cross-Border Data Transfer types aligned with NDPA 2023 Part VI (Sections 41-45)
1982
- * Personal data may only be transferred outside Nigeria under specific conditions
2048
+ * Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
2049
+ * Personal data may only be transferred outside Nigeria under the bases listed in
2050
+ * Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
2051
+ *
2052
+ * Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
1983
2053
  */
1984
2054
  /**
1985
2055
  * Transfer mechanisms recognized under the NDPA
@@ -2090,7 +2160,7 @@ export declare interface ValidateDsrSubmissionOptions {
2090
2160
  /**
2091
2161
  * Allowed request types. When provided, the payload's `requestType`
2092
2162
  * must be one of these — useful for locking the server to a specific
2093
- * set of supported NDPA Part IV §29-36 rights.
2163
+ * set of supported NDPA Part VI §34-38 (plus §35, §36, §37) data-subject rights.
2094
2164
  */
2095
2165
  allowedRequestTypes?: string[];
2096
2166
  }
package/dist/server.js CHANGED
@@ -1,2 +1 @@
1
- 'use strict';var chunkJBSCER34_js=require('./chunk-JBSCER34.js'),chunk6QPRDQZF_js=require('./chunk-6QPRDQZF.js'),chunkC5QO3SX4_js=require('./chunk-C5QO3SX4.js'),chunkZ73T6MWY_js=require('./chunk-Z73T6MWY.js'),chunkYPKUHSK4_js=require('./chunk-YPKUHSK4.js'),chunkLIM64IV2_js=require('./chunk-LIM64IV2.js'),chunkS4GRSNB4_js=require('./chunk-S4GRSNB4.js'),chunkCPK5D5FY_js=require('./chunk-CPK5D5FY.js'),chunkTDDAYVKK_js=require('./chunk-TDDAYVKK.js'),chunkC4YM4UMI_js=require('./chunk-C4YM4UMI.js'),chunkGOU6FU6Y_js=require('./chunk-GOU6FU6Y.js'),chunkMJGOLP5M_js=require('./chunk-MJGOLP5M.js'),chunkA4PK7JB2_js=require('./chunk-A4PK7JB2.js'),chunkHO5M7M4M_js=require('./chunk-HO5M7M4M.js'),chunkJ5WCPZLW_js=require('./chunk-J5WCPZLW.js'),chunkP42Z5CFE_js=require('./chunk-P42Z5CFE.js'),chunkBKRETVJ6_js=require('./chunk-BKRETVJ6.js'),chunkI54CDQGN_js=require('./chunk-I54CDQGN.js'),chunkELKB2AFZ_js=require('./chunk-ELKB2AFZ.js');require('./chunk-MQFZHA2D.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunkJBSCER34_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunkJBSCER34_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunkJBSCER34_js.b}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunk6QPRDQZF_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunk6QPRDQZF_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunk6QPRDQZF_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunk6QPRDQZF_js.a}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunkC5QO3SX4_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunkC5QO3SX4_js.b}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkZ73T6MWY_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkZ73T6MWY_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkZ73T6MWY_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkZ73T6MWY_js.c}});Object.defineProperty(exports,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunkYPKUHSK4_js.a}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunkYPKUHSK4_js.b}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunkYPKUHSK4_js.c}});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,"findUnfilledTokens",{enumerable:true,get:function(){return chunkLIM64IV2_js.a}});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,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunkCPK5D5FY_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunkCPK5D5FY_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunkCPK5D5FY_js.c}});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,"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,"cookieAdapter",{enumerable:true,get:function(){return chunkA4PK7JB2_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunkA4PK7JB2_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,"formatDSRRequest",{enumerable:true,get:function(){return chunkJ5WCPZLW_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkJ5WCPZLW_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkP42Z5CFE_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,"localStorageAdapter",{enumerable:true,get:function(){return chunkELKB2AFZ_js.a}});//# sourceMappingURL=server.js.map
2
- //# sourceMappingURL=server.js.map
1
+ 'use strict';var chunk6NXXQYQL_js=require('./chunk-6NXXQYQL.js'),chunk4QXTB3L6_js=require('./chunk-4QXTB3L6.js'),chunk7IFSWCQP_js=require('./chunk-7IFSWCQP.js'),chunkN3MQQUQP_js=require('./chunk-N3MQQUQP.js'),chunkLVGT3DLT_js=require('./chunk-LVGT3DLT.js'),chunkQPRYXVH2_js=require('./chunk-QPRYXVH2.js'),chunkQ64735OC_js=require('./chunk-Q64735OC.js'),chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunk7ZZO7GVB_js=require('./chunk-7ZZO7GVB.js'),chunkB46SJB5V_js=require('./chunk-B46SJB5V.js'),chunkL2BRFMVS_js=require('./chunk-L2BRFMVS.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunk6NXXQYQL_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunk6NXXQYQL_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunk6NXXQYQL_js.b}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.a}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.b}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkN3MQQUQP_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkN3MQQUQP_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkN3MQQUQP_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkN3MQQUQP_js.c}});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,"findUnfilledTokens",{enumerable:true,get:function(){return chunkLVGT3DLT_js.a}});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,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunkQ64735OC_js.d}});Object.defineProperty(exports,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunkQ64735OC_js.c}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunkQ64735OC_js.e}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunkQ64735OC_js.f}});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,"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,"cookieAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_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,"formatDSRRequest",{enumerable:true,get:function(){return chunkL2BRFMVS_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkL2BRFMVS_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_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,"localStorageAdapter",{enumerable:true,get:function(){return chunkVWED6UTN_js.a}});
package/dist/server.mjs CHANGED
@@ -1,2 +1 @@
1
- export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-RY3PGVLZ.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-R5FW5XUQ.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-XHROISIF.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-JFFOPHU3.mjs';export{a as DEFAULT_DATA_CATEGORIES,b as createDefaultContext,c as evaluatePolicyCompliance}from'./chunk-I557S566.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-CKGJK4D7.mjs';export{a as getComplianceScore}from'./chunk-ABDB7LEV.mjs';export{a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy}from'./chunk-GRLIPT5V.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-TXBZPCGF.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-75TJPK2N.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-SHMJNRHO.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-P3PULLYP.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-R3OYAJI6.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-U62QYKVG.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-B4Z5MBUC.mjs';export{a as assessDPIARisk}from'./chunk-6TA2MVTU.mjs';export{a as calculateBreachSeverity}from'./chunk-DJGS7SSN.mjs';export{a as sanitizeInput}from'./chunk-GKKAK6ES.mjs';export{a as localStorageAdapter}from'./chunk-6WIP33TW.mjs';import'./chunk-WWT2ZSNU.mjs';//# sourceMappingURL=server.mjs.map
2
- //# sourceMappingURL=server.mjs.map
1
+ export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-NBZUZYTB.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-LQTARVPU.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-HWHBINVN.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-AOHKVFAS.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-Y3MKMAFQ.mjs';export{a as getComplianceScore}from'./chunk-EFIBHKQE.mjs';export{d as DEFAULT_DATA_CATEGORIES,a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-RMQ7OLNY.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-UASG46LP.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-PJNKQPQP.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-RZ6GC6WN.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';export{a as localStorageAdapter}from'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';
package/dist/styles.css CHANGED
@@ -1440,3 +1440,37 @@
1440
1440
  .ndpr-font-medium { font-weight: 500; }
1441
1441
  .ndpr-font-semibold { font-weight: 600; }
1442
1442
  .ndpr-font-bold { font-weight: 700; }
1443
+
1444
+ /* ==========================================================================
1445
+ * Accessibility — respect prefers-reduced-motion (WCAG 2.3.3)
1446
+ *
1447
+ * Users with vestibular-motion sensitivities can opt out of animation at the
1448
+ * OS level. When they do, neutralise every animation and transition the
1449
+ * toolkit ships so banners, dialogs, dashboards, and policy previews appear
1450
+ * without movement. Applies to all toolkit elements via the `[data-ndpr-*]`
1451
+ * attribute hooks that components emit, but we also widen to '*' below
1452
+ * because not every animated element carries one.
1453
+ * ========================================================================== */
1454
+ @media (prefers-reduced-motion: reduce) {
1455
+ .ndpr-banner,
1456
+ .ndpr-modal,
1457
+ .ndpr-modal__panel,
1458
+ .ndpr-modal__overlay,
1459
+ .ndpr-dialog,
1460
+ .ndpr-consent-banner,
1461
+ .ndpr-consent-manager,
1462
+ .ndpr-dsr-dashboard,
1463
+ .ndpr-dpia-questionnaire,
1464
+ .ndpr-breach-form,
1465
+ .ndpr-policy-preview,
1466
+ .animate-slide-in,
1467
+ .animate-slide-in-top,
1468
+ .animate-fade-in,
1469
+ [class*="ndpr-"] *,
1470
+ [data-ndpr-legal-notice] {
1471
+ animation-duration: 0.001ms !important;
1472
+ animation-iteration-count: 1 !important;
1473
+ transition-duration: 0.001ms !important;
1474
+ scroll-behavior: auto !important;
1475
+ }
1476
+ }
@@ -499,7 +499,9 @@ declare interface RequestType {
499
499
  /** Description of what this request type entails */
500
500
  description: string;
501
501
  /**
502
- * NDPA section reference (e.g., "Section 30" for access requests)
502
+ * NDPA 2023 section reference for this right
503
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
504
+ * Used for display purposes only — verify the exact subsection with counsel.
503
505
  */
504
506
  ndpaSection?: string;
505
507
  /**
@@ -499,7 +499,9 @@ declare interface RequestType {
499
499
  /** Description of what this request type entails */
500
500
  description: string;
501
501
  /**
502
- * NDPA section reference (e.g., "Section 30" for access requests)
502
+ * NDPA 2023 section reference for this right
503
+ * (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
504
+ * Used for display purposes only — verify the exact subsection with counsel.
503
505
  */
504
506
  ndpaSection?: string;
505
507
  /**
package/dist/unstyled.js CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- 'use strict';var chunkRLYTX3MM_js=require('./chunk-RLYTX3MM.js'),chunkXIM7KMD6_js=require('./chunk-XIM7KMD6.js'),chunkZPKVLTSX_js=require('./chunk-ZPKVLTSX.js');require('./chunk-I54CDQGN.js'),require('./chunk-E64TU6IU.js');var chunkMQFZHA2D_js=require('./chunk-MQFZHA2D.js'),P=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);function e(C,R){let n=d=>{var s=d,{unstyled:l=true}=s,c=chunkMQFZHA2D_js.c(s,["unstyled"]);return P__default.default.createElement(C,chunkMQFZHA2D_js.b(chunkMQFZHA2D_js.a({},c),{unstyled:l}))};return n.displayName=R,n}var u=e(chunkXIM7KMD6_js.a,"UnstyledConsentBanner"),y=e(chunkRLYTX3MM_js.a,"UnstyledConsentManager"),S=e(chunkZPKVLTSX_js.a,"UnstyledDSRRequestForm");exports.ConsentBanner=u;exports.ConsentManager=y;exports.DSRRequestForm=S;//# sourceMappingURL=unstyled.js.map
3
- //# sourceMappingURL=unstyled.js.map
2
+ 'use strict';var chunkBRS52EDT_js=require('./chunk-BRS52EDT.js'),chunk732C2EVN_js=require('./chunk-732C2EVN.js');require('./chunk-L2VO3MEJ.js');var chunkW47OSMT6_js=require('./chunk-W47OSMT6.js');require('./chunk-UXUMYP4L.js'),require('./chunk-AME4HJR4.js');var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),P=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var P__default=/*#__PURE__*/_interopDefault(P);function e(C,R){let n=d=>{var s=d,{unstyled:l=true}=s,c=chunkRFPLZDIO_js.c(s,["unstyled"]);return P__default.default.createElement(C,chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},c),{unstyled:l}))};return n.displayName=R,n}var u=e(chunk732C2EVN_js.a,"UnstyledConsentBanner"),y=e(chunkBRS52EDT_js.a,"UnstyledConsentManager"),S=e(chunkW47OSMT6_js.a,"UnstyledDSRRequestForm");exports.ConsentBanner=u;exports.ConsentManager=y;exports.DSRRequestForm=S;
package/dist/unstyled.mjs CHANGED
@@ -1,3 +1,2 @@
1
1
  "use client";
2
- import {a as a$2}from'./chunk-EPT2K355.mjs';import {a as a$1}from'./chunk-GN5C32JB.mjs';import {a as a$3}from'./chunk-6HZL2WDU.mjs';import'./chunk-GKKAK6ES.mjs';import'./chunk-AYKLAEOU.mjs';import {c,b,a}from'./chunk-WWT2ZSNU.mjs';import P from'react';function e(C,R){let n=d=>{var s=d,{unstyled:l=true}=s,c$1=c(s,["unstyled"]);return P.createElement(C,b(a({},c$1),{unstyled:l}))};return n.displayName=R,n}var u=e(a$1,"UnstyledConsentBanner"),y=e(a$2,"UnstyledConsentManager"),S=e(a$3,"UnstyledDSRRequestForm");export{u as ConsentBanner,y as ConsentManager,S as DSRRequestForm};//# sourceMappingURL=unstyled.mjs.map
3
- //# sourceMappingURL=unstyled.mjs.map
2
+ import {a as a$2}from'./chunk-U5RWJRGA.mjs';import {a as a$1}from'./chunk-BFAX7JQA.mjs';import'./chunk-YTU4FNM2.mjs';import {a as a$3}from'./chunk-XJO4DH3L.mjs';import'./chunk-EWVK45Z3.mjs';import'./chunk-SFGW37LE.mjs';import {c,b,a}from'./chunk-ZJYULEER.mjs';import P from'react';function e(C,R){let n=d=>{var s=d,{unstyled:l=true}=s,c$1=c(s,["unstyled"]);return P.createElement(C,b(a({},c$1),{unstyled:l}))};return n.displayName=R,n}var u=e(a$1,"UnstyledConsentBanner"),y=e(a$2,"UnstyledConsentManager"),S=e(a$3,"UnstyledDSRRequestForm");export{u as ConsentBanner,y as ConsentManager,S as DSRRequestForm};
package/package.json CHANGED
@@ -1,24 +1,80 @@
1
1
  {
2
2
  "name": "@tantainnovative/ndpr-toolkit",
3
- "version": "3.5.0",
3
+ "version": "3.5.5",
4
4
  "private": false,
5
5
  "description": "Nigeria Data Protection Toolkit — enterprise-grade compliance components for the Nigeria Data Protection Act (NDPA) 2023",
6
+ "pnpm": {
7
+ "overrides": {
8
+ "handlebars": ">=4.7.9",
9
+ "lodash": ">=4.17.21",
10
+ "glob": ">=7.2.3",
11
+ "tar": ">=7.5.10",
12
+ "brace-expansion": ">=2.0.1",
13
+ "js-yaml": "~3.14.2",
14
+ "yaml": ">=2.8.3",
15
+ "picomatch": ">=2.3.2",
16
+ "flatted": ">=3.4.2",
17
+ "dompurify": ">=3.4.0",
18
+ "protobufjs": ">=7.5.5",
19
+ "fast-xml-parser": ">=5.7.0"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "dev": "next dev --turbopack",
24
+ "build": "next build && node scripts/post-build.js",
25
+ "build:lib": "tsup && cp packages/ndpr-toolkit/src/styles.d.ts dist/styles.d.ts && node scripts/rollup-dts.mjs",
26
+ "prepublishOnly": "pnpm build:lib",
27
+ "start": "next start",
28
+ "lint": "next lint .",
29
+ "test": "jest --passWithNoTests",
30
+ "export": "next export",
31
+ "build:static": "next build",
32
+ "deploy": "next build && touch out/.nojekyll && gh-pages -d out",
33
+ "release": "commit-and-tag-version",
34
+ "release:minor": "commit-and-tag-version --release-as minor",
35
+ "release:major": "commit-and-tag-version --release-as major",
36
+ "release:patch": "commit-and-tag-version --release-as patch",
37
+ "publish:cli": "cd packages/create-ndpr && npm publish --access public",
38
+ "publish:recipes": "cd packages/ndpr-recipes && npm publish --access public"
39
+ },
6
40
  "keywords": [
7
41
  "ndpa",
8
42
  "ndpr",
43
+ "ndpa-2023",
9
44
  "nigeria",
45
+ "nigeria-compliance",
10
46
  "data-protection",
47
+ "data-privacy",
11
48
  "compliance",
49
+ "compliance-tools",
12
50
  "privacy",
51
+ "privacy-policy",
13
52
  "ndpc",
53
+ "nitda",
54
+ "gdpr",
55
+ "gdpr-nigeria",
56
+ "africa",
14
57
  "consent",
58
+ "cookie-consent",
59
+ "cookie-banner",
15
60
  "dpia",
61
+ "dsr",
16
62
  "data-subject-rights",
17
63
  "breach-notification",
18
64
  "cross-border-transfer",
19
65
  "ropa",
20
- "lawful-basis"
66
+ "lawful-basis",
67
+ "react",
68
+ "nextjs",
69
+ "typescript"
21
70
  ],
71
+ "engines": {
72
+ "node": ">=18.0.0"
73
+ },
74
+ "funding": {
75
+ "type": "individual",
76
+ "url": "https://github.com/sponsors/mr-tanta"
77
+ },
22
78
  "author": {
23
79
  "name": "Abraham Esandayinze Tanta",
24
80
  "url": "https://linkedin.com/in/mr-tanta"
@@ -275,22 +331,5 @@
275
331
  "tsup": "^8.5.1",
276
332
  "tw-animate-css": "^1.4.0",
277
333
  "typescript": "^5.0.0"
278
- },
279
- "scripts": {
280
- "dev": "next dev --turbopack",
281
- "build": "next build && node scripts/post-build.js",
282
- "build:lib": "tsup && cp packages/ndpr-toolkit/src/styles.d.ts dist/styles.d.ts && node scripts/rollup-dts.mjs",
283
- "start": "next start",
284
- "lint": "next lint .",
285
- "test": "jest --passWithNoTests",
286
- "export": "next export",
287
- "build:static": "next build",
288
- "deploy": "next build && touch out/.nojekyll && gh-pages -d out",
289
- "release": "commit-and-tag-version",
290
- "release:minor": "commit-and-tag-version --release-as minor",
291
- "release:major": "commit-and-tag-version --release-as major",
292
- "release:patch": "commit-and-tag-version --release-as patch",
293
- "publish:cli": "cd packages/create-ndpr && npm publish --access public",
294
- "publish:recipes": "cd packages/ndpr-recipes && npm publish --access public"
295
334
  }
296
- }
335
+ }
@@ -1,7 +0,0 @@
1
- 'use strict';var chunkE64TU6IU_js=require('./chunk-E64TU6IU.js'),I=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var I__default=/*#__PURE__*/_interopDefault(I);var B=({result:a,sections:m,showFullReport:g=true,allowPrint:u=true,allowExport:v=true,onExport:f,className:N="",buttonClassName:x="",classNames:b={},unstyled:y=false})=>{let o=I.useMemo(()=>new Date().toLocaleDateString(),[]),d=(r,s)=>{let i=s?b[s]:void 0;return !i&&s==="printButton"&&(i=b.primaryButton),chunkE64TU6IU_js.a(r,i,y)},l=r=>new Date(r).toLocaleDateString("en-GB",{day:"numeric",month:"long",year:"numeric"}),w=r=>{let s=a.answers[r];return s==null?"Not answered":typeof s=="boolean"?s?"Yes":"No":Array.isArray(s)?s.join(", "):String(s)},k=()=>{window.print();},C=r=>{f&&f(r);},R=r=>jsxRuntime.jsx("span",{className:d(`px-2 py-1 rounded text-xs font-medium ${{low:"ndpr-badge ndpr-badge--success",medium:"ndpr-badge ndpr-badge--warning",high:"ndpr-badge ndpr-badge--warning",critical:"ndpr-badge ndpr-badge--destructive"}[r]}`,"riskBadge"),children:r.charAt(0).toUpperCase()+r.slice(1)});return jsxRuntime.jsxs("div",{"data-ndpr-component":"dpia-report",className:`${d("bg-white dark:bg-gray-800 rounded-lg shadow-md p-6 print:shadow-none print:p-0","root")} ${N}`,children:[jsxRuntime.jsxs("div",{className:d("mb-8 border-b border-gray-200 dark:border-gray-700 pb-6 print:pb-4","header"),children:[jsxRuntime.jsxs("div",{className:"flex justify-between items-start",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h1",{className:d("ndpr-card__title","title"),children:"Data Protection Impact Assessment Report"}),jsxRuntime.jsx("h2",{className:"text-xl ndpr-text-muted mb-4",children:a.title})]}),(u||v)&&jsxRuntime.jsxs("div",{className:"flex space-x-2 print:hidden",children:[u&&jsxRuntime.jsx("button",{onClick:k,className:`${d("px-3 py-1 bg-gray-200 text-gray-800 dark:bg-gray-700 dark:text-white rounded hover:bg-gray-300 dark:hover:bg-gray-600","printButton")} ${x}`,children:jsxRuntime.jsxs("span",{className:"flex items-center",children:[jsxRuntime.jsx("svg",{className:"w-4 h-4 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"})}),"Print"]})}),v&&jsxRuntime.jsx("div",{className:"relative inline-block",children:jsxRuntime.jsx("button",{onClick:()=>C("pdf"),className:`px-3 py-1 bg-[rgb(var(--ndpr-primary))] text-white rounded hover:bg-[rgb(var(--ndpr-primary-hover))] ${x}`,children:jsxRuntime.jsxs("span",{className:"flex items-center",children:[jsxRuntime.jsx("svg",{className:"w-4 h-4 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})}),"Export PDF"]})})})]})]}),jsxRuntime.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("p",{className:"ndpr-form-field__hint",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Assessor:"})," ",a.assessor.name,", ",a.assessor.role]}),jsxRuntime.jsxs("p",{className:"ndpr-form-field__hint",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Contact:"})," ",a.assessor.email]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsxs("p",{className:"ndpr-form-field__hint",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Started:"})," ",l(a.startedAt)]}),jsxRuntime.jsxs("p",{className:"ndpr-form-field__hint",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Completed:"})," ",a.completedAt?l(a.completedAt):"In progress"]}),jsxRuntime.jsxs("p",{className:"ndpr-form-field__hint",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Next review:"})," ",a.reviewDate?l(a.reviewDate):"Not scheduled"]})]})]})]}),jsxRuntime.jsxs("div",{className:d("mb-8","summary"),children:[jsxRuntime.jsx("h2",{className:"ndpr-section-heading",children:"Executive Summary"}),jsxRuntime.jsxs("div",{className:"ndpr-panel",children:[jsxRuntime.jsxs("div",{className:"flex items-center mb-2",role:"status","aria-live":"polite",children:[jsxRuntime.jsx("span",{className:"font-medium mr-2",children:"Overall Risk Level:"}),R(a.overallRiskLevel)]}),jsxRuntime.jsxs("div",{className:d("mb-2","conclusion"),children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Conclusion:"})," ",a.conclusion]}),jsxRuntime.jsxs("div",{role:"status","aria-live":"polite",children:[jsxRuntime.jsx("span",{className:"font-medium",children:"Can Proceed:"})," ",a.canProceed?"Yes":"No"]})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"font-medium ndpr-text-foreground mb-2",children:"Processing Activity Description"}),jsxRuntime.jsx("p",{className:"ndpr-text-muted mb-4",children:a.processingDescription}),a.recommendations&&a.recommendations.length>0&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h3",{className:"font-medium ndpr-text-foreground mb-2",children:"Key Recommendations"}),jsxRuntime.jsx("ul",{className:"list-disc pl-5 ndpr-text-muted",children:a.recommendations.map((r,s)=>jsxRuntime.jsx("li",{className:d("","recommendation"),children:r},s))})]})]})]}),jsxRuntime.jsxs("div",{className:"mb-8",children:[jsxRuntime.jsx("h2",{className:"ndpr-section-heading",children:"Identified Risks"}),a.risks.length===0?jsxRuntime.jsx("p",{className:"ndpr-text-muted",children:"No risks identified."}):jsxRuntime.jsx("div",{className:"overflow-x-auto",children:jsxRuntime.jsxs("table",{className:d("min-w-full divide-y divide-gray-200 dark:divide-gray-700","riskTable"),children:[jsxRuntime.jsx("thead",{className:"ndpr-panel",children:jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Risk"}),jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Likelihood"}),jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Impact"}),jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Risk Level"}),jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Mitigated"})]})}),jsxRuntime.jsx("tbody",{className:"ndpr-table",children:a.risks.map(r=>jsxRuntime.jsxs("tr",{className:d("","riskRow"),children:[jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:r.description}),jsxRuntime.jsxs("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:[r.likelihood," / 5"]}),jsxRuntime.jsxs("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:[r.impact," / 5"]}),jsxRuntime.jsx("td",{className:"px-6 py-4 whitespace-nowrap text-sm",children:R(r.level)}),jsxRuntime.jsx("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:r.mitigated?jsxRuntime.jsx("span",{className:"ndpr-text-success",children:"Yes"}):jsxRuntime.jsx("span",{className:"ndpr-text-destructive",children:"No"})})]},r.id))})]})})]}),g&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h2",{className:"ndpr-section-heading",children:"Full Assessment Details"}),m.map(r=>{let s=r.questions.filter(i=>a.answers[i.id]!==void 0);return s.length===0?null:jsxRuntime.jsxs("div",{className:"mb-6",children:[jsxRuntime.jsx("h3",{className:"text-lg font-medium ndpr-text-foreground mb-2",children:r.title}),jsxRuntime.jsx("div",{className:"overflow-x-auto",children:jsxRuntime.jsxs("table",{className:"min-w-full divide-y divide-gray-200 dark:divide-gray-700",children:[jsxRuntime.jsx("thead",{className:"ndpr-panel",children:jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Question"}),jsxRuntime.jsx("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium ndpr-text-muted uppercase tracking-wider",children:"Answer"})]})}),jsxRuntime.jsx("tbody",{className:"ndpr-table",children:s.map(i=>jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:i.text}),jsxRuntime.jsx("td",{className:"px-6 py-4 whitespace-normal text-sm ndpr-text-muted",children:w(i.id)})]},i.id))})]})})]},r.id)})]}),jsxRuntime.jsxs("div",{className:"mt-8 pt-4 border-t border-gray-200 dark:border-gray-700 text-sm ndpr-text-muted",children:[jsxRuntime.jsx("p",{children:"This DPIA was conducted in accordance with the Nigeria Data Protection Act (NDPA) 2023."}),jsxRuntime.jsxs("p",{children:["DPIA Report Version: ",a.version]}),jsxRuntime.jsxs("p",{children:["Generated on: ",o]})]})]})};var M=({steps:a,onStepClick:m,clickable:g=true,orientation:u="horizontal",className:v="",activeStepClassName:f="",completedStepClassName:N="",incompleteStepClassName:x="",classNames:b={},unstyled:y=false})=>{let o=(n,p)=>chunkE64TU6IU_js.a(n,p?b[p]:void 0,y),d=n=>{g&&m&&m(n);},l=u==="vertical";return jsxRuntime.jsx("div",{"data-ndpr-component":"dpia-step-indicator",role:"navigation","aria-label":"Step progress",className:`${o(l?"flex flex-col space-y-4":"flex items-center justify-between","root")} ${v}`,children:a.map((n,p)=>{let w=p===a.length-1,k=n.active?o(`font-medium ${f||"ndpr-text-primary"}`,"label"):n.completed?o(N||"ndpr-text-success","label"):o(x||"ndpr-card__subtitle","label"),C=n.active?o("flex items-center justify-center w-8 h-8 rounded-full bg-[rgb(var(--ndpr-primary)/0.1)] dark:bg-[rgb(var(--ndpr-primary)/0.2)] ndpr-text-primary border-2 border-[rgb(var(--ndpr-primary))] dark:border-[rgb(var(--ndpr-primary))]","stepActive"):n.completed?o("flex items-center justify-center w-8 h-8 rounded-full bg-green-100 dark:bg-green-900 ndpr-text-success border-2 border-green-600 dark:border-green-400","stepCompleted"):o("flex items-center justify-center w-8 h-8 rounded-full bg-gray-100 dark:bg-gray-700 ndpr-text-muted border-2 border-gray-300 dark:border-gray-600","stepPending");return jsxRuntime.jsxs(I__default.default.Fragment,{children:[jsxRuntime.jsxs("div",{className:o(`${l?"flex items-start":"flex flex-col items-center"} ${g?"cursor-pointer":""}`,"step"),onClick:()=>d(n.id),"aria-current":n.active?"step":void 0,children:[jsxRuntime.jsx("div",{className:`
2
- flex items-center justify-center
3
- ${l?"mr-4":""}
4
- `,children:jsxRuntime.jsx("div",{className:C,children:n.icon?n.icon:n.completed?jsxRuntime.jsx("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg",children:jsxRuntime.jsx("path",{fillRule:"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",clipRule:"evenodd"})}):jsxRuntime.jsx("span",{children:p+1})})}),jsxRuntime.jsxs("div",{className:`
5
- ${l?"flex-1":"mt-2 text-center"}
6
- `,children:[jsxRuntime.jsx("div",{className:`text-sm font-medium ${k}`,children:n.label}),n.description&&jsxRuntime.jsx("div",{className:"ndpr-form-field__hint",children:n.description})]})]}),!w&&jsxRuntime.jsx("div",{className:o(l?"ml-4 h-8 border-l-2 border-gray-300 dark:border-gray-600":"w-full border-t-2 border-gray-300 dark:border-gray-600 hidden sm:block","connector")})]},n.id)})})};exports.a=B;exports.b=M;//# sourceMappingURL=chunk-3VQAYQR7.js.map
7
- //# sourceMappingURL=chunk-3VQAYQR7.js.map
@@ -1,2 +0,0 @@
1
- import {a as a$2}from'./chunk-GKKAK6ES.mjs';import {a}from'./chunk-AYKLAEOU.mjs';import {b,a as a$1}from'./chunk-WWT2ZSNU.mjs';import {useState}from'react';import {jsxs,jsx}from'react/jsx-runtime';var gi=({requestTypes:P,onSubmit:V,onValidationError:y,title:N="Submit a Data Subject Request",description:s="Use this form to exercise your rights under the Nigeria Data Protection Act (NDPA), Part IV, Sections 29-36.",submitButtonText:ii="Submit Request",className:q="",buttonClassName:ri="",showConfirmation:ei=true,confirmationMessage:ti="Your request has been submitted successfully. You will receive a confirmation email shortly.",requireIdentityVerification:k=true,identifierTypes:F=[{id:"email",label:"Email Address"},{id:"account",label:"Account Number"},{id:"customer_id",label:"Customer ID"}],collectAdditionalContact:oi=true,labels:v={},classNames:i,unstyled:e=false,isSubmitting:T=false,defaultValues:p,onReset:C})=>{var Y,H,L,U,W,J;let[c,j]=useState((p==null?void 0:p.requestType)||""),[$,w]=useState(((Y=p==null?void 0:p.dataSubject)==null?void 0:Y.fullName)||""),[S,E]=useState(((H=p==null?void 0:p.dataSubject)==null?void 0:H.email)||""),[I,B]=useState(((L=p==null?void 0:p.dataSubject)==null?void 0:L.phone)||""),[O,z]=useState(((U=p==null?void 0:p.dataSubject)==null?void 0:U.identifierType)||((W=F[0])==null?void 0:W.id)||""),[x,M]=useState(((J=p==null?void 0:p.dataSubject)==null?void 0:J.identifierValue)||""),[_,A]=useState((p==null?void 0:p.additionalInfo)||{}),[ni,D]=useState(false),[d,Z]=useState({}),di=()=>{var r;j(""),w(""),E(""),B(""),z(((r=F[0])==null?void 0:r.id)||""),M(""),A({}),D(false),Z({}),C==null||C();},a$3=P.find(r=>r.id===c),pi=r=>{j(r.target.value),A({});},h=(r,b$1)=>{A(l=>b(a$1({},l),{[r]:b$1}));},ai=()=>{let r={};return $.trim()||(r.fullName="Full name is required"),S.trim()?/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(S)||(r.email="Email is invalid"):r.email="Email is required",c||(r.requestType="Please select a request type"),k&&!x.trim()&&(r.identifierValue="Identifier value is required"),a$3!=null&&a$3.requiresAdditionalInfo&&a$3.additionalFields&&a$3.additionalFields.forEach(b=>{b.required&&!_[b.id]&&(r[`additional_${b.id}`]=`${b.label} is required`);}),Z(r),r},ui=r=>{r.preventDefault();let b=ai();if(Object.keys(b).length>0){y==null||y(b);return}let l=Object.keys(_).length>0?Object.fromEntries(Object.entries(_).map(([u,m])=>[u,typeof m=="string"?a$2(m):m])):void 0,R={requestType:c,dataSubject:{fullName:a$2($),email:a$2(S),phone:I?a$2(I):void 0,identifierType:O,identifierValue:a$2(x)},additionalInfo:l,submittedAt:Date.now()};V(R),ei&&D(true);},G=`ndpr-dsr-form__button ndpr-dsr-form__button--primary ${ri}`.trim(),bi="ndpr-dsr-form__button ndpr-dsr-form__button--secondary";return ni?jsxs("div",{"data-ndpr-component":"dsr-request-form","data-ndpr-state":"submitted",className:a(`ndpr-dsr-form__success${q?` ${q}`:""}`,i==null?void 0:i.successMessage,e),"aria-live":"polite",children:[jsx("h2",{className:a("ndpr-dsr-form__success-title",i==null?void 0:i.title,e),children:"Request Submitted"}),jsx("p",{className:a("ndpr-dsr-form__success-body",i==null?void 0:i.description,e),children:ti}),jsx("button",{onClick:()=>D(false),className:a(G,(i==null?void 0:i.primaryButton)||(i==null?void 0:i.submitButton),e),children:"Submit Another Request"})]}):jsxs("div",{"data-ndpr-component":"dsr-request-form",className:a(`ndpr-dsr-form${q?` ${q}`:""}`,i==null?void 0:i.root,e),children:[jsx("h2",{className:a("ndpr-dsr-form__title",i==null?void 0:i.title,e),children:N}),jsx("p",{className:a("ndpr-dsr-form__description",i==null?void 0:i.description,e),children:s}),jsx("form",{onSubmit:ui,className:a("",i==null?void 0:i.form,e),children:jsxs("div",{className:a("ndpr-dsr-form__sections",i==null?void 0:i.fieldGroup,e),children:[jsxs("div",{children:[jsx("h3",{className:e?"":"ndpr-form-section__heading",children:"Personal Information"}),jsxs("div",{className:e?"":"ndpr-form-grid ndpr-form-grid--2",children:[jsxs("div",{children:[jsxs("label",{htmlFor:"fullName",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:[v.name||"Full Name"," ",jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"fullName",value:$,onChange:r=>w(r.target.value),className:a("ndpr-form-field__input",i==null?void 0:i.input,e),required:true,"aria-required":"true","aria-invalid":!!d.fullName,"aria-describedby":d.fullName?"fullName-error":void 0}),d.fullName&&jsx("p",{id:"fullName-error",role:"alert",className:e?"":"ndpr-form-field__error",children:d.fullName})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"email",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:[v.email||"Email Address"," ",jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"email",id:"email",value:S,onChange:r=>E(r.target.value),className:a("ndpr-form-field__input",i==null?void 0:i.input,e),required:true,"aria-required":"true","aria-invalid":!!d.email,"aria-describedby":d.email?"email-error":void 0}),d.email&&jsx("p",{id:"email-error",role:"alert",className:e?"":"ndpr-form-field__error",children:d.email})]}),oi&&jsxs("div",{children:[jsx("label",{htmlFor:"phone",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:"Phone Number (Optional)"}),jsx("input",{type:"tel",id:"phone",value:I,onChange:r=>B(r.target.value),className:a("ndpr-form-field__input",i==null?void 0:i.input,e)})]})]})]}),jsxs("div",{children:[jsx("h3",{className:e?"":"ndpr-form-section__heading",children:"Request Details"}),jsxs("div",{className:e?"":"ndpr-form-field",children:[jsxs("label",{htmlFor:"requestType",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:[v.requestType||"Request Type"," ",jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),jsxs("select",{id:"requestType",value:c,onChange:pi,className:a("ndpr-form-field__select",i==null?void 0:i.select,e),required:true,"aria-required":"true","aria-invalid":!!d.requestType,"aria-describedby":d.requestType?"requestType-error":void 0,children:[jsx("option",{value:"",children:"Select a request type"}),P.map(r=>jsx("option",{value:r.id,children:r.name},r.id))]}),d.requestType&&jsx("p",{id:"requestType-error",role:"alert",className:e?"":"ndpr-form-field__error",children:d.requestType})]}),a$3&&jsxs("div",{className:e?"":"ndpr-dsr-form__type-info",children:[jsx("p",{children:a$3.description}),jsxs("p",{children:["Estimated completion time: ",a$3.estimatedCompletionTime," ",a$3.estimatedCompletionTime===1?"day":"days"]})]}),jsxs("div",{className:e?"":"ndpr-form-field",children:[jsx("label",{htmlFor:"requestDescription",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:v.description||"Additional Information"}),jsx("textarea",{id:"requestDescription",className:a("ndpr-form-field__textarea",i==null?void 0:i.textarea,e),rows:4,placeholder:"Please provide any additional details that might help us process your request"})]})]}),k&&jsxs("div",{children:[jsx("h3",{className:e?"":"ndpr-form-section__heading",children:"Identity Verification"}),jsx("p",{className:e?"":"ndpr-form-section__hint",children:"To protect your privacy, we need to verify your identity before processing your request."}),jsxs("div",{className:e?"":"ndpr-form-grid ndpr-form-grid--2",children:[jsxs("div",{children:[jsxs("label",{htmlFor:"identifierType",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:["Identifier Type ",jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),jsx("select",{id:"identifierType",value:O,onChange:r=>z(r.target.value),className:a("ndpr-form-field__select",i==null?void 0:i.select,e),required:true,"aria-required":"true",children:F.map(r=>jsx("option",{value:r.id,children:r.label},r.id))})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"identifierValue",className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:["Identifier Value ",jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"identifierValue",value:x,onChange:r=>M(r.target.value),className:a("ndpr-form-field__input",i==null?void 0:i.input,e),required:true,"aria-required":"true","aria-invalid":!!d.identifierValue,"aria-describedby":d.identifierValue?"identifierValue-error":void 0}),d.identifierValue&&jsx("p",{id:"identifierValue-error",role:"alert",className:e?"":"ndpr-form-field__error",children:d.identifierValue})]})]})]}),(a$3==null?void 0:a$3.requiresAdditionalInfo)&&a$3.additionalFields&&a$3.additionalFields.length>0&&jsxs("div",{children:[jsx("h3",{className:e?"":"ndpr-form-section__heading",children:"Additional Information"}),jsx("div",{className:e?"":"ndpr-form-section",children:a$3.additionalFields.map(r=>{var b,l,R;return jsxs("div",{children:[jsxs("label",{htmlFor:r.id,className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:[r.label," ",r.required&&jsx("span",{className:e?"":"ndpr-form-field__required",children:"*"})]}),r.type==="text"&&jsx("input",{type:"text",id:r.id,value:String((b=_[r.id])!=null?b:""),onChange:u=>h(r.id,u.target.value),placeholder:r.placeholder,className:a("ndpr-form-field__input",i==null?void 0:i.input,e),required:r.required,"aria-required":r.required||void 0,"aria-invalid":!!d[`additional_${r.id}`],"aria-describedby":d[`additional_${r.id}`]?`additional-${r.id}-error`:void 0}),r.type==="textarea"&&jsx("textarea",{id:r.id,value:String((l=_[r.id])!=null?l:""),onChange:u=>h(r.id,u.target.value),placeholder:r.placeholder,className:a("ndpr-form-field__textarea",i==null?void 0:i.textarea,e),rows:4,required:r.required,"aria-required":r.required||void 0,"aria-invalid":!!d[`additional_${r.id}`],"aria-describedby":d[`additional_${r.id}`]?`additional-${r.id}-error`:void 0}),r.type==="select"&&r.options&&jsxs("select",{id:r.id,value:String((R=_[r.id])!=null?R:""),onChange:u=>h(r.id,u.target.value),className:a("ndpr-form-field__select",i==null?void 0:i.select,e),required:r.required,"aria-required":r.required||void 0,"aria-invalid":!!d[`additional_${r.id}`],"aria-describedby":d[`additional_${r.id}`]?`additional-${r.id}-error`:void 0,children:[jsx("option",{value:"",children:r.placeholder||"Select an option"}),r.options.map(u=>jsx("option",{value:u,children:u},u))]}),r.type==="checkbox"&&jsxs("div",{className:e?"":"ndpr-form-field__checkbox-row",children:[jsx("input",{type:"checkbox",id:r.id,checked:!!_[r.id],onChange:u=>h(r.id,u.target.checked),className:e?"":"ndpr-form-field__checkbox",required:r.required,"aria-required":r.required||void 0,"aria-invalid":!!d[`additional_${r.id}`],"aria-describedby":d[`additional_${r.id}`]?`additional-${r.id}-error`:void 0}),jsx("label",{htmlFor:r.id,className:a("ndpr-form-field__label",i==null?void 0:i.label,e),children:r.placeholder||r.label})]}),r.type==="file"&&jsx("input",{type:"file",id:r.id,onChange:u=>{var K;let m=(K=u.target.files)==null?void 0:K[0];m&&h(r.id,m.name);},className:a("ndpr-form-field__input",i==null?void 0:i.input,e),required:r.required,"aria-required":r.required||void 0,"aria-invalid":!!d[`additional_${r.id}`],"aria-describedby":d[`additional_${r.id}`]?`additional-${r.id}-error`:void 0}),d[`additional_${r.id}`]&&jsx("p",{id:`additional-${r.id}-error`,role:"alert",className:e?"":"ndpr-form-field__error",children:d[`additional_${r.id}`]})]},r.id)})})]}),jsxs("div",{className:e?"":"ndpr-dsr-form__notice",children:[jsx("h3",{className:e?"":"ndpr-dsr-form__notice-title",children:"Privacy Notice"}),jsx("p",{className:e?"":"ndpr-dsr-form__notice-body",children:"The information you provide in this form will be used solely for the purpose of processing your data subject request. We will retain this information for as long as necessary to fulfill your request and to comply with our legal obligations. For more information, please refer to our Privacy Policy."})]}),jsxs("div",{className:e?"":"ndpr-dsr-form__actions",children:[T&&(i==null?void 0:i.loadingOverlay)&&jsx("div",{className:i.loadingOverlay}),jsx("button",{type:"submit",disabled:T,className:a(G,(i==null?void 0:i.primaryButton)||(i==null?void 0:i.submitButton),e),children:T?"Submitting...":v.submit||ii}),jsx("button",{type:"button",onClick:di,className:a(bi,void 0,e),children:"Reset"})]})]})})]})};export{gi as a};//# sourceMappingURL=chunk-6HZL2WDU.mjs.map
2
- //# sourceMappingURL=chunk-6HZL2WDU.mjs.map
@@ -1,2 +0,0 @@
1
- var n={AT:{country:"Austria",isoCode:"AT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},BE:{country:"Belgium",isoCode:"BE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},BG:{country:"Bulgaria",isoCode:"BG",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},HR:{country:"Croatia",isoCode:"HR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},CY:{country:"Cyprus",isoCode:"CY",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},CZ:{country:"Czech Republic",isoCode:"CZ",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},DK:{country:"Denmark",isoCode:"DK",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},EE:{country:"Estonia",isoCode:"EE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},FI:{country:"Finland",isoCode:"FI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},FR:{country:"France",isoCode:"FR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},DE:{country:"Germany",isoCode:"DE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR with additional national provisions (BDSG).",lastUpdated:"2024-01-01"},GR:{country:"Greece",isoCode:"GR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},HU:{country:"Hungary",isoCode:"HU",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},IE:{country:"Ireland",isoCode:"IE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR. Hosts many multinational data processors.",lastUpdated:"2024-01-01"},IT:{country:"Italy",isoCode:"IT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LV:{country:"Latvia",isoCode:"LV",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LT:{country:"Lithuania",isoCode:"LT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LU:{country:"Luxembourg",isoCode:"LU",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},MT:{country:"Malta",isoCode:"MT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},NL:{country:"Netherlands",isoCode:"NL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},PL:{country:"Poland",isoCode:"PL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},PT:{country:"Portugal",isoCode:"PT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},RO:{country:"Romania",isoCode:"RO",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SK:{country:"Slovakia",isoCode:"SK",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SI:{country:"Slovenia",isoCode:"SI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},ES:{country:"Spain",isoCode:"ES",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SE:{country:"Sweden",isoCode:"SE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},IS:{country:"Iceland",isoCode:"IS",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},LI:{country:"Liechtenstein",isoCode:"LI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},NO:{country:"Norway",isoCode:"NO",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},GB:{country:"United Kingdom",isoCode:"GB",adequacyStatus:"adequate",recognizedBy:"NDPC",notes:"Protected by UK GDPR and the Data Protection Act 2018. EU adequacy decision granted post-Brexit.",lastUpdated:"2024-01-01"},US:{country:"United States",isoCode:"US",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"No comprehensive federal data protection law. Adequacy depends on transfer mechanism used (e.g. EU-US Data Privacy Framework, standard contractual clauses). Sector-specific laws exist (HIPAA, CCPA, etc.).",lastUpdated:"2024-01-01"},CA:{country:"Canada",isoCode:"CA",adequacyStatus:"adequate",recognizedBy:"NDPC",notes:"Protected by PIPEDA (Personal Information Protection and Electronic Documents Act) and provincial privacy laws. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},ZA:{country:"South Africa",isoCode:"ZA",adequacyStatus:"adequate",recognizedBy:"NDPC",notes:"Protected by POPIA (Protection of Personal Information Act, 2013). Comprehensive data protection framework with an independent Information Regulator.",lastUpdated:"2024-01-01"},GH:{country:"Ghana",isoCode:"GH",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Data Protection Act 2012 (Act 843) establishes a data protection framework. Enforcement capacity is still developing.",lastUpdated:"2024-01-01"},KE:{country:"Kenya",isoCode:"KE",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Data Protection Act 2019 provides a modern framework. The Office of the Data Protection Commissioner is operational but still maturing.",lastUpdated:"2024-01-01"},RW:{country:"Rwanda",isoCode:"RW",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Law No. 058/2021 on the Protection of Personal Data and Privacy. Framework is relatively new.",lastUpdated:"2024-01-01"},EG:{country:"Egypt",isoCode:"EG",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Personal Data Protection Law No. 151 of 2020. Implementation and enforcement are still in early stages.",lastUpdated:"2024-01-01"},TZ:{country:"Tanzania",isoCode:"TZ",adequacyStatus:"not_adequate",recognizedBy:"NDPC",notes:"No comprehensive data protection legislation in force.",lastUpdated:"2024-01-01"},UG:{country:"Uganda",isoCode:"UG",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Data Protection and Privacy Act 2019 provides a framework, but enforcement capacity is limited.",lastUpdated:"2024-01-01"},SN:{country:"Senegal",isoCode:"SN",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Law No. 2008-12 on the Protection of Personal Data. One of the earlier African data protection laws.",lastUpdated:"2024-01-01"},MA:{country:"Morocco",isoCode:"MA",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Law No. 09-08 on the Protection of Individuals with Regard to the Processing of Personal Data (2009). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},MU:{country:"Mauritius",isoCode:"MU",adequacyStatus:"adequate",recognizedBy:"NDPC",notes:"Data Protection Act 2017 provides a comprehensive framework modelled on international standards.",lastUpdated:"2024-01-01"},CN:{country:"China",isoCode:"CN",adequacyStatus:"not_adequate",recognizedBy:"NDPC",notes:"Personal Information Protection Law (PIPL) enacted in 2021 but government access provisions and limited independent oversight raise concerns. Transfers require security assessments or standard contracts.",lastUpdated:"2024-01-01"},IN:{country:"India",isoCode:"IN",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Digital Personal Data Protection Act 2023 enacted. Implementation rules and enforcement mechanisms are still being finalized.",lastUpdated:"2024-01-01"},SG:{country:"Singapore",isoCode:"SG",adequacyStatus:"adequate",recognizedBy:"NDPC",notes:"Personal Data Protection Act 2012 (PDPA) provides a robust framework. Strong enforcement by the PDPC.",lastUpdated:"2024-01-01"},JP:{country:"Japan",isoCode:"JP",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Act on the Protection of Personal Information (APPI). Recognized as adequate by the EU under mutual adequacy arrangement.",lastUpdated:"2024-01-01"},KR:{country:"South Korea",isoCode:"KR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Personal Information Protection Act (PIPA). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},AE:{country:"United Arab Emirates",isoCode:"AE",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Federal Decree-Law No. 45 of 2021 on Personal Data Protection. DIFC and ADGM free zones have their own data protection regulations with stronger frameworks.",lastUpdated:"2024-01-01"},SA:{country:"Saudi Arabia",isoCode:"SA",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Personal Data Protection Law (Royal Decree M/19, 2021). Framework is new and enforcement is still developing.",lastUpdated:"2024-01-01"},IL:{country:"Israel",isoCode:"IL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Protection of Privacy Law 5741-1981 and regulations. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},BR:{country:"Brazil",isoCode:"BR",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Lei Geral de Protecao de Dados (LGPD, 2020) provides a comprehensive framework. The ANPD is actively enforcing.",lastUpdated:"2024-01-01"},AR:{country:"Argentina",isoCode:"AR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Personal Data Protection Act No. 25,326. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},AU:{country:"Australia",isoCode:"AU",adequacyStatus:"partially_adequate",recognizedBy:"NDPC",notes:"Privacy Act 1988 provides protection but does not fully align with GDPR-level standards. Reform efforts are ongoing.",lastUpdated:"2024-01-01"},NZ:{country:"New Zealand",isoCode:"NZ",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Privacy Act 2020 provides a comprehensive framework. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},CH:{country:"Switzerland",isoCode:"CH",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Federal Act on Data Protection (FADP, revised 2023). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},RU:{country:"Russia",isoCode:"RU",adequacyStatus:"not_adequate",recognizedBy:"NDPC",notes:"Federal Law on Personal Data (No. 152-FZ). Data localization requirements and government access concerns.",lastUpdated:"2024-01-01"}};function u(e){let t=e.trim().toUpperCase();if(n[t])return n[t];let a=e.trim().toLowerCase();for(let o of Object.values(n))if(o.country.toLowerCase()===a)return o}function m(){return Object.values(n).filter(e=>e.adequacyStatus==="adequate")}function q(e){let t=u(e);return t?t.adequacyStatus!=="adequate":true}function p(e){return e==="standard_clauses"||e==="binding_corporate_rules"||e==="ndpc_authorization"}function C(e){return {adequacy_decision:"Adequacy Decision (NDPA Section 41) \u2014 Transfer to a country or territory that the NDPC has determined provides an adequate level of data protection.",standard_clauses:"Standard Contractual Clauses (NDPA Section 42) \u2014 Transfer based on standard contractual clauses approved by the NDPC between the controller/processor and the recipient.",binding_corporate_rules:"Binding Corporate Rules (NDPA Section 43) \u2014 Transfer within a group of undertakings based on binding corporate rules approved by the NDPC.",ndpc_authorization:"NDPC Authorization (NDPA Section 44) \u2014 Transfer authorized by the Nigeria Data Protection Commission under specific conditions.",explicit_consent:"Explicit Consent (NDPA Section 45(a)) \u2014 Transfer based on the explicit and informed consent of the data subject after being informed of the risks.",contract_performance:"Contract Performance (NDPA Section 45(b)) \u2014 Transfer necessary for the performance of a contract between the data subject and the controller.",public_interest:"Public Interest (NDPA Section 45(c)) \u2014 Transfer necessary for important reasons of public interest.",legal_claims:"Legal Claims (NDPA Section 45(d)) \u2014 Transfer necessary for the establishment, exercise, or defense of legal claims.",vital_interests:"Vital Interests (NDPA Section 45(e)) \u2014 Transfer necessary to protect the vital interests of the data subject or other persons."}[e]}function P(e){var o,r;let t=[],a=[];return e.id||t.push("Transfer ID is required."),(!e.destinationCountry||e.destinationCountry.trim()==="")&&t.push("Destination country is required."),(!e.recipientOrganization||e.recipientOrganization.trim()==="")&&t.push("Recipient organization is required."),(!((o=e.recipientContact)!=null&&o.name)||e.recipientContact.name.trim()==="")&&t.push("Recipient contact name is required."),(!((r=e.recipientContact)!=null&&r.email)||e.recipientContact.email.trim()==="")&&t.push("Recipient contact email is required."),(!e.purpose||e.purpose.trim()==="")&&t.push("Purpose of the transfer is required."),e.transferMechanism||t.push("Transfer mechanism is required."),(!e.dataCategories||e.dataCategories.length===0)&&t.push("At least one data category must be specified."),(!e.riskAssessment||e.riskAssessment.trim()==="")&&t.push("Risk assessment summary is required."),(!e.safeguards||e.safeguards.length===0)&&t.push("At least one safeguard must be documented for the transfer."),p(e.transferMechanism)&&(e.ndpcApproval?(e.ndpcApproval.required||a.push("NDPC approval is marked as not required, but the selected transfer mechanism requires NDPC approval."),e.ndpcApproval.required&&!e.ndpcApproval.applied&&t.push("NDPC approval is required but an application has not been submitted."),e.ndpcApproval.applied&&!e.ndpcApproval.approved&&e.status==="active"&&t.push('Transfer is marked as active but NDPC approval has not been granted. Status should be "pending_approval".')):t.push(`NDPC approval documentation is required for transfers using ${l(e.transferMechanism)}.`)),e.tiaCompleted||a.push("A Transfer Impact Assessment (TIA) has not been completed for this transfer."),e.adequacyStatus==="inadequate"&&e.transferMechanism==="adequacy_decision"&&t.push("Cannot rely on adequacy decision (Section 41) when the destination country is marked as inadequate."),e.endDate&&e.startDate>e.endDate&&t.push("Start date must be before end date."),e.includesSensitiveData&&e.riskLevel!=="high"&&a.push("Transfer includes sensitive personal data but the risk level is not set to high. Consider reviewing the risk assessment."),e.reviewDate||a.push("No review date has been set for this transfer. Periodic reviews are recommended."),{isValid:t.length===0,errors:t,warnings:a}}function f(e){var d,c;let t=[],a=[],o=0,y={adequate:0,pending_review:2,unknown:3,inadequate:4}[e.adequacyStatus];o+=y,e.adequacyStatus==="inadequate"?(t.push("Destination country does not have an adequate level of data protection."),a.push("Implement supplementary technical and organizational measures.")):e.adequacyStatus==="unknown"?(t.push("Data protection adequacy of the destination country has not been assessed."),a.push("Conduct an adequacy assessment of the destination country.")):e.adequacyStatus==="pending_review"&&(t.push("Destination country adequacy is currently under review."),a.push("Monitor the adequacy review outcome and plan for contingencies."));let i={adequacy_decision:0,standard_clauses:1,binding_corporate_rules:1,ndpc_authorization:1,contract_performance:2,explicit_consent:2,legal_claims:2,public_interest:2,vital_interests:3}[e.transferMechanism];o+=i,i>=2&&(t.push(`Transfer relies on a derogation mechanism (${l(e.transferMechanism)}), which provides fewer structural safeguards.`),a.push("Consider whether a stronger transfer mechanism (adequacy decision, standard clauses, or BCRs) could be used instead.")),e.includesSensitiveData&&(o+=3,t.push("Transfer includes sensitive personal data, increasing the potential impact of unauthorized access."),a.push("Ensure encryption in transit and at rest, and apply strict access controls.")),e.estimatedDataSubjects&&e.estimatedDataSubjects>1e4?(o+=2,t.push("Large number of data subjects involved increases the scope of potential harm."),a.push("Consider data minimization strategies and ensure robust incident response procedures.")):e.estimatedDataSubjects&&e.estimatedDataSubjects>1e3&&(o+=1,t.push("Moderate number of data subjects involved.")),e.tiaCompleted||(o+=2,t.push("Transfer Impact Assessment has not been completed."),a.push("Complete a Transfer Impact Assessment before proceeding with the transfer.")),p(e.transferMechanism)&&((d=e.ndpcApproval)!=null&&d.approved||(o+=2,t.push("NDPC approval is required but has not been granted."),a.push("Obtain NDPC approval before activating the transfer."))),(((c=e.safeguards)==null?void 0:c.length)||0)<3&&(o+=1,t.push("Limited number of safeguards documented."),a.push("Document additional technical, organizational, and contractual safeguards.")),e.frequency==="continuous"&&(o+=1,t.push("Continuous data transfer increases exposure window."),a.push("Implement real-time monitoring and anomaly detection for the transfer."));let s;return o<=4?s="low":o<=9?s="medium":s="high",{riskLevel:s,riskScore:o,factors:t,recommendations:a}}function l(e){return {adequacy_decision:"Adequacy Decision",standard_clauses:"Standard Contractual Clauses",binding_corporate_rules:"Binding Corporate Rules",ndpc_authorization:"NDPC Authorization",explicit_consent:"Explicit Consent",contract_performance:"Contract Performance",public_interest:"Public Interest",legal_claims:"Legal Claims",vital_interests:"Vital Interests"}[e]}export{n as a,u as b,m as c,q as d,p as e,C as f,P as g,f as h};//# sourceMappingURL=chunk-75TJPK2N.mjs.map
2
- //# sourceMappingURL=chunk-75TJPK2N.mjs.map
@@ -1,2 +0,0 @@
1
- var p=["critical","high","medium","low"];function m(e){let i=new Date(e).getTime();if(isNaN(i))return 1/0;let t=(Date.now()-i)/(1e3*60*60*24*30.44);return Math.max(0,t)}function u(e){if(e.length===0)return 100;let i=e.filter(t=>t.pass).length;return Math.round(i/e.length*100)}function f(e){return [{key:"hasConsentMechanism",label:"Consent collection mechanism",priority:"critical",effort:"high",recommendation:"Implement a clear, affirmative consent collection mechanism before processing personal data.",ndpaSection:"Section 25",pass:e.hasConsentMechanism},{key:"hasPurposeSpecification",label:"Purpose specification at collection",priority:"critical",effort:"medium",recommendation:"Specify and communicate the purpose of data collection at the point of consent.",ndpaSection:"Section 25",pass:e.hasPurposeSpecification},{key:"hasWithdrawalMechanism",label:"Consent withdrawal mechanism",priority:"high",effort:"medium",recommendation:"Provide a simple mechanism for data subjects to withdraw consent at any time.",ndpaSection:"Section 26",pass:e.hasWithdrawalMechanism},{key:"hasMinorProtection",label:"Minor (child) data protection controls",priority:"high",effort:"high",recommendation:"Implement age-verification and parental-consent controls for processing data of minors.",ndpaSection:"Section 26",pass:e.hasMinorProtection},{key:"consentRecordsRetained",label:"Consent records retained",priority:"medium",effort:"low",recommendation:"Retain records of all consents obtained, including what was agreed to and when.",ndpaSection:"Section 25",pass:e.consentRecordsRetained}]}function g(e){let i=e.responseTimelineDays<=30;return [{key:"hasRequestMechanism",label:"DSR submission mechanism",priority:"critical",effort:"high",recommendation:"Implement a formal channel (e.g. a web form or email address) for data subjects to submit requests.",ndpaSection:"Section 34",pass:e.hasRequestMechanism},{key:"supportsAccess",label:"Right of access supported",priority:"high",effort:"medium",recommendation:"Enable data subjects to request and receive a copy of their personal data.",ndpaSection:"Section 34",pass:e.supportsAccess},{key:"supportsRectification",label:"Right to rectification supported",priority:"high",effort:"medium",recommendation:"Allow data subjects to request correction of inaccurate or incomplete personal data.",ndpaSection:"Section 35",pass:e.supportsRectification},{key:"supportsErasure",label:"Right to erasure supported",priority:"high",effort:"high",recommendation:"Implement processes to delete personal data upon valid erasure requests.",ndpaSection:"Section 36",pass:e.supportsErasure},{key:"supportsPortability",label:"Right to data portability supported",priority:"medium",effort:"high",recommendation:"Provide personal data in a structured, machine-readable format upon request.",ndpaSection:"Section 37",pass:e.supportsPortability},{key:"supportsObjection",label:"Right to object supported",priority:"medium",effort:"medium",recommendation:"Honour objections to processing where no compelling legitimate grounds override the data subject's interests.",ndpaSection:"Section 38",pass:e.supportsObjection},{key:"responseTimeline",label:"DSR response within 30 days",priority:"high",effort:"medium",recommendation:"Reduce DSR response time to 30 days or less as required by the NDPA.",ndpaSection:"Section 39",pass:i}]}function y(e){return [{key:"conductedForHighRisk",label:"DPIA conducted for high-risk processing",priority:"critical",effort:"high",recommendation:"Conduct a Data Protection Impact Assessment before undertaking high-risk processing activities.",ndpaSection:"Section 28",pass:e.conductedForHighRisk},{key:"documentedRisks",label:"Risks documented in DPIA",priority:"high",effort:"medium",recommendation:"Document identified risks to data subjects' rights and freedoms within the DPIA.",ndpaSection:"Section 28",pass:e.documentedRisks},{key:"mitigationMeasures",label:"Mitigation measures documented",priority:"high",effort:"medium",recommendation:"Document mitigation measures and residual risk acceptance within the DPIA.",ndpaSection:"Section 28",pass:e.mitigationMeasures}]}function b(e){return [{key:"hasNotificationProcess",label:"Breach notification process in place",priority:"critical",effort:"high",recommendation:"Establish a documented breach notification process covering detection, assessment, and reporting.",ndpaSection:"Section 40",pass:e.hasNotificationProcess},{key:"notifiesWithin72Hours",label:"NDPC notified within 72 hours",priority:"critical",effort:"medium",recommendation:"Ensure the NDPC is notified of qualifying breaches within 72 hours of discovery.",ndpaSection:"Section 40",pass:e.notifiesWithin72Hours},{key:"hasRiskAssessment",label:"Breach risk assessment performed",priority:"high",effort:"medium",recommendation:"Perform a risk assessment for every identified breach to determine notification obligations.",ndpaSection:"Section 40",pass:e.hasRiskAssessment},{key:"hasRecordKeeping",label:"Breach records maintained",priority:"medium",effort:"low",recommendation:"Maintain a breach register documenting all incidents, assessments, and actions taken.",ndpaSection:"Section 40",pass:e.hasRecordKeeping}]}function S(e){let t=m(e.lastUpdated)<=13;return [{key:"hasPrivacyPolicy",label:"Privacy policy exists",priority:"critical",effort:"high",recommendation:"Draft and publish a comprehensive privacy policy that satisfies NDPA requirements.",ndpaSection:"Section 29",pass:e.hasPrivacyPolicy},{key:"isPubliclyAccessible",label:"Privacy policy publicly accessible",priority:"high",effort:"low",recommendation:"Make the privacy policy easily accessible to data subjects on your website or app.",ndpaSection:"Section 29",pass:e.isPubliclyAccessible},{key:"policyUpToDate",label:"Privacy policy reviewed within 13 months",priority:"medium",effort:"medium",recommendation:"Review and update the privacy policy at least annually to reflect current practices.",ndpaSection:"Section 29",pass:t},{key:"coversAllSections",label:"Privacy policy covers all required sections",priority:"high",effort:"medium",recommendation:"Ensure the privacy policy addresses all NDPA-mandated disclosures including lawful basis, retention, and subject rights.",ndpaSection:"Section 29",pass:e.coversAllSections}]}function R(e){return [{key:"documentedForAllProcessing",label:"Lawful basis documented for all processing",priority:"critical",effort:"high",recommendation:"Identify and document a valid lawful basis for every processing activity before it begins.",ndpaSection:"Section 25(1)",pass:e.documentedForAllProcessing},{key:"hasLegitimateInterestAssessment",label:"Legitimate interest assessment completed",priority:"medium",effort:"medium",recommendation:"Complete a Legitimate Interest Assessment (LIA) where legitimate interests is the chosen lawful basis.",ndpaSection:"Section 25(1)",pass:e.hasLegitimateInterestAssessment}]}function v(e){return [{key:"hasTransferMechanisms",label:"Transfer mechanisms in place",priority:"critical",effort:"high",recommendation:"Implement appropriate transfer mechanisms (SCCs, BCRs, or adequacy decisions) for all cross-border transfers.",ndpaSection:"Section 43",pass:e.hasTransferMechanisms},{key:"adequacyAssessed",label:"Adequacy of destination country assessed",priority:"high",effort:"medium",recommendation:"Assess whether the destination country provides an adequate level of data protection before transferring.",ndpaSection:"Section 43",pass:e.adequacyAssessed},{key:"ndpcApprovalObtained",label:"NDPC approval obtained where required",priority:"high",effort:"high",recommendation:"Obtain NDPC approval for transfers to countries without adequacy decisions where required.",ndpaSection:"Section 44",pass:e.ndpcApprovalObtained}]}function w(e){let t=m(e.lastReviewed)<=6;return [{key:"maintained",label:"Record of Processing Activities maintained",priority:"critical",effort:"high",recommendation:"Create and maintain a comprehensive Record of Processing Activities (ROPA) as required by the NDPA.",ndpaSection:"Section 30",pass:e.maintained},{key:"includesAllProcessing",label:"ROPA includes all processing activities",priority:"high",effort:"medium",recommendation:"Ensure the ROPA captures every processing activity across all departments and systems.",ndpaSection:"Section 30",pass:e.includesAllProcessing},{key:"ropaUpToDate",label:"ROPA reviewed within 6 months",priority:"medium",effort:"low",recommendation:"Review and update the ROPA at least every six months to reflect changes in processing activities.",ndpaSection:"Section 30",pass:t}]}var k=[{name:"consent",weight:.2,ndpaSections:["Section 25","Section 26"],evaluate:e=>f(e.consent)},{name:"dsr",weight:.15,ndpaSections:["Section 34","Section 35","Section 36","Section 37","Section 38","Section 39"],evaluate:e=>g(e.dsr)},{name:"breach",weight:.15,ndpaSections:["Section 40"],evaluate:e=>b(e.breach)},{name:"policy",weight:.12,ndpaSections:["Section 29"],evaluate:e=>S(e.policy)},{name:"dpia",weight:.12,ndpaSections:["Section 28"],evaluate:e=>y(e.dpia)},{name:"lawfulBasis",weight:.1,ndpaSections:["Section 25(1)"],evaluate:e=>R(e.lawfulBasis)},{name:"crossBorder",weight:.08,ndpaSections:["Section 43","Section 44"],evaluate:e=>v(e.crossBorder)},{name:"ropa",weight:.08,ndpaSections:["Section 30"],evaluate:e=>w(e.ropa)}];function P(e){return e>=90?"excellent":e>=70?"good":e>=40?"needs-work":"critical"}function A(e){let i={},t=[],s=0;for(let o of k){let a=o.evaluate(e),c=u(a),l=c*o.weight;s+=l;let d=[];for(let n of a)n.pass||(d.push(n.label),t.push({module:o.name,key:n.key,label:n.label,priority:n.priority,effort:n.effort,recommendation:n.recommendation,ndpaSection:n.ndpaSection}));i[o.name]={name:o.name,score:c,maxScore:100,weightedScore:Math.round(l*100)/100,ndpaSections:o.ndpaSections,gaps:d};}t.sort((o,a)=>p.indexOf(o.priority)-p.indexOf(a.priority));let r=Math.round(s),h=[{section:"Section 25",title:"Consent and lawful basis for processing"},{section:"Section 26",title:"Withdrawal of consent and minor protection"},{section:"Section 28",title:"Data Protection Impact Assessment"},{section:"Section 29",title:"Privacy notice requirements"},{section:"Section 30",title:"Records of processing activities"},{section:"Section 34",title:"Right of access"},{section:"Section 35",title:"Right to rectification"},{section:"Section 36",title:"Right to erasure"},{section:"Section 37",title:"Right to data portability"},{section:"Section 38",title:"Right to object"},{section:"Section 39",title:"Response timelines for data subject requests"},{section:"Section 40",title:"Data breach notification"},{section:"Section 43",title:"Cross-border transfer restrictions"},{section:"Section 44",title:"NDPC approval for cross-border transfers"}];return {score:r,rating:P(r),modules:i,recommendations:t,regulatoryReferences:h,generatedAt:new Date().toISOString()}}export{A as a};//# sourceMappingURL=chunk-ABDB7LEV.mjs.map
2
- //# sourceMappingURL=chunk-ABDB7LEV.mjs.map
@@ -1,2 +0,0 @@
1
- function s(t,n,r){return r?n||"":n||t}export{s as a};//# sourceMappingURL=chunk-AYKLAEOU.mjs.map
2
- //# sourceMappingURL=chunk-AYKLAEOU.mjs.map