@tantainnovative/ndpr-toolkit 3.5.1 → 3.6.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 (199) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/README.md +29 -8
  3. package/dist/adapters.d.mts +137 -3
  4. package/dist/adapters.d.ts +137 -3
  5. package/dist/adapters.js +1 -2
  6. package/dist/adapters.mjs +1 -2
  7. package/dist/breach.d.mts +80 -1
  8. package/dist/breach.d.ts +80 -1
  9. package/dist/breach.js +1 -2
  10. package/dist/breach.mjs +1 -2
  11. package/dist/{chunk-PATONNTZ.mjs → chunk-3HOXQNCH.mjs} +1 -2
  12. package/dist/{chunk-MJGOLP5M.js → chunk-3IA3KDII.js} +1 -2
  13. package/dist/{chunk-M2TPT5GB.js → chunk-3JPDTXGC.js} +1 -2
  14. package/dist/{chunk-BKRETVJ6.js → chunk-3YTAOT5O.js} +1 -2
  15. package/dist/{chunk-GOU6FU6Y.js → chunk-4CVBQC66.js} +1 -2
  16. package/dist/{chunk-E4NCJ7RD.mjs → chunk-4G3SRVRI.mjs} +1 -2
  17. package/dist/{chunk-6QPRDQZF.js → chunk-4QXTB3L6.js} +1 -2
  18. package/dist/{chunk-XNSZ7KUH.js → chunk-5GVMKUMP.js} +1 -2
  19. package/dist/chunk-66NQ5CVY.mjs +1 -0
  20. package/dist/chunk-732C2EVN.js +1 -0
  21. package/dist/chunk-7BJXI2HI.mjs +1 -0
  22. package/dist/{chunk-C5QO3SX4.js → chunk-7IFSWCQP.js} +1 -2
  23. package/dist/{chunk-A4PK7JB2.js → chunk-7ZZO7GVB.js} +1 -2
  24. package/dist/chunk-AME4HJR4.js +1 -0
  25. package/dist/chunk-AOHKVFAS.mjs +322 -0
  26. package/dist/{chunk-HO5M7M4M.js → chunk-B46SJB5V.js} +1 -2
  27. package/dist/chunk-BFAX7JQA.mjs +1 -0
  28. package/dist/{chunk-ID2NYIVE.mjs → chunk-BNHQFZHL.mjs} +2 -3
  29. package/dist/{chunk-RLYTX3MM.js → chunk-BRS52EDT.js} +1 -2
  30. package/dist/{chunk-OPYQIJKY.js → chunk-C7IDR2IV.js} +1 -2
  31. package/dist/{chunk-CISJAQ6W.mjs → chunk-COD3RMTL.mjs} +1 -2
  32. package/dist/chunk-CR2QZTGW.js +1 -0
  33. package/dist/{chunk-6WIP33TW.mjs → chunk-DBZSN4WP.mjs} +1 -2
  34. package/dist/{chunk-74Z23WUA.mjs → chunk-EEQALYOY.mjs} +1 -2
  35. package/dist/chunk-EFIBHKQE.mjs +1 -0
  36. package/dist/{chunk-GKKAK6ES.mjs → chunk-EWVK45Z3.mjs} +1 -2
  37. package/dist/{chunk-QSVVAZVT.mjs → chunk-EXEXUAF6.mjs} +1 -2
  38. package/dist/chunk-EZCGTHQV.js +6 -0
  39. package/dist/{chunk-SYMQJO2W.mjs → chunk-GTYXVAJX.mjs} +2 -3
  40. package/dist/{chunk-6FGCGLH5.mjs → chunk-H3XJV2IR.mjs} +1 -2
  41. package/dist/chunk-HBLGN4SD.js +1 -0
  42. package/dist/{chunk-MCWV7S2G.js → chunk-HHK5LHEG.js} +1 -2
  43. package/dist/{chunk-XHROISIF.mjs → chunk-HWHBINVN.mjs} +1 -2
  44. package/dist/{chunk-3EGQWLJ6.js → chunk-I2LMQWK3.js} +2 -3
  45. package/dist/{chunk-NQNFS3QI.js → chunk-I3Y4LOSL.js} +4 -5
  46. package/dist/chunk-ITCY2Z66.mjs +4 -0
  47. package/dist/{chunk-Z6IIMLZU.mjs → chunk-KDAZQO3N.mjs} +1 -2
  48. package/dist/{chunk-J5WCPZLW.js → chunk-L2BRFMVS.js} +1 -2
  49. package/dist/chunk-L2VO3MEJ.js +1 -0
  50. package/dist/{chunk-R5FW5XUQ.mjs → chunk-LQTARVPU.mjs} +1 -2
  51. package/dist/{chunk-6TA2MVTU.mjs → chunk-LRRENTT5.mjs} +1 -2
  52. package/dist/chunk-LTPSN2SU.mjs +1 -0
  53. package/dist/{chunk-LIM64IV2.js → chunk-LVGT3DLT.js} +2 -3
  54. package/dist/{chunk-TXBZPCGF.mjs → chunk-LWIKDDSU.mjs} +1 -2
  55. package/dist/chunk-MPBPAEZC.mjs +1 -0
  56. package/dist/{chunk-Z73T6MWY.js → chunk-N3MQQUQP.js} +39 -35
  57. package/dist/{chunk-HGGLW5TE.js → chunk-NUWVPRNI.js} +1 -2
  58. package/dist/chunk-O45PKBZA.mjs +6 -0
  59. package/dist/chunk-O6CUBNXK.mjs +3 -0
  60. package/dist/{chunk-7SMLHZ4B.js → chunk-P4LNLCSF.js} +1 -2
  61. package/dist/{chunk-VWPGIES4.mjs → chunk-PCU6GKBE.mjs} +1 -2
  62. package/dist/chunk-PGI2LM6P.js +103 -0
  63. package/dist/{chunk-U62QYKVG.mjs → chunk-PJNKQPQP.mjs} +1 -2
  64. package/dist/chunk-PL4XNCQA.mjs +1 -0
  65. package/dist/{chunk-LSNL4XR5.js → chunk-PZRQWPWD.js} +1 -2
  66. package/dist/chunk-Q64735OC.js +144 -0
  67. package/dist/chunk-QPRYXVH2.js +1 -0
  68. package/dist/{chunk-MQFZHA2D.js → chunk-RFPLZDIO.js} +1 -2
  69. package/dist/chunk-RMQ7OLNY.mjs +144 -0
  70. package/dist/chunk-ROTLSZMV.js +1 -0
  71. package/dist/{chunk-2AW7KAZO.mjs → chunk-RPXRPGHL.mjs} +1 -2
  72. package/dist/chunk-RV2VMWZJ.mjs +1 -0
  73. package/dist/chunk-RXZFYBUJ.js +1 -0
  74. package/dist/chunk-RYREGZVQ.js +1 -0
  75. package/dist/{chunk-B4Z5MBUC.mjs → chunk-RZ6GC6WN.mjs} +1 -2
  76. package/dist/chunk-S6COXIZA.js +2 -0
  77. package/dist/chunk-SFGW37LE.mjs +1 -0
  78. package/dist/{chunk-3NQQSU4P.js → chunk-SJDDNB6M.js} +1 -2
  79. package/dist/chunk-SJRIOZ4K.mjs +1 -0
  80. package/dist/{chunk-H3EYBSVP.mjs → chunk-TMXK4QKK.mjs} +2 -3
  81. package/dist/{chunk-P42Z5CFE.js → chunk-TQZWJGJ2.js} +1 -2
  82. package/dist/{chunk-EPT2K355.mjs → chunk-U5RWJRGA.mjs} +1 -2
  83. package/dist/{chunk-R3OYAJI6.mjs → chunk-UASG46LP.mjs} +1 -2
  84. package/dist/{chunk-RXL6CZAI.js → chunk-UAV7V4EM.js} +1 -2
  85. package/dist/chunk-UI536RU2.js +3 -0
  86. package/dist/{chunk-7AVN424U.js → chunk-UTFBKL73.js} +1 -2
  87. package/dist/{chunk-I54CDQGN.js → chunk-UXUMYP4L.js} +1 -2
  88. package/dist/chunk-V3RYHNHN.js +1 -0
  89. package/dist/{chunk-P3PULLYP.mjs → chunk-V7UFP6QU.mjs} +1 -2
  90. package/dist/{chunk-I4M2AA3N.js → chunk-VJTQXVAF.js} +1 -2
  91. package/dist/{chunk-ELKB2AFZ.js → chunk-VWED6UTN.js} +1 -2
  92. package/dist/{chunk-LU7PKE7Y.mjs → chunk-VYAL2TGT.mjs} +1 -2
  93. package/dist/chunk-W47OSMT6.js +2 -0
  94. package/dist/chunk-W65ZWTLD.mjs +1 -0
  95. package/dist/chunk-W7RBGZCC.js +1 -0
  96. package/dist/{chunk-5HL4UBFV.js → chunk-WDDCKYWA.js} +1 -2
  97. package/dist/{chunk-DJGS7SSN.mjs → chunk-WTGKZX7J.mjs} +1 -2
  98. package/dist/{chunk-TDDAYVKK.js → chunk-WZYCBW2R.js} +1 -2
  99. package/dist/chunk-X3GCGC3H.mjs +103 -0
  100. package/dist/chunk-XJO4DH3L.mjs +2 -0
  101. package/dist/{chunk-LWXZMKC2.js → chunk-XO3VQYTL.js} +7 -8
  102. package/dist/{chunk-IZCWCE7W.mjs → chunk-XOH4WXOZ.mjs} +1 -2
  103. package/dist/{chunk-SHMJNRHO.mjs → chunk-XP5PL6K7.mjs} +1 -2
  104. package/dist/{chunk-CKGJK4D7.mjs → chunk-Y3MKMAFQ.mjs} +2 -3
  105. package/dist/chunk-YFBDJ4FH.js +1 -0
  106. package/dist/chunk-YTU4FNM2.mjs +1 -0
  107. package/dist/{chunk-TV4U6AIS.js → chunk-Z763UI5U.js} +1 -2
  108. package/dist/chunk-ZHFLBL63.mjs +2 -0
  109. package/dist/{chunk-RRVKUCFR.mjs → chunk-ZIZL37BG.mjs} +1 -2
  110. package/dist/{chunk-WWT2ZSNU.mjs → chunk-ZJYULEER.mjs} +1 -2
  111. package/dist/{chunk-LJNNPAFU.mjs → chunk-ZQZJNKVB.mjs} +1 -2
  112. package/dist/chunk-ZVOIR4QH.js +4 -0
  113. package/dist/consent.js +1 -2
  114. package/dist/consent.mjs +1 -2
  115. package/dist/core.d.mts +98 -19
  116. package/dist/core.d.ts +98 -19
  117. package/dist/core.js +1 -2
  118. package/dist/core.mjs +1 -2
  119. package/dist/cross-border.d.mts +36 -14
  120. package/dist/cross-border.d.ts +36 -14
  121. package/dist/cross-border.js +1 -2
  122. package/dist/cross-border.mjs +1 -2
  123. package/dist/dpia.d.mts +4 -4
  124. package/dist/dpia.d.ts +4 -4
  125. package/dist/dpia.js +1 -2
  126. package/dist/dpia.mjs +1 -2
  127. package/dist/dsr.d.mts +30 -17
  128. package/dist/dsr.d.ts +30 -17
  129. package/dist/dsr.js +1 -2
  130. package/dist/dsr.mjs +1 -2
  131. package/dist/hooks.d.mts +113 -20
  132. package/dist/hooks.d.ts +113 -20
  133. package/dist/hooks.js +1 -2
  134. package/dist/hooks.mjs +1 -2
  135. package/dist/index.d.mts +422 -26
  136. package/dist/index.d.ts +422 -26
  137. package/dist/index.js +1 -2
  138. package/dist/index.mjs +1 -2
  139. package/dist/lawful-basis.js +1 -2
  140. package/dist/lawful-basis.mjs +1 -2
  141. package/dist/policy.js +1 -2
  142. package/dist/policy.mjs +1 -2
  143. package/dist/presets-consent.d.mts +139 -0
  144. package/dist/presets-consent.d.ts +139 -0
  145. package/dist/presets-consent.js +2 -0
  146. package/dist/presets-consent.mjs +2 -0
  147. package/dist/presets-dsr.d.mts +133 -0
  148. package/dist/presets-dsr.d.ts +133 -0
  149. package/dist/presets-dsr.js +2 -0
  150. package/dist/presets-dsr.mjs +2 -0
  151. package/dist/presets-policy.d.mts +203 -0
  152. package/dist/presets-policy.d.ts +203 -0
  153. package/dist/presets-policy.js +2 -0
  154. package/dist/presets-policy.mjs +2 -0
  155. package/dist/presets.d.mts +127 -5
  156. package/dist/presets.d.ts +127 -5
  157. package/dist/presets.js +1 -2
  158. package/dist/presets.mjs +1 -2
  159. package/dist/ropa.js +1 -2
  160. package/dist/ropa.mjs +1 -2
  161. package/dist/server.d.mts +226 -22
  162. package/dist/server.d.ts +226 -22
  163. package/dist/server.js +1 -2
  164. package/dist/server.mjs +1 -2
  165. package/dist/styles.css +34 -0
  166. package/dist/unstyled.d.mts +3 -1
  167. package/dist/unstyled.d.ts +3 -1
  168. package/dist/unstyled.js +1 -2
  169. package/dist/unstyled.mjs +1 -2
  170. package/package.json +83 -20
  171. package/dist/chunk-3VQAYQR7.js +0 -7
  172. package/dist/chunk-6HZL2WDU.mjs +0 -2
  173. package/dist/chunk-75TJPK2N.mjs +0 -2
  174. package/dist/chunk-ABDB7LEV.mjs +0 -2
  175. package/dist/chunk-AYKLAEOU.mjs +0 -2
  176. package/dist/chunk-C4YM4UMI.js +0 -2
  177. package/dist/chunk-CKJAECGV.js +0 -2
  178. package/dist/chunk-CPK5D5FY.js +0 -132
  179. package/dist/chunk-CWHBCQGT.mjs +0 -2
  180. package/dist/chunk-E64TU6IU.js +0 -2
  181. package/dist/chunk-F5TXUA4O.mjs +0 -4
  182. package/dist/chunk-GN5C32JB.mjs +0 -2
  183. package/dist/chunk-GRLIPT5V.mjs +0 -132
  184. package/dist/chunk-I557S566.mjs +0 -15
  185. package/dist/chunk-JBSCER34.js +0 -2
  186. package/dist/chunk-JFFOPHU3.mjs +0 -318
  187. package/dist/chunk-KF3EFJEF.mjs +0 -3
  188. package/dist/chunk-ORFC66EA.js +0 -4
  189. package/dist/chunk-RY3PGVLZ.mjs +0 -2
  190. package/dist/chunk-S4GRSNB4.js +0 -2
  191. package/dist/chunk-SCWNM4PC.mjs +0 -2
  192. package/dist/chunk-SKKOMFXH.js +0 -81
  193. package/dist/chunk-TCN22KYP.mjs +0 -7
  194. package/dist/chunk-TUNQUVHU.mjs +0 -81
  195. package/dist/chunk-VIQUXWJC.js +0 -2
  196. package/dist/chunk-WTJGLNTB.js +0 -3
  197. package/dist/chunk-XIM7KMD6.js +0 -2
  198. package/dist/chunk-YPKUHSK4.js +0 -15
  199. package/dist/chunk-ZPKVLTSX.js +0 -2
