@tantainnovative/ndpr-toolkit 2.4.1 → 3.2.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 (192) hide show
  1. package/README.md +226 -246
  2. package/dist/BreachReportForm-DpRrBoxU.d.ts +158 -0
  3. package/dist/BreachReportForm-yJ2Zl6gz.d.mts +158 -0
  4. package/dist/ConsentBanner-CDRT0o2k.d.mts +146 -0
  5. package/dist/ConsentBanner-Vxyt8SCX.d.ts +146 -0
  6. package/dist/{cross-border-entry-BrWVPly6.d.ts → CrossBorderTransferManager-D5Lc0e46.d.ts} +4 -5
  7. package/dist/{cross-border-entry-cCTvpwnT.d.mts → CrossBorderTransferManager-DkZhv9vD.d.mts} +4 -5
  8. package/dist/DPIAQuestionnaire-BkejviPj.d.mts +123 -0
  9. package/dist/DPIAQuestionnaire-DdSqXG3x.d.ts +123 -0
  10. package/dist/DSRRequestForm-BY8PogCU.d.mts +146 -0
  11. package/dist/DSRRequestForm-CHUg9cZh.d.ts +146 -0
  12. package/dist/DSRTracker-C6u_jAaK.d.mts +163 -0
  13. package/dist/DSRTracker-Dr_aT0pg.d.ts +163 -0
  14. package/dist/{lawful-basis-entry-CxZrofwG.d.mts → LawfulBasisTracker-CBqOxX1D.d.mts} +3 -5
  15. package/dist/{lawful-basis-entry-15qjKcNO.d.ts → LawfulBasisTracker-Cg30NbDA.d.ts} +3 -5
  16. package/dist/NDPRDashboard-CLJpEg0X.d.mts +44 -0
  17. package/dist/NDPRDashboard-DDWNd2Ah.d.ts +44 -0
  18. package/dist/{policy-E0fXZkda.d.mts → PolicyExporter-Bgi6nz82.d.mts} +5 -7
  19. package/dist/{policy-D2_jh5-T.d.ts → PolicyExporter-BnvuFncj.d.ts} +5 -7
  20. package/dist/{ropa-entry-B0D7X1GV.d.ts → ROPAManager-BS4eB8Hw.d.mts} +4 -5
  21. package/dist/{ropa-entry-DiOThOc2.d.mts → ROPAManager-qxTrXLkD.d.ts} +4 -5
  22. package/dist/RegulatoryReportGenerator-BUYgzTTT.d.ts +282 -0
  23. package/dist/RegulatoryReportGenerator-DwcHcEFp.d.mts +282 -0
  24. package/dist/StepIndicator-D-nwRTyo.d.mts +171 -0
  25. package/dist/StepIndicator-D9ZATz_O.d.ts +171 -0
  26. package/dist/adapters.d.mts +25 -0
  27. package/dist/adapters.d.ts +25 -0
  28. package/dist/adapters.js +2 -0
  29. package/dist/adapters.mjs +2 -0
  30. package/dist/breach.d.mts +36 -431
  31. package/dist/breach.d.ts +36 -431
  32. package/dist/breach.js +1 -1
  33. package/dist/breach.mjs +1 -1
  34. package/dist/chunk-27NYSWUG.mjs +2 -0
  35. package/dist/chunk-2ORDHJRD.js +2 -0
  36. package/dist/chunk-2W7ARAW2.js +2 -0
  37. package/dist/chunk-3F34NACG.js +2 -0
  38. package/dist/chunk-3UWT64FI.mjs +2 -0
  39. package/dist/chunk-3V23O4ZJ.js +2 -0
  40. package/dist/chunk-3XAUN5IM.mjs +3 -0
  41. package/dist/chunk-44W4H2EY.js +2 -0
  42. package/dist/chunk-5VMHKNJY.js +2 -0
  43. package/dist/chunk-6D3ZUGBB.mjs +2 -0
  44. package/dist/chunk-6E54NSAO.mjs +2 -0
  45. package/dist/chunk-7F5F5YWI.mjs +2 -0
  46. package/dist/chunk-DQLDX5X6.js +316 -0
  47. package/dist/chunk-FR7ZYZXB.js +2 -0
  48. package/dist/chunk-FY5G6DGZ.js +7 -0
  49. package/dist/chunk-G26I6MP5.mjs +2 -0
  50. package/dist/chunk-GCQRHMTQ.mjs +144 -0
  51. package/dist/chunk-GPJVTGHR.mjs +2 -0
  52. package/dist/chunk-GVANK6PL.js +3 -0
  53. package/dist/chunk-HNZK7LY3.mjs +2 -0
  54. package/dist/chunk-IKEPXHCZ.js +2 -0
  55. package/dist/chunk-IQQW52EF.js +2 -0
  56. package/dist/chunk-ISSGO2YT.mjs +72 -0
  57. package/dist/chunk-JZKH5RMC.js +3 -0
  58. package/dist/chunk-KHRBU5K7.js +2 -0
  59. package/dist/chunk-LFNA6WYQ.mjs +2 -0
  60. package/dist/chunk-LU4PFST7.js +144 -0
  61. package/dist/chunk-NPI5T6NH.mjs +7 -0
  62. package/dist/chunk-NPLXE43Q.mjs +2 -0
  63. package/dist/chunk-P7BSBCB3.js +2 -0
  64. package/dist/chunk-PEH5GIMN.js +2 -0
  65. package/dist/chunk-RSUDIFZV.mjs +2 -0
  66. package/dist/chunk-SBNAMPAP.mjs +2 -0
  67. package/dist/chunk-SVCRYM4I.mjs +2 -0
  68. package/dist/chunk-TKBZRULW.mjs +316 -0
  69. package/dist/chunk-TVW6KBVV.mjs +2 -0
  70. package/dist/chunk-U6VWHC46.js +72 -0
  71. package/dist/chunk-UK656RCG.js +2 -0
  72. package/dist/chunk-UNKXYVXY.js +2 -0
  73. package/dist/chunk-UOSEH6DC.js +2 -0
  74. package/dist/chunk-V37BM2LF.js +2 -0
  75. package/dist/chunk-V3MXWGXU.mjs +2 -0
  76. package/dist/chunk-VDZKGCAF.js +2 -0
  77. package/dist/chunk-WLSW4Z4W.mjs +2 -0
  78. package/dist/chunk-XSK4BSZJ.mjs +2 -0
  79. package/dist/chunk-YJCGEOLO.mjs +2 -0
  80. package/dist/chunk-ZCZ5RRZO.js +2 -0
  81. package/dist/chunk-ZQSX5ZHB.mjs +3 -0
  82. package/dist/compliance-score-racQe_E_.d.mts +115 -0
  83. package/dist/compliance-score-racQe_E_.d.ts +115 -0
  84. package/dist/consent.d.mts +67 -295
  85. package/dist/consent.d.ts +67 -295
  86. package/dist/consent.js +1 -1
  87. package/dist/consent.mjs +1 -1
  88. package/dist/core.d.mts +14 -48
  89. package/dist/core.d.ts +14 -48
  90. package/dist/core.js +1 -1
  91. package/dist/core.mjs +1 -1
  92. package/dist/cross-border-BBi9rZyO.d.mts +54 -0
  93. package/dist/cross-border-Dy-U9Hu6.d.ts +54 -0
  94. package/dist/{cross-border-BMcqLvjC.d.mts → cross-border-UyT00llA.d.mts} +1 -52
  95. package/dist/{cross-border-BMcqLvjC.d.ts → cross-border-UyT00llA.d.ts} +1 -52
  96. package/dist/cross-border.d.mts +32 -4
  97. package/dist/cross-border.d.ts +32 -4
  98. package/dist/cross-border.js +1 -1
  99. package/dist/cross-border.mjs +1 -1
  100. package/dist/dpia.d.mts +28 -284
  101. package/dist/dpia.d.ts +28 -284
  102. package/dist/dpia.js +1 -1
  103. package/dist/dpia.mjs +1 -1
  104. package/dist/dsr.d.mts +29 -300
  105. package/dist/dsr.d.ts +29 -300
  106. package/dist/dsr.js +1 -1
  107. package/dist/dsr.mjs +1 -1
  108. package/dist/hooks.d.mts +23 -10
  109. package/dist/hooks.d.ts +23 -10
  110. package/dist/hooks.js +1 -1
  111. package/dist/hooks.mjs +1 -1
  112. package/dist/index.d.mts +28 -19
  113. package/dist/index.d.ts +28 -19
  114. package/dist/index.js +1 -1
  115. package/dist/index.mjs +1 -1
  116. package/dist/lawful-basis.d.mts +31 -4
  117. package/dist/lawful-basis.d.ts +31 -4
  118. package/dist/lawful-basis.js +1 -1
  119. package/dist/lawful-basis.mjs +1 -1
  120. package/dist/policy-engine-C-tShzZH.d.mts +154 -0
  121. package/dist/policy-engine-DSQpT55_.d.ts +154 -0
  122. package/dist/policy-sections-CfNVBLCh.d.mts +54 -0
  123. package/dist/policy-sections-DqH0iZRf.d.ts +54 -0
  124. package/dist/policy.d.mts +117 -4
  125. package/dist/policy.d.ts +117 -4
  126. package/dist/policy.js +1 -1
  127. package/dist/policy.mjs +1 -1
  128. package/dist/presets.d.mts +114 -0
  129. package/dist/presets.d.ts +114 -0
  130. package/dist/presets.js +2 -0
  131. package/dist/presets.mjs +2 -0
  132. package/dist/{ropa-Li6UlL5H.d.ts → ropa-BDTM06tr.d.ts} +1 -49
  133. package/dist/{ropa-DP7pPPql.d.mts → ropa-CFHuT7jE.d.mts} +1 -49
  134. package/dist/ropa-CyynscU6.d.ts +51 -0
  135. package/dist/ropa-NIgxd8uP.d.mts +51 -0
  136. package/dist/ropa.d.mts +30 -4
  137. package/dist/ropa.d.ts +30 -4
  138. package/dist/ropa.js +1 -1
  139. package/dist/ropa.mjs +1 -1
  140. package/dist/sanitize-9mOO_cJW.d.mts +147 -0
  141. package/dist/sanitize-9mOO_cJW.d.ts +147 -0
  142. package/dist/styling-B7CBzYG7.d.ts +165 -0
  143. package/dist/styling-uJLsBbER.d.mts +165 -0
  144. package/dist/types-DK2CoKOC.d.mts +10 -0
  145. package/dist/types-DK2CoKOC.d.ts +10 -0
  146. package/dist/unstyled.d.mts +4 -4
  147. package/dist/unstyled.d.ts +4 -4
  148. package/dist/useAdaptivePolicyWizard-B9Op2gYM.d.ts +52 -0
  149. package/dist/useAdaptivePolicyWizard-N4eUM4Tj.d.mts +52 -0
  150. package/dist/{useBreach-BBSoIcZO.d.mts → useBreach-CPr86Yan.d.mts} +18 -2
  151. package/dist/{useBreach-lFLbSyAN.d.ts → useBreach-DkVXvtJK.d.ts} +18 -2
  152. package/dist/{useConsent-D0pAfTlb.d.ts → useConsent-DCNkIJHR.d.mts} +12 -2
  153. package/dist/{useConsent-DOt2Njst.d.mts → useConsent-dOcELSfX.d.ts} +12 -2
  154. package/dist/{useCrossBorderTransfer-DmtACeqW.d.ts → useCrossBorderTransfer-BGNZt2lk.d.mts} +15 -3
  155. package/dist/{useCrossBorderTransfer-BZVFCXfr.d.mts → useCrossBorderTransfer-COqjgjsu.d.ts} +15 -3
  156. package/dist/{useDPIA-DBsg2yZx.d.ts → useDPIA-Dl16Te3r.d.ts} +13 -2
  157. package/dist/{useDPIA-Da7-Q_yW.d.mts → useDPIA-DzWye8JB.d.mts} +13 -2
  158. package/dist/{useDSR-YYZ6FYFs.d.mts → useDSR-C1LksCfP.d.mts} +13 -2
  159. package/dist/{useDSR-CYI7WCXr.d.ts → useDSR-DZel52O1.d.ts} +13 -2
  160. package/dist/{useDefaultPrivacyPolicy-CUluF_ic.d.mts → useDefaultPrivacyPolicy-BsYttRey.d.mts} +13 -2
  161. package/dist/{useDefaultPrivacyPolicy-B7kTHbZh.d.ts → useDefaultPrivacyPolicy-C-mG-A5S.d.ts} +13 -2
  162. package/dist/{useLawfulBasis-CpWuHtyh.d.mts → useLawfulBasis-CKJ-kw84.d.mts} +13 -2
  163. package/dist/{useLawfulBasis-CCWF9waR.d.ts → useLawfulBasis-DFTmu1ca.d.ts} +13 -2
  164. package/dist/{useROPA-BhJ3kvHp.d.ts → useROPA-BSSU1rfx.d.ts} +14 -2
  165. package/dist/{useROPA-DLFdjkxP.d.mts → useROPA-C2hjaBTz.d.mts} +14 -2
  166. package/package.json +24 -3
  167. package/dist/chunk-2XFAV267.mjs +0 -2
  168. package/dist/chunk-32UIWTGD.js +0 -72
  169. package/dist/chunk-3YCV2BA6.js +0 -2
  170. package/dist/chunk-4A354HL3.js +0 -2
  171. package/dist/chunk-5ZBO2UPH.js +0 -2
  172. package/dist/chunk-6GGGTRDZ.mjs +0 -2
  173. package/dist/chunk-BZTTQS4A.mjs +0 -7
  174. package/dist/chunk-EKVTLHBQ.js +0 -2
  175. package/dist/chunk-GMLNWS2N.mjs +0 -2
  176. package/dist/chunk-IBEKLDBY.mjs +0 -2
  177. package/dist/chunk-ILCNDOBU.js +0 -2
  178. package/dist/chunk-K3GMTMQ6.js +0 -2
  179. package/dist/chunk-L52PDW6O.mjs +0 -2
  180. package/dist/chunk-LI6WJ3LZ.js +0 -2
  181. package/dist/chunk-LXRXDTPI.js +0 -2
  182. package/dist/chunk-NW4A3JW6.mjs +0 -2
  183. package/dist/chunk-OITITR6K.mjs +0 -2
  184. package/dist/chunk-PDJGTQMY.mjs +0 -2
  185. package/dist/chunk-T44JQT2O.mjs +0 -2
  186. package/dist/chunk-TCJCE6WN.js +0 -2
  187. package/dist/chunk-VMJBW3EF.mjs +0 -2
  188. package/dist/chunk-WSHSHIIM.mjs +0 -2
  189. package/dist/chunk-WW3X3ELF.js +0 -2
  190. package/dist/chunk-XMYUYQH7.mjs +0 -72
  191. package/dist/chunk-ZNTMZ6NM.js +0 -7
  192. package/dist/chunk-ZU73VG3X.js +0 -2
