@tantainnovative/ndpr-toolkit 1.0.5 → 1.0.7

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 (263) hide show
  1. package/README.md +88 -14
  2. package/dist/components/breach-notification/BreachNotificationForm.d.ts +18 -0
  3. package/dist/components/breach-notification/BreachNotificationForm.d.ts.map +1 -0
  4. package/dist/components/consent/ConsentBanner.d.ts +30 -0
  5. package/dist/components/consent/ConsentBanner.d.ts.map +1 -0
  6. package/dist/components/consent/ConsentManager.d.ts +51 -0
  7. package/dist/components/consent/ConsentManager.d.ts.map +1 -0
  8. package/dist/components/consent/ConsentSettings.d.ts +15 -0
  9. package/dist/components/consent/ConsentSettings.d.ts.map +1 -0
  10. package/dist/components/consent/unstyled/UnstyledConsentBanner.d.ts +7 -0
  11. package/dist/components/consent/unstyled/UnstyledConsentBanner.d.ts.map +1 -0
  12. package/dist/components/consent/unstyled/UnstyledConsentSettings.d.ts +7 -0
  13. package/dist/components/consent/unstyled/UnstyledConsentSettings.d.ts.map +1 -0
  14. package/dist/components/consent/unstyled/UnstyledConsentToggle.d.ts +8 -0
  15. package/dist/components/consent/unstyled/UnstyledConsentToggle.d.ts.map +1 -0
  16. package/dist/components/consent/unstyled/index.d.ts +4 -0
  17. package/dist/components/consent/unstyled/index.d.ts.map +1 -0
  18. package/dist/components/data-subject-rights/DataSubjectRequestForm.d.ts +14 -0
  19. package/dist/components/data-subject-rights/DataSubjectRequestForm.d.ts.map +1 -0
  20. package/dist/components/docs/DocLayout.d.ts +9 -0
  21. package/dist/components/docs/DocLayout.d.ts.map +1 -0
  22. package/dist/components/docs/index.d.ts +2 -0
  23. package/dist/components/docs/index.d.ts.map +1 -0
  24. package/dist/components/dpia/DPIAQuestionnaire.d.ts +9 -0
  25. package/dist/components/dpia/DPIAQuestionnaire.d.ts.map +1 -0
  26. package/dist/components/privacy-policy/PolicyGenerator.d.ts +12 -0
  27. package/dist/components/privacy-policy/PolicyGenerator.d.ts.map +1 -0
  28. package/dist/components/privacy-policy/data.d.ts +8 -0
  29. package/dist/components/privacy-policy/data.d.ts.map +1 -0
  30. package/dist/components/privacy-policy/shared/CheckboxField.d.ts +13 -0
  31. package/dist/components/privacy-policy/shared/CheckboxField.d.ts.map +1 -0
  32. package/dist/components/privacy-policy/shared/CheckboxGroup.d.ts +13 -0
  33. package/dist/components/privacy-policy/shared/CheckboxGroup.d.ts.map +1 -0
  34. package/dist/components/privacy-policy/shared/FormField.d.ts +13 -0
  35. package/dist/components/privacy-policy/shared/FormField.d.ts.map +1 -0
  36. package/dist/components/privacy-policy/shared/StepIndicator.d.ts +8 -0
  37. package/dist/components/privacy-policy/shared/StepIndicator.d.ts.map +1 -0
  38. package/dist/components/privacy-policy/steps/CustomSectionsStep.d.ts +15 -0
  39. package/dist/components/privacy-policy/steps/CustomSectionsStep.d.ts.map +1 -0
  40. package/dist/components/privacy-policy/steps/DataCollectionStep.d.ts +20 -0
  41. package/dist/components/privacy-policy/steps/DataCollectionStep.d.ts.map +1 -0
  42. package/dist/components/privacy-policy/steps/DataSharingStep.d.ts +34 -0
  43. package/dist/components/privacy-policy/steps/DataSharingStep.d.ts.map +1 -0
  44. package/dist/components/privacy-policy/steps/OrganizationInfoStep.d.ts +17 -0
  45. package/dist/components/privacy-policy/steps/OrganizationInfoStep.d.ts.map +1 -0
  46. package/dist/components/privacy-policy/steps/PolicyPreviewStep.d.ts +30 -0
  47. package/dist/components/privacy-policy/steps/PolicyPreviewStep.d.ts.map +1 -0
  48. package/dist/components/ui/Badge.d.ts +10 -0
  49. package/dist/components/ui/Badge.d.ts.map +1 -0
  50. package/dist/components/ui/Button.d.ts +11 -0
  51. package/dist/components/ui/Button.d.ts.map +1 -0
  52. package/dist/components/ui/Card.d.ts +10 -0
  53. package/dist/components/ui/Card.d.ts.map +1 -0
  54. package/dist/components/ui/Checkbox.d.ts +8 -0
  55. package/dist/components/ui/Checkbox.d.ts.map +1 -0
  56. package/dist/components/ui/FormField.d.ts +11 -0
  57. package/dist/components/ui/FormField.d.ts.map +1 -0
  58. package/dist/components/ui/Input.d.ts +6 -0
  59. package/dist/components/ui/Input.d.ts.map +1 -0
  60. package/dist/components/ui/Select.d.ts +6 -0
  61. package/dist/components/ui/Select.d.ts.map +1 -0
  62. package/dist/components/ui/TextArea.d.ts +6 -0
  63. package/dist/components/ui/TextArea.d.ts.map +1 -0
  64. package/dist/components/ui/dialog.d.ts +18 -0
  65. package/dist/components/ui/dialog.d.ts.map +1 -0
  66. package/dist/components/ui/label.d.ts +5 -0
  67. package/dist/components/ui/label.d.ts.map +1 -0
  68. package/dist/components/ui/switch.d.ts +5 -0
  69. package/dist/components/ui/switch.d.ts.map +1 -0
  70. package/dist/components/ui/tabs.d.ts +8 -0
  71. package/dist/components/ui/tabs.d.ts.map +1 -0
  72. package/dist/contexts/ConsentContext.d.ts +35 -0
  73. package/dist/contexts/ConsentContext.d.ts.map +1 -0
  74. package/dist/contexts/GenericConsentContext.d.ts +11 -0
  75. package/dist/contexts/GenericConsentContext.d.ts.map +1 -0
  76. package/dist/hooks/useConsent.d.ts +12 -0
  77. package/dist/hooks/useConsent.d.ts.map +1 -0
  78. package/dist/hooks/useConsentActions.d.ts +12 -0
  79. package/dist/hooks/useConsentActions.d.ts.map +1 -0
  80. package/dist/hooks/useConsentManager.d.ts +14 -0
  81. package/dist/hooks/useConsentManager.d.ts.map +1 -0
  82. package/dist/hooks/useConsentState.d.ts +10 -0
  83. package/dist/hooks/useConsentState.d.ts.map +1 -0
  84. package/dist/index.d.mts +256 -0
  85. package/dist/index.d.ts +24 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +2 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/index.mjs +2 -0
  90. package/dist/index.mjs.map +1 -0
  91. package/dist/lib/consentService.d.ts +11 -0
  92. package/dist/lib/consentService.d.ts.map +1 -0
  93. package/dist/lib/dpiaQuestions.d.ts +3 -0
  94. package/dist/lib/dpiaQuestions.d.ts.map +1 -0
  95. package/dist/lib/requestService.d.ts +10 -0
  96. package/dist/lib/requestService.d.ts.map +1 -0
  97. package/dist/lib/utils.d.ts +3 -0
  98. package/dist/lib/utils.d.ts.map +1 -0
  99. package/dist/styles.css +38 -0
  100. package/dist/types/consent.d.ts +57 -0
  101. package/dist/types/consent.d.ts.map +1 -0
  102. package/dist/types/index.d.ts +91 -0
  103. package/dist/types/index.d.ts.map +1 -0
  104. package/dist/unstyled.d.mts +22 -0
  105. package/dist/unstyled.d.ts +2 -0
  106. package/dist/unstyled.d.ts.map +1 -0
  107. package/dist/unstyled.js +2 -0
  108. package/dist/unstyled.js.map +1 -0
  109. package/dist/unstyled.mjs +2 -0
  110. package/dist/unstyled.mjs.map +1 -0
  111. package/package.json +33 -5
  112. package/CHANGELOG.md +0 -16
  113. package/CNAME +0 -1
  114. package/CONTRIBUTING.md +0 -87
  115. package/RELEASE-NOTES-v1.0.0.md +0 -140
  116. package/RELEASE-NOTES-v1.0.1.md +0 -69
  117. package/SECURITY.md +0 -21
  118. package/components.json +0 -21
  119. package/eslint.config.mjs +0 -16
  120. package/next-env.d.ts +0 -5
  121. package/next.config.js +0 -15
  122. package/next.config.ts +0 -62
  123. package/packages/ndpr-toolkit/README.md +0 -467
  124. package/packages/ndpr-toolkit/dist/components/breach/BreachNotificationManager.d.ts +0 -62
  125. package/packages/ndpr-toolkit/dist/components/breach/BreachReportForm.d.ts +0 -66
  126. package/packages/ndpr-toolkit/dist/components/breach/BreachRiskAssessment.d.ts +0 -50
  127. package/packages/ndpr-toolkit/dist/components/breach/RegulatoryReportGenerator.d.ts +0 -94
  128. package/packages/ndpr-toolkit/dist/components/consent/ConsentBanner.d.ts +0 -79
  129. package/packages/ndpr-toolkit/dist/components/consent/ConsentManager.d.ts +0 -73
  130. package/packages/ndpr-toolkit/dist/components/consent/ConsentStorage.d.ts +0 -41
  131. package/packages/ndpr-toolkit/dist/components/dpia/DPIAQuestionnaire.d.ts +0 -70
  132. package/packages/ndpr-toolkit/dist/components/dpia/DPIAReport.d.ts +0 -40
  133. package/packages/ndpr-toolkit/dist/components/dpia/StepIndicator.d.ts +0 -64
  134. package/packages/ndpr-toolkit/dist/components/dsr/DSRDashboard.d.ts +0 -58
  135. package/packages/ndpr-toolkit/dist/components/dsr/DSRRequestForm.d.ts +0 -74
  136. package/packages/ndpr-toolkit/dist/components/dsr/DSRTracker.d.ts +0 -56
  137. package/packages/ndpr-toolkit/dist/components/policy/PolicyExporter.d.ts +0 -65
  138. package/packages/ndpr-toolkit/dist/components/policy/PolicyGenerator.d.ts +0 -54
  139. package/packages/ndpr-toolkit/dist/components/policy/PolicyPreview.d.ts +0 -71
  140. package/packages/ndpr-toolkit/dist/hooks/useBreach.d.ts +0 -97
  141. package/packages/ndpr-toolkit/dist/hooks/useConsent.d.ts +0 -63
  142. package/packages/ndpr-toolkit/dist/hooks/useDPIA.d.ts +0 -92
  143. package/packages/ndpr-toolkit/dist/hooks/useDSR.d.ts +0 -72
  144. package/packages/ndpr-toolkit/dist/hooks/usePrivacyPolicy.d.ts +0 -87
  145. package/packages/ndpr-toolkit/dist/index.d.ts +0 -31
  146. package/packages/ndpr-toolkit/dist/index.esm.js +0 -2
  147. package/packages/ndpr-toolkit/dist/index.esm.js.map +0 -1
  148. package/packages/ndpr-toolkit/dist/index.js +0 -2
  149. package/packages/ndpr-toolkit/dist/index.js.map +0 -1
  150. package/packages/ndpr-toolkit/dist/setupTests.d.ts +0 -2
  151. package/packages/ndpr-toolkit/dist/types/breach.d.ts +0 -239
  152. package/packages/ndpr-toolkit/dist/types/consent.d.ts +0 -95
  153. package/packages/ndpr-toolkit/dist/types/dpia.d.ts +0 -196
  154. package/packages/ndpr-toolkit/dist/types/dsr.d.ts +0 -162
  155. package/packages/ndpr-toolkit/dist/types/privacy.d.ts +0 -204
  156. package/packages/ndpr-toolkit/dist/utils/breach.d.ts +0 -14
  157. package/packages/ndpr-toolkit/dist/utils/consent.d.ts +0 -10
  158. package/packages/ndpr-toolkit/dist/utils/dpia.d.ts +0 -12
  159. package/packages/ndpr-toolkit/dist/utils/dsr.d.ts +0 -11
  160. package/packages/ndpr-toolkit/dist/utils/privacy.d.ts +0 -12
  161. package/packages/ndpr-toolkit/package-lock.json +0 -8197
  162. package/packages/ndpr-toolkit/package.json +0 -71
  163. package/packages/ndpr-toolkit/rollup.config.js +0 -34
  164. package/packages/ndpr-toolkit/src/components/breach/BreachNotificationManager.tsx +0 -701
  165. package/packages/ndpr-toolkit/src/components/breach/BreachReportForm.tsx +0 -631
  166. package/packages/ndpr-toolkit/src/components/breach/BreachRiskAssessment.tsx +0 -569
  167. package/packages/ndpr-toolkit/src/components/breach/RegulatoryReportGenerator.tsx +0 -496
  168. package/packages/ndpr-toolkit/src/components/consent/ConsentBanner.tsx +0 -270
  169. package/packages/ndpr-toolkit/src/components/consent/ConsentManager.tsx +0 -217
  170. package/packages/ndpr-toolkit/src/components/consent/ConsentStorage.tsx +0 -206
  171. package/packages/ndpr-toolkit/src/components/dpia/DPIAQuestionnaire.tsx +0 -342
  172. package/packages/ndpr-toolkit/src/components/dpia/DPIAReport.tsx +0 -373
  173. package/packages/ndpr-toolkit/src/components/dpia/StepIndicator.tsx +0 -174
  174. package/packages/ndpr-toolkit/src/components/dsr/DSRDashboard.tsx +0 -717
  175. package/packages/ndpr-toolkit/src/components/dsr/DSRRequestForm.tsx +0 -476
  176. package/packages/ndpr-toolkit/src/components/dsr/DSRTracker.tsx +0 -620
  177. package/packages/ndpr-toolkit/src/components/policy/PolicyExporter.tsx +0 -541
  178. package/packages/ndpr-toolkit/src/components/policy/PolicyGenerator.tsx +0 -454
  179. package/packages/ndpr-toolkit/src/components/policy/PolicyPreview.tsx +0 -333
  180. package/packages/ndpr-toolkit/src/hooks/useBreach.ts +0 -409
  181. package/packages/ndpr-toolkit/src/hooks/useConsent.ts +0 -263
  182. package/packages/ndpr-toolkit/src/hooks/useDPIA.ts +0 -457
  183. package/packages/ndpr-toolkit/src/hooks/useDSR.ts +0 -236
  184. package/packages/ndpr-toolkit/src/hooks/usePrivacyPolicy.ts +0 -428
  185. package/packages/ndpr-toolkit/src/index.ts +0 -44
  186. package/packages/ndpr-toolkit/src/setupTests.ts +0 -5
  187. package/packages/ndpr-toolkit/src/types/breach.ts +0 -283
  188. package/packages/ndpr-toolkit/src/types/consent.ts +0 -111
  189. package/packages/ndpr-toolkit/src/types/dpia.ts +0 -236
  190. package/packages/ndpr-toolkit/src/types/dsr.ts +0 -192
  191. package/packages/ndpr-toolkit/src/types/index.ts +0 -42
  192. package/packages/ndpr-toolkit/src/types/privacy.ts +0 -246
  193. package/packages/ndpr-toolkit/src/utils/breach.ts +0 -122
  194. package/packages/ndpr-toolkit/src/utils/consent.ts +0 -51
  195. package/packages/ndpr-toolkit/src/utils/dpia.ts +0 -104
  196. package/packages/ndpr-toolkit/src/utils/dsr.ts +0 -77
  197. package/packages/ndpr-toolkit/src/utils/privacy.ts +0 -100
  198. package/packages/ndpr-toolkit/tsconfig.json +0 -23
  199. package/postcss.config.mjs +0 -5
  200. package/public/NDPR TOOLKIT.svg +0 -1
  201. package/public/favicon/android-chrome-192x192.png +0 -0
  202. package/public/favicon/android-chrome-512x512.png +0 -0
  203. package/public/favicon/apple-touch-icon.png +0 -0
  204. package/public/favicon/favicon-16x16.png +0 -0
  205. package/public/favicon/favicon-32x32.png +0 -0
  206. package/public/favicon/site.webmanifest +0 -1
  207. package/public/file.svg +0 -1
  208. package/public/globe.svg +0 -1
  209. package/public/ndpr-toolkit-logo.svg +0 -108
  210. package/public/next.svg +0 -1
  211. package/public/vercel.svg +0 -1
  212. package/public/window.svg +0 -1
  213. package/src/app/accessibility.css +0 -70
  214. package/src/app/favicon.ico +0 -0
  215. package/src/app/globals.css +0 -123
  216. package/src/app/layout.tsx +0 -37
  217. package/src/app/ndpr-demos/breach/page.tsx +0 -354
  218. package/src/app/ndpr-demos/consent/page.tsx +0 -366
  219. package/src/app/ndpr-demos/dpia/page.tsx +0 -495
  220. package/src/app/ndpr-demos/dsr/page.tsx +0 -280
  221. package/src/app/ndpr-demos/page.tsx +0 -73
  222. package/src/app/ndpr-demos/policy/page.tsx +0 -771
  223. package/src/app/page.tsx +0 -452
  224. package/src/components/ErrorBoundary.tsx +0 -90
  225. package/src/components/breach-notification/BreachNotificationForm.tsx +0 -479
  226. package/src/components/consent/ConsentBanner.tsx +0 -193
  227. package/src/components/data-subject-rights/DataSubjectRequestForm.tsx +0 -530
  228. package/src/components/dpia/DPIAQuestionnaire.tsx +0 -523
  229. package/src/components/privacy-policy/PolicyGenerator.tsx +0 -1062
  230. package/src/components/privacy-policy/data.ts +0 -98
  231. package/src/components/privacy-policy/shared/CheckboxField.tsx +0 -38
  232. package/src/components/privacy-policy/shared/CheckboxGroup.tsx +0 -85
  233. package/src/components/privacy-policy/shared/FormField.tsx +0 -79
  234. package/src/components/privacy-policy/shared/StepIndicator.tsx +0 -86
  235. package/src/components/privacy-policy/steps/CustomSectionsStep.tsx +0 -361
  236. package/src/components/privacy-policy/steps/DataCollectionStep.tsx +0 -231
  237. package/src/components/privacy-policy/steps/DataSharingStep.tsx +0 -418
  238. package/src/components/privacy-policy/steps/OrganizationInfoStep.tsx +0 -202
  239. package/src/components/privacy-policy/steps/PolicyPreviewStep.tsx +0 -226
  240. package/src/components/ui/Badge.tsx +0 -46
  241. package/src/components/ui/Button.tsx +0 -59
  242. package/src/components/ui/Card.tsx +0 -92
  243. package/src/components/ui/Checkbox.tsx +0 -57
  244. package/src/components/ui/FormField.tsx +0 -50
  245. package/src/components/ui/Input.tsx +0 -38
  246. package/src/components/ui/Loading.tsx +0 -201
  247. package/src/components/ui/Select.tsx +0 -42
  248. package/src/components/ui/TextArea.tsx +0 -38
  249. package/src/components/ui/label.tsx +0 -24
  250. package/src/components/ui/switch.tsx +0 -31
  251. package/src/components/ui/tabs.tsx +0 -66
  252. package/src/hooks/useConsent.ts +0 -70
  253. package/src/hooks/useLoadingState.ts +0 -85
  254. package/src/lib/consentService.ts +0 -144
  255. package/src/lib/dpiaQuestions.ts +0 -188
  256. package/src/lib/requestService.ts +0 -79
  257. package/src/lib/sanitize.ts +0 -108
  258. package/src/lib/storage.ts +0 -222
  259. package/src/lib/utils.ts +0 -6
  260. package/src/types/html-to-docx.d.ts +0 -30
  261. package/src/types/index.ts +0 -77
  262. package/tailwind.config.ts +0 -65
  263. package/tsconfig.json +0 -41
