@tantainnovative/ndpr-toolkit 2.1.2 → 2.4.0

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 (152) hide show
  1. package/README.md +73 -2
  2. package/dist/{breach-6z0r-KuE.d.mts → breach-B_-6lDqS.d.mts} +1 -1
  3. package/dist/{breach-BFfnvtRk.d.ts → breach-CzXqSsaY.d.ts} +1 -1
  4. package/dist/{breach-BtFbDOmV.d.mts → breach-Eu9byel8.d.mts} +1 -1
  5. package/dist/{breach-BtFbDOmV.d.ts → breach-Eu9byel8.d.ts} +1 -1
  6. package/dist/breach-ouXoVTWs.d.ts +438 -0
  7. package/dist/breach-yRiyyc4n.d.mts +438 -0
  8. package/dist/breach.d.mts +5 -275
  9. package/dist/breach.d.ts +5 -275
  10. package/dist/breach.js +1 -1
  11. package/dist/breach.mjs +1 -1
  12. package/dist/chunk-2XFAV267.mjs +2 -0
  13. package/dist/chunk-32UIWTGD.js +72 -0
  14. package/dist/chunk-4JUDKBA2.mjs +7 -0
  15. package/dist/chunk-4VVARDN2.mjs +2 -0
  16. package/dist/chunk-5RSOLEEP.js +63 -0
  17. package/dist/chunk-AYKLAEOU.mjs +2 -0
  18. package/dist/chunk-BGHQTZAC.js +94 -0
  19. package/dist/chunk-BZTTQS4A.mjs +7 -0
  20. package/dist/chunk-CAB7O3GR.mjs +63 -0
  21. package/dist/chunk-CL53OI3I.js +7 -0
  22. package/dist/chunk-E64TU6IU.js +2 -0
  23. package/dist/chunk-EKVTLHBQ.js +2 -0
  24. package/dist/chunk-ELKEZEV5.mjs +2 -0
  25. package/dist/chunk-EPF7J2FK.js +3 -0
  26. package/dist/chunk-ER7X6E36.js +2 -0
  27. package/dist/chunk-FXTZDKDC.mjs +3 -0
  28. package/dist/chunk-IBEKLDBY.mjs +2 -0
  29. package/dist/chunk-ILCNDOBU.js +2 -0
  30. package/dist/chunk-K3GMTMQ6.js +2 -0
  31. package/dist/chunk-MJGOLP5M.js +2 -0
  32. package/dist/chunk-NW4A3JW6.mjs +2 -0
  33. package/dist/chunk-P3PULLYP.mjs +2 -0
  34. package/dist/chunk-SKJCQKFL.mjs +94 -0
  35. package/dist/chunk-TCJCE6WN.js +2 -0
  36. package/dist/chunk-UZ5EZOA7.js +2 -0
  37. package/dist/chunk-WSHSHIIM.mjs +2 -0
  38. package/dist/chunk-XMYUYQH7.mjs +72 -0
  39. package/dist/chunk-ZNTMZ6NM.js +7 -0
  40. package/dist/consent-audit-BdByjYlM.d.mts +65 -0
  41. package/dist/consent-audit-DhbfMR0n.d.ts +65 -0
  42. package/dist/consent.d.mts +120 -7
  43. package/dist/consent.d.ts +120 -7
  44. package/dist/consent.js +1 -1
  45. package/dist/consent.mjs +1 -1
  46. package/dist/core.d.mts +62 -12
  47. package/dist/core.d.ts +62 -12
  48. package/dist/core.js +1 -1
  49. package/dist/core.mjs +1 -1
  50. package/dist/{cross-border-BrIy1ieh.d.ts → cross-border-BMcqLvjC.d.mts} +1 -1
  51. package/dist/{cross-border-BrIy1ieh.d.mts → cross-border-BMcqLvjC.d.ts} +1 -1
  52. package/dist/cross-border-entry-BrWVPly6.d.ts +91 -0
  53. package/dist/cross-border-entry-cCTvpwnT.d.mts +91 -0
  54. package/dist/cross-border.d.mts +4 -58
  55. package/dist/cross-border.d.ts +4 -58
  56. package/dist/cross-border.js +1 -1
  57. package/dist/cross-border.mjs +1 -1
  58. package/dist/{dpia-vWfE_9bO.d.mts → dpia-5OQVA1R_.d.mts} +1 -1
  59. package/dist/{dpia-vWfE_9bO.d.ts → dpia-5OQVA1R_.d.ts} +1 -1
  60. package/dist/{dpia-fdtTd2DI.d.ts → dpia-B0Pok5us.d.ts} +1 -1
  61. package/dist/{dpia-B9ZZJG5a.d.mts → dpia-CUfOmzvX.d.mts} +1 -1
  62. package/dist/dpia.d.mts +119 -5
  63. package/dist/dpia.d.ts +119 -5
  64. package/dist/dpia.js +1 -1
  65. package/dist/dpia.mjs +1 -1
  66. package/dist/dsr-190YpijW.d.ts +307 -0
  67. package/dist/dsr-BTT-Xd7H.d.mts +307 -0
  68. package/dist/{dsr-pQzQ3H1O.d.mts → dsr-Cm9lzWG7.d.mts} +1 -1
  69. package/dist/{dsr-pQzQ3H1O.d.ts → dsr-Cm9lzWG7.d.ts} +1 -1
  70. package/dist/{dsr-whPkiI0_.d.mts → dsr-D_eTNc4S.d.mts} +1 -1
  71. package/dist/{dsr-jq5NUEdz.d.ts → dsr-pNtVb1BK.d.ts} +1 -1
  72. package/dist/dsr.d.mts +5 -192
  73. package/dist/dsr.d.ts +5 -192
  74. package/dist/dsr.js +1 -1
  75. package/dist/dsr.mjs +1 -1
  76. package/dist/hooks.d.mts +14 -14
  77. package/dist/hooks.d.ts +14 -14
  78. package/dist/hooks.js +1 -1
  79. package/dist/hooks.mjs +1 -1
  80. package/dist/index.d.mts +28 -27
  81. package/dist/index.d.ts +28 -27
  82. package/dist/index.js +1 -1
  83. package/dist/index.mjs +1 -1
  84. package/dist/{lawful-basis-v04AhbK2.d.ts → lawful-basis-BEyI0kGg.d.ts} +2 -2
  85. package/dist/{lawful-basis-D-oXFizg.d.mts → lawful-basis-C2eGaoHM.d.mts} +2 -2
  86. package/dist/{lawful-basis-CWtvDG1x.d.mts → lawful-basis-Cv1VmDLn.d.mts} +1 -1
  87. package/dist/{lawful-basis-CWtvDG1x.d.ts → lawful-basis-Cv1VmDLn.d.ts} +1 -1
  88. package/dist/lawful-basis-entry-15qjKcNO.d.ts +87 -0
  89. package/dist/lawful-basis-entry-CxZrofwG.d.mts +87 -0
  90. package/dist/lawful-basis.d.mts +5 -55
  91. package/dist/lawful-basis.d.ts +5 -55
  92. package/dist/lawful-basis.js +1 -1
  93. package/dist/lawful-basis.mjs +1 -1
  94. package/dist/policy-D2_jh5-T.d.ts +293 -0
  95. package/dist/policy-E0fXZkda.d.mts +293 -0
  96. package/dist/policy-templates-CIKcV0i1.d.ts +36 -0
  97. package/dist/policy-templates-DMsPwOSZ.d.mts +36 -0
  98. package/dist/policy.d.mts +5 -195
  99. package/dist/policy.d.ts +5 -195
  100. package/dist/policy.js +1 -1
  101. package/dist/policy.mjs +1 -1
  102. package/dist/{ropa-Rb4dsFSz.d.mts → ropa-DP7pPPql.d.mts} +2 -2
  103. package/dist/{ropa-BebGfqKQ.d.ts → ropa-Li6UlL5H.d.ts} +2 -2
  104. package/dist/ropa-entry-B0D7X1GV.d.ts +80 -0
  105. package/dist/ropa-entry-DiOThOc2.d.mts +80 -0
  106. package/dist/ropa.d.mts +5 -45
  107. package/dist/ropa.d.ts +5 -45
  108. package/dist/ropa.js +1 -1
  109. package/dist/ropa.mjs +1 -1
  110. package/dist/styles.css +40 -28
  111. package/dist/styles.d.ts +1 -0
  112. package/dist/unstyled.js +1 -1
  113. package/dist/unstyled.mjs +1 -1
  114. package/dist/{useBreach-WrZzJilM.d.mts → useBreach-BBSoIcZO.d.mts} +1 -1
  115. package/dist/{useBreach-vrh_XMpI.d.ts → useBreach-lFLbSyAN.d.ts} +1 -1
  116. package/dist/{useCrossBorderTransfer-TVnY8_UX.d.mts → useCrossBorderTransfer-BZVFCXfr.d.mts} +1 -1
  117. package/dist/{useCrossBorderTransfer-D4FQYfFt.d.ts → useCrossBorderTransfer-DmtACeqW.d.ts} +1 -1
  118. package/dist/{useDPIA-DFDHBLSa.d.ts → useDPIA-DBsg2yZx.d.ts} +1 -1
  119. package/dist/{useDPIA-FqPofFaV.d.mts → useDPIA-Da7-Q_yW.d.mts} +1 -1
  120. package/dist/{useDSR-DAqqOBXb.d.ts → useDSR-CYI7WCXr.d.ts} +1 -1
  121. package/dist/{useDSR-OXM5Q9rf.d.mts → useDSR-YYZ6FYFs.d.mts} +1 -1
  122. package/dist/{usePrivacyPolicy-CfySfBLS.d.ts → useDefaultPrivacyPolicy-B7kTHbZh.d.ts} +39 -2
  123. package/dist/{usePrivacyPolicy-Dit2sFuV.d.mts → useDefaultPrivacyPolicy-CUluF_ic.d.mts} +39 -2
  124. package/dist/{useLawfulBasis-RILM_xsx.d.ts → useLawfulBasis-CCWF9waR.d.ts} +2 -2
  125. package/dist/{useLawfulBasis-DNQ8YszQ.d.mts → useLawfulBasis-CpWuHtyh.d.mts} +2 -2
  126. package/dist/{useROPA-Bcs6cRdi.d.ts → useROPA-BhJ3kvHp.d.ts} +1 -1
  127. package/dist/{useROPA-nmcSiUYv.d.mts → useROPA-DLFdjkxP.d.mts} +1 -1
  128. package/package.json +30 -21
  129. package/dist/chunk-2XHD22J7.mjs +0 -7
  130. package/dist/chunk-4DKT6IB6.js +0 -94
  131. package/dist/chunk-6JFTAYXV.mjs +0 -2
  132. package/dist/chunk-6JVYYLS7.js +0 -2
  133. package/dist/chunk-6SGG6WPA.mjs +0 -2
  134. package/dist/chunk-AQEGDEQM.js +0 -7
  135. package/dist/chunk-C2IJWCZQ.mjs +0 -2
  136. package/dist/chunk-DB3JH4DS.mjs +0 -2
  137. package/dist/chunk-FFW7RUAG.mjs +0 -94
  138. package/dist/chunk-FK3CSFLJ.js +0 -2
  139. package/dist/chunk-IWUUVRLJ.js +0 -2
  140. package/dist/chunk-JUN6YPLL.mjs +0 -72
  141. package/dist/chunk-L3FKTBGV.js +0 -72
  142. package/dist/chunk-PM7CMTMB.js +0 -4
  143. package/dist/chunk-RB26MIRI.js +0 -2
  144. package/dist/chunk-RHWW5FDP.js +0 -16
  145. package/dist/chunk-SLNMKGQ2.mjs +0 -2
  146. package/dist/chunk-UUWVBENC.js +0 -2
  147. package/dist/chunk-UYP64PV7.mjs +0 -4
  148. package/dist/chunk-XMKA6GVK.mjs +0 -16
  149. package/dist/consent-DCc5zjXI.d.mts +0 -24
  150. package/dist/consent-DLWb5ota.d.ts +0 -24
  151. package/dist/privacy-9FcJceMr.d.mts +0 -15
  152. package/dist/privacy-BXz7O2ej.d.ts +0 -15