@@ -1,18 +1,26 @@
1
- import { a as CrossBorderTransfer, C as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BMcqLvjC.js';
1
+ import { a as CrossBorderTransfer, C as CrossBorderSummary } from './cross-border-UyT00llA.mjs';
2
+ import { a as TransferValidationResult } from './cross-border-BBi9rZyO.mjs';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
2
4
 
3
5
  interface UseCrossBorderTransferOptions {
4
6
  /**
5
7
  * Initial transfers to load
6
8
  */
7
9
  initialTransfers?: CrossBorderTransfer[];
10
+ /**
11
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
12
+ */
13
+ adapter?: StorageAdapter<CrossBorderTransfer[]>;
8
14
  /**
9
15
  * Storage key for transfer data
10
16
  * @default "ndpr_cross_border_transfers"
17
+ * @deprecated Use adapter instead
11
18
  */
12
19
  storageKey?: string;
13
20
  /**
14
21
  * Whether to use local storage to persist transfers
15
22
  * @default true
23
+ * @deprecated Use adapter instead
16
24
  */
17
25
  useLocalStorage?: boolean;
18
26
  /**
@@ -57,10 +65,14 @@ interface UseCrossBorderTransferReturn {
57
65
  * Validate a cross-border transfer
58
66
  */
59
67
  validateTransfer: (transfer: CrossBorderTransfer) => TransferValidationResult;
68
+ /**
69
+ * Whether the adapter is still loading data (relevant for async adapters)
70
+ */
71
+ isLoading: boolean;
60
72
  }
61
73
  /**
62
74
  * Hook for managing cross-border data transfers in compliance with NDPA Part VI (Sections 41-45)
63
75
  */
64
- declare function useCrossBorderTransfer({ initialTransfers, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseCrossBorderTransferOptions): UseCrossBorderTransferReturn;
76
+ declare function useCrossBorderTransfer({ initialTransfers, adapter, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseCrossBorderTransferOptions): UseCrossBorderTransferReturn;
65
77
 
66
- export { useCrossBorderTransfer as u };
78
+ export { type UseCrossBorderTransferReturn as U, useCrossBorderTransfer as u };
@@ -1,18 +1,26 @@
1
- import { a as CrossBorderTransfer, C as CrossBorderSummary, d as TransferValidationResult } from './cross-border-BMcqLvjC.mjs';
1
+ import { a as CrossBorderTransfer, C as CrossBorderSummary } from './cross-border-UyT00llA.js';
2
+ import { a as TransferValidationResult } from './cross-border-Dy-U9Hu6.js';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
2
4
 
3
5
  interface UseCrossBorderTransferOptions {
4
6
  /**
5
7
  * Initial transfers to load
6
8
  */
7
9
  initialTransfers?: CrossBorderTransfer[];
10
+ /**
11
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
12
+ */
13
+ adapter?: StorageAdapter<CrossBorderTransfer[]>;
8
14
  /**
9
15
  * Storage key for transfer data
10
16
  * @default "ndpr_cross_border_transfers"
17
+ * @deprecated Use adapter instead
11
18
  */
12
19
  storageKey?: string;
13
20
  /**
14
21
  * Whether to use local storage to persist transfers
15
22
  * @default true
23
+ * @deprecated Use adapter instead
16
24
  */
17
25
  useLocalStorage?: boolean;
18
26
  /**
@@ -57,10 +65,14 @@ interface UseCrossBorderTransferReturn {
57
65
  * Validate a cross-border transfer
58
66
  */
59
67
  validateTransfer: (transfer: CrossBorderTransfer) => TransferValidationResult;
68
+ /**
69
+ * Whether the adapter is still loading data (relevant for async adapters)
70
+ */
71
+ isLoading: boolean;
60
72
  }
61
73
  /**
62
74
  * Hook for managing cross-border data transfers in compliance with NDPA Part VI (Sections 41-45)
63
75
  */
64
- declare function useCrossBorderTransfer({ initialTransfers, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseCrossBorderTransferOptions): UseCrossBorderTransferReturn;
76
+ declare function useCrossBorderTransfer({ initialTransfers, adapter, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseCrossBorderTransferOptions): UseCrossBorderTransferReturn;
65
77
 
66
- export { useCrossBorderTransfer as u };
78
+ export { type UseCrossBorderTransferReturn as U, useCrossBorderTransfer as u };
@@ -1,4 +1,5 @@
1
1
  import { c as DPIASection, a as DPIAResult, D as DPIAQuestion } from './dpia-5OQVA1R_.js';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
2
3
 
3
4
  interface UseDPIAOptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UseDPIAOptions {
9
10
  * Initial answers (if resuming a DPIA)
10
11
  */
11
12
  initialAnswers?: Record<string, any>;
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<Record<string, any>>;
12
17
  /**
13
18
  * Storage key for DPIA data
14
19
  * @default "ndpr_dpia_data"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist DPIA data
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -85,10 +92,14 @@ interface UseDPIAReturn {
85
92
  * Progress percentage
86
93
  */
87
94
  progress: number;
95
+ /**
96
+ * Whether the adapter is still loading data (relevant for async adapters)
97
+ */
98
+ isLoading: boolean;
88
99
  }
89
100
  /**
90
101
  * Hook for conducting Data Protection Impact Assessments in compliance with the NDPA 2023
91
102
  */
92
- declare function useDPIA({ sections, initialAnswers, storageKey, useLocalStorage, onComplete }: UseDPIAOptions): UseDPIAReturn;
103
+ declare function useDPIA({ sections, initialAnswers, adapter, storageKey, useLocalStorage, onComplete, }: UseDPIAOptions): UseDPIAReturn;
93
104
 
94
- export { useDPIA as u };
105
+ export { type UseDPIAReturn as U, useDPIA as u };
@@ -1,4 +1,5 @@
1
1
  import { c as DPIASection, a as DPIAResult, D as DPIAQuestion } from './dpia-5OQVA1R_.mjs';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
2
3
 
3
4
  interface UseDPIAOptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UseDPIAOptions {
9
10
  * Initial answers (if resuming a DPIA)
10
11
  */
11
12
  initialAnswers?: Record<string, any>;
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<Record<string, any>>;
12
17
  /**
13
18
  * Storage key for DPIA data
14
19
  * @default "ndpr_dpia_data"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist DPIA data
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -85,10 +92,14 @@ interface UseDPIAReturn {
85
92
  * Progress percentage
86
93
  */
87
94
  progress: number;
95
+ /**
96
+ * Whether the adapter is still loading data (relevant for async adapters)
97
+ */
98
+ isLoading: boolean;
88
99
  }
89
100
  /**
90
101
  * Hook for conducting Data Protection Impact Assessments in compliance with the NDPA 2023
91
102
  */
92
- declare function useDPIA({ sections, initialAnswers, storageKey, useLocalStorage, onComplete }: UseDPIAOptions): UseDPIAReturn;
103
+ declare function useDPIA({ sections, initialAnswers, adapter, storageKey, useLocalStorage, onComplete, }: UseDPIAOptions): UseDPIAReturn;
93
104
 
94
- export { useDPIA as u };
105
+ export { type UseDPIAReturn as U, useDPIA as u };
@@ -1,4 +1,5 @@
1
1
  import { D as DSRRequest, c as RequestType, R as RequestStatus } from './dsr-Cm9lzWG7.mjs';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
2
3
 
3
4
  interface UseDSROptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UseDSROptions {
9
10
  * Available request types
10
11
  */
11
12
  requestTypes: RequestType[];
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<DSRRequest[]>;
12
17
  /**
13
18
  * Storage key for requests
14
19
  * @default "ndpr_dsr_requests"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist requests
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -65,10 +72,14 @@ interface UseDSRReturn {
65
72
  * Clear all requests
66
73
  */
67
74
  clearRequests: () => void;
75
+ /**
76
+ * Whether the adapter is still loading data (relevant for async adapters)
77
+ */
78
+ isLoading: boolean;
68
79
  }
69
80
  /**
70
81
  * Hook for managing Data Subject Requests in compliance with the NDPA
71
82
  */
72
- declare function useDSR({ initialRequests, requestTypes, storageKey, useLocalStorage, onSubmit, onUpdate }: UseDSROptions): UseDSRReturn;
83
+ declare function useDSR({ initialRequests, requestTypes, adapter, storageKey, useLocalStorage, onSubmit, onUpdate, }: UseDSROptions): UseDSRReturn;
73
84
 
74
- export { useDSR as u };
85
+ export { type UseDSRReturn as U, useDSR as u };
@@ -1,4 +1,5 @@
1
1
  import { D as DSRRequest, c as RequestType, R as RequestStatus } from './dsr-Cm9lzWG7.js';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
2
3
 
3
4
  interface UseDSROptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UseDSROptions {
9
10
  * Available request types
10
11
  */
11
12
  requestTypes: RequestType[];
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<DSRRequest[]>;
12
17
  /**
13
18
  * Storage key for requests
14
19
  * @default "ndpr_dsr_requests"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist requests
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -65,10 +72,14 @@ interface UseDSRReturn {
65
72
  * Clear all requests
66
73
  */
67
74
  clearRequests: () => void;
75
+ /**
76
+ * Whether the adapter is still loading data (relevant for async adapters)
77
+ */
78
+ isLoading: boolean;
68
79
  }
69
80
  /**
70
81
  * Hook for managing Data Subject Requests in compliance with the NDPA
71
82
  */
72
- declare function useDSR({ initialRequests, requestTypes, storageKey, useLocalStorage, onSubmit, onUpdate }: UseDSROptions): UseDSRReturn;
83
+ declare function useDSR({ initialRequests, requestTypes, adapter, storageKey, useLocalStorage, onSubmit, onUpdate, }: UseDSROptions): UseDSRReturn;
73
84
 
74
- export { useDSR as u };
85
+ export { type UseDSRReturn as U, useDSR as u };
@@ -1,4 +1,5 @@
1
1
  import { c as PrivacyPolicy, a as PolicyTemplate, O as OrganizationInfo } from './privacy-Ca6te9Ir.mjs';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
2
3
 
3
4
  interface UsePrivacyPolicyOptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UsePrivacyPolicyOptions {
9
10
  * Initial policy data (if editing an existing policy)
10
11
  */
11
12
  initialPolicy?: PrivacyPolicy;
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<PrivacyPolicy>;
12
17
  /**
13
18
  * Storage key for policy data
14
19
  * @default "ndpr_privacy_policy"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist policy data
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -80,11 +87,15 @@ interface UsePrivacyPolicyReturn {
80
87
  valid: boolean;
81
88
  errors: string[];
82
89
  };
90
+ /**
91
+ * Whether the adapter is still loading data (relevant for async adapters)
92
+ */
93
+ isLoading: boolean;
83
94
  }
84
95
  /**
85
96
  * Hook for generating NDPA-compliant privacy policies
86
97
  */
87
- declare function usePrivacyPolicy({ templates, initialPolicy, storageKey, useLocalStorage, onGenerate }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
98
+ declare function usePrivacyPolicy({ templates, initialPolicy, adapter, storageKey, useLocalStorage, onGenerate, }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
88
99
 
89
100
  interface UseDefaultPrivacyPolicyOptions {
90
101
  /**
@@ -123,4 +134,4 @@ interface UseDefaultPrivacyPolicyOptions {
123
134
  */
124
135
  declare function useDefaultPrivacyPolicy(options?: UseDefaultPrivacyPolicyOptions): UsePrivacyPolicyReturn;
125
136
 
126
- export { usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
137
+ export { type UsePrivacyPolicyReturn as U, usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
@@ -1,4 +1,5 @@
1
1
  import { c as PrivacyPolicy, a as PolicyTemplate, O as OrganizationInfo } from './privacy-Ca6te9Ir.js';
2
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
2
3
 
3
4
  interface UsePrivacyPolicyOptions {
4
5
  /**
@@ -9,14 +10,20 @@ interface UsePrivacyPolicyOptions {
9
10
  * Initial policy data (if editing an existing policy)
10
11
  */
11
12
  initialPolicy?: PrivacyPolicy;
13
+ /**
14
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
15
+ */
16
+ adapter?: StorageAdapter<PrivacyPolicy>;
12
17
  /**
13
18
  * Storage key for policy data
14
19
  * @default "ndpr_privacy_policy"
20
+ * @deprecated Use adapter instead
15
21
  */
16
22
  storageKey?: string;
17
23
  /**
18
24
  * Whether to use local storage to persist policy data
19
25
  * @default true
26
+ * @deprecated Use adapter instead
20
27
  */
21
28
  useLocalStorage?: boolean;
22
29
  /**
@@ -80,11 +87,15 @@ interface UsePrivacyPolicyReturn {
80
87
  valid: boolean;
81
88
  errors: string[];
82
89
  };
90
+ /**
91
+ * Whether the adapter is still loading data (relevant for async adapters)
92
+ */
93
+ isLoading: boolean;
83
94
  }
84
95
  /**
85
96
  * Hook for generating NDPA-compliant privacy policies
86
97
  */
87
- declare function usePrivacyPolicy({ templates, initialPolicy, storageKey, useLocalStorage, onGenerate }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
98
+ declare function usePrivacyPolicy({ templates, initialPolicy, adapter, storageKey, useLocalStorage, onGenerate, }: UsePrivacyPolicyOptions): UsePrivacyPolicyReturn;
88
99
 
89
100
  interface UseDefaultPrivacyPolicyOptions {
90
101
  /**
@@ -123,4 +134,4 @@ interface UseDefaultPrivacyPolicyOptions {
123
134
  */
124
135
  declare function useDefaultPrivacyPolicy(options?: UseDefaultPrivacyPolicyOptions): UsePrivacyPolicyReturn;
125
136
 
126
- export { usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
137
+ export { type UsePrivacyPolicyReturn as U, usePrivacyPolicy as a, useDefaultPrivacyPolicy as u };
@@ -1,19 +1,26 @@
1
1
  import { P as ProcessingActivity, a as LawfulBasisSummary } from './lawful-basis-Cv1VmDLn.mjs';
2
2
  import { a as LawfulBasisValidationResult } from './lawful-basis-C2eGaoHM.mjs';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
3
4
 
4
5
  interface UseLawfulBasisOptions {
5
6
  /**
6
7
  * Initial processing activities to load
7
8
  */
8
9
  initialActivities?: ProcessingActivity[];
10
+ /**
11
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
12
+ */
13
+ adapter?: StorageAdapter<ProcessingActivity[]>;
9
14
  /**
10
15
  * Storage key for persisting activities
11
16
  * @default "ndpr_lawful_basis_activities"
17
+ * @deprecated Use adapter instead
12
18
  */
13
19
  storageKey?: string;
14
20
  /**
15
21
  * Whether to use local storage to persist activities
16
22
  * @default true
23
+ * @deprecated Use adapter instead
17
24
  */
18
25
  useLocalStorage?: boolean;
19
26
  /**
@@ -58,11 +65,15 @@ interface UseLawfulBasisReturn {
58
65
  * Validate a processing activity
59
66
  */
60
67
  validateActivity: (activity: ProcessingActivity) => LawfulBasisValidationResult;
68
+ /**
69
+ * Whether the adapter is still loading data (relevant for async adapters)
70
+ */
71
+ isLoading: boolean;
61
72
  }
62
73
  /**
63
74
  * Hook for managing lawful basis documentation for processing activities
64
75
  * in compliance with NDPA 2023 Section 25.
65
76
  */
66
- declare function useLawfulBasis({ initialActivities, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseLawfulBasisOptions): UseLawfulBasisReturn;
77
+ declare function useLawfulBasis({ initialActivities, adapter, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseLawfulBasisOptions): UseLawfulBasisReturn;
67
78
 
68
- export { useLawfulBasis as u };
79
+ export { type UseLawfulBasisReturn as U, useLawfulBasis as u };
@@ -1,19 +1,26 @@
1
1
  import { P as ProcessingActivity, a as LawfulBasisSummary } from './lawful-basis-Cv1VmDLn.js';
2
2
  import { a as LawfulBasisValidationResult } from './lawful-basis-BEyI0kGg.js';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
3
4
 
4
5
  interface UseLawfulBasisOptions {
5
6
  /**
6
7
  * Initial processing activities to load
7
8
  */
8
9
  initialActivities?: ProcessingActivity[];
10
+ /**
11
+ * Pluggable storage adapter. When provided, takes precedence over storageKey/useLocalStorage.
12
+ */
13
+ adapter?: StorageAdapter<ProcessingActivity[]>;
9
14
  /**
10
15
  * Storage key for persisting activities
11
16
  * @default "ndpr_lawful_basis_activities"
17
+ * @deprecated Use adapter instead
12
18
  */
13
19
  storageKey?: string;
14
20
  /**
15
21
  * Whether to use local storage to persist activities
16
22
  * @default true
23
+ * @deprecated Use adapter instead
17
24
  */
18
25
  useLocalStorage?: boolean;
19
26
  /**
@@ -58,11 +65,15 @@ interface UseLawfulBasisReturn {
58
65
  * Validate a processing activity
59
66
  */
60
67
  validateActivity: (activity: ProcessingActivity) => LawfulBasisValidationResult;
68
+ /**
69
+ * Whether the adapter is still loading data (relevant for async adapters)
70
+ */
71
+ isLoading: boolean;
61
72
  }
62
73
  /**
63
74
  * Hook for managing lawful basis documentation for processing activities
64
75
  * in compliance with NDPA 2023 Section 25.
65
76
  */
66
- declare function useLawfulBasis({ initialActivities, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseLawfulBasisOptions): UseLawfulBasisReturn;
77
+ declare function useLawfulBasis({ initialActivities, adapter, storageKey, useLocalStorage, onAdd, onUpdate, onRemove, }?: UseLawfulBasisOptions): UseLawfulBasisReturn;
67
78
 
68
- export { useLawfulBasis as u };
79
+ export { type UseLawfulBasisReturn as U, useLawfulBasis as u };
@@ -1,10 +1,18 @@
1
- import { c as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, R as ROPAComplianceGap } from './ropa-Li6UlL5H.js';
1
+ import { a as RecordOfProcessingActivities, P as ProcessingRecord, R as ROPASummary } from './ropa-BDTM06tr.js';
2
+ import { R as ROPAComplianceGap } from './ropa-CyynscU6.js';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.js';
2
4
 
3
5
  interface UseROPAOptions {
4
6
  /**
5
7
  * Initial ROPA state
6
8
  */
7
9
  initialData: RecordOfProcessingActivities;
10
+ /**
11
+ * Pluggable storage adapter. When provided, adapter data is loaded on mount
12
+ * and the ROPA is persisted after every mutation. Falls back to initialData
13
+ * when no adapter data is found.
14
+ */
15
+ adapter?: StorageAdapter<RecordOfProcessingActivities>;
8
16
  /**
9
17
  * Callback when a record is added
10
18
  */
@@ -51,6 +59,10 @@ interface UseROPAReturn {
51
59
  * Identify compliance gaps across all records
52
60
  */
53
61
  getComplianceGaps: () => ROPAComplianceGap[];
62
+ /**
63
+ * Whether the adapter is still loading data (relevant for async adapters)
64
+ */
65
+ isLoading: boolean;
54
66
  }
55
67
  /**
56
68
  * Hook for managing a Record of Processing Activities (ROPA)
@@ -59,6 +71,6 @@ interface UseROPAReturn {
59
71
  * Provides state management and utility functions for maintaining
60
72
  * a comprehensive register of all data processing activities.
61
73
  */
62
- declare function useROPA({ initialData, onRecordAdd, onRecordUpdate, onRecordArchive, }: UseROPAOptions): UseROPAReturn;
74
+ declare function useROPA({ initialData, adapter, onRecordAdd, onRecordUpdate, onRecordArchive, }: UseROPAOptions): UseROPAReturn;
63
75
 
64
76
  export { type UseROPAOptions as U, type UseROPAReturn as a, useROPA as u };
@@ -1,10 +1,18 @@
1
- import { c as RecordOfProcessingActivities, P as ProcessingRecord, a as ROPASummary, R as ROPAComplianceGap } from './ropa-DP7pPPql.mjs';
1
+ import { a as RecordOfProcessingActivities, P as ProcessingRecord, R as ROPASummary } from './ropa-CFHuT7jE.mjs';
2
+ import { R as ROPAComplianceGap } from './ropa-NIgxd8uP.mjs';
3
+ import { S as StorageAdapter } from './types-DK2CoKOC.mjs';
2
4
 
3
5
  interface UseROPAOptions {
4
6
  /**
5
7
  * Initial ROPA state
6
8
  */
7
9
  initialData: RecordOfProcessingActivities;
10
+ /**
11
+ * Pluggable storage adapter. When provided, adapter data is loaded on mount
12
+ * and the ROPA is persisted after every mutation. Falls back to initialData
13
+ * when no adapter data is found.
14
+ */
15
+ adapter?: StorageAdapter<RecordOfProcessingActivities>;
8
16
  /**
9
17
  * Callback when a record is added
10
18
  */
@@ -51,6 +59,10 @@ interface UseROPAReturn {
51
59
  * Identify compliance gaps across all records
52
60
  */
53
61
  getComplianceGaps: () => ROPAComplianceGap[];
62
+ /**
63
+ * Whether the adapter is still loading data (relevant for async adapters)
64
+ */
65
+ isLoading: boolean;
54
66
  }
55
67
  /**
56
68
  * Hook for managing a Record of Processing Activities (ROPA)
@@ -59,6 +71,6 @@ interface UseROPAReturn {
59
71
  * Provides state management and utility functions for maintaining
60
72
  * a comprehensive register of all data processing activities.
61
73
  */
62
- declare function useROPA({ initialData, onRecordAdd, onRecordUpdate, onRecordArchive, }: UseROPAOptions): UseROPAReturn;
74
+ declare function useROPA({ initialData, adapter, onRecordAdd, onRecordUpdate, onRecordArchive, }: UseROPAOptions): UseROPAReturn;
63
75
 
64
76
  export { type UseROPAOptions as U, type UseROPAReturn as a, useROPA as u };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tantainnovative/ndpr-toolkit",
3
- "version": "2.4.1",
3
+ "version": "3.2.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": [
@@ -91,6 +91,16 @@
91
91
  "import": "./dist/ropa.mjs",
92
92
  "require": "./dist/ropa.js"
93
93
  },
94
+ "./adapters": {
95
+ "types": "./dist/adapters.d.ts",
96
+ "import": "./dist/adapters.mjs",
97
+ "require": "./dist/adapters.js"
98
+ },
99
+ "./presets": {
100
+ "types": "./dist/presets.d.ts",
101
+ "import": "./dist/presets.mjs",
102
+ "require": "./dist/presets.js"
103
+ },
94
104
  "./unstyled": {
95
105
  "types": "./dist/unstyled.d.ts",
96
106
  "import": "./dist/unstyled.mjs",
@@ -134,6 +144,12 @@
134
144
  "ropa": [
135
145
  "./dist/ropa.d.ts"
136
146
  ],
147
+ "adapters": [
148
+ "./dist/adapters.d.ts"
149
+ ],
150
+ "presets": [
151
+ "./dist/presets.d.ts"
152
+ ],
137
153
  "unstyled": [
138
154
  "./dist/unstyled.d.ts"
139
155
  ]
@@ -154,7 +170,6 @@
154
170
  "sideEffects": [
155
171
  "*.css"
156
172
  ],
157
- "dependencies": {},
158
173
  "peerDependencies": {
159
174
  "@radix-ui/react-label": "^2.1.4",
160
175
  "@radix-ui/react-slot": "^1.2.0",
@@ -206,6 +221,7 @@
206
221
  "@radix-ui/react-switch": "^1.2.6",
207
222
  "@radix-ui/react-tabs": "^1.1.13",
208
223
  "@tailwindcss/postcss": "^4.1.13",
224
+ "@testing-library/dom": "^10.4.1",
209
225
  "@testing-library/jest-dom": "^6.6.3",
210
226
  "@testing-library/react": "^16.3.0",
211
227
  "@types/jest": "^29.5.0",
@@ -242,6 +258,9 @@
242
258
  "tw-animate-css": "^1.4.0",
243
259
  "typescript": "^5.0.0"
244
260
  },
261
+ "dependencies": {
262
+ "@phosphor-icons/react": "^2.1.10"
263
+ },
245
264
  "scripts": {
246
265
  "dev": "next dev --turbopack",
247
266
  "build": "next build && node scripts/post-build.js",
@@ -255,6 +274,8 @@
255
274
  "release": "commit-and-tag-version",
256
275
  "release:minor": "commit-and-tag-version --release-as minor",
257
276
  "release:major": "commit-and-tag-version --release-as major",
258
- "release:patch": "commit-and-tag-version --release-as patch"
277
+ "release:patch": "commit-and-tag-version --release-as patch",
278
+ "publish:cli": "cd packages/create-ndpr && npm publish --access public",
279
+ "publish:recipes": "cd packages/ndpr-recipes && npm publish --access public"
259
280
  }
260
281
  }
@@ -1,2 +0,0 @@
1
- import {a,d}from'./chunk-CAB7O3GR.mjs';import {b,a as a$1}from'./chunk-WWT2ZSNU.mjs';import {useState,useEffect}from'react';function O({templates:y,initialPolicy:c,storageKey:f="ndpr_privacy_policy",useLocalStorage:m=true,onGenerate:g}){let[n,u]=useState(c||null),[a$2,p]=useState(null),[d,P]=useState({name:"",website:"",privacyEmail:"",address:"",privacyPhone:"",dpoName:"",dpoEmail:"",industry:""});useEffect(()=>{if(m&&typeof window!="undefined"&&!c)try{let i=localStorage.getItem(f);if(i){let{policy:o,template:e,organizationInfo:t}=JSON.parse(i);if(o&&u(o),e){let s=y.find(x=>x.id===e.id);s&&p(s);}t&&P(t);}}catch(i){console.error("Error loading privacy policy data:",i);}},[f,m,c,y]),useEffect(()=>{if(m&&typeof window!="undefined")try{localStorage.setItem(f,JSON.stringify({policy:n,template:a$2,organizationInfo:d}));}catch(i){console.error("Error saving privacy policy data:",i);}},[n,a$2,d,f,m]);let V=i=>{let o=y.find(s=>s.id===i);if(!o)return false;p(o);o.sections.map(s=>b(a$1({},s),{customContent:void 0}));return Object.keys(o.variables).forEach(s=>{o.variables[s].defaultValue||"";}),true},h=i=>{P(o=>a$1(a$1({},o),i));},w=(i,o)=>{a$2&&(n?u(e=>e&&b(a$1({},e),{sections:e.sections.map(t=>t.id===i?b(a$1({},t),{included:o}):t)})):p(e=>e&&b(a$1({},e),{sections:e.sections.map(t=>t.id===i?b(a$1({},t),{included:o}):t)})));},z=(i,o)=>{a$2&&(n?u(e=>e&&b(a$1({},e),{sections:e.sections.map(t=>t.id===i?b(a$1({},t),{customContent:o}):t)})):p(e=>e&&b(a$1({},e),{sections:e.sections.map(t=>t.id===i?b(a$1({},t),{customContent:o}):t)})));},E=(i,o)=>{n&&u(e=>e&&b(a$1({},e),{variableValues:b(a$1({},e.variableValues),{[i]:o})}));},S=()=>"policy_"+Date.now()+"_"+Math.random().toString(36).substr(2,9);return {policy:n,selectedTemplate:a$2,organizationInfo:d,selectTemplate:V,updateOrganizationInfo:h,toggleSection:w,updateSectionContent:z,updateVariableValue:E,generatePolicy:()=>{if(!a$2)throw new Error("No template selected");let i=Date.now(),o={id:(n==null?void 0:n.id)||S(),title:`Privacy Policy for ${d.name}`,templateId:a$2.id,organizationInfo:d,sections:a$2.sections.map(e=>{var t;return b(a$1({},e),{customContent:(t=n==null?void 0:n.sections.find(s=>s.id===e.id))==null?void 0:t.customContent})}),variableValues:(n==null?void 0:n.variableValues)||{},effectiveDate:i,lastUpdated:i,version:"1.0"};return u(o),g&&g(o),o},getPolicyText:()=>{if(!n)return {fullText:"",sectionTexts:{},missingVariables:[]};let i=a(n.sections,n.organizationInfo);return typeof i=="string"?{fullText:i,sectionTexts:{full:i},missingVariables:[]}:i},resetPolicy:()=>{u(null),p(null),P({name:"",website:"",privacyEmail:"",address:"",privacyPhone:"",dpoName:"",dpoEmail:"",industry:""}),m&&typeof window!="undefined"&&localStorage.removeItem(f);},isValid:()=>{let i=[];if(a$2||i.push("No template selected"),d.name||i.push("Organization name is required"),d.website||i.push("Organization website is required"),d.privacyEmail||i.push("Privacy contact email is required"),a$2){let o=a$2.sections.filter(t=>t.required),e=(n==null?void 0:n.sections.filter(t=>t.included))||[];o.forEach(t=>{e.some(s=>s.id===t.id)||i.push(`Required section "${t.title}" must be included`);});}return a$2&&n&&Object.entries(a$2.variables).forEach(([o,e])=>{e.required&&!n.variableValues[o]&&i.push(`Required variable "${e.name}" must have a value`);}),{valid:i.length===0,errors:i}}}}function J(y={}){let{orgInfo:c,storageKey:f,useLocalStorage:m}=y,{sections:g,variables:n}=d();if(c)for(let a of n)c.name&&a.name==="orgName"&&(a.value=c.name),c.email&&a.name==="privacyEmail"&&(a.value=c.email),c.dpoName&&a.name==="dpoName"&&(a.value=c.dpoName);let u={id:"default-business",name:"Default Business Policy",description:"NDPA-compliant privacy policy template for businesses.",organizationType:"business",sections:g,variables:Object.fromEntries(n.map(a=>[a.name,{name:a.name,description:a.description,required:a.required,defaultValue:a.value||void 0}])),version:"1.0",lastUpdated:Date.now(),ndpaCompliant:true};return O({templates:[u],storageKey:f,useLocalStorage:m})}export{O as a,J as b};//# sourceMappingURL=chunk-2XFAV267.mjs.map
2
- //# sourceMappingURL=chunk-2XFAV267.mjs.map