@@ -1,418 +0,0 @@
1
- 'use client';
2
-
3
- import React, { useRef } from 'react';
4
- import CheckboxField from '../shared/CheckboxField';
5
- import CheckboxGroup from '../shared/CheckboxGroup';
6
- import FormField from '../shared/FormField';
7
- import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/Card';
8
- import { TextArea } from '@/components/ui/TextArea';
9
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
- import { cn } from '@/lib/utils';
11
-
12
- interface DataSharingStepProps {
13
- formData: {
14
- thirdPartySharing: boolean;
15
- thirdParties: string[];
16
- thirdPartyCategories: string[];
17
- thirdPartyPurposes: string[];
18
- cookiesUsed: boolean;
19
- cookieTypes: string[];
20
- cookieLifespan: string;
21
- trackingTechnologies: string[];
22
- internationalTransfers: boolean;
23
- transferCountries: string[];
24
- transferSafeguards: string[];
25
- processesChildrenData: boolean;
26
- childrenDataDetails: string;
27
- processesSpecialCategories: boolean;
28
- specialCategoriesDetails: string;
29
- dataBreachProcedures: string;
30
- regulatoryCompliance: string[];
31
- };
32
- errors: Record<string, string>;
33
- onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => void;
34
- onToggleItem: (
35
- category:
36
- 'cookieTypes' |
37
- 'transferCountries' |
38
- 'trackingTechnologies' |
39
- 'transferSafeguards' |
40
- 'thirdPartyCategories' |
41
- 'thirdPartyPurposes' |
42
- 'regulatoryCompliance',
43
- item: string
44
- ) => void;
45
- onAddThirdParty: () => void;
46
- onRemoveThirdParty: (index: number) => void;
47
- defaultCookieTypes: string[];
48
- commonTransferCountries: string[];
49
- trackingTechnologies: string[];
50
- transferSafeguards: string[];
51
- }
52
-
53
- export default function DataSharingStep({
54
- formData,
55
- errors,
56
- onChange,
57
- onToggleItem,
58
- onAddThirdParty,
59
- onRemoveThirdParty,
60
- defaultCookieTypes,
61
- commonTransferCountries,
62
- trackingTechnologies,
63
- transferSafeguards,
64
- }: DataSharingStepProps) {
65
- const thirdPartyInputRef = useRef<HTMLInputElement>(null);
66
-
67
- // Define third party categories
68
- const thirdPartyCategories = [
69
- 'Cloud service providers',
70
- 'Payment processors',
71
- 'Analytics providers',
72
- 'Marketing and advertising partners',
73
- 'Customer support services',
74
- 'Social media platforms',
75
- 'Delivery and logistics providers',
76
- 'IT and system maintenance providers',
77
- 'Professional advisors (legal, accounting)',
78
- 'Regulatory authorities',
79
- 'Business partners',
80
- 'Affiliates and subsidiaries'
81
- ];
82
-
83
- // Define third party purposes
84
- const thirdPartyPurposes = [
85
- 'Processing payments',
86
- 'Delivering products or services',
87
- 'Customer support',
88
- 'Analytics and performance monitoring',
89
- 'Marketing and advertising',
90
- 'Fraud prevention and security',
91
- 'Legal and regulatory compliance',
92
- 'Service optimization',
93
- 'Research and development',
94
- 'Business operations'
95
- ];
96
-
97
- // Define regulatory compliance options
98
- const regulatoryComplianceOptions = [
99
- 'General Data Protection Regulation (GDPR)',
100
- 'California Consumer Privacy Act (CCPA)',
101
- 'Personal Information Protection and Electronic Documents Act (PIPEDA)',
102
- 'Health Insurance Portability and Accountability Act (HIPAA)',
103
- 'Children\'s Online Privacy Protection Act (COPPA)',
104
- 'Payment Card Industry Data Security Standard (PCI DSS)',
105
- 'South Africa\'s Protection of Personal Information Act (POPIA)',
106
- 'Kenya\'s Data Protection Act',
107
- 'Ghana\'s Data Protection Act',
108
- 'ISO 27001 Information Security Standard'
109
- ];
110
-
111
- return (
112
- <div className="space-y-8">
113
- {/* Third-Party Sharing */}
114
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
115
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
116
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Third-Party Sharing</CardTitle>
117
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
118
- Specify if and how you share personal data with third parties
119
- </CardDescription>
120
- </CardHeader>
121
- <CardContent className="pt-5">
122
- <CheckboxField
123
- id="thirdPartySharing"
124
- name="thirdPartySharing"
125
- label="We don&apos;t share your data with third parties"
126
- checked={formData.thirdPartySharing}
127
- onChange={onChange}
128
- className="mb-4"
129
- />
130
-
131
- {formData.thirdPartySharing && (
132
- <div className="space-y-4">
133
- <FormField
134
- id="thirdPartyInput"
135
- label="Add Specific Third Parties"
136
- error={errors.thirdParties}
137
- >
138
- <div className="flex space-x-2 mb-2">
139
- <input
140
- ref={thirdPartyInputRef}
141
- type="text"
142
- id="thirdPartyInput"
143
- placeholder="e.g., Google Analytics, Stripe"
144
- className="block w-full rounded-md border-gray-300 dark:border-gray-600 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:text-white sm:text-sm"
145
- />
146
- <button
147
- type="button"
148
- onClick={onAddThirdParty}
149
- className="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
150
- >
151
- Add
152
- </button>
153
- </div>
154
- </FormField>
155
-
156
- {formData.thirdParties.length > 0 && (
157
- <div className="mt-2">
158
- <label className="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2">Added Third Parties:</label>
159
- <ul className="space-y-1">
160
- {formData.thirdParties.map((party, index) => (
161
- <li key={index} className="flex justify-between items-center bg-gray-50 dark:bg-gray-800 px-3 py-2 rounded-md text-sm">
162
- <span>{party}</span>
163
- <button
164
- type="button"
165
- onClick={() => onRemoveThirdParty(index)}
166
- className="text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300"
167
- >
168
- Remove
169
- </button>
170
- </li>
171
- ))}
172
- </ul>
173
- </div>
174
- )}
175
-
176
- <CheckboxGroup
177
- title="Categories of Third Parties"
178
- items={thirdPartyCategories}
179
- selectedItems={formData.thirdPartyCategories}
180
- onToggleItem={(item) => onToggleItem('thirdPartyCategories', item)}
181
- required
182
- error={errors.thirdPartyCategories}
183
- columns={1}
184
- />
185
-
186
- <CheckboxGroup
187
- title="Purposes of Sharing"
188
- items={thirdPartyPurposes}
189
- selectedItems={formData.thirdPartyPurposes}
190
- onToggleItem={(item) => onToggleItem('thirdPartyPurposes', item)}
191
- required
192
- error={errors.thirdPartyPurposes}
193
- columns={1}
194
- />
195
- </div>
196
- )}
197
- </CardContent>
198
- </Card>
199
-
200
- {/* Cookies and Tracking */}
201
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
202
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
203
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Cookies and Tracking Technologies</CardTitle>
204
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
205
- Specify how you use cookies and other tracking technologies
206
- </CardDescription>
207
- </CardHeader>
208
- <CardContent className="pt-5">
209
- <CheckboxField
210
- id="cookiesUsed"
211
- name="cookiesUsed"
212
- label="We use cookies and similar tracking technologies"
213
- checked={formData.cookiesUsed}
214
- onChange={onChange}
215
- className="mb-4"
216
- />
217
-
218
- {formData.cookiesUsed && (
219
- <div className="space-y-4">
220
- <CheckboxGroup
221
- title="Types of Cookies Used"
222
- items={defaultCookieTypes}
223
- selectedItems={formData.cookieTypes}
224
- onToggleItem={(item) => onToggleItem('cookieTypes', item)}
225
- required
226
- error={errors.cookieTypes}
227
- columns={2}
228
- />
229
-
230
- <FormField
231
- id="cookieLifespan"
232
- label="Cookie Lifespan"
233
- required
234
- error={errors.cookieLifespan}
235
- >
236
- <select
237
- id="cookieLifespan"
238
- name="cookieLifespan"
239
- value={formData.cookieLifespan}
240
- onChange={onChange}
241
- className={`mt-1 block w-full rounded-md shadow-sm sm:text-sm ${
242
- errors.cookieLifespan
243
- ? 'border-red-300 focus:border-red-500 focus:ring-red-500'
244
- : 'border-gray-300 dark:border-gray-600 focus:border-blue-500 focus:ring-blue-500'
245
- } dark:bg-gray-700 dark:text-white`}
246
- >
247
- <option value="">Select cookie lifespan</option>
248
- <option value="Session only">Session only</option>
249
- <option value="1 day">1 day</option>
250
- <option value="7 days">7 days</option>
251
- <option value="30 days">30 days</option>
252
- <option value="90 days">90 days</option>
253
- <option value="1 year">1 year</option>
254
- <option value="2 years">2 years</option>
255
- <option value="Varies by cookie type">Varies by cookie type</option>
256
- </select>
257
- </FormField>
258
-
259
- <CheckboxGroup
260
- title="Other Tracking Technologies Used"
261
- items={trackingTechnologies}
262
- selectedItems={formData.trackingTechnologies}
263
- onToggleItem={(item) => onToggleItem('trackingTechnologies', item)}
264
- columns={2}
265
- />
266
- </div>
267
- )}
268
- </CardContent>
269
- </Card>
270
-
271
- {/* International Transfers */}
272
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
273
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
274
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">International Data Transfers</CardTitle>
275
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
276
- Specify if you transfer data internationally and the safeguards in place
277
- </CardDescription>
278
- </CardHeader>
279
- <CardContent className="pt-5">
280
- <CheckboxField
281
- id="internationalTransfers"
282
- name="internationalTransfers"
283
- label="We transfer data internationally"
284
- checked={formData.internationalTransfers}
285
- onChange={onChange}
286
- className="mb-4"
287
- />
288
-
289
- {formData.internationalTransfers && (
290
- <div className="space-y-4">
291
- <CheckboxGroup
292
- title="Countries or Regions of Transfer"
293
- items={commonTransferCountries}
294
- selectedItems={formData.transferCountries}
295
- onToggleItem={(item) => onToggleItem('transferCountries', item)}
296
- required
297
- error={errors.transferCountries}
298
- columns={2}
299
- />
300
-
301
- <CheckboxGroup
302
- title="Transfer Safeguards"
303
- items={transferSafeguards}
304
- selectedItems={formData.transferSafeguards}
305
- onToggleItem={(item) => onToggleItem('transferSafeguards', item)}
306
- required
307
- error={errors.transferSafeguards}
308
- columns={1}
309
- />
310
- </div>
311
- )}
312
- </CardContent>
313
- </Card>
314
-
315
- {/* Special Categories */}
316
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
317
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
318
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Special Categories of Data</CardTitle>
319
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
320
- Specify if you process children&apos;s data or special categories of personal data
321
- </CardDescription>
322
- </CardHeader>
323
- <CardContent className="pt-5">
324
- <div className="space-y-4">
325
- <CheckboxField
326
- id="processesChildrenData"
327
- name="processesChildrenData"
328
- label="We process data of children under 18"
329
- checked={formData.processesChildrenData}
330
- onChange={onChange}
331
- className="mb-2"
332
- />
333
-
334
- {formData.processesChildrenData && (
335
- <FormField
336
- id="childrenDataDetails"
337
- label="Details about children's data processing"
338
- required
339
- error={errors.childrenDataDetails}
340
- >
341
- <TextArea
342
- id="childrenDataDetails"
343
- name="childrenDataDetails"
344
- value={formData.childrenDataDetails}
345
- onChange={onChange}
346
- rows={3}
347
- placeholder="Explain how you collect, use, and protect children's data, including parental consent mechanisms"
348
- />
349
- </FormField>
350
- )}
351
-
352
- <CheckboxField
353
- id="processesSpecialCategories"
354
- name="processesSpecialCategories"
355
- label="We process special categories of data (race, ethnicity, health, biometric, etc.)"
356
- checked={formData.processesSpecialCategories}
357
- onChange={onChange}
358
- className="mb-2"
359
- />
360
-
361
- {formData.processesSpecialCategories && (
362
- <FormField
363
- id="specialCategoriesDetails"
364
- label="Details about special category data processing"
365
- required
366
- error={errors.specialCategoriesDetails}
367
- >
368
- <TextArea
369
- id="specialCategoriesDetails"
370
- name="specialCategoriesDetails"
371
- value={formData.specialCategoriesDetails}
372
- onChange={onChange}
373
- rows={3}
374
- placeholder="Explain what special categories of data you process, why, and the legal basis for processing"
375
- />
376
- </FormField>
377
- )}
378
- </div>
379
- </CardContent>
380
- </Card>
381
-
382
- {/* Additional Compliance */}
383
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
384
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
385
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Additional Compliance</CardTitle>
386
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
387
- Specify additional compliance measures and regulatory frameworks
388
- </CardDescription>
389
- </CardHeader>
390
- <CardContent className="pt-5">
391
- <div className="space-y-4">
392
- <FormField
393
- id="dataBreachProcedures"
394
- label="Data Breach Procedures"
395
- >
396
- <TextArea
397
- id="dataBreachProcedures"
398
- name="dataBreachProcedures"
399
- value={formData.dataBreachProcedures}
400
- onChange={onChange}
401
- rows={3}
402
- placeholder="Describe your procedures for handling data breaches, including notification timelines"
403
- />
404
- </FormField>
405
-
406
- <CheckboxGroup
407
- title="Additional Regulatory Compliance"
408
- items={regulatoryComplianceOptions}
409
- selectedItems={formData.regulatoryCompliance}
410
- onToggleItem={(item) => onToggleItem('regulatoryCompliance', item)}
411
- columns={1}
412
- />
413
- </div>
414
- </CardContent>
415
- </Card>
416
- </div>
417
- );
418
- }
@@ -1,202 +0,0 @@
1
- 'use client';
2
-
3
- import React from 'react';
4
- import { FormField } from '@/components/ui/FormField';
5
- import { Input } from '@/components/ui/Input';
6
- import { TextArea } from '@/components/ui/TextArea';
7
- import { Checkbox } from '@/components/ui/Checkbox';
8
- import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/Card';
9
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
- import { cn } from '@/lib/utils';
11
-
12
- interface OrganizationInfoStepProps {
13
- formData: {
14
- organizationName: string;
15
- organizationContact: string;
16
- organizationWebsite: string;
17
- organizationAddress: string;
18
- hasDPO: boolean;
19
- dpoContact: string;
20
- includeNDPRCompliance: boolean;
21
- };
22
- errors: Record<string, string>;
23
- onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
24
- }
25
-
26
- export default function OrganizationInfoStep({
27
- formData,
28
- errors,
29
- onChange,
30
- }: OrganizationInfoStepProps) {
31
- return (
32
- <div className="space-y-8">
33
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
34
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
35
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Organization Details</CardTitle>
36
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
37
- Provide information about your organization for the privacy policy
38
- </CardDescription>
39
- </CardHeader>
40
- <CardContent className="pt-5">
41
-
42
- <div className="grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-4">
43
- <FormField
44
- id="organizationName"
45
- label="Organization Name"
46
- required
47
- error={errors.organizationName}
48
- className="md:col-span-2"
49
- >
50
- <Input
51
- type="text"
52
- id="organizationName"
53
- name="organizationName"
54
- value={formData.organizationName}
55
- onChange={onChange}
56
- placeholder="e.g., Acme Corporation"
57
- aria-required="true"
58
- className={errors.organizationName ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : ''}
59
- />
60
- </FormField>
61
-
62
- <FormField
63
- id="organizationContact"
64
- label="Contact Information"
65
- required
66
- error={errors.organizationContact}
67
- >
68
- <div className="relative">
69
- <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
70
- <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-gray-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
71
- <path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z" />
72
- <path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z" />
73
- </svg>
74
- </div>
75
- <Input
76
- type="text"
77
- id="organizationContact"
78
- name="organizationContact"
79
- value={formData.organizationContact}
80
- onChange={onChange}
81
- placeholder="email@example.com or phone"
82
- aria-required="true"
83
- className={`pl-10 ${errors.organizationContact ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : ''}`}
84
- />
85
- </div>
86
- </FormField>
87
-
88
- <FormField
89
- id="organizationWebsite"
90
- label="Website (Optional)"
91
- error={errors.organizationWebsite}
92
- >
93
- <div className="relative">
94
- <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
95
- <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-gray-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
96
- <path fillRule="evenodd" d="M4.083 9h1.946c.089-1.546.383-2.97.837-4.118A6.004 6.004 0 004.083 9zM10 2a8 8 0 100 16 8 8 0 000-16zm0 2c-.076 0-.232.032-.465.262-.238.234-.497.623-.737 1.182-.389.907-.673 2.142-.766 3.556h3.936c-.093-1.414-.377-2.649-.766-3.556-.24-.56-.5-.948-.737-1.182C10.232 4.032 10.076 4 10 4zm3.971 5c-.089-1.546-.383-2.97-.837-4.118A6.004 6.004 0 0115.917 9h-1.946zm-2.003 2H8.032c.093 1.414.377 2.649.766 3.556.24.56.5.948.737 1.182.233.23.389.262.465.262.076 0 .232-.032.465-.262.238-.234.498-.623.737-1.182.389-.907.673-2.142.766-3.556zm1.166 4.118c.454-1.147.748-2.572.837-4.118h1.946a6.004 6.004 0 01-2.783 4.118zm-6.268 0C6.412 13.97 6.118 12.546 6.03 11H4.083a6.004 6.004 0 002.783 4.118z" clipRule="evenodd" />
97
- </svg>
98
- </div>
99
- <Input
100
- type="text"
101
- id="organizationWebsite"
102
- name="organizationWebsite"
103
- value={formData.organizationWebsite}
104
- onChange={onChange}
105
- placeholder="e.g., https://www.example.com"
106
- className="pl-10"
107
- />
108
- </div>
109
- </FormField>
110
- </div>
111
-
112
- <FormField
113
- id="organizationAddress"
114
- label="Address (Optional)"
115
- error={errors.organizationAddress}
116
- className="mt-4"
117
- >
118
- <TextArea
119
- id="organizationAddress"
120
- name="organizationAddress"
121
- value={formData.organizationAddress}
122
- onChange={onChange}
123
- rows={2}
124
- placeholder="e.g., 123 Main Street, Lagos, Nigeria"
125
- />
126
- </FormField>
127
- </CardContent>
128
- </Card>
129
-
130
- <Card className="overflow-hidden shadow-md border border-gray-200 dark:border-gray-700">
131
- <CardHeader className="bg-gradient-to-r from-slate-100 to-gray-100 dark:from-slate-800 dark:to-gray-800 pb-3">
132
- <CardTitle className="text-lg font-semibold text-gray-800 dark:text-white">Compliance Settings</CardTitle>
133
- <CardDescription className="text-sm text-gray-600 dark:text-gray-300">
134
- Configure data protection compliance options
135
- </CardDescription>
136
- </CardHeader>
137
- <CardContent className="pt-5">
138
-
139
- <Checkbox
140
- id="hasDPO"
141
- name="hasDPO"
142
- label="We have a Data Protection Officer (DPO)"
143
- checked={formData.hasDPO}
144
- onChange={onChange}
145
- />
146
-
147
- {formData.hasDPO && (
148
- <div className="ml-8 mt-2 mb-4">
149
- <FormField
150
- id="dpoContact"
151
- label="DPO Contact Information"
152
- required
153
- error={errors.dpoContact}
154
- >
155
- <div className="relative">
156
- <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
157
- <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5 text-gray-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
158
- <path fillRule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clipRule="evenodd" />
159
- </svg>
160
- </div>
161
- <Input
162
- type="text"
163
- id="dpoContact"
164
- name="dpoContact"
165
- value={formData.dpoContact}
166
- onChange={onChange}
167
- placeholder="dpo@example.com or phone number"
168
- aria-required="true"
169
- className={`pl-10 ${errors.dpoContact ? 'border-red-300 focus:border-red-500 focus:ring-red-500' : ''}`}
170
- />
171
- </div>
172
- </FormField>
173
- </div>
174
- )}
175
-
176
- <Checkbox
177
- id="includeNDPRCompliance"
178
- name="includeNDPRCompliance"
179
- label="Include NDPR and DPA compliance statements"
180
- checked={formData.includeNDPRCompliance}
181
- onChange={onChange}
182
- />
183
-
184
- <div className="mt-4 p-3 bg-indigo-50 dark:bg-indigo-900/20 rounded-lg border border-indigo-100 dark:border-indigo-800/30">
185
- <div className="flex">
186
- <div className="flex-shrink-0">
187
- <svg className="h-5 w-5 text-indigo-400" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
188
- <path fillRule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clipRule="evenodd" />
189
- </svg>
190
- </div>
191
- <div className="ml-3 flex-1 md:flex md:justify-between">
192
- <p className="text-sm text-indigo-700 dark:text-indigo-300">
193
- Including compliance statements helps demonstrate your commitment to data protection regulations.
194
- </p>
195
- </div>
196
- </div>
197
- </div>
198
- </CardContent>
199
- </Card>
200
- </div>
201
- );
202
- }