@@ -1,4 +1,4 @@
1
- import { a as BreachCategory, B as BreachReport, R as RiskAssessment, b as RegulatoryNotification, N as NotificationRequirement } from './breach-BtFbDOmV.mjs';
1
+ import { B as BreachCategory, a as BreachReport, b as RiskAssessment, R as RegulatoryNotification, N as NotificationRequirement } from './breach-Eu9byel8.mjs';
2
2
 
3
3
  interface UseBreachOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as BreachCategory, B as BreachReport, R as RiskAssessment, b as RegulatoryNotification, N as NotificationRequirement } from './breach-BtFbDOmV.js';
1
+ import { B as BreachCategory, a as BreachReport, b as RiskAssessment, R as RegulatoryNotification, N as NotificationRequirement } from './breach-Eu9byel8.js';
2
2
 
3
3
  interface UseBreachOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { C as CrossBorderTransfer, b as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BrIy1ieh.mjs';
1
+ import { a as CrossBorderTransfer, C as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BMcqLvjC.mjs';
2
2
 
3
3
  interface UseCrossBorderTransferOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { C as CrossBorderTransfer, b as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BrIy1ieh.js';
1
+ import { a as CrossBorderTransfer, C as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BMcqLvjC.js';
2
2
 
3
3
  interface UseCrossBorderTransferOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as DPIASection, b as DPIAResult, D as DPIAQuestion } from './dpia-vWfE_9bO.js';
1
+ import { c as DPIASection, a as DPIAResult, D as DPIAQuestion } from './dpia-5OQVA1R_.js';
2
2
 
3
3
  interface UseDPIAOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as DPIASection, b as DPIAResult, D as DPIAQuestion } from './dpia-vWfE_9bO.mjs';
1
+ import { c as DPIASection, a as DPIAResult, D as DPIAQuestion } from './dpia-5OQVA1R_.mjs';
2
2
 
3
3
  interface UseDPIAOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { D as DSRRequest, R as RequestType, c as RequestStatus } from './dsr-pQzQ3H1O.js';
1
+ import { D as DSRRequest, c as RequestType, R as RequestStatus } from './dsr-Cm9lzWG7.js';
2
2
 
3
3
  interface UseDSROptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { D as DSRRequest, R as RequestType, c as RequestStatus } from './dsr-pQzQ3H1O.mjs';
1
+ import { D as DSRRequest, c as RequestType, R as RequestStatus } from './dsr-Cm9lzWG7.mjs';
2
2
 
3
3
  interface UseDSROptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as PolicyTemplate, c as PrivacyPolicy, O as OrganizationInfo } from './privacy-Ca6te9Ir.js';
1
+ import { c as PrivacyPolicy, a as PolicyTemplate, O as OrganizationInfo } from './privacy-Ca6te9Ir.js';
2
2
 
3
3
  interface UsePrivacyPolicyOptions {
4
4
  /**
@@ -86,4 +86,41 @@ interface UsePrivacyPolicyReturn {
86
86
  */
87
87
  declare function usePrivacyPolicy({ templates, initialPolicy, storageKey, useLocalStorage, onGenerate }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
88
88
 
89
- export { usePrivacyPolicy as u };
89
+ interface UseDefaultPrivacyPolicyOptions {
90
+ /**
91
+ * Organisation information to pre-fill into the policy variables.
92
+ */
93
+ orgInfo?: {
94
+ /** Organisation name */
95
+ name?: string;
96
+ /** Privacy contact email */
97
+ email?: string;
98
+ /** Data Protection Officer name */
99
+ dpoName?: string;
100
+ };
101
+ /**
102
+ * Storage key for policy data.
103
+ * @default "ndpr_privacy_policy"
104
+ */
105
+ storageKey?: string;
106
+ /**
107
+ * Whether to persist policy data in local storage.
108
+ * @default true
109
+ */
110
+ useLocalStorage?: boolean;
111
+ }
112
+ /**
113
+ * Convenience wrapper around `usePrivacyPolicy` that automatically
114
+ * loads the default NDPA-compliant business policy template and
115
+ * pre-fills common organisation variables.
116
+ *
117
+ * @example
118
+ * ```tsx
119
+ * const policy = useDefaultPrivacyPolicy({
120
+ * orgInfo: { name: 'Acme Ltd', email: 'privacy@acme.ng', dpoName: 'Jane Doe' }
121
+ * });
122
+ * ```
123
+ */
124
+ declare function useDefaultPrivacyPolicy(options?: UseDefaultPrivacyPolicyOptions): UsePrivacyPolicyReturn;
125
+
126
+ export { usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
@@ -1,4 +1,4 @@
1
- import { a as PolicyTemplate, c as PrivacyPolicy, O as OrganizationInfo } from './privacy-Ca6te9Ir.mjs';
1
+ import { c as PrivacyPolicy, a as PolicyTemplate, O as OrganizationInfo } from './privacy-Ca6te9Ir.mjs';
2
2
 
3
3
  interface UsePrivacyPolicyOptions {
4
4
  /**
@@ -86,4 +86,41 @@ interface UsePrivacyPolicyReturn {
86
86
  */
87
87
  declare function usePrivacyPolicy({ templates, initialPolicy, storageKey, useLocalStorage, onGenerate }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
88
88
 
89
- export { usePrivacyPolicy as u };
89
+ interface UseDefaultPrivacyPolicyOptions {
90
+ /**
91
+ * Organisation information to pre-fill into the policy variables.
92
+ */
93
+ orgInfo?: {
94
+ /** Organisation name */
95
+ name?: string;
96
+ /** Privacy contact email */
97
+ email?: string;
98
+ /** Data Protection Officer name */
99
+ dpoName?: string;
100
+ };
101
+ /**
102
+ * Storage key for policy data.
103
+ * @default "ndpr_privacy_policy"
104
+ */
105
+ storageKey?: string;
106
+ /**
107
+ * Whether to persist policy data in local storage.
108
+ * @default true
109
+ */
110
+ useLocalStorage?: boolean;
111
+ }
112
+ /**
113
+ * Convenience wrapper around `usePrivacyPolicy` that automatically
114
+ * loads the default NDPA-compliant business policy template and
115
+ * pre-fills common organisation variables.
116
+ *
117
+ * @example
118
+ * ```tsx
119
+ * const policy = useDefaultPrivacyPolicy({
120
+ * orgInfo: { name: 'Acme Ltd', email: 'privacy@acme.ng', dpoName: 'Jane Doe' }
121
+ * });
122
+ * ```
123
+ */
124
+ declare function useDefaultPrivacyPolicy(options?: UseDefaultPrivacyPolicyOptions): UsePrivacyPolicyReturn;
125
+
126
+ export { usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
@@ -1,5 +1,5 @@
1
- import { P as ProcessingActivity, b as LawfulBasisSummary } from './lawful-basis-CWtvDG1x.js';
2
- import { c as LawfulBasisValidationResult } from './lawful-basis-v04AhbK2.js';
1
+ import { P as ProcessingActivity, a as LawfulBasisSummary } from './lawful-basis-Cv1VmDLn.js';
2
+ import { a as LawfulBasisValidationResult } from './lawful-basis-BEyI0kGg.js';
3
3
 
4
4
  interface UseLawfulBasisOptions {
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { P as ProcessingActivity, b as LawfulBasisSummary } from './lawful-basis-CWtvDG1x.mjs';
2
- import { c as LawfulBasisValidationResult } from './lawful-basis-D-oXFizg.mjs';
1
+ import { P as ProcessingActivity, a as LawfulBasisSummary } from './lawful-basis-Cv1VmDLn.mjs';
2
+ import { a as LawfulBasisValidationResult } from './lawful-basis-C2eGaoHM.mjs';
3
3
 
4
4
  interface UseLawfulBasisOptions {
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { R as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, b as ROPAComplianceGap } from './ropa-BebGfqKQ.js';
1
+ import { c as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, R as ROPAComplianceGap } from './ropa-Li6UlL5H.js';
2
2
 
3
3
  interface UseROPAOptions {
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { R as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, b as ROPAComplianceGap } from './ropa-Rb4dsFSz.mjs';
1
+ import { c as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, R as ROPAComplianceGap } from './ropa-DP7pPPql.mjs';
2
2
 
3
3
  interface UseROPAOptions {
4
4
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tantainnovative/ndpr-toolkit",
3
- "version": "2.1.2",
3
+ "version": "2.4.0",
4
4
  "private": false,
5
5
  "description": "Nigeria Data Protection Toolkit — enterprise-grade compliance components for the Nigeria Data Protection Act (NDPA) 2023",
6
6
  "keywords": [
@@ -96,7 +96,11 @@
96
96
  "import": "./dist/unstyled.mjs",
97
97
  "require": "./dist/unstyled.js"
98
98
  },
99
- "./styles": "./dist/styles.css"
99
+ "./styles": {
100
+ "types": "./dist/styles.d.ts",
101
+ "import": "./dist/styles.css",
102
+ "require": "./dist/styles.css"
103
+ }
100
104
  },
101
105
  "typesVersions": {
102
106
  "*": {
@@ -150,9 +154,7 @@
150
154
  "sideEffects": [
151
155
  "*.css"
152
156
  ],
153
- "dependencies": {
154
- "uuid": "^13.0.0"
155
- },
157
+ "dependencies": {},
156
158
  "peerDependencies": {
157
159
  "@radix-ui/react-label": "^2.1.4",
158
160
  "@radix-ui/react-slot": "^1.2.0",
@@ -161,7 +163,7 @@
161
163
  "class-variance-authority": "^0.7.1",
162
164
  "clsx": "^2.1.1",
163
165
  "jspdf": "^3.0.3",
164
- "lucide-react": "^0.507.0",
166
+ "lucide-react": ">=0.400.0",
165
167
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
166
168
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
167
169
  "tailwind-merge": "^2.6.0"
@@ -199,9 +201,10 @@
199
201
  "@mdx-js/loader": "^3.1.1",
200
202
  "@mdx-js/react": "^3.1.1",
201
203
  "@next/mdx": "^16.2.2",
202
- "@next/font": "^14.2.15",
203
- "gray-matter": "^4.0.3",
204
- "reading-time": "^1.5.0",
204
+ "@radix-ui/react-label": "^2.1.8",
205
+ "@radix-ui/react-slot": "^1.2.4",
206
+ "@radix-ui/react-switch": "^1.2.6",
207
+ "@radix-ui/react-tabs": "^1.1.13",
205
208
  "@tailwindcss/postcss": "^4.1.13",
206
209
  "@testing-library/jest-dom": "^6.6.3",
207
210
  "@testing-library/react": "^16.3.0",
@@ -211,41 +214,47 @@
211
214
  "@typescript-eslint/eslint-plugin": "^8.0.0",
212
215
  "@typescript-eslint/parser": "^8.0.0",
213
216
  "autoprefixer": "^10.4.21",
214
- "eslint": "^9.0.0",
217
+ "class-variance-authority": "^0.7.1",
218
+ "clsx": "^2.1.1",
219
+ "commit-and-tag-version": "^12.7.1",
220
+ "eslint": "^10.2.0",
215
221
  "eslint-plugin-react": "^7.30.0",
216
222
  "eslint-plugin-react-hooks": "^4.5.0",
217
223
  "gh-pages": "^6.3.0",
224
+ "gray-matter": "^4.0.3",
218
225
  "husky": "^9.1.7",
219
226
  "jest": "^29.5.0",
220
- "jest-environment-jsdom": "^30.2.0",
227
+ "jest-environment-jsdom": "^30.3.0",
228
+ "jspdf": "^4.2.1",
221
229
  "lint-staged": "^16.2.3",
222
- "next": "^15.5.4",
230
+ "lucide-react": "0.507.0",
231
+ "next": "^16.2.2",
223
232
  "postcss": "^8.5.6",
224
- "posthog-js": "^1.268.8",
233
+ "posthog-js": "^1.364.7",
225
234
  "posthog-node": "^5.9.2",
226
235
  "react": "^19.1.1",
227
236
  "react-dom": "^19.1.1",
228
- "react-test-renderer": "^18.2.0",
229
- "standard-version": "^9.5.0",
237
+ "reading-time": "^1.5.0",
238
+ "tailwind-merge": "^3.5.0",
230
239
  "tailwindcss": "^4.1.13",
231
240
  "ts-jest": "^29.0.0",
232
- "tsup": "^8.5.0",
241
+ "tsup": "^8.5.1",
233
242
  "tw-animate-css": "^1.4.0",
234
243
  "typescript": "^5.0.0"
235
244
  },
236
245
  "scripts": {
237
246
  "dev": "next dev --turbopack",
238
247
  "build": "next build && node scripts/post-build.js",
239
- "build:lib": "tsup",
248
+ "build:lib": "tsup && cp packages/ndpr-toolkit/src/styles.d.ts dist/styles.d.ts",
240
249
  "start": "next start",
241
250
  "lint": "next lint",
242
251
  "test": "jest --passWithNoTests",
243
252
  "export": "next export",
244
253
  "build:static": "next build",
245
254
  "deploy": "next build && touch out/.nojekyll && gh-pages -d out",
246
- "release": "standard-version",
247
- "release:minor": "standard-version --release-as minor",
248
- "release:major": "standard-version --release-as major",
249
- "release:patch": "standard-version --release-as patch"
255
+ "release": "commit-and-tag-version",
256
+ "release:minor": "commit-and-tag-version --release-as minor",
257
+ "release:major": "commit-and-tag-version --release-as major",
258
+ "release:patch": "commit-and-tag-version --release-as patch"
250
259
  }
251
260
  }
@@ -1,7 +0,0 @@
1
- import {a,d,c,b}from'./chunk-QKK5S54L.mjs';import {b as b$1,a as a$1}from'./chunk-WWT2ZSNU.mjs';import e,{useState,useEffect}from'react';var T=[{value:"adequacy_decision",label:"Adequacy Decision (Section 41)"},{value:"standard_clauses",label:"Standard Contractual Clauses (Section 42)"},{value:"binding_corporate_rules",label:"Binding Corporate Rules (Section 43)"},{value:"ndpc_authorization",label:"NDPC Authorization (Section 44)"},{value:"explicit_consent",label:"Explicit Consent (Section 45(a))"},{value:"contract_performance",label:"Contract Performance (Section 45(b))"},{value:"public_interest",label:"Public Interest (Section 45(c))"},{value:"legal_claims",label:"Legal Claims (Section 45(d))"},{value:"vital_interests",label:"Vital Interests (Section 45(e))"}],$=[{value:"adequate",label:"Adequate"},{value:"inadequate",label:"Inadequate"},{value:"pending_review",label:"Pending Review"},{value:"unknown",label:"Unknown"}],U=[{value:"one_time",label:"One-Time"},{value:"periodic",label:"Periodic"},{value:"continuous",label:"Continuous"}],V=[{value:"active",label:"Active"},{value:"suspended",label:"Suspended"},{value:"terminated",label:"Terminated"},{value:"pending_approval",label:"Pending Approval"}],H={destinationCountry:"",destinationCountryCode:"",adequacyStatus:"unknown",transferMechanism:"adequacy_decision",dataCategories:"",includesSensitiveData:false,estimatedDataSubjects:"",recipientOrganization:"",recipientContactName:"",recipientContactEmail:"",recipientContactPhone:"",recipientContactAddress:"",purpose:"",safeguards:"",riskAssessment:"",riskLevel:"medium",frequency:"one_time",status:"active",tiaCompleted:false,tiaReference:"",ndpcApprovalApplied:false,ndpcApprovalApproved:false,ndpcApprovalReference:""},ue=({transfers:o,onAddTransfer:D,onUpdateTransfer:q,onRemoveTransfer:M,summary:Y,title:Q="Cross-Border Data Transfer Manager",description:W="Manage and document cross-border personal data transfers in compliance with NDPA 2023 Part VI (Sections 41-45).",className:G="",buttonClassName:h="",showSummary:K=true,showTIA:J=true})=>{let[u,C]=useState(null),[F,g]=useState(false),[b$2,P]=useState(null),[t,A]=useState(H),[c$1,O]=useState(null),[x,X]=useState("all"),[y,Z]=useState("all"),[v,R]=useState(o);useEffect(()=>{let a=[...o];x!=="all"&&(a=a.filter(s=>s.status===x)),y!=="all"&&(a=a.filter(s=>s.transferMechanism===y)),a.sort((s,r)=>r.updatedAt-s.updatedAt),R(a);},[o,x,y]),useEffect(()=>{v.length>0&&!u&&C(v[0].id);},[v,u]);let I=u?o.find(a=>a.id===u):null,f=a=>new Date(a).toLocaleDateString(),N=()=>{A(H),P(null),O(null);},ee=()=>{N(),g(true);},ae=a=>{var s,r,d,p;P(a.id),A({destinationCountry:a.destinationCountry,destinationCountryCode:a.destinationCountryCode||"",adequacyStatus:a.adequacyStatus,transferMechanism:a.transferMechanism,dataCategories:a.dataCategories.join(", "),includesSensitiveData:a.includesSensitiveData,estimatedDataSubjects:((s=a.estimatedDataSubjects)==null?void 0:s.toString())||"",recipientOrganization:a.recipientOrganization,recipientContactName:a.recipientContact.name,recipientContactEmail:a.recipientContact.email,recipientContactPhone:a.recipientContact.phone||"",recipientContactAddress:a.recipientContact.address||"",purpose:a.purpose,safeguards:a.safeguards.join(`
2
- `),riskAssessment:a.riskAssessment,riskLevel:a.riskLevel,frequency:a.frequency,status:a.status,tiaCompleted:a.tiaCompleted,tiaReference:a.tiaReference||"",ndpcApprovalApplied:((r=a.ndpcApproval)==null?void 0:r.applied)||false,ndpcApprovalApproved:((d=a.ndpcApproval)==null?void 0:d.approved)||false,ndpcApprovalReference:((p=a.ndpcApproval)==null?void 0:p.referenceNumber)||""}),g(true);},l=(a,s)=>{A(r=>b$1(a$1({},r),{[a]:s}));},se=()=>{let a$1=a(t.transferMechanism),s=Date.now();return {destinationCountry:t.destinationCountry.trim(),destinationCountryCode:t.destinationCountryCode.trim()||void 0,adequacyStatus:t.adequacyStatus,transferMechanism:t.transferMechanism,dataCategories:t.dataCategories.split(",").map(r=>r.trim()).filter(Boolean),includesSensitiveData:t.includesSensitiveData,estimatedDataSubjects:t.estimatedDataSubjects?parseInt(t.estimatedDataSubjects,10):void 0,recipientOrganization:t.recipientOrganization.trim(),recipientContact:{name:t.recipientContactName.trim(),email:t.recipientContactEmail.trim(),phone:t.recipientContactPhone.trim()||void 0,address:t.recipientContactAddress.trim()||void 0},purpose:t.purpose.trim(),safeguards:t.safeguards.split(`
3
- `).map(r=>r.trim()).filter(Boolean),riskAssessment:t.riskAssessment.trim(),riskLevel:t.riskLevel,frequency:t.frequency,status:a$1&&!t.ndpcApprovalApproved?"pending_approval":t.status,tiaCompleted:t.tiaCompleted,tiaReference:t.tiaReference.trim()||void 0,ndpcApproval:a$1?{required:true,applied:t.ndpcApprovalApplied,approved:t.ndpcApprovalApproved||void 0,referenceNumber:t.ndpcApprovalReference.trim()||void 0,appliedAt:t.ndpcApprovalApplied?s:void 0,approvedAt:t.ndpcApprovalApproved?s:void 0}:void 0,startDate:s,reviewDate:s+365*24*60*60*1e3}},te=()=>{let a=se(),s=a$1({id:b$2||"temp",createdAt:Date.now(),updatedAt:Date.now()},a),r=c(s);O(r),r.isValid&&(b$2?q&&q(b$2,a):D&&D(a),N(),g(false));},re=a=>{M&&M(a),u===a&&C(null);},_=a=>e.createElement("span",{className:`px-2 py-1 rounded text-xs font-medium ${{low:"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",medium:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",high:"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"}[a]}`},a.charAt(0).toUpperCase()+a.slice(1)," Risk"),B=a=>{let s={active:"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",suspended:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",terminated:"bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200",pending_approval:"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200"},r={active:"Active",suspended:"Suspended",terminated:"Terminated",pending_approval:"Pending Approval"};return e.createElement("span",{className:`px-2 py-1 rounded text-xs font-medium ${s[a]}`},r[a])},le=a$1=>{var d;let s=a(a$1),r=((d=T.find(p=>p.value===a$1))==null?void 0:d.label)||a$1;return e.createElement("span",{className:`px-2 py-1 rounded text-xs font-medium ${s?"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200":"bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-200"}`},r)},ne=()=>{let a=Y||{totalActiveTransfers:o.filter(s=>s.status==="active").length,pendingApproval:o.filter(s=>{var r,d;return s.status==="pending_approval"||((r=s.ndpcApproval)==null?void 0:r.required)&&!((d=s.ndpcApproval)!=null&&d.approved)}),highRiskTransfers:o.filter(s=>s.riskLevel==="high"&&s.status==="active"),missingTIA:o.filter(s=>!s.tiaCompleted&&s.status==="active")};return e.createElement("div",{className:"mb-6 grid grid-cols-2 md:grid-cols-4 gap-4"},e.createElement("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-4 rounded-lg"},e.createElement("p",{className:"text-2xl font-bold text-blue-800 dark:text-blue-200"},a.totalActiveTransfers),e.createElement("p",{className:"text-sm text-blue-600 dark:text-blue-300"},"Active Transfers")),e.createElement("div",{className:"bg-purple-50 dark:bg-purple-900/20 p-4 rounded-lg"},e.createElement("p",{className:"text-2xl font-bold text-purple-800 dark:text-purple-200"},a.pendingApproval.length),e.createElement("p",{className:"text-sm text-purple-600 dark:text-purple-300"},"Pending Approval")),e.createElement("div",{className:"bg-red-50 dark:bg-red-900/20 p-4 rounded-lg"},e.createElement("p",{className:"text-2xl font-bold text-red-800 dark:text-red-200"},a.highRiskTransfers.length),e.createElement("p",{className:"text-sm text-red-600 dark:text-red-300"},"High Risk")),e.createElement("div",{className:"bg-yellow-50 dark:bg-yellow-900/20 p-4 rounded-lg"},e.createElement("p",{className:"text-2xl font-bold text-yellow-800 dark:text-yellow-200"},a.missingTIA.length),e.createElement("p",{className:"text-sm text-yellow-600 dark:text-yellow-300"},"Missing TIA")))},de=()=>{let a$1=a(t.transferMechanism);return e.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 p-6 rounded-lg mb-6"},e.createElement("div",{className:"flex justify-between items-center mb-4"},e.createElement("h3",{className:"text-lg font-medium"},b$2?"Edit Transfer":"Add New Transfer"),e.createElement("button",{onClick:()=>{N(),g(false);},className:"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"},"Cancel")),c$1&&!c$1.isValid&&e.createElement("div",{className:"mb-4 bg-red-50 dark:bg-red-900/20 p-3 rounded-md"},e.createElement("p",{className:"text-sm font-medium text-red-800 dark:text-red-200 mb-1"},"Please fix the following errors:"),e.createElement("ul",{className:"list-disc list-inside text-sm text-red-700 dark:text-red-300"},c$1.errors.map((s,r)=>e.createElement("li",{key:r},s)))),c$1&&c$1.warnings.length>0&&e.createElement("div",{className:"mb-4 bg-yellow-50 dark:bg-yellow-900/20 p-3 rounded-md"},e.createElement("p",{className:"text-sm font-medium text-yellow-800 dark:text-yellow-200 mb-1"},"Warnings:"),e.createElement("ul",{className:"list-disc list-inside text-sm text-yellow-700 dark:text-yellow-300"},c$1.warnings.map((s,r)=>e.createElement("li",{key:r},s)))),e.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4"},e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Destination Country ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("input",{type:"text",value:t.destinationCountry,onChange:s=>l("destinationCountry",s.target.value),placeholder:"e.g. United Kingdom",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Country Code (ISO)"),e.createElement("input",{type:"text",value:t.destinationCountryCode,onChange:s=>l("destinationCountryCode",s.target.value),placeholder:"e.g. GB",maxLength:3,className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Recipient Organization ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("input",{type:"text",value:t.recipientOrganization,onChange:s=>l("recipientOrganization",s.target.value),placeholder:"Organization name",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Transfer Mechanism ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("select",{value:t.transferMechanism,onChange:s=>l("transferMechanism",s.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},T.map(s=>e.createElement("option",{key:s.value,value:s.value},s.label)))),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Adequacy Status"),e.createElement("select",{value:t.adequacyStatus,onChange:s=>l("adequacyStatus",s.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},$.map(s=>e.createElement("option",{key:s.value,value:s.value},s.label)))),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Risk Level"),e.createElement("select",{value:t.riskLevel,onChange:s=>l("riskLevel",s.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},e.createElement("option",{value:"low"},"Low"),e.createElement("option",{value:"medium"},"Medium"),e.createElement("option",{value:"high"},"High"))),e.createElement("div",{className:"md:col-span-2"},e.createElement("label",{className:"block text-sm font-medium mb-1"},"Data Categories ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("input",{type:"text",value:t.dataCategories,onChange:s=>l("dataCategories",s.target.value),placeholder:"Comma-separated, e.g. Names, Email addresses, Phone numbers",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",{className:"flex items-center gap-2"},e.createElement("input",{type:"checkbox",id:"includesSensitiveData",checked:t.includesSensitiveData,onChange:s=>l("includesSensitiveData",s.target.checked),className:"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"}),e.createElement("label",{htmlFor:"includesSensitiveData",className:"text-sm font-medium"},"Includes sensitive personal data")),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Estimated Data Subjects"),e.createElement("input",{type:"number",value:t.estimatedDataSubjects,onChange:s=>l("estimatedDataSubjects",s.target.value),placeholder:"Number of data subjects",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Recipient Contact Name ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("input",{type:"text",value:t.recipientContactName,onChange:s=>l("recipientContactName",s.target.value),placeholder:"Contact person name",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Recipient Contact Email ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("input",{type:"email",value:t.recipientContactEmail,onChange:s=>l("recipientContactEmail",s.target.value),placeholder:"contact@example.com",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Recipient Contact Phone"),e.createElement("input",{type:"text",value:t.recipientContactPhone,onChange:s=>l("recipientContactPhone",s.target.value),placeholder:"Phone number",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Recipient Contact Address"),e.createElement("input",{type:"text",value:t.recipientContactAddress,onChange:s=>l("recipientContactAddress",s.target.value),placeholder:"Address",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",{className:"md:col-span-2"},e.createElement("label",{className:"block text-sm font-medium mb-1"},"Purpose of Transfer ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("textarea",{value:t.purpose,onChange:s=>l("purpose",s.target.value),placeholder:"Describe the purpose of this data transfer",rows:2,className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",{className:"md:col-span-2"},e.createElement("label",{className:"block text-sm font-medium mb-1"},"Safeguards ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("textarea",{value:t.safeguards,onChange:s=>l("safeguards",s.target.value),placeholder:`One safeguard per line, e.g.
4
- End-to-end encryption
5
- Access control policies
6
- Regular security audits`,rows:3,className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",{className:"md:col-span-2"},e.createElement("label",{className:"block text-sm font-medium mb-1"},"Risk Assessment Summary ",e.createElement("span",{className:"text-red-500"},"*")),e.createElement("textarea",{value:t.riskAssessment,onChange:s=>l("riskAssessment",s.target.value),placeholder:"Summarize the risk assessment for this transfer",rows:2,className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Transfer Frequency"),e.createElement("select",{value:t.frequency,onChange:s=>l("frequency",s.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},U.map(s=>e.createElement("option",{key:s.value,value:s.value},s.label)))),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"Status"),e.createElement("select",{value:t.status,onChange:s=>l("status",s.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},V.map(s=>e.createElement("option",{key:s.value,value:s.value},s.label))))),a$1&&e.createElement("div",{className:"mt-4 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md"},e.createElement("h4",{className:"text-sm font-medium text-blue-800 dark:text-blue-200 mb-3"},"NDPC Approval Required"),e.createElement("p",{className:"text-xs text-blue-700 dark:text-blue-300 mb-3"},"The selected transfer mechanism requires approval from the Nigeria Data Protection Commission."),e.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4"},e.createElement("div",{className:"flex items-center gap-2"},e.createElement("input",{type:"checkbox",id:"ndpcApprovalApplied",checked:t.ndpcApprovalApplied,onChange:s=>l("ndpcApprovalApplied",s.target.checked),className:"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"}),e.createElement("label",{htmlFor:"ndpcApprovalApplied",className:"text-sm"},"Application submitted")),e.createElement("div",{className:"flex items-center gap-2"},e.createElement("input",{type:"checkbox",id:"ndpcApprovalApproved",checked:t.ndpcApprovalApproved,onChange:s=>l("ndpcApprovalApproved",s.target.checked),className:"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"}),e.createElement("label",{htmlFor:"ndpcApprovalApproved",className:"text-sm"},"Approval granted")),e.createElement("div",{className:"md:col-span-2"},e.createElement("label",{className:"block text-sm font-medium mb-1"},"NDPC Reference Number"),e.createElement("input",{type:"text",value:t.ndpcApprovalReference,onChange:s=>l("ndpcApprovalReference",s.target.value),placeholder:"Reference number (if available)",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})))),J&&e.createElement("div",{className:"mt-4 p-4 bg-gray-100 dark:bg-gray-600 rounded-md"},e.createElement("h4",{className:"text-sm font-medium mb-3"},"Transfer Impact Assessment"),e.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4"},e.createElement("div",{className:"flex items-center gap-2"},e.createElement("input",{type:"checkbox",id:"tiaCompleted",checked:t.tiaCompleted,onChange:s=>l("tiaCompleted",s.target.checked),className:"h-4 w-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"}),e.createElement("label",{htmlFor:"tiaCompleted",className:"text-sm"},"TIA completed")),e.createElement("div",null,e.createElement("label",{className:"block text-sm font-medium mb-1"},"TIA Reference"),e.createElement("input",{type:"text",value:t.tiaReference,onChange:s=>l("tiaReference",s.target.value),placeholder:"Document reference",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})))),e.createElement("div",{className:"mt-4 flex justify-end gap-3"},e.createElement("button",{onClick:()=>{N(),g(false);},className:"px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-600"},"Cancel"),e.createElement("button",{onClick:te,className:`px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 ${h}`},b$2?"Update Transfer":"Add Transfer")))},ie=a=>{var d$1,p;let s=d(a),r=c(a);return e.createElement("div",null,e.createElement("div",{className:"flex justify-between items-start mb-4"},e.createElement("h3",{className:"text-lg font-medium"},a.destinationCountry," \u2014 ",a.recipientOrganization),e.createElement("div",{className:"flex gap-2"},B(a.status),_(a.riskLevel))),!r.isValid&&e.createElement("div",{className:"mb-4 bg-red-50 dark:bg-red-900/20 p-3 rounded-md"},e.createElement("p",{className:"text-sm font-medium text-red-800 dark:text-red-200 mb-1"},"Compliance Issues"),e.createElement("ul",{className:"list-disc list-inside text-sm text-red-700 dark:text-red-300"},r.errors.map((n,i)=>e.createElement("li",{key:i},n)))),r.warnings.length>0&&e.createElement("div",{className:"mb-4 bg-yellow-50 dark:bg-yellow-900/20 p-3 rounded-md"},e.createElement("p",{className:"text-sm font-medium text-yellow-800 dark:text-yellow-200 mb-1"},"Warnings"),e.createElement("ul",{className:"list-disc list-inside text-sm text-yellow-700 dark:text-yellow-300"},r.warnings.map((n,i)=>e.createElement("li",{key:i},n)))),e.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6"},e.createElement("div",null,e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Destination:")," ",a.destinationCountry,a.destinationCountryCode?` (${a.destinationCountryCode})`:""),e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Adequacy:")," ",(d$1=$.find(n=>n.value===a.adequacyStatus))==null?void 0:d$1.label),e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Frequency:")," ",(p=U.find(n=>n.value===a.frequency))==null?void 0:p.label),e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Start Date:")," ",f(a.startDate)),a.endDate&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"End Date:")," ",f(a.endDate)),a.reviewDate&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Next Review:")," ",f(a.reviewDate))),e.createElement("div",null,e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Recipient:")," ",a.recipientOrganization),e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Contact:")," ",a.recipientContact.name," (",a.recipientContact.email,")"),a.estimatedDataSubjects&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Data Subjects:")," ",a.estimatedDataSubjects.toLocaleString()),e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Sensitive Data:")," ",a.includesSensitiveData?"Yes":"No"))),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Transfer Mechanism"),e.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 p-3 rounded-md"},e.createElement("p",{className:"text-sm text-gray-700 dark:text-gray-200"},b(a.transferMechanism)))),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Purpose"),e.createElement("p",{className:"text-sm text-gray-600 dark:text-gray-300 bg-gray-50 dark:bg-gray-700 p-2 rounded-md"},a.purpose)),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Data Categories"),e.createElement("div",{className:"flex flex-wrap gap-1"},a.dataCategories.map((n,i)=>e.createElement("span",{key:i,className:"px-2 py-1 bg-gray-100 dark:bg-gray-600 rounded text-xs"},n)))),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Safeguards"),e.createElement("ul",{className:"list-disc list-inside text-sm text-gray-600 dark:text-gray-300"},a.safeguards.map((n,i)=>e.createElement("li",{key:i},n)))),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Risk Assessment"),e.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 p-3 rounded-md"},e.createElement("p",{className:"text-sm text-gray-700 dark:text-gray-200 mb-2"},a.riskAssessment),e.createElement("div",{className:"mt-2"},e.createElement("p",{className:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1"},"Automated Assessment (Score: ",s.riskScore,")"),s.factors.length>0&&e.createElement("ul",{className:"list-disc list-inside text-xs text-gray-500 dark:text-gray-400"},s.factors.map((n,i)=>e.createElement("li",{key:i},n))),s.recommendations.length>0&&e.createElement("div",{className:"mt-2"},e.createElement("p",{className:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1"},"Recommendations:"),e.createElement("ul",{className:"list-disc list-inside text-xs text-gray-500 dark:text-gray-400"},s.recommendations.map((n,i)=>e.createElement("li",{key:i},n))))))),a.ndpcApproval&&e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"NDPC Approval"),e.createElement("div",{className:`p-3 rounded-md ${a.ndpcApproval.approved?"bg-green-50 dark:bg-green-900/20":a.ndpcApproval.applied?"bg-yellow-50 dark:bg-yellow-900/20":"bg-red-50 dark:bg-red-900/20"}`},e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Status:")," ",a.ndpcApproval.approved?"Approved":a.ndpcApproval.applied?"Application Submitted":"Not Applied"),a.ndpcApproval.referenceNumber&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Reference:")," ",a.ndpcApproval.referenceNumber),a.ndpcApproval.appliedAt&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Applied:")," ",f(a.ndpcApproval.appliedAt)),a.ndpcApproval.approvedAt&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Approved:")," ",f(a.ndpcApproval.approvedAt)))),e.createElement("div",{className:"mb-4"},e.createElement("p",{className:"text-sm font-medium mb-1"},"Transfer Impact Assessment"),e.createElement("div",{className:`p-3 rounded-md ${a.tiaCompleted?"bg-green-50 dark:bg-green-900/20":"bg-yellow-50 dark:bg-yellow-900/20"}`},e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Status:")," ",a.tiaCompleted?"Completed":"Not Completed"),a.tiaReference&&e.createElement("p",{className:"text-sm"},e.createElement("span",{className:"font-medium"},"Reference:")," ",a.tiaReference))),e.createElement("div",{className:"flex gap-3 mt-6"},e.createElement("button",{onClick:()=>ae(a),className:`px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 ${h}`},"Edit"),e.createElement("button",{onClick:()=>re(a.id),className:"px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-700"},"Remove")))};return e.createElement("div",{className:`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${G}`},e.createElement("h2",{className:"text-xl font-bold mb-2"},Q),e.createElement("p",{className:"mb-6 text-gray-600 dark:text-gray-300"},W),K&&ne(),!F&&e.createElement("div",{className:"mb-6"},e.createElement("button",{onClick:ee,className:`px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 ${h}`},"Add Transfer")),F&&de(),e.createElement("div",{className:"mb-6 grid grid-cols-1 md:grid-cols-2 gap-4"},e.createElement("div",null,e.createElement("label",{htmlFor:"cbStatusFilter",className:"block text-sm font-medium mb-1"},"Status Filter"),e.createElement("select",{id:"cbStatusFilter",value:x,onChange:a=>X(a.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},e.createElement("option",{value:"all"},"All Statuses"),V.map(a=>e.createElement("option",{key:a.value,value:a.value},a.label)))),e.createElement("div",null,e.createElement("label",{htmlFor:"cbMechanismFilter",className:"block text-sm font-medium mb-1"},"Mechanism Filter"),e.createElement("select",{id:"cbMechanismFilter",value:y,onChange:a=>Z(a.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},e.createElement("option",{value:"all"},"All Mechanisms"),T.map(a=>e.createElement("option",{key:a.value,value:a.value},a.label))))),e.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6"},e.createElement("div",{className:"md:col-span-1"},e.createElement("h3",{className:"text-lg font-medium mb-3"},"Transfers"),v.length===0?e.createElement("p",{className:"text-gray-500 dark:text-gray-400 text-sm"},"No cross-border transfers found."):e.createElement("div",{className:"space-y-2 max-h-96 overflow-y-auto pr-2"},v.map(a=>{var s,r;return e.createElement("div",{key:a.id,className:`p-3 rounded-md cursor-pointer ${u===a.id?"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800":"bg-gray-50 dark:bg-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600"}`,onClick:()=>C(a.id)},e.createElement("div",{className:"flex justify-between items-start mb-1"},e.createElement("h4",{className:"font-medium text-sm"},a.destinationCountry),_(a.riskLevel)),e.createElement("p",{className:"text-xs text-gray-500 dark:text-gray-400 mb-1"},a.recipientOrganization),e.createElement("p",{className:"text-xs text-gray-500 dark:text-gray-400 mb-1"},le(a.transferMechanism)),e.createElement("div",{className:"flex justify-between items-center mt-2"},B(a.status),((s=a.ndpcApproval)==null?void 0:s.required)&&!((r=a.ndpcApproval)!=null&&r.approved)&&e.createElement("span",{className:"text-xs text-purple-600 dark:text-purple-400"},"NDPC Pending")))}))),e.createElement("div",{className:"md:col-span-2"},I?ie(I):e.createElement("div",{className:"flex items-center justify-center h-64 bg-gray-50 dark:bg-gray-700 rounded-md"},e.createElement("p",{className:"text-gray-500 dark:text-gray-400"},"Select a transfer to view details")))))};export{ue as a};//# sourceMappingURL=chunk-2XHD22J7.mjs.map
7
- //# sourceMappingURL=chunk-2XHD22J7.mjs.map
@@ -1,94 +0,0 @@
1
- 'use strict';var chunkPM7CMTMB_js=require('./chunk-PM7CMTMB.js'),chunkMQFZHA2D_js=require('./chunk-MQFZHA2D.js'),t=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var t__default=/*#__PURE__*/_interopDefault(t);var ae=({sections:g,variables:E,onGenerate:v,title:T="NDPA Privacy Policy Generator",description:D="Generate an NDPA-compliant privacy policy for your organization.",className:q="",buttonClassName:k="",generateButtonText:V="Generate Policy",showPreview:$=true,allowEditing:A=true})=>{let[w,O]=t.useState(g),[N,S]=t.useState(E),[x,y]=t.useState("sections"),[f,W]=t.useState(""),[P,h]=t.useState(""),[j,H]=t.useState(false),[u,U]=t.useState({});t.useEffect(()=>{O(g);},[g]),t.useEffect(()=>{S(E);},[E]);let n=a=>{O(d=>d.map(s=>s.id===a?chunkMQFZHA2D_js.b(chunkMQFZHA2D_js.a({},s),{included:!s.included}):s));},l=(a,d)=>{S(s=>s.map(m=>m.id===a?chunkMQFZHA2D_js.b(chunkMQFZHA2D_js.a({},m),{value:d}):m)),u[a]&&U(s=>{let m=chunkMQFZHA2D_js.a({},s);return delete m[a],m});},c=()=>{let a={},d=true;return N.forEach(s=>{s.required&&!s.value&&(a[s.id]=`${s.name} is required`,d=false);}),U(a),d},p=()=>{if(!c()){y("variables");return}let a=w.filter(m=>m.included),d=Object.fromEntries(N.map(m=>[m.name,m.value])),s="";a.forEach(m=>{s+=`## ${m.title}
2
-
3
- `,s+=chunkPM7CMTMB_js.a(m.template,d),s+=`
4
-
5
- `;}),W(s),h(s),H(true),y("preview");},L=()=>{v({sections:w,variables:N,content:A?P:f});},M=()=>t__default.default.createElement("div",{className:"space-y-4"},t__default.default.createElement("h3",{className:"text-lg font-medium mb-4"},"Select Policy Sections"),w.map(a=>t__default.default.createElement("div",{key:a.id,className:"border border-gray-200 dark:border-gray-700 rounded-md p-4"},t__default.default.createElement("div",{className:"flex items-start"},t__default.default.createElement("div",{className:"flex items-center h-5"},t__default.default.createElement("input",{id:`section-${a.id}`,type:"checkbox",checked:a.included,onChange:()=>n(a.id),disabled:a.required,className:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 dark:focus:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"})),t__default.default.createElement("div",{className:"ml-3 text-sm"},t__default.default.createElement("label",{htmlFor:`section-${a.id}`,className:"font-medium text-gray-900 dark:text-white"},a.title," ",a.required&&t__default.default.createElement("span",{className:"text-red-500"},"*")),a.description&&t__default.default.createElement("p",{className:"text-gray-500 dark:text-gray-400 mt-1"},a.description))))),t__default.default.createElement("div",{className:"mt-6"},t__default.default.createElement("button",{onClick:()=>y("variables"),className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${k}`},"Next: Fill Variables"))),B=()=>{let a={};return N.forEach(d=>{let s=d.id.split(".")[0];a[s]||(a[s]=[]),a[s].push(d);}),t__default.default.createElement("div",null,t__default.default.createElement("h3",{className:"text-lg font-medium mb-4"},"Fill Policy Variables"),t__default.default.createElement("div",{className:"space-y-6"},Object.entries(a).map(([d,s])=>{let m=w.find(e=>e.id===d);return m&&!m.included?null:t__default.default.createElement("div",{key:d,className:"border border-gray-200 dark:border-gray-700 rounded-md p-4"},t__default.default.createElement("h4",{className:"font-medium text-lg mb-3"},m?m.title:"General Information"),t__default.default.createElement("div",{className:"space-y-4"},s.map(e=>t__default.default.createElement("div",{key:e.id},t__default.default.createElement("label",{htmlFor:`var-${e.id}`,className:"block text-sm font-medium mb-1"},e.name," ",e.required&&t__default.default.createElement("span",{className:"text-red-500"},"*")),e.description&&t__default.default.createElement("p",{className:"text-xs text-gray-500 dark:text-gray-400 mb-2"},e.description),e.inputType==="textarea"?t__default.default.createElement("textarea",{id:`var-${e.id}`,value:e.value,onChange:i=>l(e.id,i.target.value),rows:4,className:`w-full px-3 py-2 border ${u[e.id]?"border-red-500 focus:ring-red-500":"border-gray-300 dark:border-gray-600 focus:ring-blue-500"} rounded-md focus:outline-none focus:ring-2`,required:e.required}):e.inputType==="select"&&e.options?t__default.default.createElement("select",{id:`var-${e.id}`,value:e.value,onChange:i=>l(e.id,i.target.value),className:`w-full px-3 py-2 border ${u[e.id]?"border-red-500 focus:ring-red-500":"border-gray-300 dark:border-gray-600 focus:ring-blue-500"} rounded-md focus:outline-none focus:ring-2`,required:e.required},t__default.default.createElement("option",{value:""},"Select an option"),e.options.map(i=>t__default.default.createElement("option",{key:i,value:i},i))):t__default.default.createElement("input",{id:`var-${e.id}`,type:e.inputType,value:e.value,onChange:i=>l(e.id,i.target.value),className:`w-full px-3 py-2 border ${u[e.id]?"border-red-500 focus:ring-red-500":"border-gray-300 dark:border-gray-600 focus:ring-blue-500"} rounded-md focus:outline-none focus:ring-2`,required:e.required}),u[e.id]&&t__default.default.createElement("p",{className:"mt-1 text-sm text-red-600 dark:text-red-500"},u[e.id])))))})),t__default.default.createElement("div",{className:"mt-6 flex space-x-4"},t__default.default.createElement("button",{onClick:()=>y("sections"),className:`px-4 py-2 bg-gray-200 text-gray-800 dark:bg-gray-700 dark:text-white rounded hover:bg-gray-300 dark:hover:bg-gray-600 ${k}`},"Back to Sections"),t__default.default.createElement("button",{onClick:p,className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${k}`},V)))},Y=()=>t__default.default.createElement("div",null,t__default.default.createElement("h3",{className:"text-lg font-medium mb-4"},"Preview Generated Policy"),A?t__default.default.createElement("div",{className:"mb-4"},t__default.default.createElement("label",{htmlFor:"policy-content",className:"block text-sm font-medium mb-1"},"Edit Policy Content"),t__default.default.createElement("textarea",{id:"policy-content",value:P,onChange:a=>h(a.target.value),rows:20,className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 font-mono text-sm"})):t__default.default.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 p-4 rounded-md mb-4"},t__default.default.createElement("div",{className:"prose dark:prose-invert max-w-none"},f.split(`
6
- `).map((a,d)=>a.startsWith("## ")?t__default.default.createElement("h2",{key:d,className:"text-xl font-bold mt-6 mb-3"},a.substring(3)):a.startsWith("### ")?t__default.default.createElement("h3",{key:d,className:"text-lg font-bold mt-4 mb-2"},a.substring(4)):a===""?t__default.default.createElement("br",{key:d}):t__default.default.createElement("p",{key:d,className:"mb-2"},a)))),t__default.default.createElement("div",{className:"mt-6 flex space-x-4"},t__default.default.createElement("button",{onClick:()=>y("variables"),className:`px-4 py-2 bg-gray-200 text-gray-800 dark:bg-gray-700 dark:text-white rounded hover:bg-gray-300 dark:hover:bg-gray-600 ${k}`},"Back to Variables"),t__default.default.createElement("button",{onClick:L,className:`px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700 ${k}`},"Save Policy"))),z=()=>{switch(x){case "sections":return M();case "variables":return B();case "preview":return Y();default:return M()}};return t__default.default.createElement("div",{className:`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${q}`},t__default.default.createElement("h2",{className:"text-xl font-bold mb-2"},T),t__default.default.createElement("p",{className:"mb-6 text-gray-600 dark:text-gray-300"},D),t__default.default.createElement("div",{className:"mb-8"},t__default.default.createElement("ol",{className:"flex items-center w-full"},t__default.default.createElement("li",{className:`flex w-full items-center ${x==="sections"?"text-blue-600 dark:text-blue-500":"text-gray-500 dark:text-gray-400"} after:content-[''] after:w-full after:h-1 after:border-b after:border-gray-200 after:border-1 after:hidden sm:after:inline-block after:mx-6 xl:after:mx-10`},t__default.default.createElement("span",{className:`flex items-center justify-center w-8 h-8 ${x==="sections"?"bg-blue-100 dark:bg-blue-800":"bg-gray-100 dark:bg-gray-700"} rounded-full shrink-0`},"1"),t__default.default.createElement("span",{className:"hidden sm:inline-flex sm:ml-2"},"Sections")),t__default.default.createElement("li",{className:`flex w-full items-center ${x==="variables"?"text-blue-600 dark:text-blue-500":"text-gray-500 dark:text-gray-400"} after:content-[''] after:w-full after:h-1 after:border-b after:border-gray-200 after:border-1 after:hidden sm:after:inline-block after:mx-6 xl:after:mx-10`},t__default.default.createElement("span",{className:`flex items-center justify-center w-8 h-8 ${x==="variables"?"bg-blue-100 dark:bg-blue-800":"bg-gray-100 dark:bg-gray-700"} rounded-full shrink-0`},"2"),t__default.default.createElement("span",{className:"hidden sm:inline-flex sm:ml-2"},"Variables")),t__default.default.createElement("li",{className:`flex items-center ${x==="preview"?"text-blue-600 dark:text-blue-500":"text-gray-500 dark:text-gray-400"}`},t__default.default.createElement("span",{className:`flex items-center justify-center w-8 h-8 ${x==="preview"?"bg-blue-100 dark:bg-blue-800":"bg-gray-100 dark:bg-gray-700"} rounded-full shrink-0`},"3"),t__default.default.createElement("span",{className:"hidden sm:inline-flex sm:ml-2"},"Preview")))),t__default.default.createElement("div",{className:"mb-6 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md"},t__default.default.createElement("h3",{className:"text-sm font-bold text-blue-800 dark:text-blue-200 mb-2"},"NDPA Compliance Notice"),t__default.default.createElement("p",{className:"text-blue-700 dark:text-blue-300 text-sm"},"This tool helps you generate a privacy policy that aligns with the Nigeria Data Protection Act (NDPA) 2023. While we strive to ensure compliance, we recommend having the final policy reviewed by a legal professional familiar with NDPA requirements.")),z())};var ne=({content:g,sections:E,variables:v,onExport:T,onEdit:D,title:q="Privacy Policy Preview",description:k="Preview your NDPA-compliant privacy policy before exporting.",className:V="",buttonClassName:$="",showExportOptions:A=true,showEditButton:w=true,showTableOfContents:O=true,showMetadata:N=true,organizationName:S,lastUpdated:x=new Date})=>{let[y,f]=t.useState("preview"),P=(()=>{let n=g.split(`
7
- `),l=[];return n.forEach(c=>{if(c.startsWith("## ")){let p=c.substring(3).trim(),L=p.toLowerCase().replace(/[^a-z0-9]+/g,"-");l.push({id:L,title:p,level:2});}else if(c.startsWith("### ")){let p=c.substring(4).trim(),L=p.toLowerCase().replace(/[^a-z0-9]+/g,"-");l.push({id:L,title:p,level:3});}}),l})(),h=n=>{if(T)T(n);else if(n==="markdown"){let l=document.createElement("a"),c=new Blob([g],{type:"text/markdown"});l.href=URL.createObjectURL(c),l.download=`privacy-policy-${new Date().toISOString().split("T")[0]}.md`,document.body.appendChild(l),l.click(),document.body.removeChild(l);}},j=()=>!O||P.length===0?null:t__default.default.createElement("div",{className:"mb-6 p-4 bg-gray-50 dark:bg-gray-700 rounded-md"},t__default.default.createElement("h3",{className:"text-lg font-medium mb-3"},"Table of Contents"),t__default.default.createElement("ul",{className:"space-y-1"},P.map((n,l)=>t__default.default.createElement("li",{key:l,style:{marginLeft:`${(n.level-2)*1.5}rem`}},t__default.default.createElement("a",{href:`#${n.id}`,className:"text-blue-600 dark:text-blue-400 hover:underline"},n.title))))),H=()=>N?t__default.default.createElement("div",{className:"mb-6"},t__default.default.createElement("h1",{className:"text-2xl font-bold mb-2"},S?`${S} Privacy Policy`:"Privacy Policy"),t__default.default.createElement("p",{className:"text-sm text-gray-500 dark:text-gray-400"},"Last Updated: ",x.toLocaleDateString())):null,u=()=>t__default.default.createElement("div",{className:"prose dark:prose-invert max-w-none"},g.split(`
8
- `).map((n,l)=>{if(n.startsWith("## ")){let c=n.substring(3).trim(),p=c.toLowerCase().replace(/[^a-z0-9]+/g,"-");return t__default.default.createElement("h2",{id:p,key:l,className:"text-xl font-bold mt-6 mb-3"},c)}else if(n.startsWith("### ")){let c=n.substring(4).trim(),p=c.toLowerCase().replace(/[^a-z0-9]+/g,"-");return t__default.default.createElement("h3",{id:p,key:l,className:"text-lg font-bold mt-4 mb-2"},c)}else return n===""?t__default.default.createElement("br",{key:l}):t__default.default.createElement("p",{key:l,className:"mb-2"},n)})),U=()=>A?t__default.default.createElement("div",{className:"mt-6"},t__default.default.createElement("h3",{className:"text-lg font-medium mb-3"},"Export Options"),t__default.default.createElement("div",{className:"flex flex-wrap gap-3"},t__default.default.createElement("button",{onClick:()=>h("pdf"),className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${$}`},"Export as PDF"),t__default.default.createElement("button",{onClick:()=>h("docx"),className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${$}`},"Export as DOCX"),t__default.default.createElement("button",{onClick:()=>h("html"),className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${$}`},"Export as HTML"),t__default.default.createElement("button",{onClick:()=>h("markdown"),className:`px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 ${$}`},"Export as Markdown"))):null;return t__default.default.createElement("div",{className:`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${V}`},t__default.default.createElement("div",{className:"flex justify-between items-start mb-6"},t__default.default.createElement("div",null,t__default.default.createElement("h2",{className:"text-xl font-bold mb-2"},q),t__default.default.createElement("p",{className:"text-gray-600 dark:text-gray-300"},k)),w&&D&&t__default.default.createElement("button",{onClick:D,className:`px-4 py-2 bg-gray-200 text-gray-800 dark:bg-gray-700 dark:text-white rounded hover:bg-gray-300 dark:hover:bg-gray-600 ${$}`},"Edit Policy")),t__default.default.createElement("div",{className:"mb-6 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md"},t__default.default.createElement("h3",{className:"text-sm font-bold text-blue-800 dark:text-blue-200 mb-2"},"NDPA Compliance Notice"),t__default.default.createElement("p",{className:"text-blue-700 dark:text-blue-300 text-sm"},"This privacy policy has been generated to align with the Nigeria Data Protection Act (NDPA) 2023. We recommend having the final policy reviewed by a legal professional familiar with NDPA requirements before publishing it on your website or sharing it with your users.")),t__default.default.createElement("div",{className:"mb-6 border-b border-gray-200 dark:border-gray-700"},t__default.default.createElement("ul",{className:"flex flex-wrap -mb-px"},t__default.default.createElement("li",{className:"mr-2"},t__default.default.createElement("button",{onClick:()=>f("preview"),className:`inline-block p-4 ${y==="preview"?"text-blue-600 border-b-2 border-blue-600 dark:text-blue-500 dark:border-blue-500":"text-gray-500 hover:text-gray-600 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300"}`},"Preview")),t__default.default.createElement("li",{className:"mr-2"},t__default.default.createElement("button",{onClick:()=>f("markdown"),className:`inline-block p-4 ${y==="markdown"?"text-blue-600 border-b-2 border-blue-600 dark:text-blue-500 dark:border-blue-500":"text-gray-500 hover:text-gray-600 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300"}`},"Markdown")))),t__default.default.createElement("div",{className:"bg-white dark:bg-gray-800 p-4 rounded-md"},y==="preview"?t__default.default.createElement("div",null,H(),j(),t__default.default.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 p-6 rounded-md"},u())):t__default.default.createElement("div",null,t__default.default.createElement("pre",{className:"bg-gray-50 dark:bg-gray-700 p-4 rounded-md overflow-auto whitespace-pre-wrap font-mono text-sm text-gray-800 dark:text-gray-200"},g))),U())};var ce=({content:g,title:E="Privacy Policy",organizationName:v,lastUpdated:T=new Date,onExportComplete:D,componentTitle:q="Export Privacy Policy",description:k="Export your NDPA-compliant privacy policy in various formats.",className:V="",buttonClassName:$="",showExportHistory:A=true,includeComplianceNotice:w=true,includeLogo:O=false,logoUrl:N,customStyles:S})=>{let[x,y]=t.useState([]),[f,W]=t.useState("pdf"),[P,h]=t.useState(false),[j,H]=t.useState(null),[u,U]=t.useState(""),[n,l]=t.useState(""),[c,p]=t.useState(""),[L,M]=t.useState(false),B=e=>{let i=new Date().toISOString().split("T")[0];return `${v?v.toLowerCase().replace(/[^a-z0-9]+/g,"-"):"privacy-policy"}-privacy-policy-${i}.${e.toLowerCase()}`},Y=e=>u?u.endsWith(`.${e.toLowerCase()}`)?u:`${u}.${e.toLowerCase()}`:B(e),z=()=>{let e=v?`${v} ${E}`:E,i=T.toLocaleDateString(),b=`<!DOCTYPE html>
9
- <html lang="en">
10
- <head>
11
- <meta charset="UTF-8">
12
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
13
- <title>${e}</title>
14
- <style>
15
- body {
16
- font-family: Arial, sans-serif;
17
- line-height: 1.6;
18
- color: #333;
19
- max-width: 800px;
20
- margin: 0 auto;
21
- padding: 20px;
22
- }
23
- h1 {
24
- font-size: 24px;
25
- margin-bottom: 10px;
26
- }
27
- h2 {
28
- font-size: 20px;
29
- margin-top: 30px;
30
- margin-bottom: 10px;
31
- border-bottom: 1px solid #eee;
32
- padding-bottom: 5px;
33
- }
34
- h3 {
35
- font-size: 18px;
36
- margin-top: 20px;
37
- margin-bottom: 10px;
38
- }
39
- p {
40
- margin-bottom: 15px;
41
- }
42
- .header {
43
- text-align: center;
44
- margin-bottom: 30px;
45
- }
46
- .footer {
47
- margin-top: 50px;
48
- text-align: center;
49
- font-size: 12px;
50
- color: #666;
51
- border-top: 1px solid #eee;
52
- padding-top: 20px;
53
- }
54
- .logo {
55
- max-width: 200px;
56
- margin-bottom: 20px;
57
- }
58
- .last-updated {
59
- font-size: 12px;
60
- color: #666;
61
- margin-bottom: 30px;
62
- }
63
- .compliance-notice {
64
- background-color: #f8f9fa;
65
- border: 1px solid #e9ecef;
66
- padding: 15px;
67
- margin-bottom: 30px;
68
- font-size: 14px;
69
- }
70
- ${S||""}
71
- </style>
72
- </head>
73
- <body>
74
- <div class="header">
75
- ${O&&N?`<img src="${N}" alt="${v||"Company"} Logo" class="logo">`:""}
76
- ${n?`<div class="custom-header">${n}</div>`:""}
77
- <h1>${e}</h1>
78
- <div class="last-updated">Last Updated: ${i}</div>
79
- </div>`;w&&(b+=`
80
- <div class="compliance-notice">
81
- <strong>NDPA Compliance Notice:</strong> This privacy policy has been created to comply with the Nigeria Data Protection Act (NDPA) 2023.
82
- It outlines how we collect, use, disclose, and protect your personal information in accordance with NDPA requirements.
83
- </div>`);let I=g.replace(/^## (.*?)$/gm,"<h2>$1</h2>").replace(/^### (.*?)$/gm,"<h3>$1</h3>").replace(/\n\n/g,"</p><p>").replace(/\n/g,"<br>");return b+=`
84
- <div class="content">
85
- <p>${I}</p>
86
- </div>
87
-
88
- <div class="footer">
89
- ${c?`<div class="custom-footer">${c}</div>`:""}
90
- <p>&copy; ${new Date().getFullYear()} ${v||"Company"}. All rights reserved.</p>
91
- </div>
92
- </body>
93
- </html>`,b},a=()=>chunkMQFZHA2D_js.d(null,null,function*(){h(true),H(null);try{let e=f.toLowerCase(),i="",b;switch(e){case "pdf":let _=z();b=new Blob([_],{type:"text/html"}),i=URL.createObjectURL(b);break;case "docx":b=new Blob([g],{type:"text/plain"}),i=URL.createObjectURL(b);break;case "html":let ee=z();b=new Blob([ee],{type:"text/html"}),i=URL.createObjectURL(b);break;case "markdown":default:b=new Blob([g],{type:"text/markdown"}),i=URL.createObjectURL(b);break}let I=Y(e),G=document.createElement("a");G.href=i,G.download=I,document.body.appendChild(G),G.click(),document.body.removeChild(G);let R={id:`export_${Date.now()}`,format:e,timestamp:Date.now(),url:i,filename:I};y(_=>[R,..._]),D&&D(e,i);}catch(e){console.error("Export error:",e),H("An error occurred during export. Please try again.");}finally{h(false);}}),d=()=>t__default.default.createElement("div",{className:"mb-6"},t__default.default.createElement("label",{htmlFor:"export-format",className:"block text-sm font-medium mb-1"},"Export Format"),t__default.default.createElement("select",{id:"export-format",value:f,onChange:i=>W(i.target.value),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"},[{value:"pdf",label:"PDF Document (.pdf)"},{value:"docx",label:"Word Document (.docx)"},{value:"html",label:"Web Page (.html)"},{value:"markdown",label:"Markdown (.md)"}].map(i=>t__default.default.createElement("option",{key:i.value,value:i.value},i.label)))),s=()=>L?t__default.default.createElement("div",{className:"mb-6 space-y-4 border border-gray-200 dark:border-gray-700 rounded-md p-4"},t__default.default.createElement("div",{className:"flex justify-between items-center"},t__default.default.createElement("h3",{className:"text-md font-medium"},"Advanced Export Options"),t__default.default.createElement("button",{type:"button",onClick:()=>M(false),className:"text-blue-600 dark:text-blue-400 text-sm"},"Hide Advanced Options")),t__default.default.createElement("div",null,t__default.default.createElement("label",{htmlFor:"custom-filename",className:"block text-sm font-medium mb-1"},"Custom Filename"),t__default.default.createElement("input",{type:"text",id:"custom-filename",value:u,onChange:e=>U(e.target.value),placeholder:B(f),className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"}),t__default.default.createElement("p",{className:"text-xs text-gray-500 dark:text-gray-400 mt-1"},"Leave blank to use the default filename format.")),t__default.default.createElement("div",null,t__default.default.createElement("label",{htmlFor:"custom-header",className:"block text-sm font-medium mb-1"},"Custom Header HTML (for HTML/PDF exports)"),t__default.default.createElement("textarea",{id:"custom-header",value:n,onChange:e=>l(e.target.value),rows:3,placeholder:"<div>Custom header content</div>",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),t__default.default.createElement("div",null,t__default.default.createElement("label",{htmlFor:"custom-footer",className:"block text-sm font-medium mb-1"},"Custom Footer HTML (for HTML/PDF exports)"),t__default.default.createElement("textarea",{id:"custom-footer",value:c,onChange:e=>p(e.target.value),rows:3,placeholder:"<div>Custom footer content</div>",className:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"})),t__default.default.createElement("div",{className:"flex items-start"},t__default.default.createElement("div",{className:"flex items-center h-5"},t__default.default.createElement("input",{id:"include-compliance-notice",type:"checkbox",checked:w,onChange:e=>M(e.target.checked),className:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 dark:focus:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600"})),t__default.default.createElement("div",{className:"ml-3 text-sm"},t__default.default.createElement("label",{htmlFor:"include-compliance-notice",className:"font-medium text-gray-900 dark:text-white"},"Include NDPA Compliance Notice"),t__default.default.createElement("p",{className:"text-gray-500 dark:text-gray-400"},"Adds a notice explaining that this policy complies with NDPA requirements.")))):t__default.default.createElement("button",{type:"button",onClick:()=>M(true),className:"text-blue-600 dark:text-blue-400 text-sm mb-6"},"Show Advanced Options"),m=()=>!A||x.length===0?null:t__default.default.createElement("div",{className:"mt-6"},t__default.default.createElement("h3",{className:"text-lg font-medium mb-3"},"Export History"),t__default.default.createElement("div",{className:"bg-gray-50 dark:bg-gray-700 rounded-md overflow-hidden"},t__default.default.createElement("table",{className:"min-w-full divide-y divide-gray-200 dark:divide-gray-600"},t__default.default.createElement("thead",{className:"bg-gray-100 dark:bg-gray-800"},t__default.default.createElement("tr",null,t__default.default.createElement("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider"},"Date"),t__default.default.createElement("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider"},"Format"),t__default.default.createElement("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider"},"Filename"),t__default.default.createElement("th",{scope:"col",className:"px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider"},"Actions"))),t__default.default.createElement("tbody",{className:"bg-white dark:bg-gray-700 divide-y divide-gray-200 dark:divide-gray-600"},x.map(e=>t__default.default.createElement("tr",{key:e.id},t__default.default.createElement("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-300"},new Date(e.timestamp).toLocaleString()),t__default.default.createElement("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-300"},e.format.toUpperCase()),t__default.default.createElement("td",{className:"px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-300"},e.filename),t__default.default.createElement("td",{className:"px-6 py-4 whitespace-nowrap text-sm font-medium"},t__default.default.createElement("a",{href:e.url,download:e.filename,className:"text-blue-600 dark:text-blue-400 hover:text-blue-900 dark:hover:text-blue-300 mr-4"},"Download"))))))));return t__default.default.createElement("div",{className:`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${V}`},t__default.default.createElement("h2",{className:"text-xl font-bold mb-2"},q),t__default.default.createElement("p",{className:"mb-6 text-gray-600 dark:text-gray-300"},k),d(),s(),t__default.default.createElement("div",{className:"mb-6"},t__default.default.createElement("button",{onClick:a,disabled:P,className:`px-6 py-3 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${$} ${P?"opacity-70 cursor-not-allowed":""}`},P?"Exporting...":`Export as ${f.toUpperCase()}`),j&&t__default.default.createElement("p",{className:"mt-2 text-sm text-red-600 dark:text-red-500"},j)),t__default.default.createElement("div",{className:"mb-6 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md"},t__default.default.createElement("h3",{className:"text-sm font-bold text-blue-800 dark:text-blue-200 mb-2"},"Export Tips"),t__default.default.createElement("ul",{className:"text-blue-700 dark:text-blue-300 text-sm list-disc list-inside space-y-1"},t__default.default.createElement("li",null,"PDF format is recommended for printing or sharing with stakeholders."),t__default.default.createElement("li",null,"HTML format is ideal for publishing on your website."),t__default.default.createElement("li",null,"DOCX format allows for further editing in Microsoft Word or similar applications."),t__default.default.createElement("li",null,"Markdown format is useful for version control systems or technical documentation."))),m())};exports.a=ae;exports.b=ne;exports.c=ce;//# sourceMappingURL=chunk-4DKT6IB6.js.map
94
- //# sourceMappingURL=chunk-4DKT6IB6.js.map