@tantainnovative/ndpr-toolkit 3.6.1 → 3.10.1

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 (70) hide show
  1. package/CHANGELOG.md +230 -0
  2. package/README.md +146 -1
  3. package/dist/chunk-2MIQXECH.mjs +3 -0
  4. package/dist/chunk-3GRGYT3P.js +1 -0
  5. package/dist/chunk-5IOC3VAW.js +1 -0
  6. package/dist/chunk-ATFUSHC2.mjs +2 -0
  7. package/dist/{chunk-SJRIOZ4K.mjs → chunk-EFIWANHF.mjs} +1 -1
  8. package/dist/chunk-GQYBS3A7.mjs +0 -0
  9. package/dist/chunk-HXWHL4BD.js +3 -0
  10. package/dist/chunk-OZCNFB5C.js +1 -0
  11. package/dist/chunk-R7545FP4.mjs +1 -0
  12. package/dist/chunk-UKLU6BQF.mjs +1 -0
  13. package/dist/{chunk-I2LMQWK3.js → chunk-W7OLQRJP.js} +2 -2
  14. package/dist/{chunk-RXZFYBUJ.js → chunk-XS3Z4UT7.js} +1 -1
  15. package/dist/core.d.mts +70 -0
  16. package/dist/core.d.ts +70 -0
  17. package/dist/core.js +1 -1
  18. package/dist/core.mjs +1 -1
  19. package/dist/cross-border-lite.d.mts +141 -0
  20. package/dist/cross-border-lite.d.ts +141 -0
  21. package/dist/cross-border-lite.js +2 -0
  22. package/dist/cross-border-lite.mjs +2 -0
  23. package/dist/dsr.js +1 -1
  24. package/dist/dsr.mjs +1 -1
  25. package/dist/headless.d.mts +2391 -0
  26. package/dist/headless.d.ts +2391 -0
  27. package/dist/headless.js +2 -0
  28. package/dist/headless.mjs +2 -0
  29. package/dist/hooks.d.mts +10 -0
  30. package/dist/hooks.d.ts +10 -0
  31. package/dist/hooks.js +1 -1
  32. package/dist/hooks.mjs +1 -1
  33. package/dist/index.d.mts +133 -0
  34. package/dist/index.d.ts +133 -0
  35. package/dist/index.js +1 -1
  36. package/dist/index.mjs +1 -1
  37. package/dist/lawful-basis-lite.d.mts +153 -0
  38. package/dist/lawful-basis-lite.d.ts +153 -0
  39. package/dist/lawful-basis-lite.js +2 -0
  40. package/dist/lawful-basis-lite.mjs +2 -0
  41. package/dist/policy.d.mts +86 -0
  42. package/dist/policy.d.ts +86 -0
  43. package/dist/policy.js +1 -1
  44. package/dist/policy.mjs +1 -1
  45. package/dist/presets-dsr.d.mts +25 -0
  46. package/dist/presets-dsr.d.ts +25 -0
  47. package/dist/presets-dsr.js +1 -1
  48. package/dist/presets-dsr.mjs +1 -1
  49. package/dist/presets-policy.d.mts +71 -0
  50. package/dist/presets-policy.d.ts +71 -0
  51. package/dist/presets-policy.js +1 -1
  52. package/dist/presets-policy.mjs +1 -1
  53. package/dist/presets.d.mts +96 -0
  54. package/dist/presets.d.ts +96 -0
  55. package/dist/presets.js +1 -1
  56. package/dist/presets.mjs +1 -1
  57. package/dist/ropa-lite.d.mts +218 -0
  58. package/dist/ropa-lite.d.ts +218 -0
  59. package/dist/ropa-lite.js +2 -0
  60. package/dist/ropa-lite.mjs +2 -0
  61. package/dist/server.d.mts +70 -0
  62. package/dist/server.d.ts +70 -0
  63. package/dist/server.js +1 -1
  64. package/dist/server.mjs +1 -1
  65. package/package.json +3 -2
  66. package/dist/chunk-BNHQFZHL.mjs +0 -2
  67. package/dist/chunk-O6CUBNXK.mjs +0 -3
  68. package/dist/chunk-RV2VMWZJ.mjs +0 -1
  69. package/dist/chunk-UI536RU2.js +0 -3
  70. package/dist/chunk-W7RBGZCC.js +0 -1