@@ -0,0 +1 @@
1
+ var n={AT:{country:"Austria",isoCode:"AT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},BE:{country:"Belgium",isoCode:"BE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},BG:{country:"Bulgaria",isoCode:"BG",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},HR:{country:"Croatia",isoCode:"HR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},CY:{country:"Cyprus",isoCode:"CY",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},CZ:{country:"Czech Republic",isoCode:"CZ",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},DK:{country:"Denmark",isoCode:"DK",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},EE:{country:"Estonia",isoCode:"EE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},FI:{country:"Finland",isoCode:"FI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},FR:{country:"France",isoCode:"FR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},DE:{country:"Germany",isoCode:"DE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR with additional national provisions (BDSG).",lastUpdated:"2024-01-01"},GR:{country:"Greece",isoCode:"GR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},HU:{country:"Hungary",isoCode:"HU",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},IE:{country:"Ireland",isoCode:"IE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR. Hosts many multinational data processors.",lastUpdated:"2024-01-01"},IT:{country:"Italy",isoCode:"IT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LV:{country:"Latvia",isoCode:"LV",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LT:{country:"Lithuania",isoCode:"LT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},LU:{country:"Luxembourg",isoCode:"LU",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},MT:{country:"Malta",isoCode:"MT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},NL:{country:"Netherlands",isoCode:"NL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},PL:{country:"Poland",isoCode:"PL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},PT:{country:"Portugal",isoCode:"PT",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},RO:{country:"Romania",isoCode:"RO",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SK:{country:"Slovakia",isoCode:"SK",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SI:{country:"Slovenia",isoCode:"SI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},ES:{country:"Spain",isoCode:"ES",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},SE:{country:"Sweden",isoCode:"SE",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EU member state; protected by GDPR.",lastUpdated:"2024-01-01"},IS:{country:"Iceland",isoCode:"IS",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},LI:{country:"Liechtenstein",isoCode:"LI",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},NO:{country:"Norway",isoCode:"NO",adequacyStatus:"adequate",recognizedBy:"EU",notes:"EEA member; GDPR applies through EEA Agreement.",lastUpdated:"2024-01-01"},GB:{country:"United Kingdom",isoCode:"GB",adequacyStatus:"adequate",recognizedBy:"self-assessment",notes:"Protected by UK GDPR and the Data Protection Act 2018. EU adequacy decision granted post-Brexit.",lastUpdated:"2024-01-01"},US:{country:"United States",isoCode:"US",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"No comprehensive federal data protection law. Adequacy depends on transfer mechanism used (e.g. EU-US Data Privacy Framework, standard contractual clauses). Sector-specific laws exist (HIPAA, CCPA, etc.).",lastUpdated:"2024-01-01"},CA:{country:"Canada",isoCode:"CA",adequacyStatus:"adequate",recognizedBy:"self-assessment",notes:"Protected by PIPEDA (Personal Information Protection and Electronic Documents Act) and provincial privacy laws. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},ZA:{country:"South Africa",isoCode:"ZA",adequacyStatus:"adequate",recognizedBy:"self-assessment",notes:"Protected by POPIA (Protection of Personal Information Act, 2013). Comprehensive data protection framework with an independent Information Regulator.",lastUpdated:"2024-01-01"},GH:{country:"Ghana",isoCode:"GH",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Data Protection Act 2012 (Act 843) establishes a data protection framework. Enforcement capacity is still developing.",lastUpdated:"2024-01-01"},KE:{country:"Kenya",isoCode:"KE",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Data Protection Act 2019 provides a modern framework. The Office of the Data Protection Commissioner is operational but still maturing.",lastUpdated:"2024-01-01"},RW:{country:"Rwanda",isoCode:"RW",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Law No. 058/2021 on the Protection of Personal Data and Privacy. Framework is relatively new.",lastUpdated:"2024-01-01"},EG:{country:"Egypt",isoCode:"EG",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Personal Data Protection Law No. 151 of 2020. Implementation and enforcement are still in early stages.",lastUpdated:"2024-01-01"},TZ:{country:"Tanzania",isoCode:"TZ",adequacyStatus:"not_adequate",recognizedBy:"self-assessment",notes:"No comprehensive data protection legislation in force.",lastUpdated:"2024-01-01"},UG:{country:"Uganda",isoCode:"UG",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Data Protection and Privacy Act 2019 provides a framework, but enforcement capacity is limited.",lastUpdated:"2024-01-01"},SN:{country:"Senegal",isoCode:"SN",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Law No. 2008-12 on the Protection of Personal Data. One of the earlier African data protection laws.",lastUpdated:"2024-01-01"},MA:{country:"Morocco",isoCode:"MA",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Law No. 09-08 on the Protection of Individuals with Regard to the Processing of Personal Data (2009). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},MU:{country:"Mauritius",isoCode:"MU",adequacyStatus:"adequate",recognizedBy:"self-assessment",notes:"Data Protection Act 2017 provides a comprehensive framework modelled on international standards.",lastUpdated:"2024-01-01"},CN:{country:"China",isoCode:"CN",adequacyStatus:"not_adequate",recognizedBy:"self-assessment",notes:"Personal Information Protection Law (PIPL) enacted in 2021 but government access provisions and limited independent oversight raise concerns. Transfers require security assessments or standard contracts.",lastUpdated:"2024-01-01"},IN:{country:"India",isoCode:"IN",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Digital Personal Data Protection Act 2023 enacted. Implementation rules and enforcement mechanisms are still being finalized.",lastUpdated:"2024-01-01"},SG:{country:"Singapore",isoCode:"SG",adequacyStatus:"adequate",recognizedBy:"self-assessment",notes:"Personal Data Protection Act 2012 (PDPA) provides a robust framework. Strong enforcement by the PDPC.",lastUpdated:"2024-01-01"},JP:{country:"Japan",isoCode:"JP",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Act on the Protection of Personal Information (APPI). Recognized as adequate by the EU under mutual adequacy arrangement.",lastUpdated:"2024-01-01"},KR:{country:"South Korea",isoCode:"KR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Personal Information Protection Act (PIPA). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},AE:{country:"United Arab Emirates",isoCode:"AE",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Federal Decree-Law No. 45 of 2021 on Personal Data Protection. DIFC and ADGM free zones have their own data protection regulations with stronger frameworks.",lastUpdated:"2024-01-01"},SA:{country:"Saudi Arabia",isoCode:"SA",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Personal Data Protection Law (Royal Decree M/19, 2021). Framework is new and enforcement is still developing.",lastUpdated:"2024-01-01"},IL:{country:"Israel",isoCode:"IL",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Protection of Privacy Law 5741-1981 and regulations. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},BR:{country:"Brazil",isoCode:"BR",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Lei Geral de Protecao de Dados (LGPD, 2020) provides a comprehensive framework. The ANPD is actively enforcing.",lastUpdated:"2024-01-01"},AR:{country:"Argentina",isoCode:"AR",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Personal Data Protection Act No. 25,326. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},AU:{country:"Australia",isoCode:"AU",adequacyStatus:"partially_adequate",recognizedBy:"self-assessment",notes:"Privacy Act 1988 provides protection but does not fully align with GDPR-level standards. Reform efforts are ongoing.",lastUpdated:"2024-01-01"},NZ:{country:"New Zealand",isoCode:"NZ",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Privacy Act 2020 provides a comprehensive framework. Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},CH:{country:"Switzerland",isoCode:"CH",adequacyStatus:"adequate",recognizedBy:"EU",notes:"Federal Act on Data Protection (FADP, revised 2023). Recognized as adequate by the EU.",lastUpdated:"2024-01-01"},RU:{country:"Russia",isoCode:"RU",adequacyStatus:"not_adequate",recognizedBy:"self-assessment",notes:"Federal Law on Personal Data (No. 152-FZ). Data localization requirements and government access concerns.",lastUpdated:"2024-01-01"}};function y(e){let t=e.trim().toUpperCase();if(n[t])return n[t];let a=e.trim().toLowerCase();for(let s of Object.values(n))if(s.country.toLowerCase()===a)return s}function q(){return Object.values(n).filter(e=>e.adequacyStatus==="adequate")}function g(e){let t=y(e);return t?t.adequacyStatus!=="adequate":true}function u(e){return e==="standard_clauses"||e==="binding_corporate_rules"||e==="ndpc_authorization"}function f(e){return {adequacy_decision:"Adequacy Decision (NDPA Section 42) \u2014 Transfer to a country, region, or specified sector that the NDPC has determined provides an adequate level of data protection.",standard_clauses:"Standard Contractual Clauses (NDPA Section 41(1)(a)) \u2014 Transfer based on contractual clauses that afford adequate protection. The NDPC may approve such clauses under Section 42(4)\u2013(5).",binding_corporate_rules:"Binding Corporate Rules (NDPA Section 41(1)(a)) \u2014 Transfer within a group of undertakings based on binding corporate rules that afford adequate protection. The NDPC may approve BCRs under Section 42(5).",ndpc_authorization:"NDPC-Approved Instrument (NDPA Section 42(5)) \u2014 Transfer authorized by an NDPC-approved code of conduct, certification mechanism, or similar instrument that meets the protection standards of the Act.",explicit_consent:"Explicit Consent (NDPA Section 43(1)(a)) \u2014 Transfer based on the consent of the data subject after being informed of the possible risks due to the absence of adequate protections.",contract_performance:"Contract Performance (NDPA Section 43(1)(b)) \u2014 Transfer necessary for the performance of a contract to which the data subject is a party, or for pre-contractual steps at the data subject's request.",public_interest:"Public Interest (NDPA Section 43(1)(d)) \u2014 Transfer necessary for important reasons of public interest.",legal_claims:"Legal Claims (NDPA Section 43(1)(e)) \u2014 Transfer necessary for the establishment, exercise, or defense of legal claims.",vital_interests:"Vital Interests (NDPA Section 43(1)(f)) \u2014 Transfer necessary to protect the vital interests of a data subject or of other persons where the data subject is physically or legally incapable of giving consent."}[e]}function U(e){var s,r;let t=[],a=[];return e.id||t.push("Transfer ID is required."),(!e.destinationCountry||e.destinationCountry.trim()==="")&&t.push("Destination country is required."),(!e.recipientOrganization||e.recipientOrganization.trim()==="")&&t.push("Recipient organization is required."),(!((s=e.recipientContact)!=null&&s.name)||e.recipientContact.name.trim()==="")&&t.push("Recipient contact name is required."),(!((r=e.recipientContact)!=null&&r.email)||e.recipientContact.email.trim()==="")&&t.push("Recipient contact email is required."),(!e.purpose||e.purpose.trim()==="")&&t.push("Purpose of the transfer is required."),e.transferMechanism||t.push("Transfer mechanism is required."),(!e.dataCategories||e.dataCategories.length===0)&&t.push("At least one data category must be specified."),(!e.riskAssessment||e.riskAssessment.trim()==="")&&t.push("Risk assessment summary is required."),(!e.safeguards||e.safeguards.length===0)&&t.push("At least one safeguard must be documented for the transfer."),u(e.transferMechanism)&&(e.ndpcApproval?(e.ndpcApproval.required||a.push("NDPC approval is marked as not required, but the selected transfer mechanism requires NDPC approval."),e.ndpcApproval.required&&!e.ndpcApproval.applied&&t.push("NDPC approval is required but an application has not been submitted."),e.ndpcApproval.applied&&!e.ndpcApproval.approved&&e.status==="active"&&t.push('Transfer is marked as active but NDPC approval has not been granted. Status should be "pending_approval".')):t.push(`NDPC approval documentation is required for transfers using ${l(e.transferMechanism)}.`)),e.tiaCompleted||a.push("A Transfer Impact Assessment (TIA) has not been completed for this transfer."),e.adequacyStatus==="inadequate"&&e.transferMechanism==="adequacy_decision"&&t.push("Cannot rely on adequacy decision (Section 42) when the destination country is marked as inadequate."),e.endDate&&e.startDate>e.endDate&&t.push("Start date must be before end date."),e.includesSensitiveData&&e.riskLevel!=="high"&&a.push("Transfer includes sensitive personal data but the risk level is not set to high. Consider reviewing the risk assessment."),e.reviewDate||a.push("No review date has been set for this transfer. Periodic reviews are recommended."),{isValid:t.length===0,errors:t,warnings:a}}function b(e){var d,c;let t=[],a=[],s=0,p={adequate:0,pending_review:2,unknown:3,inadequate:4}[e.adequacyStatus];s+=p,e.adequacyStatus==="inadequate"?(t.push("Destination country does not have an adequate level of data protection."),a.push("Implement supplementary technical and organizational measures.")):e.adequacyStatus==="unknown"?(t.push("Data protection adequacy of the destination country has not been assessed."),a.push("Conduct an adequacy assessment of the destination country.")):e.adequacyStatus==="pending_review"&&(t.push("Destination country adequacy is currently under review."),a.push("Monitor the adequacy review outcome and plan for contingencies."));let i={adequacy_decision:0,standard_clauses:1,binding_corporate_rules:1,ndpc_authorization:1,contract_performance:2,explicit_consent:2,legal_claims:2,public_interest:2,vital_interests:3}[e.transferMechanism];s+=i,i>=2&&(t.push(`Transfer relies on a derogation mechanism (${l(e.transferMechanism)}), which provides fewer structural safeguards.`),a.push("Consider whether a stronger transfer mechanism (adequacy decision, standard clauses, or BCRs) could be used instead.")),e.includesSensitiveData&&(s+=3,t.push("Transfer includes sensitive personal data, increasing the potential impact of unauthorized access."),a.push("Ensure encryption in transit and at rest, and apply strict access controls.")),e.estimatedDataSubjects&&e.estimatedDataSubjects>1e4?(s+=2,t.push("Large number of data subjects involved increases the scope of potential harm."),a.push("Consider data minimization strategies and ensure robust incident response procedures.")):e.estimatedDataSubjects&&e.estimatedDataSubjects>1e3&&(s+=1,t.push("Moderate number of data subjects involved.")),e.tiaCompleted||(s+=2,t.push("Transfer Impact Assessment has not been completed."),a.push("Complete a Transfer Impact Assessment before proceeding with the transfer.")),u(e.transferMechanism)&&((d=e.ndpcApproval)!=null&&d.approved||(s+=2,t.push("NDPC approval is required but has not been granted."),a.push("Obtain NDPC approval before activating the transfer."))),(((c=e.safeguards)==null?void 0:c.length)||0)<3&&(s+=1,t.push("Limited number of safeguards documented."),a.push("Document additional technical, organizational, and contractual safeguards.")),e.frequency==="continuous"&&(s+=1,t.push("Continuous data transfer increases exposure window."),a.push("Implement real-time monitoring and anomaly detection for the transfer."));let o;return s<=4?o="low":s<=9?o="medium":o="high",{riskLevel:o,riskScore:s,factors:t,recommendations:a}}function l(e){return {adequacy_decision:"Adequacy Decision",standard_clauses:"Standard Contractual Clauses",binding_corporate_rules:"Binding Corporate Rules",ndpc_authorization:"NDPC Authorization",explicit_consent:"Explicit Consent",contract_performance:"Contract Performance",public_interest:"Public Interest",legal_claims:"Legal Claims",vital_interests:"Vital Interests"}[e]}export{n as a,y as b,q as c,g as d,u as e,f,U as g,b as h};
@@ -1,2 +1 @@
1
- 'use strict';var chunkMQFZHA2D_js=require('./chunk-MQFZHA2D.js');var i={consent:{title:"We Value Your Privacy",description:"We use cookies and similar technologies to provide our services and enhance your experience. Your consent is collected in accordance with NDPA Sections 25-26.",acceptAll:"Accept All",rejectAll:"Reject All",customize:"Customize",savePreferences:"Save Preferences",selectAll:"Select All",deselectAll:"Deselect All",required:"Required",cookieNotice:'By clicking "Accept All", you agree to the use of ALL cookies. Visit our Cookie Policy to learn more.'},dsr:{title:"Submit a Data Subject Request",description:"Use this form to exercise your rights under the Nigeria Data Protection Act (NDPA), Part IV, Sections 29-36.",submitRequest:"Submit Request",reset:"Reset",fullName:"Full Name",email:"Email Address",phone:"Phone Number (Optional)",requestType:"Request Type",additionalInfo:"Additional Information",identityVerification:"Identity Verification",identifierType:"Identifier Type",identifierValue:"Identifier Value",privacyNotice:"The information you provide in this form will be used solely for the purpose of processing your data subject request.",successMessage:"Your request has been submitted successfully."},breach:{title:"Report a Data Breach",description:"Use this form to report a suspected or confirmed data breach in accordance with NDPA Section 40.",submitReport:"Submit Report",breachTitle:"Breach Title/Summary",category:"Category",discoveredAt:"Date Discovered",detailedDescription:"Detailed Description"},dpia:{title:"Data Protection Impact Assessment",next:"Next",previous:"Previous",complete:"Complete Assessment",progress:"Progress"},policy:{title:"Privacy Policy Generator",generate:"Generate Policy",preview:"Preview",export:"Export",sections:"Sections",variables:"Variables"},compliance:{score:"Compliance Score",excellent:"Excellent",good:"Good",needsWork:"Needs Work",critical:"Critical",recommendations:"Recommendations",passed:"Passed",gaps:"Gaps"},common:{loading:"Loading...",error:"An error occurred",save:"Save",cancel:"Cancel",delete:"Delete",edit:"Edit",add:"Add",back:"Back",next:"Next",search:"Search",noResults:"No results found"}};function a(e){if(!e)return i;let r=chunkMQFZHA2D_js.a({},i);for(let t of Object.keys(e))e[t]&&(r[t]=chunkMQFZHA2D_js.a(chunkMQFZHA2D_js.a({},i[t]),e[t]));return r}exports.a=i;exports.b=a;//# sourceMappingURL=chunk-C5QO3SX4.js.map
2
- //# sourceMappingURL=chunk-C5QO3SX4.js.map
1
+ 'use strict';var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js');var i={consent:{title:"We Value Your Privacy",description:"We use cookies and similar technologies to provide our services and enhance your experience. Your consent is collected in accordance with NDPA Sections 25-26.",acceptAll:"Accept All",rejectAll:"Reject All",customize:"Customize",savePreferences:"Save Preferences",selectAll:"Select All",deselectAll:"Deselect All",required:"Required",cookieNotice:'By clicking "Accept All", you agree to the use of ALL cookies. Visit our Cookie Policy to learn more.'},dsr:{title:"Submit a Data Subject Request",description:"Use this form to exercise your rights under the Nigeria Data Protection Act (NDPA), Part IV, Sections 29-36.",submitRequest:"Submit Request",reset:"Reset",fullName:"Full Name",email:"Email Address",phone:"Phone Number (Optional)",requestType:"Request Type",additionalInfo:"Additional Information",identityVerification:"Identity Verification",identifierType:"Identifier Type",identifierValue:"Identifier Value",privacyNotice:"The information you provide in this form will be used solely for the purpose of processing your data subject request.",successMessage:"Your request has been submitted successfully."},breach:{title:"Report a Data Breach",description:"Use this form to report a suspected or confirmed data breach in accordance with NDPA Section 40.",submitReport:"Submit Report",breachTitle:"Breach Title/Summary",category:"Category",discoveredAt:"Date Discovered",detailedDescription:"Detailed Description"},dpia:{title:"Data Protection Impact Assessment",next:"Next",previous:"Previous",complete:"Complete Assessment",progress:"Progress"},policy:{title:"Privacy Policy Generator",generate:"Generate Policy",preview:"Preview",export:"Export",sections:"Sections",variables:"Variables"},compliance:{score:"Compliance Score",excellent:"Excellent",good:"Good",needsWork:"Needs Work",critical:"Critical",recommendations:"Recommendations",passed:"Passed",gaps:"Gaps"},common:{loading:"Loading...",error:"An error occurred",save:"Save",cancel:"Cancel",delete:"Delete",edit:"Edit",add:"Add",back:"Back",next:"Next",search:"Search",noResults:"No results found"}};function a(e){if(!e)return i;let r=chunkRFPLZDIO_js.a({},i);for(let t of Object.keys(e))e[t]&&(r[t]=chunkRFPLZDIO_js.a(chunkRFPLZDIO_js.a({},i[t]),e[t]));return r}exports.a=i;exports.b=a;
@@ -1,2 +1 @@
1
- 'use strict';function p(t){return {load(){if(typeof window=="undefined")return null;try{let e=sessionStorage.getItem(t);return e?JSON.parse(e):null}catch(e){return null}},save(e){if(typeof window!="undefined")try{sessionStorage.setItem(t,JSON.stringify(e));}catch(i){}},remove(){if(typeof window!="undefined")try{sessionStorage.removeItem(t);}catch(e){}}}}function m(t,e={}){let{domain:i,path:s="/",expires:d=365,secure:u=true,sameSite:c="Lax"}=e;return {load(){if(typeof document=="undefined")return null;try{let n=encodeURIComponent(t),a=document.cookie.split(";").map(o=>o.trim()).find(o=>o.startsWith(`${n}=`));if(!a)return null;let r=a.indexOf("=");return JSON.parse(decodeURIComponent(a.slice(r+1)))}catch(n){return null}},save(n){if(typeof document=="undefined")return;let a=u||c==="None",r=`${encodeURIComponent(t)}=${encodeURIComponent(JSON.stringify(n))}; path=${s}; samesite=${c}`;if(d>0){let o=new Date;o.setDate(o.getDate()+d),r+=`; expires=${o.toUTCString()}`;}i&&(r+=`; domain=${i}`),a&&(r+="; secure"),document.cookie=r;},remove(){if(typeof document=="undefined")return;let n=`${encodeURIComponent(t)}=; path=${s}; expires=Thu, 01 Jan 1970 00:00:00 GMT`;i&&(n+=`; domain=${i}`),document.cookie=n;}}}exports.a=p;exports.b=m;//# sourceMappingURL=chunk-A4PK7JB2.js.map
2
- //# sourceMappingURL=chunk-A4PK7JB2.js.map
1
+ 'use strict';function p(t){return {load(){if(typeof window=="undefined")return null;try{let e=sessionStorage.getItem(t);return e?JSON.parse(e):null}catch(e){return null}},save(e){if(typeof window!="undefined")try{sessionStorage.setItem(t,JSON.stringify(e));}catch(i){}},remove(){if(typeof window!="undefined")try{sessionStorage.removeItem(t);}catch(e){}}}}function m(t,e={}){let{domain:i,path:s="/",expires:d=365,secure:u=true,sameSite:c="Lax"}=e;return {load(){if(typeof document=="undefined")return null;try{let n=encodeURIComponent(t),a=document.cookie.split(";").map(o=>o.trim()).find(o=>o.startsWith(`${n}=`));if(!a)return null;let r=a.indexOf("=");return JSON.parse(decodeURIComponent(a.slice(r+1)))}catch(n){return null}},save(n){if(typeof document=="undefined")return;let a=u||c==="None",r=`${encodeURIComponent(t)}=${encodeURIComponent(JSON.stringify(n))}; path=${s}; samesite=${c}`;if(d>0){let o=new Date;o.setDate(o.getDate()+d),r+=`; expires=${o.toUTCString()}`;}i&&(r+=`; domain=${i}`),a&&(r+="; secure"),document.cookie=r;},remove(){if(typeof document=="undefined")return;let n=`${encodeURIComponent(t)}=; path=${s}; expires=Thu, 01 Jan 1970 00:00:00 GMT`;i&&(n+=`; domain=${i}`),document.cookie=n;}}}exports.a=p;exports.b=m;
@@ -0,0 +1 @@
1
+ 'use strict';function s(t,n,r){return r?n||"":n||t}exports.a=s;
@@ -0,0 +1,322 @@
1
+ import {b}from'./chunk-ITCY2Z66.mjs';import {d}from'./chunk-ZJYULEER.mjs';function v(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function G(o,a){var r,i;if(!o)return "";let d={},e=(r=a.organizationInfo)!=null?r:{};typeof e.name=="string"&&e.name&&(d.orgName=e.name);for(let[t,l]of Object.entries(e))typeof l=="string"&&l&&!(t in d)&&(d[t]=l);for(let[t,l]of Object.entries((i=a.variableValues)!=null?i:{}))typeof l=="string"&&l&&(d[t]=l);return o.replace(/\{\{\s*([^}\s]+)\s*\}\}/g,(t,l)=>{let n=String(l).trim();return Object.prototype.hasOwnProperty.call(d,n)?d[n]:t})}function F(o){return o.toLowerCase().replace(/[^a-z0-9\s-]/g,"").trim().replace(/\s+/g,"-")}function H(o){let a=o.split(`
2
+ `),d=[],e=false;for(let r of a){let i=r.trimEnd();i.startsWith("- ")||i.startsWith("\u2022 ")?(e||(d.push("<ul>"),e=true),d.push(` <li>${v(i.replace(/^[-•]\s*/,""))}</li>`)):(e&&(d.push("</ul>"),e=false),i.trim()===""||d.push(`<p>${v(i)}</p>`));}return e&&d.push("</ul>"),d.join(`
3
+ `)}var _=`
4
+ --color-bg: #ffffff;
5
+ --color-surface: #f9fafb;
6
+ --color-border: #e5e7eb;
7
+ --color-text: #111827;
8
+ --color-text-muted: #6b7280;
9
+ --color-accent: #16a34a;
10
+ --color-accent-light: #dcfce7;
11
+ --color-heading: #064e3b;
12
+ --color-link: #15803d;
13
+ --color-link-hover: #166534;`,I=`
14
+ --color-bg: #0f172a;
15
+ --color-surface: #1e293b;
16
+ --color-border: #334155;
17
+ --color-text: #f1f5f9;
18
+ --color-text-muted: #94a3b8;
19
+ --color-accent: #22c55e;
20
+ --color-accent-light: #14532d;
21
+ --color-heading: #86efac;
22
+ --color-link: #4ade80;
23
+ --color-link-hover: #86efac;`;function R(o){let a=o==="auto"?" color-scheme: light dark;":o==="dark"?" color-scheme: dark;":" color-scheme: light;",d=o==="dark"?I:_,e=o==="auto"?`
24
+
25
+ @media (prefers-color-scheme: dark) {
26
+ :root {${I}
27
+ }
28
+ }`:"";return `
29
+ :root {
30
+ ${a}${d}
31
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
32
+ --font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, monospace;
33
+ --radius: 8px;
34
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.04);
35
+ --max-width: 860px;
36
+ }${e}`}var W=`
37
+ /* \u2500\u2500 Reset & Base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
38
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
39
+
40
+ /* \u2500\u2500 Design tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */`,B=`
41
+ /* \u2500\u2500 Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
42
+ html { font-size: 16px; scroll-behavior: smooth; }
43
+
44
+ body {
45
+ font-family: var(--font-sans);
46
+ background: var(--color-bg);
47
+ color: var(--color-text);
48
+ line-height: 1.7;
49
+ padding: 2rem 1.25rem;
50
+ }
51
+
52
+ .policy-wrapper {
53
+ max-width: var(--max-width);
54
+ margin: 0 auto;
55
+ }
56
+
57
+ /* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
58
+ .policy-header {
59
+ background: var(--color-surface);
60
+ border: 1px solid var(--color-border);
61
+ border-radius: var(--radius);
62
+ padding: 2.5rem 2.5rem 2rem;
63
+ margin-bottom: 2rem;
64
+ box-shadow: var(--shadow);
65
+ }
66
+
67
+ .policy-header h1 {
68
+ font-size: 2rem;
69
+ font-weight: 700;
70
+ color: var(--color-heading);
71
+ line-height: 1.2;
72
+ margin-bottom: 0.75rem;
73
+ letter-spacing: -0.025em;
74
+ }
75
+
76
+ .policy-meta {
77
+ display: flex;
78
+ flex-wrap: wrap;
79
+ gap: 0.5rem 1.5rem;
80
+ font-size: 0.875rem;
81
+ color: var(--color-text-muted);
82
+ margin-top: 0.5rem;
83
+ }
84
+
85
+ .policy-meta span { white-space: nowrap; }
86
+
87
+ .compliance-badge {
88
+ display: inline-flex;
89
+ align-items: center;
90
+ gap: 0.35rem;
91
+ background: var(--color-accent-light);
92
+ color: var(--color-accent);
93
+ font-size: 0.75rem;
94
+ font-weight: 600;
95
+ padding: 0.25rem 0.75rem;
96
+ border-radius: 9999px;
97
+ margin-top: 1rem;
98
+ letter-spacing: 0.01em;
99
+ border: 1px solid var(--color-accent);
100
+ }
101
+
102
+ /* \u2500\u2500 Navigation / TOC \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
103
+ .policy-toc {
104
+ background: var(--color-surface);
105
+ border: 1px solid var(--color-border);
106
+ border-left: 4px solid var(--color-accent);
107
+ border-radius: var(--radius);
108
+ padding: 1.5rem 2rem;
109
+ margin-bottom: 2.5rem;
110
+ box-shadow: var(--shadow);
111
+ }
112
+
113
+ .policy-toc h2 {
114
+ font-size: 1rem;
115
+ font-weight: 700;
116
+ text-transform: uppercase;
117
+ letter-spacing: 0.08em;
118
+ color: var(--color-text-muted);
119
+ margin-bottom: 1rem;
120
+ }
121
+
122
+ .policy-toc ol {
123
+ list-style: decimal;
124
+ padding-left: 1.25rem;
125
+ column-count: 1;
126
+ }
127
+
128
+ @media (min-width: 600px) {
129
+ .policy-toc ol { column-count: 2; column-gap: 2rem; }
130
+ }
131
+
132
+ .policy-toc li { margin-bottom: 0.35rem; break-inside: avoid; }
133
+
134
+ .policy-toc a {
135
+ color: var(--color-link);
136
+ text-decoration: none;
137
+ font-size: 0.9375rem;
138
+ transition: color 0.15s ease;
139
+ }
140
+
141
+ .policy-toc a:hover { color: var(--color-link-hover); text-decoration: underline; }
142
+
143
+ /* \u2500\u2500 Article / Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
144
+ article.policy-body { display: flex; flex-direction: column; gap: 2.5rem; }
145
+
146
+ .policy-section {
147
+ background: var(--color-surface);
148
+ border: 1px solid var(--color-border);
149
+ border-radius: var(--radius);
150
+ padding: 2rem 2.5rem;
151
+ box-shadow: var(--shadow);
152
+ scroll-margin-top: 1.5rem;
153
+ }
154
+
155
+ .policy-section h2 {
156
+ font-size: 1.25rem;
157
+ font-weight: 700;
158
+ color: var(--color-heading);
159
+ margin-bottom: 1.25rem;
160
+ padding-bottom: 0.75rem;
161
+ border-bottom: 2px solid var(--color-accent-light);
162
+ display: flex;
163
+ align-items: baseline;
164
+ gap: 0.5rem;
165
+ line-height: 1.3;
166
+ }
167
+
168
+ .section-number {
169
+ font-size: 0.75rem;
170
+ font-weight: 700;
171
+ background: var(--color-accent);
172
+ color: #fff;
173
+ width: 1.5rem;
174
+ height: 1.5rem;
175
+ display: inline-flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ border-radius: 50%;
179
+ flex-shrink: 0;
180
+ }
181
+
182
+ .policy-section p {
183
+ margin-bottom: 0.875rem;
184
+ font-size: 0.9375rem;
185
+ color: var(--color-text);
186
+ }
187
+
188
+ .policy-section p:last-child { margin-bottom: 0; }
189
+
190
+ .policy-section ul {
191
+ margin: 0.75rem 0 0.875rem 1.5rem;
192
+ display: flex;
193
+ flex-direction: column;
194
+ gap: 0.35rem;
195
+ }
196
+
197
+ .policy-section ul li {
198
+ font-size: 0.9375rem;
199
+ color: var(--color-text);
200
+ position: relative;
201
+ }
202
+
203
+ .policy-section ul li::marker { color: var(--color-accent); }
204
+
205
+ /* \u2500\u2500 Footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
206
+ .policy-footer {
207
+ margin-top: 3rem;
208
+ padding: 1.5rem 2rem;
209
+ border-top: 1px solid var(--color-border);
210
+ text-align: center;
211
+ font-size: 0.8125rem;
212
+ color: var(--color-text-muted);
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: 0.35rem;
216
+ }
217
+
218
+ .policy-footer a { color: var(--color-link); text-decoration: none; }
219
+ .policy-footer a:hover { text-decoration: underline; }
220
+
221
+ /* \u2500\u2500 Print styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
222
+ @media print {
223
+ :root {
224
+ --color-bg: #fff;
225
+ --color-surface: #fff;
226
+ --color-border: #d1d5db;
227
+ --color-text: #000;
228
+ --color-text-muted: #374151;
229
+ --color-accent: #16a34a;
230
+ --color-accent-light: #f0fdf4;
231
+ --color-heading: #064e3b;
232
+ --color-link: #15803d;
233
+ }
234
+
235
+ body { padding: 0; font-size: 10pt; }
236
+ .policy-wrapper { max-width: 100%; }
237
+
238
+ .policy-toc { break-inside: avoid; }
239
+ .policy-section { break-inside: avoid; box-shadow: none; border: 1px solid #d1d5db; }
240
+
241
+ .policy-toc ol { column-count: 2; }
242
+ .policy-footer { border-top: 1px solid #d1d5db; }
243
+
244
+ a { color: inherit; text-decoration: none; }
245
+ }
246
+ `;function j(o){return `${W}${R(o)}${B}`.trim()}function M(o,a){var S,s;let d=(a==null?void 0:a.includeStyles)!==false,e=(S=a==null?void 0:a.customCSS)!=null?S:"",r=(s=a==null?void 0:a.theme)!=null?s:"light",i=o.sections.filter(c=>c.included),t=v(o.organizationInfo.name||"Organisation"),l=v(o.title||"Privacy Policy"),n=v(o.version||"1.0"),m=o.effectiveDate?new Date(o.effectiveDate).toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}):new Date().toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}),b$1=o.lastUpdated?new Date(o.lastUpdated).toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}):m,h=o.organizationInfo.website?`<a href="${v(o.organizationInfo.website)}" target="_blank" rel="noopener">${v(o.organizationInfo.website)}</a>`:"",u=o.organizationInfo.privacyEmail?`<a href="mailto:${v(o.organizationInfo.privacyEmail)}">${v(o.organizationInfo.privacyEmail)}</a>`:"",$=`
247
+ <nav class="policy-toc" aria-label="Table of Contents">
248
+ <h2>Table of Contents</h2>
249
+ <ol>
250
+ ${i.map((c,f)=>` <li><a href="#${F(c.title)}">${v(c.title)}</a></li>`).join(`
251
+ `)}
252
+ </ol>
253
+ </nav>`,x=i.map((c,f)=>{let p=F(c.title),y=c.template||c.defaultContent||"",g=G(y,{variableValues:o.variableValues,organizationInfo:o.organizationInfo}),w=H(g);return ` <section class="policy-section" id="${p}" aria-labelledby="section-heading-${p}">
254
+ <h2 id="section-heading-${p}">
255
+ <span class="section-number" aria-hidden="true">${f+1}</span>
256
+ ${v(c.title)}
257
+ </h2>
258
+ ${w}
259
+ </section>`}).join(`
260
+
261
+ `),D=e?e.replace(/<\/style>/gi,""):"",z=d?`<style>
262
+ ${j(r)}
263
+ ${D?`
264
+ /* \u2500\u2500 Custom styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
265
+ ${D}`:""}
266
+ </style>`:D?`<style>${D}</style>`:"";return `<!DOCTYPE html>
267
+ <html lang="en">
268
+ <head>
269
+ <meta charset="UTF-8" />
270
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
271
+ <meta name="description" content="Privacy Policy for ${t}" />
272
+ <meta name="generator" content="NDPA Toolkit" />
273
+ <title>${l} \u2014 ${t}</title>
274
+ ${z}
275
+ </head>
276
+ <body>
277
+ <div class="policy-wrapper">
278
+
279
+ <header class="policy-header">
280
+ <h1>${l}</h1>
281
+ <div class="policy-meta">
282
+ <span><strong>Organisation:</strong> ${t}</span>
283
+ <span><strong>Effective:</strong> ${m}</span>
284
+ <span><strong>Version:</strong> ${n}</span>
285
+ ${b$1!==m?`<span><strong>Last updated:</strong> ${b$1}</span>`:""}
286
+ </div>
287
+ <div>
288
+ <span class="compliance-badge" role="img" aria-label="NDPA compliant">&#10003; NDPA 2023 Compliant</span>
289
+ </div>
290
+ </header>
291
+
292
+ ${$}
293
+
294
+ <article class="policy-body" aria-label="Policy content">
295
+
296
+ ${x}
297
+
298
+ </article>
299
+
300
+ <aside class="policy-legal-notice" role="note" aria-label="Legal notice">
301
+ <h2>Important Notice</h2>
302
+ <p>${v(b)}</p>
303
+ </aside>
304
+
305
+ <footer class="policy-footer" role="contentinfo">
306
+ <div>${t}${h?` &mdash; ${h}`:""}</div>
307
+ ${u?`<div>Privacy contact: ${u}</div>`:""}
308
+ <div>Effective ${m} &bull; Version ${n}</div>
309
+ <div>Generated by <strong>NDPA Toolkit</strong> &mdash; Nigeria Data Protection Act 2023</div>
310
+ </footer>
311
+
312
+ </div>
313
+ </body>
314
+ </html>`}function V(o){return o.toLowerCase().replace(/[^a-z0-9\s-]/g,"").trim().replace(/\s+/g,"-")}function X(o){let a=o.sections.filter(l=>l.included),d=o.title||"Privacy Policy",e=o.organizationInfo.name||"Organisation",r=o.version||"1.0",i=o.effectiveDate?new Date(o.effectiveDate).toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}):new Date().toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}),t=[];return t.push(`# ${d}`),t.push(""),t.push(`_Effective: ${i} | Version: ${r} | ${e}_`),t.push(""),o.organizationInfo.website&&t.push(`**Website:** ${o.organizationInfo.website} `),o.organizationInfo.privacyEmail&&t.push(`**Privacy contact:** ${o.organizationInfo.privacyEmail} `),(o.organizationInfo.website||o.organizationInfo.privacyEmail)&&t.push(""),t.push("> This privacy policy is compliant with the **Nigeria Data Protection Act (NDPA) 2023**."),t.push(""),t.push("---"),t.push(""),a.length>0&&(t.push("## Table of Contents"),t.push(""),a.forEach((l,n)=>{let m=V(`${n+1} ${l.title}`);t.push(`${n+1}. [${l.title}](#${m})`);}),t.push(""),t.push("---"),t.push("")),a.forEach((l,n)=>{t.push(`## ${n+1}. ${l.title}`),t.push("");let m=(l.template||l.defaultContent||"").trim();if(m){let b=m.split(`
315
+ `);for(let h of b){let u=h.trimEnd();u.startsWith("-")||u.startsWith("\u2022")||u===""?t.push(u.replace(/^•/,"-")):t.push(u);}}t.push(""),t.push("---"),t.push("");}),t.push("## Important Notice"),t.push(""),t.push(b),t.push(""),t.push("---"),t.push(""),t.push(`_Generated by **NDPA Toolkit** \u2014 ${e} \u2022 Version ${r}_`),t.push(""),t.join(`
316
+ `)}function Y(o,a){return d(this,null,function*(){var S;let d;try{let s=yield import('jspdf');d=(S=s.jsPDF)!=null?S:s.default;}catch(s){throw new Error(`[ndpr-toolkit] PDF export requires the "jspdf" package. Install it with:
317
+ pnpm add jspdf
318
+ See: https://ndprtoolkit.com.ng/docs/guides/styling-customization`)}let e=new d({unit:"mm",format:"a4"}),r=e.internal.pageSize.getWidth(),i=e.internal.pageSize.getHeight(),t=20,l=r-t*2,n=t,m=o.organizationInfo.name||"",b$1=o.title||"Privacy Policy",h=o.version||"1.0",u=o.effectiveDate?new Date(o.effectiveDate).toLocaleDateString():new Date().toLocaleDateString(),T=()=>{e.setFontSize(8),e.setFont("helvetica","italic"),e.setTextColor(150,150,150),e.text(m?`${m} \u2014 ${b$1}`:b$1,t,12),e.setDrawColor(220,220,220),e.setLineWidth(.3),e.line(t,14,r-t,14),e.setTextColor(0,0,0);},$=s=>{n+s>i-t-10&&(e.addPage(),n=t+8,T());};if((a==null?void 0:a.includeCoverPage)!==false){e.setFillColor(22,163,74),e.rect(0,0,r,12,"F"),e.setFontSize(28),e.setFont("helvetica","bold"),e.setTextColor(22,163,74);let s=e.splitTextToSize(b$1,l-10),c=72;s.forEach(p=>{e.text(p,r/2,c,{align:"center"}),c+=11;}),e.setDrawColor(22,163,74),e.setLineWidth(.6);let f=c+6;if(e.line(r/2-30,f,r/2+30,f),e.setFontSize(14),e.setFont("helvetica","normal"),e.setTextColor(40,40,40),e.text(m,r/2,f+14,{align:"center"}),e.setFontSize(10),e.setTextColor(100,100,100),e.text(`Effective Date: ${u}`,r/2,f+26,{align:"center"}),e.text(`Version ${h}`,r/2,f+34,{align:"center"}),(a==null?void 0:a.includeComplianceBadge)!==false){let p=f+52,y="Compliant with the Nigeria Data Protection Act (NDPA) 2023";e.setFontSize(8.5),e.setFont("helvetica","bold"),e.setTextColor(255,255,255);let g=e.getTextWidth(y),w=7,E=3.5,P=(r-g-w*2)/2;e.setFillColor(22,163,74),e.roundedRect(P,p-E-1,g+w*2,7+E,2,2,"F"),e.text(y,r/2,p+1.5,{align:"center"}),e.setTextColor(0,0,0);}e.setFillColor(22,163,74),e.rect(0,i-12,r,12,"F"),e.addPage(),n=t+8,T();}let x=o.sections.filter(s=>s.included);(a==null?void 0:a.includeTOC)!==false&&(e.setFontSize(18),e.setFont("helvetica","bold"),e.setTextColor(22,163,74),e.text("Table of Contents",t,n+4),e.setDrawColor(22,163,74),e.setLineWidth(.5),e.line(t,n+8,t+80,n+8),n+=18,e.setFontSize(10.5),e.setFont("helvetica","normal"),e.setTextColor(40,40,40),x.forEach((s,c)=>{$(7);let f=`${c+1}. ${s.title}`;e.text(f,t+4,n),n+=6.5;}),e.addPage(),n=t+8,T()),x.forEach((s,c)=>{$(18),e.setFillColor(22,163,74),e.circle(t+3.5,n-1.5,3.8,"F"),e.setFontSize(8),e.setFont("helvetica","bold"),e.setTextColor(255,255,255),e.text(String(c+1),t+3.5,n-.5,{align:"center"}),e.setFontSize(13),e.setFont("helvetica","bold"),e.setTextColor(22,163,74),e.text(s.title,t+11,n),n+=3,e.setDrawColor(200,200,200),e.setLineWidth(.25),e.line(t+11,n,r-t,n),n+=6;let f=(s.template||s.defaultContent||"").trim();if(f){let p=f.split(`
319
+ `);e.setFontSize(9.5),e.setFont("helvetica","normal"),e.setTextColor(50,50,50),p.forEach(y=>{let g=y.trimEnd();if(g===""){n+=3;return}let w=g.startsWith("-")||g.startsWith("\u2022"),E=w?t+8:t+4,P=w?g.replace(/^[-•]\s*/,""):g,k=l-(w?12:8);e.splitTextToSize(P,k).forEach((A,O)=>{$(5),w&&O===0&&(e.setFillColor(22,163,74),e.circle(t+4,n-1,.9,"F")),e.text(A,E,n),n+=5;});});}n+=10;}),n>i-60&&(e.addPage(),n=t),e.setFontSize(14),e.setFont("helvetica","bold"),e.setTextColor(0,0,0),e.text("Important Notice",t,n),n+=8,e.setFontSize(9),e.setFont("helvetica","normal"),e.setTextColor(80,80,80),e.splitTextToSize(b,l).forEach(s=>{n>i-20&&(e.addPage(),n=t),e.text(s,t,n),n+=5;}),e.setTextColor(0,0,0);let z=e.getNumberOfPages();for(let s=1;s<=z;s++)e.setPage(s),e.setFontSize(7.5),e.setFont("helvetica","normal"),e.setTextColor(160,160,160),e.setDrawColor(220,220,220),e.setLineWidth(.3),e.line(t,i-12,r-t,i-12),e.text(m?`${m} \u2014 Privacy Policy`:"Privacy Policy",t,i-8),e.text(`Page ${s} of ${z}`,r-t,i-8,{align:"right"}),e.setTextColor(0,0,0);return e.setProperties({title:b$1,author:m,subject:"Privacy Policy \u2014 NDPA 2023 Compliant",keywords:"privacy policy, NDPA, Nigeria, data protection"}),e.output("blob")})}function U(o,a){return d(this,null,function*(){let d;try{d=yield import('docx');}catch(p){throw new Error(`[ndpr-toolkit] Word export requires the "docx" package. Install it with:
320
+ pnpm add docx
321
+ See: https://ndprtoolkit.com.ng/docs/guides/styling-customization`)}let{Document:e,Paragraph:r,TextRun:i,HeadingLevel:t,Packer:l,Header:n,Footer:m,PageNumber:b$1,AlignmentType:h,BorderStyle:u,ShadingType:T,TableOfContents:$}=d,x=o.organizationInfo.name||"",D=o.title||"Privacy Policy",z=o.version||"1.0",S=o.effectiveDate?new Date(o.effectiveDate).toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}):new Date().toLocaleDateString("en-NG",{day:"numeric",month:"long",year:"numeric"}),s=o.sections.filter(p=>p.included),c=[];if(c.push(new r({children:[new i({text:D,bold:true,size:52,color:"064e3b"})],heading:t.TITLE,spacing:{after:160},alignment:h.CENTER})),c.push(new r({children:[new i({text:`${x}${x?" \u2022 ":""}Version ${z} \u2022 Effective ${S}`,size:20,color:"6b7280",italics:true})],spacing:{after:120},alignment:h.CENTER})),c.push(new r({children:[new i({text:"Compliant with the Nigeria Data Protection Act (NDPA) 2023",size:18,color:"16a34a",bold:true})],spacing:{after:400},alignment:h.CENTER})),c.push(new r({children:[],spacing:{after:200},border:{bottom:{color:"16a34a",style:u.SINGLE,size:6,space:1}}})),(a==null?void 0:a.includeTOC)!==false){if(c.push(new r({children:[new i({text:"Table of Contents",bold:true,size:28,color:"064e3b"})],heading:t.HEADING_1,spacing:{before:400,after:200}})),typeof $=="function")try{c.push(new $("Table of Contents",{hyperlink:!0,headingStyleRange:"1-1"}));}catch(p){s.forEach((y,g)=>{c.push(new r({children:[new i({text:`${g+1}. ${y.title}`,size:22,color:"15803d"})],spacing:{after:80}}));});}else s.forEach((p,y)=>{c.push(new r({children:[new i({text:`${y+1}. ${p.title}`,size:22,color:"15803d"})],spacing:{after:80}}));});c.push(new r({children:[],pageBreakBefore:true}));}s.forEach((p,y)=>{c.push(new r({children:[new i({text:`${y+1}. ${p.title}`,bold:true,size:28,color:"064e3b"})],heading:t.HEADING_1,spacing:{before:400,after:200},border:{bottom:{color:"dcfce7",style:u.SINGLE,size:4,space:1}}}));let g=(p.template||p.defaultContent||"").trim();g&&g.split(`
322
+ `).forEach(E=>{let P=E.trimEnd();if(P===""){c.push(new r({children:[],spacing:{after:60}}));return}let k=P.startsWith("- ")||P.startsWith("\u2022 "),N=k?P.replace(/^[-•]\s*/,""):P;k?c.push(new r({children:[new i({text:N,size:22})],spacing:{after:80},bullet:{level:0}})):c.push(new r({children:[new i({text:N,size:22})],spacing:{after:100}}));});}),c.push(new r({heading:t.HEADING_1,children:[new i({text:"Important Notice",bold:true})],spacing:{before:600,after:200}}),new r({children:[new i({text:b,size:18,color:"4b5563",italics:true})],spacing:{after:200}})),c.push(new r({children:[new i({text:`Generated by NDPA Toolkit \u2014 ${x}${x?" \u2014 ":""}Privacy Policy v${z}`,size:16,color:"9ca3af",italics:true})],spacing:{before:600},alignment:h.CENTER}));let f=new e({title:D,description:"Privacy Policy \u2014 NDPA 2023 Compliant",styles:{paragraphStyles:[{id:"Normal",name:"Normal",run:{font:"Calibri",size:22}}]},sections:[{headers:{default:new n({children:[new r({children:[new i({text:x||"Privacy Policy",size:16,color:"9ca3af"})],alignment:h.RIGHT})]})},footers:{default:new m({children:[new r({children:[new i({text:"Page ",size:16,color:"9ca3af"}),new i({children:[b$1.CURRENT],size:16,color:"9ca3af"}),new i({text:" of ",size:16,color:"9ca3af"}),new i({children:[b$1.TOTAL_PAGES],size:16,color:"9ca3af"})],alignment:h.CENTER})]})},children:c}]});return l.toBlob(f)})}export{M as a,X as b,Y as c,U as d};
@@ -1,2 +1 @@
1
- 'use strict';function o(e){let t=[];if((!e.consents||Object.keys(e.consents).length===0)&&t.push("Consent settings must include at least one consent option"),e.timestamp?(typeof e.timestamp!="number"||isNaN(e.timestamp))&&t.push("Consent timestamp must be a valid number"):t.push("Consent timestamp is required"),e.version||t.push("Consent version is required"),e.method||t.push("Consent collection method is required"),e.hasInteracted===void 0&&t.push("User interaction status is required"),e.timestamp){let n=new Date;n.setMonth(n.getMonth()-13);let s=n.getTime();e.timestamp<s&&t.push("Consent is older than 13 months and should be refreshed");}return {valid:t.length===0,errors:t}}function i(e){let t=[];return (!e||e.length===0)&&t.push("At least one consent option is required"),e==null||e.forEach(n=>{(!n.purpose||n.purpose.trim()==="")&&t.push(`Consent option "${n.id}" is missing a purpose. NDPA Section 26 requires consent to be specific to a stated purpose.`);}),{valid:t.length===0,errors:t}}exports.a=o;exports.b=i;//# sourceMappingURL=chunk-HO5M7M4M.js.map
2
- //# sourceMappingURL=chunk-HO5M7M4M.js.map
1
+ 'use strict';function o(e){let t=[];if((!e.consents||Object.keys(e.consents).length===0)&&t.push("Consent settings must include at least one consent option"),e.timestamp?(typeof e.timestamp!="number"||isNaN(e.timestamp))&&t.push("Consent timestamp must be a valid number"):t.push("Consent timestamp is required"),e.version||t.push("Consent version is required"),e.method||t.push("Consent collection method is required"),e.hasInteracted===void 0&&t.push("User interaction status is required"),e.timestamp){let n=new Date;n.setMonth(n.getMonth()-13);let s=n.getTime();e.timestamp<s&&t.push("Consent is older than 13 months and should be refreshed");}return {valid:t.length===0,errors:t}}function i(e){let t=[];return (!e||e.length===0)&&t.push("At least one consent option is required"),e==null||e.forEach(n=>{(!n.purpose||n.purpose.trim()==="")&&t.push(`Consent option "${n.id}" is missing a purpose. NDPA Section 26 requires consent to be specific to a stated purpose.`);}),{valid:t.length===0,errors:t}}exports.a=o;exports.b=i;
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-YTU4FNM2.mjs';import {a as a$2}from'./chunk-SFGW37LE.mjs';import {a as a$1,b}from'./chunk-ZJYULEER.mjs';import {useState,useRef,useEffect,useCallback}from'react';import {createPortal}from'react-dom';import {jsx,jsxs}from'react/jsx-runtime';var Sn=({options:d,onSave:Y,title:K="We Value Your Privacy",description:Q="We use cookies and similar technologies to provide our services and enhance your experience. Your consent is collected in accordance with NDPA Sections 25-26.",acceptAllButtonText:U="Accept All",rejectAllButtonText:X="Reject All",customizeButtonText:Z="Customize",saveButtonText:s="Save Preferences",position:m="bottom",variant:h="bar",zIndex:I=9999,version:_="1.0",show:C,manageStorage:x=true,storageKey:y="ndpr_consent",className:$="",buttonClassName:A="",primaryButtonClassName:N="",secondaryButtonClassName:nn="",classNames:n,unstyled:o,onAnalytics:B})=>{let[u,c]=useState(false),[l,R]=useState(false),[a$3,k]=useState({}),[T,tn]=useState(false),en=a({active:u}),z=useRef(null),E=useRef(false);useEffect(()=>{tn(true);},[]);let p=useCallback((t,e)=>{B==null||B(a$1({action:t,timestamp:Date.now(),version:_},e!==void 0?{categories:e}:{}));},[B,_]);useEffect(()=>{let t={};if(d.forEach(e=>{t[e.id]=e.defaultValue||false;}),k(t),C===void 0)if(!x)c(true);else {let e=localStorage.getItem(y);if(e)try{JSON.parse(e).version!==_?c(!0):c(!1);}catch(w){c(true);}else c(true);}else c(C);},[d,y,_,x]),useEffect(()=>{C!==void 0&&c(C);},[C]);let on=()=>{let t={};d.forEach(e=>{t[e.id]=true;}),p("accepted_all",t),P(t);},q=()=>{let t={};d.forEach(e=>{t[e.id]=e.required||false;}),p("rejected_all",t),P(t);},rn=(t,e)=>{k(w=>b(a$1({},w),{[t]:e}));},dn=()=>{let t={};d.forEach(e=>{t[e.id]=true;}),k(t);},cn=()=>{let t={};d.forEach(e=>{t[e.id]=e.required||false;}),k(t);},H=d.length>0&&d.every(t=>a$3[t.id]),un=()=>{p("customized",a$3),P(a$3);},P=t=>{let e={consents:t,timestamp:Date.now(),version:_,method:l?"customize":"banner",hasInteracted:true};x&&localStorage.setItem(y,JSON.stringify(e)),Y(e),c(false),R(false);};if(useEffect(()=>{if(!u)return;let t=e=>{e.key==="Escape"&&(p("dismissed"),q());};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[u,p,d,l]),useEffect(()=>{u&&!E.current&&(E.current=true,p("shown")),u||(E.current=false);},[u,p]),useEffect(()=>{if(l&&z.current){let t=z.current;t.style.maxHeight="0px",t.style.opacity="0",t.offsetHeight,t.style.maxHeight=`${t.scrollHeight}px`,t.style.opacity="1";}},[l]),!u)return null;let f=h==="modal"?"center":m,O=f==="inline",j=f==="center",g=["ndpr-consent-banner"];h!=="bar"&&g.push(`ndpr-consent-banner--${h}`),f==="top"?g.push("ndpr-consent-banner--top"):f==="bottom"?g.push("ndpr-consent-banner--bottom"):f==="inline"&&g.push("ndpr-consent-banner--inline"),$&&g.push($);let pn=g.join(" "),F=`ndpr-consent-banner__button ndpr-consent-banner__button--primary ${A} ${N}`.trim(),bn=`ndpr-consent-banner__button ndpr-consent-banner__button--secondary ${A} ${nn}`.trim(),ln=`ndpr-consent-banner__button ndpr-consent-banner__button--ghost ${A}`.trim(),fn=(n==null?void 0:n.primaryButton)||(n==null?void 0:n.acceptButton)||F,G=(n==null?void 0:n.secondaryButton)||(n==null?void 0:n.rejectButton)||bn,gn=(n==null?void 0:n.customizeButton)||ln,vn=(n==null?void 0:n.saveButton)||F,D=jsx("div",{ref:en,tabIndex:-1,"data-ndpr-component":"consent-banner","data-ndpr-variant":h,"data-ndpr-position":f,className:a$2(pn,n==null?void 0:n.root,o),style:!O&&!j?{zIndex:I}:void 0,role:"dialog","aria-modal":j||void 0,"aria-labelledby":"consent-banner-title","aria-describedby":"consent-banner-description",children:jsxs("div",{className:a$2("ndpr-consent-banner__container",n==null?void 0:n.container,o),children:[jsx("h2",{id:"consent-banner-title",className:a$2("ndpr-consent-banner__title",n==null?void 0:n.title,o),children:K}),jsx("p",{id:"consent-banner-description",className:a$2("ndpr-consent-banner__description",n==null?void 0:n.description,o),children:Q}),l&&jsxs("div",{ref:z,className:a$2("ndpr-consent-banner__customize-panel",n==null?void 0:n.customizePanel,o),children:[jsx("div",{className:o?"":"ndpr-consent-banner__select-all-row",children:jsx("button",{type:"button",onClick:H?cn:dn,className:a$2("ndpr-consent-banner__select-all-button",n==null?void 0:n.selectAllButton,o),children:H?"Deselect All":"Select All"})}),jsx("div",{className:a$2("ndpr-consent-banner__options-list",n==null?void 0:n.optionsList,o),children:d.map(t=>jsxs("div",{className:a$2("ndpr-consent-banner__option",n==null?void 0:n.optionItem,o),children:[jsx("input",{id:`consent-${t.id}`,type:"checkbox",checked:a$3[t.id]||false,onChange:e=>rn(t.id,e.target.checked),disabled:t.required,className:a$2("ndpr-consent-banner__option-checkbox",n==null?void 0:n.optionCheckbox,o)}),jsxs("div",{className:o?"":"ndpr-consent-banner__option-text",children:[jsxs("label",{htmlFor:`consent-${t.id}`,className:a$2("ndpr-consent-banner__option-label",n==null?void 0:n.optionLabel,o),children:[t.label,t.required&&jsx("span",{className:o?"":"ndpr-consent-banner__required-marker",children:" *"})]}),jsx("p",{className:a$2("ndpr-consent-banner__option-description",n==null?void 0:n.optionDescription,o),children:t.description})]})]},t.id))}),jsxs("div",{className:a$2("ndpr-consent-banner__buttons",n==null?void 0:n.buttonGroup,o),children:[jsx("button",{onClick:un,className:a$2(vn,n==null?void 0:n.saveButton,o),children:s}),jsx("button",{onClick:()=>R(false),className:a$2(G,n==null?void 0:n.rejectButton,o),children:"Back"})]})]}),!l&&jsxs("div",{className:a$2("ndpr-consent-banner__buttons",n==null?void 0:n.buttonGroup,o),children:[jsx("button",{onClick:on,className:a$2(fn,n==null?void 0:n.acceptButton,o),children:U}),jsx("button",{onClick:q,className:a$2(G,n==null?void 0:n.rejectButton,o),children:X}),jsx("button",{onClick:()=>R(true),className:a$2(gn,n==null?void 0:n.customizeButton,o),children:Z})]}),jsx("div",{className:a$2("ndpr-consent-banner__footer-text",void 0,o),children:'By clicking "Accept All", you agree to the use of ALL cookies. Visit our Cookie Policy to learn more.'})]})});if(O)return D;if(j){let t=jsx("div",{className:o?"":"ndpr-consent-banner__overlay",style:{zIndex:I},children:D});return T?createPortal(t,document.body):null}return T?createPortal(D,document.body):null};export{Sn as a};