@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,428 +0,0 @@
1
- import { useState, useEffect } from 'react';
2
- import { PolicySection, PolicyTemplate, OrganizationInfo, PrivacyPolicy } from '../types/privacy';
3
- import { generatePolicyText } from '../utils/privacy';
4
-
5
- interface UsePrivacyPolicyOptions {
6
- /**
7
- * Available policy templates
8
- */
9
- templates: PolicyTemplate[];
10
-
11
- /**
12
- * Initial policy data (if editing an existing policy)
13
- */
14
- initialPolicy?: PrivacyPolicy;
15
-
16
- /**
17
- * Storage key for policy data
18
- * @default "ndpr_privacy_policy"
19
- */
20
- storageKey?: string;
21
-
22
- /**
23
- * Whether to use local storage to persist policy data
24
- * @default true
25
- */
26
- useLocalStorage?: boolean;
27
-
28
- /**
29
- * Callback function called when a policy is generated
30
- */
31
- onGenerate?: (policy: PrivacyPolicy) => void;
32
- }
33
-
34
- interface UsePrivacyPolicyReturn {
35
- /**
36
- * Current policy data
37
- */
38
- policy: PrivacyPolicy | null;
39
-
40
- /**
41
- * Selected template
42
- */
43
- selectedTemplate: PolicyTemplate | null;
44
-
45
- /**
46
- * Organization information
47
- */
48
- organizationInfo: OrganizationInfo;
49
-
50
- /**
51
- * Select a template
52
- */
53
- selectTemplate: (templateId: string) => boolean;
54
-
55
- /**
56
- * Update organization information
57
- */
58
- updateOrganizationInfo: (updates: Partial<OrganizationInfo>) => void;
59
-
60
- /**
61
- * Toggle whether a section is included in the policy
62
- */
63
- toggleSection: (sectionId: string, included: boolean) => void;
64
-
65
- /**
66
- * Update section content
67
- */
68
- updateSectionContent: (sectionId: string, content: string) => void;
69
-
70
- /**
71
- * Update variable values
72
- */
73
- updateVariableValue: (variable: string, value: string) => void;
74
-
75
- /**
76
- * Generate the policy
77
- */
78
- generatePolicy: () => PrivacyPolicy;
79
-
80
- /**
81
- * Get the generated policy text
82
- */
83
- getPolicyText: () => {
84
- fullText: string;
85
- sectionTexts: Record<string, string>;
86
- missingVariables: string[];
87
- };
88
-
89
- /**
90
- * Reset the policy
91
- */
92
- resetPolicy: () => void;
93
-
94
- /**
95
- * Check if the policy is valid
96
- */
97
- isValid: () => {
98
- valid: boolean;
99
- errors: string[];
100
- };
101
- }
102
-
103
- /**
104
- * Hook for generating NDPR-compliant privacy policies
105
- */
106
- export function usePrivacyPolicy({
107
- templates,
108
- initialPolicy,
109
- storageKey = "ndpr_privacy_policy",
110
- useLocalStorage = true,
111
- onGenerate
112
- }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn {
113
- const [policy, setPolicy] = useState<PrivacyPolicy | null>(initialPolicy || null);
114
- const [selectedTemplate, setSelectedTemplate] = useState<PolicyTemplate | null>(null);
115
- const [organizationInfo, setOrganizationInfo] = useState<OrganizationInfo>({
116
- name: '',
117
- website: '',
118
- privacyEmail: '',
119
- address: '',
120
- privacyPhone: '',
121
- dpoName: '',
122
- dpoEmail: '',
123
- industry: ''
124
- });
125
-
126
- // Load policy data from storage on mount
127
- useEffect(() => {
128
- if (useLocalStorage && typeof window !== 'undefined' && !initialPolicy) {
129
- try {
130
- const savedData = localStorage.getItem(storageKey);
131
- if (savedData) {
132
- const { policy, template, organizationInfo } = JSON.parse(savedData);
133
-
134
- if (policy) {
135
- setPolicy(policy);
136
- }
137
-
138
- if (template) {
139
- const foundTemplate = templates.find(t => t.id === template.id);
140
- if (foundTemplate) {
141
- setSelectedTemplate(foundTemplate);
142
- }
143
- }
144
-
145
- if (organizationInfo) {
146
- setOrganizationInfo(organizationInfo);
147
- }
148
- }
149
- } catch (error) {
150
- console.error('Error loading privacy policy data:', error);
151
- }
152
- }
153
- }, [storageKey, useLocalStorage, initialPolicy, templates]);
154
-
155
- // Save policy data to storage when it changes
156
- useEffect(() => {
157
- if (useLocalStorage && typeof window !== 'undefined') {
158
- try {
159
- localStorage.setItem(storageKey, JSON.stringify({
160
- policy,
161
- template: selectedTemplate,
162
- organizationInfo
163
- }));
164
- } catch (error) {
165
- console.error('Error saving privacy policy data:', error);
166
- }
167
- }
168
- }, [policy, selectedTemplate, organizationInfo, storageKey, useLocalStorage]);
169
-
170
- // Select a template
171
- const selectTemplate = (templateId: string): boolean => {
172
- const template = templates.find(t => t.id === templateId);
173
-
174
- if (!template) {
175
- return false;
176
- }
177
-
178
- setSelectedTemplate(template);
179
-
180
- // Initialize sections from the template
181
- const sections = template.sections.map(section => ({
182
- ...section,
183
- customContent: undefined
184
- }));
185
-
186
- // Initialize variable values
187
- const variableValues: Record<string, string> = {};
188
- Object.keys(template.variables).forEach(variable => {
189
- variableValues[variable] = template.variables[variable].defaultValue || '';
190
- });
191
-
192
- return true;
193
- };
194
-
195
- // Update organization information
196
- const updateOrganizationInfo = (updates: Partial<OrganizationInfo>) => {
197
- setOrganizationInfo(prev => ({
198
- ...prev,
199
- ...updates
200
- }));
201
- };
202
-
203
- // Toggle whether a section is included in the policy
204
- const toggleSection = (sectionId: string, included: boolean) => {
205
- if (!selectedTemplate) {
206
- return;
207
- }
208
-
209
- if (policy) {
210
- setPolicy(prev => {
211
- if (!prev) return prev;
212
-
213
- return {
214
- ...prev,
215
- sections: prev.sections.map(section =>
216
- section.id === sectionId ? { ...section, included } : section
217
- )
218
- };
219
- });
220
- } else {
221
- // If no policy exists yet, update the template sections
222
- setSelectedTemplate(prev => {
223
- if (!prev) return prev;
224
-
225
- return {
226
- ...prev,
227
- sections: prev.sections.map(section =>
228
- section.id === sectionId ? { ...section, included } : section
229
- )
230
- };
231
- });
232
- }
233
- };
234
-
235
- // Update section content
236
- const updateSectionContent = (sectionId: string, content: string) => {
237
- if (!selectedTemplate) {
238
- return;
239
- }
240
-
241
- if (policy) {
242
- setPolicy(prev => {
243
- if (!prev) return prev;
244
-
245
- return {
246
- ...prev,
247
- sections: prev.sections.map(section =>
248
- section.id === sectionId ? { ...section, customContent: content } : section
249
- )
250
- };
251
- });
252
- } else {
253
- // If no policy exists yet, update the template sections
254
- setSelectedTemplate(prev => {
255
- if (!prev) return prev;
256
-
257
- return {
258
- ...prev,
259
- sections: prev.sections.map(section =>
260
- section.id === sectionId ? { ...section, customContent: content } : section
261
- )
262
- };
263
- });
264
- }
265
- };
266
-
267
- // Update variable values
268
- const updateVariableValue = (variable: string, value: string) => {
269
- if (!policy) {
270
- return;
271
- }
272
-
273
- setPolicy(prev => {
274
- if (!prev) return prev;
275
-
276
- return {
277
- ...prev,
278
- variableValues: {
279
- ...prev.variableValues,
280
- [variable]: value
281
- }
282
- };
283
- });
284
- };
285
-
286
- // Generate a unique ID
287
- const generateId = (): string => {
288
- return 'policy_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
289
- };
290
-
291
- // Generate the policy
292
- const generatePolicy = (): PrivacyPolicy => {
293
- if (!selectedTemplate) {
294
- throw new Error('No template selected');
295
- }
296
-
297
- const now = Date.now();
298
-
299
- const newPolicy: PrivacyPolicy = {
300
- id: policy?.id || generateId(),
301
- title: `Privacy Policy for ${organizationInfo.name}`,
302
- templateId: selectedTemplate.id,
303
- organizationInfo,
304
- sections: selectedTemplate.sections.map(section => ({
305
- ...section,
306
- customContent: policy?.sections.find(s => s.id === section.id)?.customContent
307
- })),
308
- variableValues: policy?.variableValues || {},
309
- effectiveDate: now,
310
- lastUpdated: now,
311
- version: '1.0'
312
- };
313
-
314
- setPolicy(newPolicy);
315
-
316
- if (onGenerate) {
317
- onGenerate(newPolicy);
318
- }
319
-
320
- return newPolicy;
321
- };
322
-
323
- // Get the generated policy text
324
- const getPolicyText = () => {
325
- if (!policy) {
326
- return {
327
- fullText: '',
328
- sectionTexts: {},
329
- missingVariables: []
330
- };
331
- }
332
-
333
- const result = generatePolicyText(policy.sections, policy.organizationInfo);
334
-
335
- // Handle both string and object return types from generatePolicyText
336
- if (typeof result === 'string') {
337
- return {
338
- fullText: result,
339
- sectionTexts: { 'full': result },
340
- missingVariables: []
341
- };
342
- }
343
-
344
- return result;
345
- };
346
-
347
- // Reset the policy
348
- const resetPolicy = () => {
349
- setPolicy(null);
350
- setSelectedTemplate(null);
351
- setOrganizationInfo({
352
- name: '',
353
- website: '',
354
- privacyEmail: '',
355
- address: '',
356
- privacyPhone: '',
357
- dpoName: '',
358
- dpoEmail: '',
359
- industry: ''
360
- });
361
-
362
- if (useLocalStorage && typeof window !== 'undefined') {
363
- localStorage.removeItem(storageKey);
364
- }
365
- };
366
-
367
- // Check if the policy is valid
368
- const isValid = () => {
369
- const errors: string[] = [];
370
-
371
- if (!selectedTemplate) {
372
- errors.push('No template selected');
373
- }
374
-
375
- if (!organizationInfo.name) {
376
- errors.push('Organization name is required');
377
- }
378
-
379
- if (!organizationInfo.website) {
380
- errors.push('Organization website is required');
381
- }
382
-
383
- if (!organizationInfo.privacyEmail) {
384
- errors.push('Privacy contact email is required');
385
- }
386
-
387
- // Check if all required sections are included
388
- if (selectedTemplate) {
389
- const requiredSections = selectedTemplate.sections.filter(section => section.required);
390
- const includedSections = policy?.sections.filter(section => section.included) || [];
391
-
392
- requiredSections.forEach(section => {
393
- if (!includedSections.some(s => s.id === section.id)) {
394
- errors.push(`Required section "${section.title}" must be included`);
395
- }
396
- });
397
- }
398
-
399
- // Check if all required variables have values
400
- if (selectedTemplate && policy) {
401
- Object.entries(selectedTemplate.variables).forEach(([variable, info]) => {
402
- if (info.required && !policy.variableValues[variable]) {
403
- errors.push(`Required variable "${info.name}" must have a value`);
404
- }
405
- });
406
- }
407
-
408
- return {
409
- valid: errors.length === 0,
410
- errors
411
- };
412
- };
413
-
414
- return {
415
- policy,
416
- selectedTemplate,
417
- organizationInfo,
418
- selectTemplate,
419
- updateOrganizationInfo,
420
- toggleSection,
421
- updateSectionContent,
422
- updateVariableValue,
423
- generatePolicy,
424
- getPolicyText,
425
- resetPolicy,
426
- isValid
427
- };
428
- }
@@ -1,44 +0,0 @@
1
- // Consent Management Components
2
- export { ConsentBanner } from './components/consent/ConsentBanner';
3
- export { ConsentManager } from './components/consent/ConsentManager';
4
- export { ConsentStorage } from './components/consent/ConsentStorage';
5
- export type { ConsentOption, ConsentSettings, ConsentStorageOptions } from './types/consent';
6
-
7
- // Data Subject Rights Components
8
- export { DSRRequestForm } from './components/dsr/DSRRequestForm';
9
- export { DSRDashboard } from './components/dsr/DSRDashboard';
10
- export { DSRTracker } from './components/dsr/DSRTracker';
11
- export type { DSRRequest, RequestType, DSRStatus, DSRType, RequestStatus } from './types/dsr';
12
-
13
- // DPIA Components
14
- export { DPIAQuestionnaire } from './components/dpia/DPIAQuestionnaire';
15
- export { DPIAReport } from './components/dpia/DPIAReport';
16
- export { StepIndicator } from './components/dpia/StepIndicator';
17
- export type { DPIAQuestion, DPIASection, DPIAResult } from './types/dpia';
18
-
19
- // Breach Notification Components
20
- export { BreachReportForm } from './components/breach/BreachReportForm';
21
- export { BreachRiskAssessment } from './components/breach/BreachRiskAssessment';
22
- export { BreachNotificationManager } from './components/breach/BreachNotificationManager';
23
- export { RegulatoryReportGenerator } from './components/breach/RegulatoryReportGenerator';
24
- export type { BreachReport, RiskAssessment, NotificationRequirement, RegulatoryNotification } from './types/breach';
25
-
26
- // Privacy Policy Generator Components
27
- export { PolicyGenerator } from './components/policy/PolicyGenerator';
28
- export { PolicyPreview } from './components/policy/PolicyPreview';
29
- export { PolicyExporter } from './components/policy/PolicyExporter';
30
- export type { PolicySection, PolicyTemplate, PolicyVariable, OrganizationInfo, PrivacyPolicy } from './types/privacy';
31
-
32
- // Utility Functions
33
- export { validateConsent } from './utils/consent';
34
- export { formatDSRRequest } from './utils/dsr';
35
- export { assessDPIARisk } from './utils/dpia';
36
- export { calculateBreachSeverity } from './utils/breach';
37
- export { generatePolicyText } from './utils/privacy';
38
-
39
- // Hooks
40
- export { useConsent } from './hooks/useConsent';
41
- export { useDSR } from './hooks/useDSR';
42
- export { useDPIA } from './hooks/useDPIA';
43
- export { useBreach } from './hooks/useBreach';
44
- export { usePrivacyPolicy } from './hooks/usePrivacyPolicy';
@@ -1,5 +0,0 @@
1
- // jest-dom adds custom jest matchers for asserting on DOM nodes.
2
- // allows you to do things like:
3
- // expect(element).toHaveTextContent(/react/i)
4
- import '@testing-library/jest-dom';
5
- import '@testing-library/jest-dom/extend-expect';