@@ -0,0 +1,218 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * Generates a summary of the Record of Processing Activities.
5
+ * Provides statistics and identifies records that are due for review.
6
+ *
7
+ * @param ropa - The full Record of Processing Activities
8
+ * @returns Summary statistics for the ROPA
9
+ */
10
+ export declare function generateROPASummary(ropa: RecordOfProcessingActivities): ROPASummary;
11
+
12
+ /**
13
+ * Identifies compliance gaps in the Record of Processing Activities.
14
+ * Finds records that are missing required information per NDPA 2023.
15
+ *
16
+ * @param ropa - The full Record of Processing Activities
17
+ * @returns Array of compliance gaps grouped by record
18
+ */
19
+ export declare function identifyComplianceGaps(ropa: RecordOfProcessingActivities): ROPAComplianceGap[];
20
+
21
+ /**
22
+ * Lawful Basis types aligned with NDPA 2023 Part III (Sections 24-28)
23
+ * Every processing activity must have a documented lawful basis
24
+ */
25
+ /**
26
+ * The six lawful bases for processing personal data per NDPA Section 25(1)
27
+ */
28
+ declare type LawfulBasis = 'consent' | 'contract' | 'legal_obligation' | 'vital_interests' | 'public_interest' | 'legitimate_interests';
29
+
30
+ /**
31
+ * Record of Processing Activities (ROPA) types aligned with NDPA 2023
32
+ * Data controllers must maintain comprehensive records of all processing activities
33
+ */
34
+
35
+ /**
36
+ * Represents a single processing record in the ROPA
37
+ */
38
+ export declare interface ProcessingRecord {
39
+ /** Unique identifier */
40
+ id: string;
41
+ /** Name of the processing activity */
42
+ name: string;
43
+ /** Detailed description of the processing */
44
+ description: string;
45
+ /** Data controller details */
46
+ controllerDetails: {
47
+ name: string;
48
+ contact: string;
49
+ address: string;
50
+ registrationNumber?: string;
51
+ dpoContact?: string;
52
+ };
53
+ /** Joint controller details (if applicable) */
54
+ jointControllerDetails?: {
55
+ name: string;
56
+ contact: string;
57
+ address: string;
58
+ responsibilities: string;
59
+ };
60
+ /** Data processor details (if processing is outsourced) */
61
+ processorDetails?: {
62
+ name: string;
63
+ contact: string;
64
+ address: string;
65
+ contractReference?: string;
66
+ };
67
+ /** Lawful basis for the processing */
68
+ lawfulBasis: LawfulBasis;
69
+ /** Justification for the chosen lawful basis */
70
+ lawfulBasisJustification: string;
71
+ /** Purposes of the processing */
72
+ purposes: string[];
73
+ /** Categories of personal data processed */
74
+ dataCategories: string[];
75
+ /** Categories of sensitive personal data (if any) */
76
+ sensitiveDataCategories?: string[];
77
+ /** Categories of data subjects */
78
+ dataSubjectCategories: string[];
79
+ /** Recipients or categories of recipients */
80
+ recipients: string[];
81
+ /** Cross-border transfer details */
82
+ crossBorderTransfers?: Array<{
83
+ destinationCountry: string;
84
+ countryCode?: string;
85
+ safeguards: string;
86
+ transferMechanism: string;
87
+ }>;
88
+ /** Data retention period */
89
+ retentionPeriod: string;
90
+ /** Justification for the retention period */
91
+ retentionJustification?: string;
92
+ /** Technical and organizational security measures */
93
+ securityMeasures: string[];
94
+ /** Data source (directly from data subject or from third party) */
95
+ dataSource: 'data_subject' | 'third_party' | 'public_source' | 'other';
96
+ /** Third-party source details (if dataSource is 'third_party') */
97
+ thirdPartySourceDetails?: string;
98
+ /** Whether a DPIA is required for this processing */
99
+ dpiaRequired: boolean;
100
+ /** Reference to the DPIA (if conducted) */
101
+ dpiaReference?: string;
102
+ /** Whether automated decision-making is involved */
103
+ automatedDecisionMaking: boolean;
104
+ /** Details of automated decision-making (if applicable) */
105
+ automatedDecisionMakingDetails?: string;
106
+ /** Status of the processing record */
107
+ status: 'active' | 'inactive' | 'archived';
108
+ /** Department or business unit responsible */
109
+ department?: string;
110
+ /** System or application used for processing */
111
+ systemsUsed?: string[];
112
+ /** Timestamp when the record was created */
113
+ createdAt: number;
114
+ /** Timestamp when the record was last updated */
115
+ updatedAt: number;
116
+ /** Timestamp when the record was last reviewed */
117
+ lastReviewedAt?: number;
118
+ /** Next review date */
119
+ nextReviewDate?: number;
120
+ }
121
+
122
+ /**
123
+ * Represents a complete Record of Processing Activities
124
+ */
125
+ export declare interface RecordOfProcessingActivities {
126
+ /** Unique identifier */
127
+ id: string;
128
+ /** Organization name */
129
+ organizationName: string;
130
+ /** Organization contact information */
131
+ organizationContact: string;
132
+ /** Organization address */
133
+ organizationAddress: string;
134
+ /** Data Protection Officer details */
135
+ dpoDetails?: {
136
+ name: string;
137
+ email: string;
138
+ phone?: string;
139
+ };
140
+ /** NDPC registration number */
141
+ ndpcRegistrationNumber?: string;
142
+ /** All processing records */
143
+ records: ProcessingRecord[];
144
+ /** Timestamp when the ROPA was last updated */
145
+ lastUpdated: number;
146
+ /** Version of the ROPA */
147
+ version: string;
148
+ /** Export format options */
149
+ exportFormats?: ('pdf' | 'csv' | 'json' | 'xlsx')[];
150
+ }
151
+
152
+ /**
153
+ * Compliance gap found in a processing record
154
+ */
155
+ export declare interface ROPAComplianceGap {
156
+ recordId: string;
157
+ recordName: string;
158
+ gaps: string[];
159
+ }
160
+
161
+ export declare const ROPAManagerLite: React__default.FC<ROPAManagerLiteProps>;
162
+
163
+ export declare interface ROPAManagerLiteClassNames {
164
+ root?: string;
165
+ header?: string;
166
+ title?: string;
167
+ summary?: string;
168
+ summaryCard?: string;
169
+ table?: string;
170
+ tableHeader?: string;
171
+ tableRow?: string;
172
+ statusBadge?: string;
173
+ complianceScore?: string;
174
+ gapAlert?: string;
175
+ }
176
+
177
+ export declare interface ROPAManagerLiteProps {
178
+ records: ProcessingRecord[];
179
+ title?: string;
180
+ description?: string;
181
+ className?: string;
182
+ classNames?: ROPAManagerLiteClassNames;
183
+ unstyled?: boolean;
184
+ showSummary?: boolean;
185
+ showComplianceGaps?: boolean;
186
+ onRecordClick?: (record: ProcessingRecord) => void;
187
+ }
188
+
189
+ /**
190
+ * Summary statistics for the ROPA
191
+ */
192
+ export declare interface ROPASummary {
193
+ /** Total number of processing records */
194
+ totalRecords: number;
195
+ /** Active processing records */
196
+ activeRecords: number;
197
+ /** Records by lawful basis */
198
+ byLawfulBasis: Record<LawfulBasis, number>;
199
+ /** Records involving sensitive data */
200
+ sensitiveDataRecords: number;
201
+ /** Records involving cross-border transfers */
202
+ crossBorderRecords: number;
203
+ /** Records requiring DPIA */
204
+ dpiaRequiredRecords: number;
205
+ /** Records involving automated decision-making */
206
+ automatedDecisionRecords: number;
207
+ /** Records due for review */
208
+ recordsDueForReview: ProcessingRecord[];
209
+ /** Departments with most processing activities */
210
+ topDepartments: Array<{
211
+ department: string;
212
+ count: number;
213
+ }>;
214
+ /** Last updated timestamp */
215
+ lastUpdated: number;
216
+ }
217
+
218
+ export { }
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ 'use strict';var chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunkAME4HJR4_js=require('./chunk-AME4HJR4.js');require('./chunk-RFPLZDIO.js');var react=require('react'),jsxRuntime=require('react/jsx-runtime');var _={consent:"Consent",contract:"Contract",legal_obligation:"Legal Obligation",vital_interests:"Vital Interests",public_interest:"Public Interest",legitimate_interests:"Legitimate Interests"},w=["consent","contract","legal_obligation","vital_interests","public_interest","legitimate_interests"],P={active:"ndpr-badge ndpr-badge--success",inactive:"ndpr-badge ndpr-badge--warning",archived:"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300"},L={active:"Active",inactive:"Inactive",archived:"Archived"};function D(s){return s?new Date(s).toLocaleDateString():"N/A"}function O(s){return !!s.nextReviewDate&&s.nextReviewDate<=Date.now()}var S=({records:s,title:x="Record of Processing Activities (ROPA)",description:R="Maintain a comprehensive record of all data processing activities as required by the NDPA accountability principle.",className:y="",classNames:t,unstyled:n,showSummary:h=true,showComplianceGaps:A=true,onRecordClick:l})=>{let u=react.useMemo(()=>({id:"lite",organizationName:"",organizationContact:"",organizationAddress:"",records:s,lastUpdated:0,version:"0"}),[s]),d=react.useMemo(()=>chunk4CVBQC66_js.b(u),[u]),m=react.useMemo(()=>chunk4CVBQC66_js.d(u),[u]);return jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a(`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${y}`,t==null?void 0:t.root,n),children:[jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("",t==null?void 0:t.header,n),children:[jsxRuntime.jsx("h2",{className:chunkAME4HJR4_js.a("ndpr-section-heading",t==null?void 0:t.title,n),children:x}),jsxRuntime.jsx("p",{className:"ndpr-card__subtitle",children:R})]}),h&&jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("mb-6",t==null?void 0:t.summary,n),children:[jsxRuntime.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-4",children:[["p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md text-center","ndpr-text-info","Total Records",d.totalRecords,false],["p-4 bg-green-50 dark:bg-green-900/20 rounded-md text-center","ndpr-text-success","Active",d.activeRecords,false],["p-4 bg-purple-50 dark:bg-purple-900/20 rounded-md text-center","ndpr-text-info","Cross-Border",d.crossBorderRecords,false],["p-4 bg-orange-50 dark:bg-orange-900/20 rounded-md text-center","ndpr-text-warning","Records with Gaps",m.length,true]].map(([a,o,p,c,g])=>jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a(a,t==null?void 0:t.summaryCard,n),children:[jsxRuntime.jsx("p",{className:g?chunkAME4HJR4_js.a(`ndpr-stat__value ${o}`,t==null?void 0:t.complianceScore,n):`ndpr-stat__value ${o}`,children:c}),jsxRuntime.jsx("p",{className:`text-xs ${o}`,children:p})]},p))}),jsxRuntime.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4 mb-4",children:[jsxRuntime.jsxs("div",{className:"ndpr-panel",children:[jsxRuntime.jsx("p",{className:"ndpr-form-field__label",children:"By Lawful Basis"}),w.map(a=>jsxRuntime.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsxRuntime.jsx("span",{className:"ndpr-card__subtitle",children:_[a]}),jsxRuntime.jsx("span",{className:"font-medium",children:d.byLawfulBasis[a]||0})]},a))]}),jsxRuntime.jsxs("div",{className:"ndpr-panel",children:[jsxRuntime.jsx("p",{className:"ndpr-form-field__label",children:"Risk Indicators"}),[["Sensitive Data",d.sensitiveDataRecords,false],["DPIA Required",d.dpiaRequiredRecords,false],["Automated Decisions",d.automatedDecisionRecords,false],["Due for Review",d.recordsDueForReview.length,d.recordsDueForReview.length>0]].map(([a,o,p])=>jsxRuntime.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsxRuntime.jsx("span",{className:"ndpr-card__subtitle",children:a}),jsxRuntime.jsx("span",{className:`font-medium ${p?"ndpr-text-destructive":""}`,children:o})]},a))]}),d.topDepartments.length>0&&jsxRuntime.jsxs("div",{className:"ndpr-panel",children:[jsxRuntime.jsx("p",{className:"ndpr-form-field__label",children:"Top Departments"}),d.topDepartments.slice(0,5).map(a=>jsxRuntime.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsxRuntime.jsx("span",{className:"ndpr-card__subtitle",children:a.department}),jsxRuntime.jsx("span",{className:"font-medium",children:a.count})]},a.department))]})]})]}),A&&m.length>0&&jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("p-3 bg-red-50 dark:bg-red-900/20 rounded-md mb-6",t==null?void 0:t.gapAlert,n),role:"status","aria-live":"polite",children:[jsxRuntime.jsx("p",{className:"text-sm font-medium ndpr-text-destructive mb-2",children:"Compliance Gaps Detected"}),m.slice(0,5).map(a=>jsxRuntime.jsxs("div",{className:"mb-2",children:[jsxRuntime.jsx("p",{className:"text-xs font-medium ndpr-text-destructive",children:a.recordName}),jsxRuntime.jsx("ul",{className:"list-disc list-inside",children:a.gaps.map((o,p)=>jsxRuntime.jsx("li",{className:"text-xs ndpr-text-destructive",children:o},p))})]},a.recordId)),m.length>5&&jsxRuntime.jsxs("p",{className:"text-xs ndpr-text-destructive mt-1",children:["...and ",m.length-5," more record(s) with gaps."]})]}),s.length===0?jsxRuntime.jsx("p",{className:"ndpr-empty-state",children:"No processing records found."}):jsxRuntime.jsx("div",{className:"overflow-x-auto",children:jsxRuntime.jsxs("table",{className:chunkAME4HJR4_js.a("w-full text-sm text-left",t==null?void 0:t.table,n),children:[jsxRuntime.jsx("thead",{className:chunkAME4HJR4_js.a("ndpr-table__head",t==null?void 0:t.tableHeader,n),children:jsxRuntime.jsxs("tr",{children:[jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Name"}),jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Lawful Basis"}),jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Data Categories"}),jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Retention"}),jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Status"}),jsxRuntime.jsx("th",{className:"ndpr-table__cell",children:"Last Reviewed"})]})}),jsxRuntime.jsx("tbody",{children:s.map(a=>{let o=O(a),p=m.some(g=>g.recordId===a.id),c=!!l;return jsxRuntime.jsxs("tr",{onClick:c?()=>l==null?void 0:l(a):void 0,role:c?"button":void 0,tabIndex:c?0:void 0,onKeyDown:c?g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),l==null||l(a));}:void 0,className:chunkAME4HJR4_js.a(`border-b dark:border-gray-600 ${o?"bg-red-50 dark:bg-red-900/10":p?"bg-yellow-50 dark:bg-yellow-900/10":"bg-white dark:bg-gray-800"} ${c?"cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700":""}`,t==null?void 0:t.tableRow,n),children:[jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("p",{className:"font-medium",children:a.name}),a.department&&jsxRuntime.jsx("p",{className:"ndpr-form-field__hint",children:a.department}),o&&jsxRuntime.jsx("span",{className:"text-xs ndpr-text-destructive font-medium",children:"Review Overdue"})]})}),jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:jsxRuntime.jsx("span",{className:"ndpr-badge ndpr-badge--info",children:_[a.lawfulBasis]})}),jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:jsxRuntime.jsx("p",{className:"text-xs ndpr-text-muted max-w-xs truncate",children:a.dataCategories.join(", ")})}),jsxRuntime.jsx("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:a.retentionPeriod||"N/A"}),jsxRuntime.jsx("td",{className:"ndpr-table__cell",children:jsxRuntime.jsx("span",{className:chunkAME4HJR4_js.a(`px-2 py-1 rounded text-xs font-medium ${P[a.status]}`,t==null?void 0:t.statusBadge,n),children:L[a.status]})}),jsxRuntime.jsx("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:D(a.lastReviewedAt)})]},a.id)})})]})})]})};Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});exports.ROPAManagerLite=S;
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import {b,d}from'./chunk-XP5PL6K7.mjs';export{b as generateROPASummary,d as identifyComplianceGaps}from'./chunk-XP5PL6K7.mjs';import {a}from'./chunk-SFGW37LE.mjs';import'./chunk-ZJYULEER.mjs';import {useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var _={consent:"Consent",contract:"Contract",legal_obligation:"Legal Obligation",vital_interests:"Vital Interests",public_interest:"Public Interest",legitimate_interests:"Legitimate Interests"},w=["consent","contract","legal_obligation","vital_interests","public_interest","legitimate_interests"],P={active:"ndpr-badge ndpr-badge--success",inactive:"ndpr-badge ndpr-badge--warning",archived:"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300"},L={active:"Active",inactive:"Inactive",archived:"Archived"};function D(s){return s?new Date(s).toLocaleDateString():"N/A"}function O(s){return !!s.nextReviewDate&&s.nextReviewDate<=Date.now()}var S=({records:s,title:x="Record of Processing Activities (ROPA)",description:R="Maintain a comprehensive record of all data processing activities as required by the NDPA accountability principle.",className:y="",classNames:t,unstyled:n,showSummary:h=true,showComplianceGaps:A=true,onRecordClick:l})=>{let u=useMemo(()=>({id:"lite",organizationName:"",organizationContact:"",organizationAddress:"",records:s,lastUpdated:0,version:"0"}),[s]),d$1=useMemo(()=>b(u),[u]),m=useMemo(()=>d(u),[u]);return jsxs("div",{className:a(`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${y}`,t==null?void 0:t.root,n),children:[jsxs("div",{className:a("",t==null?void 0:t.header,n),children:[jsx("h2",{className:a("ndpr-section-heading",t==null?void 0:t.title,n),children:x}),jsx("p",{className:"ndpr-card__subtitle",children:R})]}),h&&jsxs("div",{className:a("mb-6",t==null?void 0:t.summary,n),children:[jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-4",children:[["p-4 bg-blue-50 dark:bg-blue-900/20 rounded-md text-center","ndpr-text-info","Total Records",d$1.totalRecords,false],["p-4 bg-green-50 dark:bg-green-900/20 rounded-md text-center","ndpr-text-success","Active",d$1.activeRecords,false],["p-4 bg-purple-50 dark:bg-purple-900/20 rounded-md text-center","ndpr-text-info","Cross-Border",d$1.crossBorderRecords,false],["p-4 bg-orange-50 dark:bg-orange-900/20 rounded-md text-center","ndpr-text-warning","Records with Gaps",m.length,true]].map(([a$1,o,p,c,g])=>jsxs("div",{className:a(a$1,t==null?void 0:t.summaryCard,n),children:[jsx("p",{className:g?a(`ndpr-stat__value ${o}`,t==null?void 0:t.complianceScore,n):`ndpr-stat__value ${o}`,children:c}),jsx("p",{className:`text-xs ${o}`,children:p})]},p))}),jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4 mb-4",children:[jsxs("div",{className:"ndpr-panel",children:[jsx("p",{className:"ndpr-form-field__label",children:"By Lawful Basis"}),w.map(a=>jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsx("span",{className:"ndpr-card__subtitle",children:_[a]}),jsx("span",{className:"font-medium",children:d$1.byLawfulBasis[a]||0})]},a))]}),jsxs("div",{className:"ndpr-panel",children:[jsx("p",{className:"ndpr-form-field__label",children:"Risk Indicators"}),[["Sensitive Data",d$1.sensitiveDataRecords,false],["DPIA Required",d$1.dpiaRequiredRecords,false],["Automated Decisions",d$1.automatedDecisionRecords,false],["Due for Review",d$1.recordsDueForReview.length,d$1.recordsDueForReview.length>0]].map(([a,o,p])=>jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsx("span",{className:"ndpr-card__subtitle",children:a}),jsx("span",{className:`font-medium ${p?"ndpr-text-destructive":""}`,children:o})]},a))]}),d$1.topDepartments.length>0&&jsxs("div",{className:"ndpr-panel",children:[jsx("p",{className:"ndpr-form-field__label",children:"Top Departments"}),d$1.topDepartments.slice(0,5).map(a=>jsxs("div",{className:"flex justify-between text-xs mb-1",children:[jsx("span",{className:"ndpr-card__subtitle",children:a.department}),jsx("span",{className:"font-medium",children:a.count})]},a.department))]})]})]}),A&&m.length>0&&jsxs("div",{className:a("p-3 bg-red-50 dark:bg-red-900/20 rounded-md mb-6",t==null?void 0:t.gapAlert,n),role:"status","aria-live":"polite",children:[jsx("p",{className:"text-sm font-medium ndpr-text-destructive mb-2",children:"Compliance Gaps Detected"}),m.slice(0,5).map(a=>jsxs("div",{className:"mb-2",children:[jsx("p",{className:"text-xs font-medium ndpr-text-destructive",children:a.recordName}),jsx("ul",{className:"list-disc list-inside",children:a.gaps.map((o,p)=>jsx("li",{className:"text-xs ndpr-text-destructive",children:o},p))})]},a.recordId)),m.length>5&&jsxs("p",{className:"text-xs ndpr-text-destructive mt-1",children:["...and ",m.length-5," more record(s) with gaps."]})]}),s.length===0?jsx("p",{className:"ndpr-empty-state",children:"No processing records found."}):jsx("div",{className:"overflow-x-auto",children:jsxs("table",{className:a("w-full text-sm text-left",t==null?void 0:t.table,n),children:[jsx("thead",{className:a("ndpr-table__head",t==null?void 0:t.tableHeader,n),children:jsxs("tr",{children:[jsx("th",{className:"ndpr-table__cell",children:"Name"}),jsx("th",{className:"ndpr-table__cell",children:"Lawful Basis"}),jsx("th",{className:"ndpr-table__cell",children:"Data Categories"}),jsx("th",{className:"ndpr-table__cell",children:"Retention"}),jsx("th",{className:"ndpr-table__cell",children:"Status"}),jsx("th",{className:"ndpr-table__cell",children:"Last Reviewed"})]})}),jsx("tbody",{children:s.map(a$1=>{let o=O(a$1),p=m.some(g=>g.recordId===a$1.id),c=!!l;return jsxs("tr",{onClick:c?()=>l==null?void 0:l(a$1):void 0,role:c?"button":void 0,tabIndex:c?0:void 0,onKeyDown:c?g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),l==null||l(a$1));}:void 0,className:a(`border-b dark:border-gray-600 ${o?"bg-red-50 dark:bg-red-900/10":p?"bg-yellow-50 dark:bg-yellow-900/10":"bg-white dark:bg-gray-800"} ${c?"cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700":""}`,t==null?void 0:t.tableRow,n),children:[jsx("td",{className:"ndpr-table__cell",children:jsxs("div",{children:[jsx("p",{className:"font-medium",children:a$1.name}),a$1.department&&jsx("p",{className:"ndpr-form-field__hint",children:a$1.department}),o&&jsx("span",{className:"text-xs ndpr-text-destructive font-medium",children:"Review Overdue"})]})}),jsx("td",{className:"ndpr-table__cell",children:jsx("span",{className:"ndpr-badge ndpr-badge--info",children:_[a$1.lawfulBasis]})}),jsx("td",{className:"ndpr-table__cell",children:jsx("p",{className:"text-xs ndpr-text-muted max-w-xs truncate",children:a$1.dataCategories.join(", ")})}),jsx("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:a$1.retentionPeriod||"N/A"}),jsx("td",{className:"ndpr-table__cell",children:jsx("span",{className:a(`px-2 py-1 rounded text-xs font-medium ${P[a$1.status]}`,t==null?void 0:t.statusBadge,n),children:L[a$1.status]})}),jsx("td",{className:"ndpr-table__cell ndpr-table__cell--muted",children:D(a$1.lastReviewedAt)})]},a$1.id)})})]})})]})};export{S as ROPAManagerLite};
package/dist/server.d.mts CHANGED
@@ -1532,6 +1532,18 @@ export declare interface NotificationRequirement {
1532
1532
  nitdaNotificationDeadline?: number;
1533
1533
  }
1534
1534
 
1535
+ /**
1536
+ * Static metadata for every template — useful for picker UIs that need
1537
+ * to list available templates with a one-line description.
1538
+ */
1539
+ export declare const ORG_POLICY_TEMPLATE_REGISTRY: Record<OrgPolicyTemplateId, {
1540
+ id: OrgPolicyTemplateId;
1541
+ label: string;
1542
+ description: string;
1543
+ /** Best-fit org examples to show in the picker. */
1544
+ examples: readonly string[];
1545
+ }>;
1546
+
1535
1547
  /**
1536
1548
  * Represents organization information for a privacy policy
1537
1549
  */
@@ -1556,6 +1568,48 @@ export declare interface OrganizationInfo {
1556
1568
  ndpcRegistrationNumber?: string;
1557
1569
  }
1558
1570
 
1571
+ /**
1572
+ * Org-specific privacy-policy templates — pre-filled `TemplateContext`
1573
+ * factories for the most common Nigerian app shapes.
1574
+ *
1575
+ * Each template returns a fully-populated `TemplateContext` with:
1576
+ * - industry set to the matching `Industry` value
1577
+ * - the data categories the sector typically collects (selected: true)
1578
+ * - the processing purposes that match the business model
1579
+ * - sensitive-data / children / cross-border / automated-decisions flags
1580
+ * set to the defaults that org type usually needs (a school will have
1581
+ * children data, a hospital will have sensitive data, etc.)
1582
+ *
1583
+ * Templates are guidance starters. The wizard still walks the user through
1584
+ * every step — they can flip any flag, add/remove categories, or rewrite
1585
+ * any section before the policy is finalised. The legal-notice footer the
1586
+ * toolkit ships everywhere applies to the generated output.
1587
+ *
1588
+ * @example
1589
+ * import { templateContextFor } from '@tantainnovative/ndpr-toolkit/server';
1590
+ * const ctx = templateContextFor('ecommerce', { orgName: 'Acme NG' });
1591
+ * const draft = assemblePolicy(ctx);
1592
+ */
1593
+
1594
+ /** Identifiers for the bundled org templates. */
1595
+ export declare type OrgPolicyTemplateId = 'saas' | 'ecommerce' | 'school' | 'healthcare' | 'procurement';
1596
+
1597
+ /** Optional overrides applied on top of a template's defaults. */
1598
+ export declare interface OrgPolicyTemplateOverrides {
1599
+ /** Organisation name (e.g. "Acme Nigeria Ltd"). Default: empty. */
1600
+ orgName?: string;
1601
+ /** Public website URL. */
1602
+ website?: string;
1603
+ /** Privacy contact email. */
1604
+ privacyEmail?: string;
1605
+ /** Postal address. */
1606
+ address?: string;
1607
+ /** DPO name. Required for DCPMI under NDPA Section 32. */
1608
+ dpoName?: string;
1609
+ /** DPO email. Required for the NDPC breach-notification contact. */
1610
+ dpoEmail?: string;
1611
+ }
1612
+
1559
1613
  /** Organisation size tiers — affects complexity of generated language. */
1560
1614
  export declare type OrgSize = 'startup' | 'midsize' | 'enterprise';
1561
1615
 
@@ -2126,6 +2180,22 @@ export declare interface TemplateContext {
2126
2180
  thirdPartyProcessors: ThirdPartyProcessor[];
2127
2181
  }
2128
2182
 
2183
+ /**
2184
+ * Returns a fresh `TemplateContext` pre-filled for the given org type.
2185
+ * Pass `overrides` to set organisation details (name, DPO, etc.) inline.
2186
+ *
2187
+ * Calling without arguments throws — pass a known template id.
2188
+ *
2189
+ * @example
2190
+ * const ctx = templateContextFor('healthcare', {
2191
+ * orgName: 'Lagos Heart Centre',
2192
+ * dpoEmail: 'dpo@lhc.ng',
2193
+ * });
2194
+ */
2195
+ declare function templateContextFor(id: OrgPolicyTemplateId, overrides?: OrgPolicyTemplateOverrides): TemplateContext;
2196
+ export { templateContextFor as createOrgTemplate }
2197
+ export { templateContextFor }
2198
+
2129
2199
  /** A third-party entity that processes data on behalf of the organisation. */
2130
2200
  export declare interface ThirdPartyProcessor {
2131
2201
  /** Name of the third party. */
package/dist/server.d.ts CHANGED
@@ -1532,6 +1532,18 @@ export declare interface NotificationRequirement {
1532
1532
  nitdaNotificationDeadline?: number;
1533
1533
  }
1534
1534
 
1535
+ /**
1536
+ * Static metadata for every template — useful for picker UIs that need
1537
+ * to list available templates with a one-line description.
1538
+ */
1539
+ export declare const ORG_POLICY_TEMPLATE_REGISTRY: Record<OrgPolicyTemplateId, {
1540
+ id: OrgPolicyTemplateId;
1541
+ label: string;
1542
+ description: string;
1543
+ /** Best-fit org examples to show in the picker. */
1544
+ examples: readonly string[];
1545
+ }>;
1546
+
1535
1547
  /**
1536
1548
  * Represents organization information for a privacy policy
1537
1549
  */
@@ -1556,6 +1568,48 @@ export declare interface OrganizationInfo {
1556
1568
  ndpcRegistrationNumber?: string;
1557
1569
  }
1558
1570
 
1571
+ /**
1572
+ * Org-specific privacy-policy templates — pre-filled `TemplateContext`
1573
+ * factories for the most common Nigerian app shapes.
1574
+ *
1575
+ * Each template returns a fully-populated `TemplateContext` with:
1576
+ * - industry set to the matching `Industry` value
1577
+ * - the data categories the sector typically collects (selected: true)
1578
+ * - the processing purposes that match the business model
1579
+ * - sensitive-data / children / cross-border / automated-decisions flags
1580
+ * set to the defaults that org type usually needs (a school will have
1581
+ * children data, a hospital will have sensitive data, etc.)
1582
+ *
1583
+ * Templates are guidance starters. The wizard still walks the user through
1584
+ * every step — they can flip any flag, add/remove categories, or rewrite
1585
+ * any section before the policy is finalised. The legal-notice footer the
1586
+ * toolkit ships everywhere applies to the generated output.
1587
+ *
1588
+ * @example
1589
+ * import { templateContextFor } from '@tantainnovative/ndpr-toolkit/server';
1590
+ * const ctx = templateContextFor('ecommerce', { orgName: 'Acme NG' });
1591
+ * const draft = assemblePolicy(ctx);
1592
+ */
1593
+
1594
+ /** Identifiers for the bundled org templates. */
1595
+ export declare type OrgPolicyTemplateId = 'saas' | 'ecommerce' | 'school' | 'healthcare' | 'procurement';
1596
+
1597
+ /** Optional overrides applied on top of a template's defaults. */
1598
+ export declare interface OrgPolicyTemplateOverrides {
1599
+ /** Organisation name (e.g. "Acme Nigeria Ltd"). Default: empty. */
1600
+ orgName?: string;
1601
+ /** Public website URL. */
1602
+ website?: string;
1603
+ /** Privacy contact email. */
1604
+ privacyEmail?: string;
1605
+ /** Postal address. */
1606
+ address?: string;
1607
+ /** DPO name. Required for DCPMI under NDPA Section 32. */
1608
+ dpoName?: string;
1609
+ /** DPO email. Required for the NDPC breach-notification contact. */
1610
+ dpoEmail?: string;
1611
+ }
1612
+
1559
1613
  /** Organisation size tiers — affects complexity of generated language. */
1560
1614
  export declare type OrgSize = 'startup' | 'midsize' | 'enterprise';
1561
1615
 
@@ -2126,6 +2180,22 @@ export declare interface TemplateContext {
2126
2180
  thirdPartyProcessors: ThirdPartyProcessor[];
2127
2181
  }
2128
2182
 
2183
+ /**
2184
+ * Returns a fresh `TemplateContext` pre-filled for the given org type.
2185
+ * Pass `overrides` to set organisation details (name, DPO, etc.) inline.
2186
+ *
2187
+ * Calling without arguments throws — pass a known template id.
2188
+ *
2189
+ * @example
2190
+ * const ctx = templateContextFor('healthcare', {
2191
+ * orgName: 'Lagos Heart Centre',
2192
+ * dpoEmail: 'dpo@lhc.ng',
2193
+ * });
2194
+ */
2195
+ declare function templateContextFor(id: OrgPolicyTemplateId, overrides?: OrgPolicyTemplateOverrides): TemplateContext;
2196
+ export { templateContextFor as createOrgTemplate }
2197
+ export { templateContextFor }
2198
+
2129
2199
  /** A third-party entity that processes data on behalf of the organisation. */
2130
2200
  export declare interface ThirdPartyProcessor {
2131
2201
  /** Name of the third party. */
package/dist/server.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunkROTLSZMV_js=require('./chunk-ROTLSZMV.js'),chunk4QXTB3L6_js=require('./chunk-4QXTB3L6.js'),chunk7IFSWCQP_js=require('./chunk-7IFSWCQP.js'),chunkN3MQQUQP_js=require('./chunk-N3MQQUQP.js'),chunkLVGT3DLT_js=require('./chunk-LVGT3DLT.js'),chunkQPRYXVH2_js=require('./chunk-QPRYXVH2.js'),chunkQ64735OC_js=require('./chunk-Q64735OC.js'),chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunk7ZZO7GVB_js=require('./chunk-7ZZO7GVB.js'),chunkB46SJB5V_js=require('./chunk-B46SJB5V.js'),chunkL2BRFMVS_js=require('./chunk-L2BRFMVS.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunkROTLSZMV_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunkROTLSZMV_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunkROTLSZMV_js.b}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.a}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.b}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkN3MQQUQP_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkN3MQQUQP_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkN3MQQUQP_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkN3MQQUQP_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkLVGT3DLT_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkLVGT3DLT_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkLVGT3DLT_js.e}});Object.defineProperty(exports,"findUnfilledTokens",{enumerable:true,get:function(){return chunkLVGT3DLT_js.a}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkLVGT3DLT_js.b}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunkQPRYXVH2_js.a}});Object.defineProperty(exports,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunkQ64735OC_js.d}});Object.defineProperty(exports,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunkQ64735OC_js.c}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunkQ64735OC_js.e}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunkQ64735OC_js.f}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkWZYCBW2R_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkWZYCBW2R_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkWZYCBW2R_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkWZYCBW2R_js.a}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunk4CVBQC66_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunk4CVBQC66_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunk3IA3KDII_js.b}});Object.defineProperty(exports,"cookieAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_js.a}});Object.defineProperty(exports,"validateConsent",{enumerable:true,get:function(){return chunkB46SJB5V_js.a}});Object.defineProperty(exports,"validateConsentOptions",{enumerable:true,get:function(){return chunkB46SJB5V_js.b}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkL2BRFMVS_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkL2BRFMVS_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunk3YTAOT5O_js.a}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkUXUMYP4L_js.a}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_LONG",{enumerable:true,get:function(){return chunkZVOIR4QH_js.b}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_SHORT",{enumerable:true,get:function(){return chunkZVOIR4QH_js.a}});Object.defineProperty(exports,"legalDisclaimerBlock",{enumerable:true,get:function(){return chunkZVOIR4QH_js.c}});Object.defineProperty(exports,"localStorageAdapter",{enumerable:true,get:function(){return chunkVWED6UTN_js.a}});
1
+ 'use strict';var chunkROTLSZMV_js=require('./chunk-ROTLSZMV.js'),chunk4QXTB3L6_js=require('./chunk-4QXTB3L6.js'),chunk3GRGYT3P_js=require('./chunk-3GRGYT3P.js'),chunk7IFSWCQP_js=require('./chunk-7IFSWCQP.js'),chunkN3MQQUQP_js=require('./chunk-N3MQQUQP.js'),chunkQPRYXVH2_js=require('./chunk-QPRYXVH2.js'),chunk3YTAOT5O_js=require('./chunk-3YTAOT5O.js'),chunkLVGT3DLT_js=require('./chunk-LVGT3DLT.js'),chunkQ64735OC_js=require('./chunk-Q64735OC.js'),chunkYFBDJ4FH_js=require('./chunk-YFBDJ4FH.js'),chunkWZYCBW2R_js=require('./chunk-WZYCBW2R.js'),chunk4CVBQC66_js=require('./chunk-4CVBQC66.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunk7ZZO7GVB_js=require('./chunk-7ZZO7GVB.js'),chunkB46SJB5V_js=require('./chunk-B46SJB5V.js'),chunkUXUMYP4L_js=require('./chunk-UXUMYP4L.js'),chunkL2BRFMVS_js=require('./chunk-L2BRFMVS.js'),chunkTQZWJGJ2_js=require('./chunk-TQZWJGJ2.js'),chunkZVOIR4QH_js=require('./chunk-ZVOIR4QH.js'),chunkVWED6UTN_js=require('./chunk-VWED6UTN.js');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"apiAdapter",{enumerable:true,get:function(){return chunkROTLSZMV_js.a}});Object.defineProperty(exports,"composeAdapters",{enumerable:true,get:function(){return chunkROTLSZMV_js.c}});Object.defineProperty(exports,"memoryAdapter",{enumerable:true,get:function(){return chunkROTLSZMV_js.b}});Object.defineProperty(exports,"hausaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.c}});Object.defineProperty(exports,"igboLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.b}});Object.defineProperty(exports,"pidginLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.d}});Object.defineProperty(exports,"yorubaLocale",{enumerable:true,get:function(){return chunk4QXTB3L6_js.a}});Object.defineProperty(exports,"ORG_POLICY_TEMPLATE_REGISTRY",{enumerable:true,get:function(){return chunk3GRGYT3P_js.a}});Object.defineProperty(exports,"createOrgTemplate",{enumerable:true,get:function(){return chunk3GRGYT3P_js.b}});Object.defineProperty(exports,"templateContextFor",{enumerable:true,get:function(){return chunk3GRGYT3P_js.b}});Object.defineProperty(exports,"defaultLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.a}});Object.defineProperty(exports,"mergeLocale",{enumerable:true,get:function(){return chunk7IFSWCQP_js.b}});Object.defineProperty(exports,"exportDOCX",{enumerable:true,get:function(){return chunkN3MQQUQP_js.d}});Object.defineProperty(exports,"exportHTML",{enumerable:true,get:function(){return chunkN3MQQUQP_js.a}});Object.defineProperty(exports,"exportMarkdown",{enumerable:true,get:function(){return chunkN3MQQUQP_js.b}});Object.defineProperty(exports,"exportPDF",{enumerable:true,get:function(){return chunkN3MQQUQP_js.c}});Object.defineProperty(exports,"getComplianceScore",{enumerable:true,get:function(){return chunkQPRYXVH2_js.a}});Object.defineProperty(exports,"calculateBreachSeverity",{enumerable:true,get:function(){return chunk3YTAOT5O_js.a}});Object.defineProperty(exports,"DEFAULT_POLICY_SECTIONS",{enumerable:true,get:function(){return chunkLVGT3DLT_js.c}});Object.defineProperty(exports,"DEFAULT_POLICY_VARIABLES",{enumerable:true,get:function(){return chunkLVGT3DLT_js.d}});Object.defineProperty(exports,"createBusinessPolicyTemplate",{enumerable:true,get:function(){return chunkLVGT3DLT_js.e}});Object.defineProperty(exports,"findUnfilledTokens",{enumerable:true,get:function(){return chunkLVGT3DLT_js.a}});Object.defineProperty(exports,"generatePolicyText",{enumerable:true,get:function(){return chunkLVGT3DLT_js.b}});Object.defineProperty(exports,"DEFAULT_DATA_CATEGORIES",{enumerable:true,get:function(){return chunkQ64735OC_js.d}});Object.defineProperty(exports,"UNFILLED_PREFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.a}});Object.defineProperty(exports,"UNFILLED_SUFFIX",{enumerable:true,get:function(){return chunkQ64735OC_js.b}});Object.defineProperty(exports,"assemblePolicy",{enumerable:true,get:function(){return chunkQ64735OC_js.c}});Object.defineProperty(exports,"createDefaultContext",{enumerable:true,get:function(){return chunkQ64735OC_js.e}});Object.defineProperty(exports,"evaluatePolicyCompliance",{enumerable:true,get:function(){return chunkQ64735OC_js.f}});Object.defineProperty(exports,"assessTransferRisk",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.h}});Object.defineProperty(exports,"getTransferMechanismDescription",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.f}});Object.defineProperty(exports,"isNDPCApprovalRequired",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.e}});Object.defineProperty(exports,"validateTransfer",{enumerable:true,get:function(){return chunkYFBDJ4FH_js.g}});Object.defineProperty(exports,"assessComplianceGaps",{enumerable:true,get:function(){return chunkWZYCBW2R_js.c}});Object.defineProperty(exports,"generateLawfulBasisSummary",{enumerable:true,get:function(){return chunkWZYCBW2R_js.d}});Object.defineProperty(exports,"getLawfulBasisDescription",{enumerable:true,get:function(){return chunkWZYCBW2R_js.b}});Object.defineProperty(exports,"validateProcessingActivity",{enumerable:true,get:function(){return chunkWZYCBW2R_js.a}});Object.defineProperty(exports,"exportROPAToCSV",{enumerable:true,get:function(){return chunk4CVBQC66_js.c}});Object.defineProperty(exports,"generateROPASummary",{enumerable:true,get:function(){return chunk4CVBQC66_js.b}});Object.defineProperty(exports,"identifyComplianceGaps",{enumerable:true,get:function(){return chunk4CVBQC66_js.d}});Object.defineProperty(exports,"validateProcessingRecord",{enumerable:true,get:function(){return chunk4CVBQC66_js.a}});Object.defineProperty(exports,"appendAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.c}});Object.defineProperty(exports,"createAuditEntry",{enumerable:true,get:function(){return chunk3IA3KDII_js.a}});Object.defineProperty(exports,"getAuditLog",{enumerable:true,get:function(){return chunk3IA3KDII_js.b}});Object.defineProperty(exports,"cookieAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_js.b}});Object.defineProperty(exports,"sessionStorageAdapter",{enumerable:true,get:function(){return chunk7ZZO7GVB_js.a}});Object.defineProperty(exports,"validateConsent",{enumerable:true,get:function(){return chunkB46SJB5V_js.a}});Object.defineProperty(exports,"validateConsentOptions",{enumerable:true,get:function(){return chunkB46SJB5V_js.b}});Object.defineProperty(exports,"sanitizeInput",{enumerable:true,get:function(){return chunkUXUMYP4L_js.a}});Object.defineProperty(exports,"formatDSRRequest",{enumerable:true,get:function(){return chunkL2BRFMVS_js.b}});Object.defineProperty(exports,"validateDsrSubmission",{enumerable:true,get:function(){return chunkL2BRFMVS_js.a}});Object.defineProperty(exports,"assessDPIARisk",{enumerable:true,get:function(){return chunkTQZWJGJ2_js.a}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_LONG",{enumerable:true,get:function(){return chunkZVOIR4QH_js.b}});Object.defineProperty(exports,"LEGAL_DISCLAIMER_SHORT",{enumerable:true,get:function(){return chunkZVOIR4QH_js.a}});Object.defineProperty(exports,"legalDisclaimerBlock",{enumerable:true,get:function(){return chunkZVOIR4QH_js.c}});Object.defineProperty(exports,"localStorageAdapter",{enumerable:true,get:function(){return chunkVWED6UTN_js.a}});
package/dist/server.mjs CHANGED
@@ -1 +1 @@
1
- export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-PL4XNCQA.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-LQTARVPU.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-HWHBINVN.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-AOHKVFAS.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-Y3MKMAFQ.mjs';export{a as getComplianceScore}from'./chunk-EFIBHKQE.mjs';export{d as DEFAULT_DATA_CATEGORIES,a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-RMQ7OLNY.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-UASG46LP.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-PJNKQPQP.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-RZ6GC6WN.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';export{a as localStorageAdapter}from'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';
1
+ export{a as apiAdapter,c as composeAdapters,b as memoryAdapter}from'./chunk-PL4XNCQA.mjs';export{c as hausaLocale,b as igboLocale,d as pidginLocale,a as yorubaLocale}from'./chunk-LQTARVPU.mjs';export{a as ORG_POLICY_TEMPLATE_REGISTRY,b as createOrgTemplate,b as templateContextFor}from'./chunk-UKLU6BQF.mjs';export{a as defaultLocale,b as mergeLocale}from'./chunk-HWHBINVN.mjs';export{d as exportDOCX,a as exportHTML,b as exportMarkdown,c as exportPDF}from'./chunk-AOHKVFAS.mjs';export{a as getComplianceScore}from'./chunk-EFIBHKQE.mjs';export{a as calculateBreachSeverity}from'./chunk-WTGKZX7J.mjs';export{c as DEFAULT_POLICY_SECTIONS,d as DEFAULT_POLICY_VARIABLES,e as createBusinessPolicyTemplate,a as findUnfilledTokens,b as generatePolicyText}from'./chunk-Y3MKMAFQ.mjs';export{d as DEFAULT_DATA_CATEGORIES,a as UNFILLED_PREFIX,b as UNFILLED_SUFFIX,c as assemblePolicy,e as createDefaultContext,f as evaluatePolicyCompliance}from'./chunk-RMQ7OLNY.mjs';export{h as assessTransferRisk,f as getTransferMechanismDescription,e as isNDPCApprovalRequired,g as validateTransfer}from'./chunk-7BJXI2HI.mjs';export{c as assessComplianceGaps,d as generateLawfulBasisSummary,b as getLawfulBasisDescription,a as validateProcessingActivity}from'./chunk-LWIKDDSU.mjs';export{c as exportROPAToCSV,b as generateROPASummary,d as identifyComplianceGaps,a as validateProcessingRecord}from'./chunk-XP5PL6K7.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';export{b as cookieAdapter,a as sessionStorageAdapter}from'./chunk-UASG46LP.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-PJNKQPQP.mjs';export{a as sanitizeInput}from'./chunk-EWVK45Z3.mjs';export{b as formatDSRRequest,a as validateDsrSubmission}from'./chunk-RZ6GC6WN.mjs';export{a as assessDPIARisk}from'./chunk-LRRENTT5.mjs';export{b as LEGAL_DISCLAIMER_LONG,a as LEGAL_DISCLAIMER_SHORT,c as legalDisclaimerBlock}from'./chunk-ITCY2Z66.mjs';export{a as localStorageAdapter}from'./chunk-DBZSN4WP.mjs';import'./chunk-ZJYULEER.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tantainnovative/ndpr-toolkit",
3
- "version": "3.6.1",
3
+ "version": "3.10.1",
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
  "pnpm": {
@@ -317,8 +317,9 @@
317
317
  "@radix-ui/react-slot": "^1.2.4",
318
318
  "@radix-ui/react-switch": "^1.2.6",
319
319
  "@radix-ui/react-tabs": "^1.1.13",
320
+ "@phosphor-icons/react": "^2.1.7",
320
321
  "@tailwindcss/postcss": "^4.1.13",
321
- "@tantainnovative/ndpr-toolkit": "3.3.0",
322
+ "@tantainnovative/ndpr-toolkit": "^3.7.0",
322
323
  "@testing-library/dom": "^10.4.1",
323
324
  "@testing-library/jest-dom": "^6.6.3",
324
325
  "@testing-library/react": "^16.3.0",