@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.
- package/CHANGELOG.md +125 -0
- package/README.md +29 -8
- package/dist/adapters.d.mts +137 -3
- package/dist/adapters.d.ts +137 -3
- package/dist/adapters.js +1 -2
- package/dist/adapters.mjs +1 -2
- package/dist/breach.d.mts +80 -1
- package/dist/breach.d.ts +80 -1
- package/dist/breach.js +1 -2
- package/dist/breach.mjs +1 -2
- package/dist/{chunk-PATONNTZ.mjs → chunk-3HOXQNCH.mjs} +1 -2
- package/dist/{chunk-MJGOLP5M.js → chunk-3IA3KDII.js} +1 -2
- package/dist/{chunk-M2TPT5GB.js → chunk-3JPDTXGC.js} +1 -2
- package/dist/{chunk-BKRETVJ6.js → chunk-3YTAOT5O.js} +1 -2
- package/dist/{chunk-GOU6FU6Y.js → chunk-4CVBQC66.js} +1 -2
- package/dist/{chunk-E4NCJ7RD.mjs → chunk-4G3SRVRI.mjs} +1 -2
- package/dist/{chunk-6QPRDQZF.js → chunk-4QXTB3L6.js} +1 -2
- package/dist/{chunk-XNSZ7KUH.js → chunk-5GVMKUMP.js} +1 -2
- package/dist/chunk-66NQ5CVY.mjs +1 -0
- package/dist/chunk-732C2EVN.js +1 -0
- package/dist/chunk-7BJXI2HI.mjs +1 -0
- package/dist/{chunk-C5QO3SX4.js → chunk-7IFSWCQP.js} +1 -2
- package/dist/{chunk-A4PK7JB2.js → chunk-7ZZO7GVB.js} +1 -2
- package/dist/chunk-AME4HJR4.js +1 -0
- package/dist/chunk-AOHKVFAS.mjs +322 -0
- package/dist/{chunk-HO5M7M4M.js → chunk-B46SJB5V.js} +1 -2
- package/dist/chunk-BFAX7JQA.mjs +1 -0
- package/dist/{chunk-ID2NYIVE.mjs → chunk-BNHQFZHL.mjs} +2 -3
- package/dist/{chunk-RLYTX3MM.js → chunk-BRS52EDT.js} +1 -2
- package/dist/{chunk-OPYQIJKY.js → chunk-C7IDR2IV.js} +1 -2
- package/dist/{chunk-CISJAQ6W.mjs → chunk-COD3RMTL.mjs} +1 -2
- package/dist/chunk-CR2QZTGW.js +1 -0
- package/dist/{chunk-6WIP33TW.mjs → chunk-DBZSN4WP.mjs} +1 -2
- package/dist/{chunk-74Z23WUA.mjs → chunk-EEQALYOY.mjs} +1 -2
- package/dist/chunk-EFIBHKQE.mjs +1 -0
- package/dist/{chunk-GKKAK6ES.mjs → chunk-EWVK45Z3.mjs} +1 -2
- package/dist/{chunk-QSVVAZVT.mjs → chunk-EXEXUAF6.mjs} +1 -2
- package/dist/chunk-EZCGTHQV.js +6 -0
- package/dist/{chunk-SYMQJO2W.mjs → chunk-GTYXVAJX.mjs} +2 -3
- package/dist/{chunk-6FGCGLH5.mjs → chunk-H3XJV2IR.mjs} +1 -2
- package/dist/chunk-HBLGN4SD.js +1 -0
- package/dist/{chunk-MCWV7S2G.js → chunk-HHK5LHEG.js} +1 -2
- package/dist/{chunk-XHROISIF.mjs → chunk-HWHBINVN.mjs} +1 -2
- package/dist/{chunk-3EGQWLJ6.js → chunk-I2LMQWK3.js} +2 -3
- package/dist/{chunk-NQNFS3QI.js → chunk-I3Y4LOSL.js} +4 -5
- package/dist/chunk-ITCY2Z66.mjs +4 -0
- package/dist/{chunk-Z6IIMLZU.mjs → chunk-KDAZQO3N.mjs} +1 -2
- package/dist/{chunk-J5WCPZLW.js → chunk-L2BRFMVS.js} +1 -2
- package/dist/chunk-L2VO3MEJ.js +1 -0
- package/dist/{chunk-R5FW5XUQ.mjs → chunk-LQTARVPU.mjs} +1 -2
- package/dist/{chunk-6TA2MVTU.mjs → chunk-LRRENTT5.mjs} +1 -2
- package/dist/chunk-LTPSN2SU.mjs +1 -0
- package/dist/{chunk-LIM64IV2.js → chunk-LVGT3DLT.js} +2 -3
- package/dist/{chunk-TXBZPCGF.mjs → chunk-LWIKDDSU.mjs} +1 -2
- package/dist/chunk-MPBPAEZC.mjs +1 -0
- package/dist/{chunk-Z73T6MWY.js → chunk-N3MQQUQP.js} +39 -35
- package/dist/{chunk-HGGLW5TE.js → chunk-NUWVPRNI.js} +1 -2
- package/dist/chunk-O45PKBZA.mjs +6 -0
- package/dist/chunk-O6CUBNXK.mjs +3 -0
- package/dist/{chunk-7SMLHZ4B.js → chunk-P4LNLCSF.js} +1 -2
- package/dist/{chunk-VWPGIES4.mjs → chunk-PCU6GKBE.mjs} +1 -2
- package/dist/chunk-PGI2LM6P.js +103 -0
- package/dist/{chunk-U62QYKVG.mjs → chunk-PJNKQPQP.mjs} +1 -2
- package/dist/chunk-PL4XNCQA.mjs +1 -0
- package/dist/{chunk-LSNL4XR5.js → chunk-PZRQWPWD.js} +1 -2
- package/dist/chunk-Q64735OC.js +144 -0
- package/dist/chunk-QPRYXVH2.js +1 -0
- package/dist/{chunk-MQFZHA2D.js → chunk-RFPLZDIO.js} +1 -2
- package/dist/chunk-RMQ7OLNY.mjs +144 -0
- package/dist/chunk-ROTLSZMV.js +1 -0
- package/dist/{chunk-2AW7KAZO.mjs → chunk-RPXRPGHL.mjs} +1 -2
- package/dist/chunk-RV2VMWZJ.mjs +1 -0
- package/dist/chunk-RXZFYBUJ.js +1 -0
- package/dist/chunk-RYREGZVQ.js +1 -0
- package/dist/{chunk-B4Z5MBUC.mjs → chunk-RZ6GC6WN.mjs} +1 -2
- package/dist/chunk-S6COXIZA.js +2 -0
- package/dist/chunk-SFGW37LE.mjs +1 -0
- package/dist/{chunk-3NQQSU4P.js → chunk-SJDDNB6M.js} +1 -2
- package/dist/chunk-SJRIOZ4K.mjs +1 -0
- package/dist/{chunk-H3EYBSVP.mjs → chunk-TMXK4QKK.mjs} +2 -3
- package/dist/{chunk-P42Z5CFE.js → chunk-TQZWJGJ2.js} +1 -2
- package/dist/{chunk-EPT2K355.mjs → chunk-U5RWJRGA.mjs} +1 -2
- package/dist/{chunk-R3OYAJI6.mjs → chunk-UASG46LP.mjs} +1 -2
- package/dist/{chunk-RXL6CZAI.js → chunk-UAV7V4EM.js} +1 -2
- package/dist/chunk-UI536RU2.js +3 -0
- package/dist/{chunk-7AVN424U.js → chunk-UTFBKL73.js} +1 -2
- package/dist/{chunk-I54CDQGN.js → chunk-UXUMYP4L.js} +1 -2
- package/dist/chunk-V3RYHNHN.js +1 -0
- package/dist/{chunk-P3PULLYP.mjs → chunk-V7UFP6QU.mjs} +1 -2
- package/dist/{chunk-I4M2AA3N.js → chunk-VJTQXVAF.js} +1 -2
- package/dist/{chunk-ELKB2AFZ.js → chunk-VWED6UTN.js} +1 -2
- package/dist/{chunk-LU7PKE7Y.mjs → chunk-VYAL2TGT.mjs} +1 -2
- package/dist/chunk-W47OSMT6.js +2 -0
- package/dist/chunk-W65ZWTLD.mjs +1 -0
- package/dist/chunk-W7RBGZCC.js +1 -0
- package/dist/{chunk-5HL4UBFV.js → chunk-WDDCKYWA.js} +1 -2
- package/dist/{chunk-DJGS7SSN.mjs → chunk-WTGKZX7J.mjs} +1 -2
- package/dist/{chunk-TDDAYVKK.js → chunk-WZYCBW2R.js} +1 -2
- package/dist/chunk-X3GCGC3H.mjs +103 -0
- package/dist/chunk-XJO4DH3L.mjs +2 -0
- package/dist/{chunk-LWXZMKC2.js → chunk-XO3VQYTL.js} +7 -8
- package/dist/{chunk-IZCWCE7W.mjs → chunk-XOH4WXOZ.mjs} +1 -2
- package/dist/{chunk-SHMJNRHO.mjs → chunk-XP5PL6K7.mjs} +1 -2
- package/dist/{chunk-CKGJK4D7.mjs → chunk-Y3MKMAFQ.mjs} +2 -3
- package/dist/chunk-YFBDJ4FH.js +1 -0
- package/dist/chunk-YTU4FNM2.mjs +1 -0
- package/dist/{chunk-TV4U6AIS.js → chunk-Z763UI5U.js} +1 -2
- package/dist/chunk-ZHFLBL63.mjs +2 -0
- package/dist/{chunk-RRVKUCFR.mjs → chunk-ZIZL37BG.mjs} +1 -2
- package/dist/{chunk-WWT2ZSNU.mjs → chunk-ZJYULEER.mjs} +1 -2
- package/dist/{chunk-LJNNPAFU.mjs → chunk-ZQZJNKVB.mjs} +1 -2
- package/dist/chunk-ZVOIR4QH.js +4 -0
- package/dist/consent.js +1 -2
- package/dist/consent.mjs +1 -2
- package/dist/core.d.mts +98 -19
- package/dist/core.d.ts +98 -19
- package/dist/core.js +1 -2
- package/dist/core.mjs +1 -2
- package/dist/cross-border.d.mts +36 -14
- package/dist/cross-border.d.ts +36 -14
- package/dist/cross-border.js +1 -2
- package/dist/cross-border.mjs +1 -2
- package/dist/dpia.d.mts +4 -4
- package/dist/dpia.d.ts +4 -4
- package/dist/dpia.js +1 -2
- package/dist/dpia.mjs +1 -2
- package/dist/dsr.d.mts +30 -17
- package/dist/dsr.d.ts +30 -17
- package/dist/dsr.js +1 -2
- package/dist/dsr.mjs +1 -2
- package/dist/hooks.d.mts +113 -20
- package/dist/hooks.d.ts +113 -20
- package/dist/hooks.js +1 -2
- package/dist/hooks.mjs +1 -2
- package/dist/index.d.mts +422 -26
- package/dist/index.d.ts +422 -26
- package/dist/index.js +1 -2
- package/dist/index.mjs +1 -2
- package/dist/lawful-basis.js +1 -2
- package/dist/lawful-basis.mjs +1 -2
- package/dist/policy.js +1 -2
- package/dist/policy.mjs +1 -2
- package/dist/presets-consent.d.mts +139 -0
- package/dist/presets-consent.d.ts +139 -0
- package/dist/presets-consent.js +2 -0
- package/dist/presets-consent.mjs +2 -0
- package/dist/presets-dsr.d.mts +133 -0
- package/dist/presets-dsr.d.ts +133 -0
- package/dist/presets-dsr.js +2 -0
- package/dist/presets-dsr.mjs +2 -0
- package/dist/presets-policy.d.mts +203 -0
- package/dist/presets-policy.d.ts +203 -0
- package/dist/presets-policy.js +2 -0
- package/dist/presets-policy.mjs +2 -0
- package/dist/presets.d.mts +127 -5
- package/dist/presets.d.ts +127 -5
- package/dist/presets.js +1 -2
- package/dist/presets.mjs +1 -2
- package/dist/ropa.js +1 -2
- package/dist/ropa.mjs +1 -2
- package/dist/server.d.mts +226 -22
- package/dist/server.d.ts +226 -22
- package/dist/server.js +1 -2
- package/dist/server.mjs +1 -2
- package/dist/styles.css +34 -0
- package/dist/unstyled.d.mts +3 -1
- package/dist/unstyled.d.ts +3 -1
- package/dist/unstyled.js +1 -2
- package/dist/unstyled.mjs +1 -2
- package/package.json +83 -20
- package/dist/chunk-3VQAYQR7.js +0 -7
- package/dist/chunk-6HZL2WDU.mjs +0 -2
- package/dist/chunk-75TJPK2N.mjs +0 -2
- package/dist/chunk-ABDB7LEV.mjs +0 -2
- package/dist/chunk-AYKLAEOU.mjs +0 -2
- package/dist/chunk-C4YM4UMI.js +0 -2
- package/dist/chunk-CKJAECGV.js +0 -2
- package/dist/chunk-CPK5D5FY.js +0 -132
- package/dist/chunk-CWHBCQGT.mjs +0 -2
- package/dist/chunk-E64TU6IU.js +0 -2
- package/dist/chunk-F5TXUA4O.mjs +0 -4
- package/dist/chunk-GN5C32JB.mjs +0 -2
- package/dist/chunk-GRLIPT5V.mjs +0 -132
- package/dist/chunk-I557S566.mjs +0 -15
- package/dist/chunk-JBSCER34.js +0 -2
- package/dist/chunk-JFFOPHU3.mjs +0 -318
- package/dist/chunk-KF3EFJEF.mjs +0 -3
- package/dist/chunk-ORFC66EA.js +0 -4
- package/dist/chunk-RY3PGVLZ.mjs +0 -2
- package/dist/chunk-S4GRSNB4.js +0 -2
- package/dist/chunk-SCWNM4PC.mjs +0 -2
- package/dist/chunk-SKKOMFXH.js +0 -81
- package/dist/chunk-TCN22KYP.mjs +0 -7
- package/dist/chunk-TUNQUVHU.mjs +0 -81
- package/dist/chunk-VIQUXWJC.js +0 -2
- package/dist/chunk-WTJGLNTB.js +0 -3
- package/dist/chunk-XIM7KMD6.js +0 -2
- package/dist/chunk-YPKUHSK4.js +0 -15
- package/dist/chunk-ZPKVLTSX.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$2}from'./chunk-EWVK45Z3.mjs';import {a}from'./chunk-SFGW37LE.mjs';import {a as a$1,b}from'./chunk-ZJYULEER.mjs';import {useState}from'react';import {jsxs,jsx}from'react/jsx-runtime';var or=({categories:Me,onSubmit:$e,onValidationError:u,title:Oe="Report a Data Breach",formDescription:Le="Use this form to report a suspected or confirmed data breach in accordance with NDPA Section 40. All fields marked with * are required.",submitButtonText:ze="Submit Report",className:G="",buttonClassName:K="",classNames:d={},unstyled:c=false,isSubmitting:f=false,showConfirmation:Ye=true,confirmationMessage:Ue="Your breach report has been submitted successfully. The data protection team has been notified.",allowAttachments:He=true,maxAttachments:x=5,maxFileSize:C=5*1024*1024,allowedFileTypes:S=[".pdf",".jpg",".jpeg",".png",".doc",".docx",".xls",".xlsx",".txt"],defaultValues:t,onReset:A})=>{var Se,Ae,De,Re,we,Fe,qe,Pe,ke,Te,je;let W=r=>{if(!r)return "";let o=new Date(r),l=s=>String(s).padStart(2,"0");return `${o.getFullYear()}-${l(o.getMonth()+1)}-${l(o.getDate())}T${l(o.getHours())}:${l(o.getMinutes())}`},[D,J]=useState((t==null?void 0:t.title)||""),[R,Q]=useState((t==null?void 0:t.description)||""),[w,X]=useState((t==null?void 0:t.category)||""),[F,V]=useState(W(t==null?void 0:t.discoveredAt)),[q,ee]=useState(W(t==null?void 0:t.occurredAt)),[P,re]=useState(((Se=t==null?void 0:t.reporter)==null?void 0:Se.name)||""),[N,te]=useState(((Ae=t==null?void 0:t.reporter)==null?void 0:Ae.email)||""),[k,ie]=useState(((De=t==null?void 0:t.reporter)==null?void 0:De.department)||""),[T,ae]=useState(((Re=t==null?void 0:t.reporter)==null?void 0:Re.phone)||""),[ne,oe]=useState((t==null?void 0:t.affectedSystems)||[]),[Ze,se]=useState(((we=t==null?void 0:t.affectedSystems)==null?void 0:we.join(", "))||""),[j,de]=useState((t==null?void 0:t.dataTypes)||[]),[h,me]=useState((t==null?void 0:t.estimatedAffectedSubjects)!=null?String(t.estimatedAffectedSubjects):""),[I,ce]=useState((t==null?void 0:t.approximateRecordCount)!=null?String(t.approximateRecordCount):""),[B,pe]=useState(((Fe=t==null?void 0:t.dataSubjectCategories)==null?void 0:Fe.join(", "))||""),[le,ge]=useState((qe=t==null?void 0:t.involvesSensitiveData)!=null?qe:false),[E,be]=useState((t==null?void 0:t.likelyConsequences)||""),[M,fe]=useState((t==null?void 0:t.mitigationMeasures)||""),[$,he]=useState(((Pe=t==null?void 0:t.dpoContact)==null?void 0:Pe.name)||""),[O,ve]=useState(((ke=t==null?void 0:t.dpoContact)==null?void 0:ke.email)||""),[L,Ne]=useState(((Te=t==null?void 0:t.dpoContact)==null?void 0:Te.phone)||""),[z,_e]=useState((je=t==null?void 0:t.isPhasedReport)!=null?je:false),[Y,ye]=useState((t==null?void 0:t.supplementsReportId)||""),[ue,xe]=useState((t==null?void 0:t.status)||"ongoing"),[U,Ce]=useState((t==null?void 0:t.initialActions)||""),[_,H]=useState([]),[Ge,Z]=useState(false),[a$3,v]=useState({}),Ke=()=>{J(""),Q(""),X(""),V(""),ee(""),re(""),te(""),ie(""),ae(""),oe([]),se(""),de([]),me(""),ce(""),pe(""),ge(false),be(""),fe(""),he(""),ve(""),Ne(""),_e(false),ye(""),xe("ongoing"),Ce(""),H([]),Z(false),v({}),A==null||A();},We=r=>{let o=r.target.value;se(o);let l=o.split(",").map(s=>s.trim()).filter(Boolean);oe(l);},Je=r=>{de(o=>o.includes(r)?o.filter(l=>l!==r):[...o,r]);},Qe=r=>{var Ie;let o=r.target.files;if(!o)return;let l=[],s={};if(_.length+o.length>x){s.attachments=`Maximum of ${x} files allowed`,v(g=>a$1(a$1({},g),s));return}for(let g=0;g<o.length;g++){let y=o[g];if(y.size>C){s.attachments=`File ${y.name} exceeds the maximum size of ${C/(1024*1024)}MB`;continue}let Be="."+((Ie=y.name.split(".").pop())==null?void 0:Ie.toLowerCase());if(!S.includes(Be)){s.attachments=`File type ${Be} is not allowed`;continue}l.push(y);}l.length>0&&H(g=>[...g,...l]),Object.keys(s).length>0?v(g=>a$1(a$1({},g),s)):v(g=>b(a$1({},g),{attachments:""}));},Xe=r=>{H(o=>o.filter((l,s)=>s!==r));},Ve=()=>{let r={};return D.trim()||(r.breachTitle="Breach title is required"),R.trim()||(r.description="Description is required"),w||(r.category="Category is required"),F||(r.discoveredAt="Discovery date is required"),P.trim()||(r.reporterName="Reporter name is required"),N.trim()?/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(N)||(r.reporterEmail="Reporter email is invalid"):r.reporterEmail="Reporter email is required",k.trim()||(r.reporterDepartment="Reporter department is required"),ne.length===0&&(r.affectedSystems="At least one affected system is required"),j.length===0&&(r.dataTypes="At least one data type is required"),h&&isNaN(Number(h))&&(r.estimatedAffectedSubjects="Estimated affected subjects must be a number"),v(r),r},er=r=>{r.preventDefault();let o=Ve();if(Object.keys(o).length>0){u==null||u(o);return}let l={title:a$2(D),description:a$2(R),category:w,discoveredAt:new Date(F).getTime(),occurredAt:q?new Date(q).getTime():void 0,reportedAt:Date.now(),reporter:{name:a$2(P),email:a$2(N),department:a$2(k),phone:T?a$2(T):void 0},affectedSystems:ne.map(s=>a$2(s)),dataTypes:j,estimatedAffectedSubjects:h?Number(h):void 0,approximateRecordCount:I?Number(I):void 0,dataSubjectCategories:B?B.split(",").map(s=>a$2(s.trim())).filter(Boolean):void 0,involvesSensitiveData:le,likelyConsequences:E?a$2(E):void 0,mitigationMeasures:M?a$2(M):void 0,dpoContact:$||O?{name:a$2($),email:a$2(O),phone:L?a$2(L):void 0}:void 0,isPhasedReport:z||void 0,supplementsReportId:Y?a$2(Y):void 0,status:ue,initialActions:U?a$2(U):void 0,attachments:_.map(s=>({name:s.name,type:s.type,size:s.size,file:s}))};$e(l),Ye&&Z(true);};if(Ge)return jsxs("div",{"data-ndpr-component":"breach-report-form",className:`p-4 bg-green-50 dark:bg-green-900/20 rounded-md ${G}`,children:[jsx("h2",{className:"text-lg font-bold ndpr-text-success mb-2",children:"Report Submitted"}),jsx("p",{className:"ndpr-text-success",children:Ue}),jsxs("div",{className:"mt-4 p-4 bg-yellow-50 dark:bg-yellow-900/20 rounded-md",children:[jsx("h3",{className:"text-sm font-bold ndpr-text-warning mb-2",children:"Important: Next Steps"}),jsx("p",{className:"ndpr-text-warning text-sm",children:"Under the NDPA (Section 40), data breaches that pose a risk to the rights and freedoms of data subjects must be reported to the NDPC within 72 hours of discovery. The data protection team will assess this breach and determine if notification is required."})]}),jsx("button",{onClick:()=>Z(false),className:`mt-4 px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700 ${K}`,children:"Report Another Breach"})]});let rr=[{id:"personal",label:"Personal Information (names, addresses)"},{id:"contact",label:"Contact Information (email, phone)"},{id:"financial",label:"Financial Information (bank details, payment info)"},{id:"health",label:"Health Information"},{id:"identification",label:"Identification Documents (ID cards, passports)"},{id:"login",label:"Login Credentials"},{id:"biometric",label:"Biometric Data"},{id:"children",label:"Children's Data"},{id:"location",label:"Location Data"},{id:"communications",label:"Communications Content"}];return jsxs("div",{className:a(`bg-white dark:bg-gray-800 p-6 rounded-lg shadow-md ${G}`,d.root,c),children:[jsx("h2",{className:a("ndpr-section-heading",d.title,c),children:Oe}),jsx("p",{className:"ndpr-card__subtitle",children:Le}),jsx("form",{onSubmit:er,className:a("",d.form,c),children:jsxs("div",{className:"ndpr-form-section",children:[jsxs("div",{className:a("",d.fieldGroup,c),children:[jsx("h3",{className:"ndpr-section-heading",children:"Breach Information"}),jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxs("div",{children:[jsxs("label",{htmlFor:"breachTitle",className:a("ndpr-form-field__label",d.label,c),children:["Breach Title/Summary ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"breachTitle",value:D,onChange:r=>J(r.target.value),className:a("ndpr-form-field__input",d.input,c),required:true,"aria-invalid":!!a$3.breachTitle,"aria-describedby":a$3.breachTitle?"breachTitle-error":void 0}),a$3.breachTitle&&jsx("p",{id:"breachTitle-error",role:"alert",className:"ndpr-form-field__error",children:a$3.breachTitle})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"category",className:a("ndpr-form-field__label",d.label,c),children:["Breach Category ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxs("select",{id:"category",value:w,onChange:r=>X(r.target.value),className:a("ndpr-form-field__input",d.select,c),required:true,"aria-invalid":!!a$3.category,"aria-describedby":a$3.category?"category-error":void 0,children:[jsx("option",{value:"",children:"Select a category"}),Me.map(r=>jsx("option",{value:r.id,children:r.name},r.id))]}),a$3.category&&jsx("p",{id:"category-error",role:"alert",className:"ndpr-form-field__error",children:a$3.category})]}),jsxs("div",{className:"md:col-span-2",children:[jsxs("label",{htmlFor:"description",className:a("ndpr-form-field__label",d.label,c),children:["Detailed Description ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("textarea",{id:"description",value:R,onChange:r=>Q(r.target.value),rows:4,className:a("ndpr-form-field__input",d.textarea,c),required:true,"aria-invalid":!!a$3.description,"aria-describedby":a$3.description?"description-error":void 0}),a$3.description&&jsx("p",{id:"description-error",role:"alert",className:"ndpr-form-field__error",children:a$3.description})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"discoveredAt",className:"ndpr-form-field__label",children:["Date Discovered ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"datetime-local",id:"discoveredAt",value:F,onChange:r=>V(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a$3.discoveredAt,"aria-describedby":a$3.discoveredAt?"discoveredAt-error":void 0}),a$3.discoveredAt&&jsx("p",{id:"discoveredAt-error",role:"alert",className:"ndpr-form-field__error",children:a$3.discoveredAt})]}),jsxs("div",{children:[jsx("label",{htmlFor:"occurredAt",className:"ndpr-form-field__label",children:"Date Occurred (if known)"}),jsx("input",{type:"datetime-local",id:"occurredAt",value:q,onChange:r=>ee(r.target.value),className:"ndpr-form-field__input"})]})]})]}),jsxs("div",{children:[jsx("h3",{className:"ndpr-section-heading",children:"Reporter Information"}),jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxs("div",{children:[jsxs("label",{htmlFor:"reporterName",className:"ndpr-form-field__label",children:["Your Name ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"reporterName",value:P,onChange:r=>re(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a$3.reporterName,"aria-describedby":a$3.reporterName?"reporterName-error":void 0}),a$3.reporterName&&jsx("p",{id:"reporterName-error",role:"alert",className:"ndpr-form-field__error",children:a$3.reporterName})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"reporterEmail",className:"ndpr-form-field__label",children:["Your Email ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"email",id:"reporterEmail",value:N,onChange:r=>te(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a$3.reporterEmail,"aria-describedby":a$3.reporterEmail?"reporterEmail-error":void 0}),a$3.reporterEmail&&jsx("p",{id:"reporterEmail-error",role:"alert",className:"ndpr-form-field__error",children:a$3.reporterEmail})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"reporterDepartment",className:"ndpr-form-field__label",children:["Your Department ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"reporterDepartment",value:k,onChange:r=>ie(r.target.value),className:"ndpr-form-field__input",required:true,"aria-invalid":!!a$3.reporterDepartment,"aria-describedby":a$3.reporterDepartment?"reporterDepartment-error":void 0}),a$3.reporterDepartment&&jsx("p",{id:"reporterDepartment-error",role:"alert",className:"ndpr-form-field__error",children:a$3.reporterDepartment})]}),jsxs("div",{children:[jsx("label",{htmlFor:"reporterPhone",className:"ndpr-form-field__label",children:"Your Phone Number (Optional)"}),jsx("input",{type:"tel",id:"reporterPhone",value:T,onChange:r=>ae(r.target.value),className:"ndpr-form-field__input"})]})]})]}),jsxs("div",{children:[jsx("h3",{className:"ndpr-section-heading",children:"Impact Information"}),jsxs("div",{className:"ndpr-form-grid ndpr-form-grid--2",children:[jsxs("div",{children:[jsxs("label",{htmlFor:"affectedSystems",className:"ndpr-form-field__label",children:["Affected Systems/Applications ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsx("input",{type:"text",id:"affectedSystems",value:Ze,onChange:We,placeholder:"e.g. CRM, Email Server, Website (comma separated)",className:"ndpr-form-field__input",required:true,"aria-invalid":!!a$3.affectedSystems,"aria-describedby":a$3.affectedSystems?"affectedSystems-error":void 0}),a$3.affectedSystems&&jsx("p",{id:"affectedSystems-error",role:"alert",className:"ndpr-form-field__error",children:a$3.affectedSystems})]}),jsxs("div",{children:[jsx("label",{htmlFor:"estimatedAffectedSubjects",className:"ndpr-form-field__label",children:"Estimated Number of Affected Data Subjects"}),jsx("input",{type:"text",id:"estimatedAffectedSubjects",value:h,onChange:r=>me(r.target.value),placeholder:"e.g. 100",className:"ndpr-form-field__input","aria-invalid":!!a$3.estimatedAffectedSubjects,"aria-describedby":a$3.estimatedAffectedSubjects?"estimatedAffectedSubjects-error":void 0}),a$3.estimatedAffectedSubjects&&jsx("p",{id:"estimatedAffectedSubjects-error",role:"alert",className:"ndpr-form-field__error",children:a$3.estimatedAffectedSubjects})]}),jsxs("fieldset",{className:"md:col-span-2","aria-invalid":!!a$3.dataTypes,"aria-describedby":a$3.dataTypes?"dataTypes-error":void 0,children:[jsxs("legend",{className:"ndpr-form-field__label",children:["Types of Data Involved ",jsx("span",{className:"ndpr-form-field__required","aria-hidden":"true",children:"*"}),jsx("span",{className:"sr-only",children:"(required)"})]}),jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:rr.map(r=>jsxs("div",{className:"flex items-center",children:[jsx("input",{type:"checkbox",id:`dataType_${r.id}`,checked:j.includes(r.id),onChange:()=>Je(r.id),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsx("label",{htmlFor:`dataType_${r.id}`,className:"ml-2 text-sm ndpr-text-muted",children:r.label})]},r.id))}),a$3.dataTypes&&jsx("p",{id:"dataTypes-error",role:"alert",className:"ndpr-form-field__error",children:a$3.dataTypes})]}),jsxs("div",{children:[jsxs("label",{htmlFor:"status",className:"ndpr-form-field__label",children:["Current Status ",jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),jsxs("select",{id:"status",value:ue,onChange:r=>xe(r.target.value),className:a("ndpr-form-field__input",d.select,c),required:true,children:[jsx("option",{value:"ongoing",children:"Ongoing (breach is still active)"}),jsx("option",{value:"contained",children:"Contained (breach is stopped but not resolved)"}),jsx("option",{value:"resolved",children:"Resolved (breach is fully addressed)"})]})]}),jsxs("div",{children:[jsx("label",{htmlFor:"approximateRecordCount",className:"ndpr-form-field__label",children:"Approximate Number of Records Concerned"}),jsx("input",{type:"text",id:"approximateRecordCount",value:I,onChange:r=>ce(r.target.value),placeholder:"e.g. 5000",className:"ndpr-form-field__input"}),jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Required for the NDPC report (NDPA Section 40(2))."})]}),jsxs("div",{children:[jsx("label",{htmlFor:"dataSubjectCategories",className:"ndpr-form-field__label",children:"Categories of Data Subjects Affected"}),jsx("input",{type:"text",id:"dataSubjectCategories",value:B,onChange:r=>pe(r.target.value),placeholder:"e.g. customers, employees, minors",className:"ndpr-form-field__input"}),jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Comma-separated. Required for the NDPC report (NDPA Section 40(2))."})]}),jsxs("div",{className:"md:col-span-2 flex items-center",children:[jsx("input",{id:"involvesSensitiveData",type:"checkbox",checked:le,onChange:r=>ge(r.target.checked),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsx("label",{htmlFor:"involvesSensitiveData",className:"ml-2 text-sm ndpr-text-muted",children:"Sensitive personal data (NDPA Section 30) is involved"})]}),jsxs("div",{className:"md:col-span-2",children:[jsx("label",{htmlFor:"likelyConsequences",className:"ndpr-form-field__label",children:"Likely Consequences for Data Subjects"}),jsx("textarea",{id:"likelyConsequences",value:E,onChange:r=>be(r.target.value),placeholder:"e.g. identity theft, financial loss, reputational damage, discrimination",rows:3,className:a("ndpr-form-field__input",d.textarea,c)}),jsx("p",{className:"text-xs ndpr-text-muted mt-1",children:"Required content for NDPC report and Section 40(3) communications to data subjects."})]}),jsxs("div",{className:"md:col-span-2",children:[jsx("label",{htmlFor:"mitigationMeasures",className:"ndpr-form-field__label",children:"Mitigation Measures"}),jsx("textarea",{id:"mitigationMeasures",value:M,onChange:r=>fe(r.target.value),placeholder:"Measures taken or proposed to mitigate possible adverse effects (NDPA Section 40(3))",rows:3,className:a("ndpr-form-field__input",d.textarea,c)})]}),jsxs("div",{className:"md:col-span-2",children:[jsx("h4",{className:"ndpr-section-heading text-sm mt-4",children:"Data Protection Officer (NDPC contact)"}),jsx("p",{className:"text-xs ndpr-text-muted mb-2",children:"Defaults to organisation-level DPO if left blank."})]}),jsxs("div",{children:[jsx("label",{htmlFor:"dpoName",className:"ndpr-form-field__label",children:"DPO Name"}),jsx("input",{type:"text",id:"dpoName",value:$,onChange:r=>he(r.target.value),className:"ndpr-form-field__input"})]}),jsxs("div",{children:[jsx("label",{htmlFor:"dpoEmail",className:"ndpr-form-field__label",children:"DPO Email"}),jsx("input",{type:"email",id:"dpoEmail",value:O,onChange:r=>ve(r.target.value),className:"ndpr-form-field__input"})]}),jsxs("div",{children:[jsx("label",{htmlFor:"dpoPhone",className:"ndpr-form-field__label",children:"DPO Phone"}),jsx("input",{type:"tel",id:"dpoPhone",value:L,onChange:r=>Ne(r.target.value),className:"ndpr-form-field__input"})]}),jsxs("div",{className:"md:col-span-2 flex items-center mt-2",children:[jsx("input",{id:"isPhasedReport",type:"checkbox",checked:z,onChange:r=>_e(r.target.checked),className:"h-4 w-4 rounded border-gray-300 text-[rgb(var(--ndpr-primary))] focus:ring-[rgb(var(--ndpr-ring))]"}),jsx("label",{htmlFor:"isPhasedReport",className:"ml-2 text-sm ndpr-text-muted",children:"This is a phased / interim report (Section 40(2) \u2014 complete info not yet available)"})]}),z&&jsxs("div",{className:"md:col-span-2",children:[jsx("label",{htmlFor:"supplementsReportId",className:"ndpr-form-field__label",children:"Supplements Report ID (if applicable)"}),jsx("input",{type:"text",id:"supplementsReportId",value:Y,onChange:r=>ye(r.target.value),placeholder:"Prior report ID this report supplements",className:"ndpr-form-field__input"})]}),jsxs("div",{className:"md:col-span-2",children:[jsx("label",{htmlFor:"initialActions",className:"ndpr-form-field__label",children:"Initial Actions Taken"}),jsx("textarea",{id:"initialActions",value:U,onChange:r=>Ce(r.target.value),placeholder:"Describe any immediate actions that have been taken to address the breach",rows:3,className:a("ndpr-form-field__input",d.textarea,c)})]})]})]}),He&&jsxs("div",{children:[jsx("h3",{className:"ndpr-section-heading",children:"Attachments"}),jsxs("div",{className:"ndpr-form-field",children:[jsx("label",{className:"ndpr-form-field__label",children:"Upload Supporting Files (Optional)"}),jsxs("p",{className:"text-xs ndpr-text-muted mb-2",children:["Max ",x," files, ",C/(1024*1024),"MB each. Allowed types: ",S.join(", ")]}),jsx("input",{type:"file",onChange:Qe,multiple:true,className:"ndpr-form-field__input",accept:S.join(",")}),a$3.attachments&&jsx("p",{id:"attachments-error",role:"alert",className:"ndpr-form-field__error",children:a$3.attachments})]}),_.length>0&&jsxs("div",{className:"ndpr-form-field",children:[jsx("h4",{className:"ndpr-form-field__label",children:"Attached Files:"}),jsx("ul",{className:"ndpr-form-section",children:_.map((r,o)=>jsxs("li",{className:"flex items-center justify-between p-2 bg-gray-50 dark:bg-gray-700 rounded",children:[jsxs("div",{className:"flex items-center",children:[jsx("svg",{className:"w-4 h-4 ndpr-text-muted mr-2",fill:"currentColor",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg",children:jsx("path",{fillRule:"evenodd",d:"M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z",clipRule:"evenodd"})}),jsx("span",{className:"text-sm ndpr-text-muted",children:r.name}),jsxs("span",{className:"ml-2 text-xs ndpr-text-muted",children:["(",(r.size/1024).toFixed(1)," KB)"]})]}),jsxs("button",{type:"button",onClick:()=>Xe(o),"aria-label":`Remove attachment ${r.name}`,className:"text-red-500 hover:ndpr-text-destructive p-2 min-w-[44px] min-h-[44px] flex items-center justify-center",children:[jsx("svg",{"aria-hidden":"true",focusable:"false",className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg",children:jsx("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})}),jsx("span",{className:"sr-only",children:"Remove"})]})]},o))})]})]}),jsxs("div",{className:a("ndpr-alert ndpr-alert--info",d.notice,c),children:[jsx("h3",{className:"text-sm font-bold ndpr-text-info mb-2",children:"NDPA Breach Notification Requirements"}),jsx("p",{className:"ndpr-text-info text-sm",children:"Under the Nigeria Data Protection Act (NDPA), Section 40, data breaches that pose a risk to the rights and freedoms of data subjects must be reported to the NDPC within 72 hours of discovery. The data protection team will assess this breach and determine if notification is required."})]}),jsxs("div",{className:"mt-6 relative flex gap-3",children:[f&&d.loadingOverlay&&jsx("div",{className:d.loadingOverlay}),jsx("button",{type:"submit",disabled:f,className:a(`px-6 py-3 bg-[rgb(var(--ndpr-primary))] text-white rounded-md hover:bg-[rgb(var(--ndpr-primary-hover))] focus:outline-none focus:ring-2 focus:ring-[rgb(var(--ndpr-ring))] focus:ring-offset-2 ${K} ${f?"opacity-50 cursor-not-allowed":""}`,d.primaryButton||d.submitButton,c),children:f?"Submitting...":ze}),jsx("button",{type:"button",onClick:Ke,disabled:f,className:a("px-6 py-3 bg-gray-200 dark:bg-gray-600 text-gray-700 dark:text-gray-200 rounded-md hover:bg-gray-300 dark:hover:bg-gray-500 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2",void 0,c),children:"Reset"})]})]})})]})};
|
|
2
|
+
export{or as a};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-RRVKUCFR.mjs.map
|
|
1
|
+
import {a}from'./chunk-SFGW37LE.mjs';import {jsxs,jsx}from'react/jsx-runtime';var f={consent:"Consent",dsr:"Data Subject Rights",dpia:"DPIA",breach:"Breach Notification",policy:"Privacy Policy",lawfulBasis:"Lawful Basis",crossBorder:"Cross-Border",ropa:"ROPA"},p={critical:"rgb(var(--ndpr-destructive))","needs-work":"rgb(var(--ndpr-warning))",good:"rgb(var(--ndpr-primary))",excellent:"rgb(var(--ndpr-success))"},m={critical:"Critical","needs-work":"Needs Work",good:"Good",excellent:"Excellent"},C={critical:"Critical",high:"High",medium:"Medium",low:"Low"},h=({score:t,rating:o,classNames:e,unstyled:l})=>{let r=p[o],i=2*Math.PI*40,g=i*(1-t/100);return jsxs("div",{className:a("relative inline-flex items-center justify-center",e==null?void 0:e.scoreCircle,l),role:"img","aria-label":`Compliance score: ${t} out of 100, rated ${m[o]}`,children:[jsxs("svg",{width:"120",height:"120",viewBox:"0 0 100 100","aria-hidden":"true",children:[jsx("circle",{cx:"50",cy:"50",r:"40",fill:"none",stroke:"rgba(0,0,0,0.08)",strokeWidth:"8"}),jsx("circle",{cx:"50",cy:"50",r:"40",fill:"none",stroke:r,strokeWidth:"8",strokeLinecap:"round",strokeDasharray:i,strokeDashoffset:g,transform:"rotate(-90 50 50)",style:{transition:"stroke-dashoffset 0.4s ease"}})]}),jsx("span",{className:a("absolute text-2xl font-bold tabular-nums",e==null?void 0:e.scoreValue,l),style:{color:r},children:t})]})},x=({rating:t,className:o,unstyled:e})=>{let l=p[t];return jsx("span",{className:a("inline-block px-3 py-1 rounded-full text-sm font-semibold",o,e),style:{backgroundColor:`${l.replace("rgb(","rgba(").replace(")",", 0.12)")}`,color:l,border:`1px solid ${l.replace("rgb(","rgba(").replace(")",", 0.3)")}`},role:"status","aria-live":"polite",children:m[t]})},R=({moduleKey:t,module:o,classNames:e,unstyled:l})=>{var b;let r=o.score>=90?"excellent":o.score>=70?"good":o.score>=40?"needs-work":"critical",i=p[r];Math.round(o.score/100*(o.gaps.length+Math.round(o.score/100*5)));let u=o.gaps.length,c=(b=f[t])!=null?b:t;return jsxs("div",{className:a("rounded-lg border p-4 flex flex-col gap-2",e==null?void 0:e.moduleCard,l),style:{borderColor:`${i.replace("rgb(","rgba(").replace(")",", 0.25)")}`,backgroundColor:`${i.replace("rgb(","rgba(").replace(")",", 0.04)")}`},children:[jsxs("div",{className:"flex items-center justify-between",children:[jsx("span",{className:a("text-sm font-semibold truncate",e==null?void 0:e.moduleTitle,l),children:c}),jsx("span",{className:a("text-lg font-bold tabular-nums",e==null?void 0:e.moduleScore,l),style:{color:i},role:"status","aria-label":`${c} score: ${o.score}`,children:o.score})]}),jsx("div",{className:"h-1.5 rounded-full overflow-hidden",style:{backgroundColor:"rgba(0,0,0,0.08)"},role:"progressbar","aria-valuenow":o.score,"aria-valuemin":0,"aria-valuemax":100,"aria-label":`${c} compliance score: ${o.score}%`,children:jsx("div",{className:"h-full rounded-full transition-all",style:{width:`${o.score}%`,backgroundColor:i}})}),u>0&&jsxs("p",{className:a("ndpr-form-field__hint",e==null?void 0:e.moduleGaps,l),children:[u," gap",u!==1?"s":""," to address"]})]})},y=({rec:t,classNames:o,unstyled:e})=>{var i,g;let r=(i={critical:p.critical,high:p["needs-work"],medium:p.good,low:p.excellent}[t.priority])!=null?i:p.good;return jsxs("div",{"data-testid":"recommendation-item",className:a("flex gap-3 p-3 rounded-lg border border-gray-100 dark:border-gray-700 bg-white dark:bg-gray-800",o==null?void 0:o.recommendationItem,e),children:[jsx("span",{className:a("mt-0.5 shrink-0 inline-block px-2 py-0.5 rounded text-xs font-bold uppercase tracking-wide",o==null?void 0:o.recommendationPriority,e),style:{backgroundColor:`${r.replace("rgb(","rgba(").replace(")",", 0.12)")}`,color:r},children:(g=C[t.priority])!=null?g:t.priority}),jsxs("div",{className:"min-w-0 flex-1",children:[jsx("p",{className:a("text-sm font-medium ndpr-text-foreground",o==null?void 0:o.recommendationTitle,e),children:t.label}),jsx("p",{className:"mt-0.5 text-xs ndpr-text-muted leading-relaxed",children:t.recommendation}),jsxs("p",{className:"mt-1 text-xs text-gray-400 dark:text-gray-500",children:[t.ndpaSection," \u2022 Effort: ",t.effort]})]})]})},P=({report:t,title:o="NDPA Compliance Dashboard",showRecommendations:e=true,maxRecommendations:l=5,classNames:r,unstyled:i=false})=>{let g=t.recommendations.slice(0,l),u=Object.entries(t.modules);return jsxs("div",{"data-ndpr-component":"compliance-dashboard",className:a("w-full rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm p-6 flex flex-col gap-8",r==null?void 0:r.root,i),children:[jsxs("div",{className:a("flex flex-col sm:flex-row items-start sm:items-center gap-6",r==null?void 0:r.header,i),children:[jsx(h,{score:t.score,rating:t.rating,classNames:{scoreCircle:r==null?void 0:r.scoreCircle,scoreValue:r==null?void 0:r.scoreValue},unstyled:i}),jsxs("div",{className:"flex flex-col gap-2",children:[jsx("h2",{className:"text-xl font-bold ndpr-text-foreground leading-tight",children:o}),jsx(x,{rating:t.rating,className:r==null?void 0:r.ratingBadge,unstyled:i}),jsxs("p",{className:"ndpr-form-field__hint",children:["Generated on"," ",new Date(t.generatedAt).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"})]})]})]}),jsx("div",{className:a("grid grid-cols-2 sm:grid-cols-2 md:grid-cols-4 gap-3",r==null?void 0:r.modulesGrid,i),children:u.map(([c,b])=>jsx(R,{moduleKey:c,module:b,classNames:{moduleCard:r==null?void 0:r.moduleCard,moduleTitle:r==null?void 0:r.moduleTitle,moduleScore:r==null?void 0:r.moduleScore,moduleGaps:r==null?void 0:r.moduleGaps},unstyled:i},c))}),e&&g.length>0&&jsxs("div",{className:a("flex flex-col gap-3",r==null?void 0:r.recommendationsSection,i),children:[jsx("h3",{className:"text-base font-semibold ndpr-text-foreground",children:"Recommendations"}),g.map(c=>jsx(y,{rec:c,classNames:{recommendationItem:r==null?void 0:r.recommendationItem,recommendationPriority:r==null?void 0:r.recommendationPriority,recommendationTitle:r==null?void 0:r.recommendationTitle},unstyled:i},`${c.module}-${c.key}`))]})]})};export{P as a};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var o=Object.defineProperty,p=Object.defineProperties;var q=Object.getOwnPropertyDescriptors;var f=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;var j=(a,c,b)=>c in a?o(a,c,{enumerable:true,configurable:true,writable:true,value:b}):a[c]=b,r=(a,c)=>{for(var b in c||(c={}))k.call(c,b)&&j(a,b,c[b]);if(f)for(var b of f(c))l.call(c,b)&&j(a,b,c[b]);return a},s=(a,c)=>p(a,q(c));var t=(a,c)=>{var b={};for(var d in a)k.call(a,d)&&c.indexOf(d)<0&&(b[d]=a[d]);if(a!=null&&f)for(var d of f(a))c.indexOf(d)<0&&l.call(a,d)&&(b[d]=a[d]);return b};var u=(a,c,b)=>new Promise((d,i)=>{var m=e=>{try{g(b.next(e));}catch(h){i(h);}},n=e=>{try{g(b.throw(e));}catch(h){i(h);}},g=e=>e.done?d(e.value):Promise.resolve(e.value).then(m,n);g((b=b.apply(a,c)).next());});export{r as a,s as b,t as c,u as d}
|
|
2
|
-
//# sourceMappingURL=chunk-WWT2ZSNU.mjs.map
|
|
1
|
+
var o=Object.defineProperty,p=Object.defineProperties;var q=Object.getOwnPropertyDescriptors;var f=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;var j=(a,c,b)=>c in a?o(a,c,{enumerable:true,configurable:true,writable:true,value:b}):a[c]=b,r=(a,c)=>{for(var b in c||(c={}))k.call(c,b)&&j(a,b,c[b]);if(f)for(var b of f(c))l.call(c,b)&&j(a,b,c[b]);return a},s=(a,c)=>p(a,q(c));var t=(a,c)=>{var b={};for(var d in a)k.call(a,d)&&c.indexOf(d)<0&&(b[d]=a[d]);if(a!=null&&f)for(var d of f(a))c.indexOf(d)<0&&l.call(a,d)&&(b[d]=a[d]);return b};var u=(a,c,b)=>new Promise((d,i)=>{var m=e=>{try{g(b.next(e));}catch(h){i(h);}},n=e=>{try{g(b.throw(e));}catch(h){i(h);}},g=e=>e.done?d(e.value):Promise.resolve(e.value).then(m,n);g((b=b.apply(a,c)).next());});export{r as a,s as b,t as c,u as d};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import {a}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-LJNNPAFU.mjs.map
|
|
1
|
+
import {a}from'./chunk-SFGW37LE.mjs';import {jsxs,jsx}from'react/jsx-runtime';var R=({sections:v,answers:y,onAnswerChange:u,currentSectionIndex:o,onNextSection:$,onPrevSection:B,validationErrors:P={},readOnly:s=false,className:A="",buttonClassName:_="",nextButtonText:C="Next",prevButtonText:w="Previous",submitButtonText:I="Submit",showProgress:D=true,progress:c,classNames:f={},unstyled:Q=false})=>{let m=v[o],S=o===v.length-1,t=(e,a$1)=>{let d=a$1?f[a$1]:void 0;return !d&&a$1==="nextButton"&&(d=f.primaryButton),!d&&a$1==="prevButton"&&(d=f.secondaryButton),a(e,d,Q)},L=e=>e.showWhen?e.showWhen.every(a=>{let d=y[a.questionId];switch(a.operator){case "equals":return d===a.value;case "contains":return Array.isArray(d)?d.includes(String(a.value)):false;case "greaterThan":return typeof d=="number"&&typeof a.value=="number"?d>a.value:false;case "lessThan":return typeof d=="number"&&typeof a.value=="number"?d<a.value:false;default:return true}}):true,b=e=>t("ndpr-form-field__input","input"),T=e=>{if(!L(e))return null;let a=P[e.id],d=y[e.id],l=typeof d=="boolean"?String(d):d,h=e.guidance?`${e.id}-guidance`:void 0,N=a?`${e.id}-error`:void 0,p=[h,N].filter(Boolean).join(" ")||void 0;return jsxs("div",{className:t("ndpr-form-field","question"),children:[jsxs("label",{htmlFor:e.id,className:t("ndpr-form-field__label","questionText"),children:[e.text,e.required&&jsx("span",{className:"ndpr-form-field__required",children:"*"})]}),e.guidance&&jsx("p",{id:h,className:t("ndpr-form-field__hint","guidance"),children:e.guidance}),e.type==="text"&&jsx("input",{type:"text",id:e.id,value:l||"",onChange:r=>u(e.id,r.target.value),disabled:s,className:b(),"aria-required":e.required||void 0,"aria-describedby":p,"aria-invalid":a?true:void 0}),e.type==="textarea"&&jsx("textarea",{id:e.id,value:l||"",onChange:r=>u(e.id,r.target.value),disabled:s,rows:4,className:b(),"aria-required":e.required||void 0,"aria-describedby":p,"aria-invalid":a?true:void 0}),e.type==="select"&&e.options&&jsxs("select",{id:e.id,value:l||"",onChange:r=>u(e.id,r.target.value),disabled:s,className:b(),"aria-required":e.required||void 0,"aria-describedby":p,"aria-invalid":a?true:void 0,children:[jsx("option",{value:"",children:"Select an option"}),e.options.map(r=>jsx("option",{value:r.value,children:r.label},r.value))]}),e.type==="radio"&&e.options&&jsx("div",{className:t("ndpr-form-field__option-group","radioGroup"),role:"radiogroup","aria-required":e.required||void 0,"aria-describedby":p,"aria-invalid":a?true:void 0,children:e.options.map(r=>jsxs("div",{className:t("ndpr-form-field__checkbox-row","radioOption"),children:[jsx("input",{type:"radio",id:`${e.id}_${r.value}`,name:e.id,value:r.value,checked:l===r.value,onChange:()=>u(e.id,r.value),disabled:s,className:"ndpr-form-field__radio"}),jsxs("label",{htmlFor:`${e.id}_${r.value}`,className:"ndpr-form-field__label",children:[r.label,r.riskLevel&&jsxs("span",{className:r.riskLevel==="low"?"ndpr-badge ndpr-badge--success":r.riskLevel==="medium"?"ndpr-badge ndpr-badge--warning":"ndpr-badge ndpr-badge--destructive",children:[r.riskLevel.charAt(0).toUpperCase()+r.riskLevel.slice(1)," Risk"]})]})]},r.value))}),e.type==="checkbox"&&e.options&&jsx("div",{className:"ndpr-form-field__option-group",role:"group","aria-label":e.text,"aria-describedby":p,"aria-invalid":a?true:void 0,children:e.options.map(r=>jsxs("div",{className:"ndpr-form-field__checkbox-row",children:[jsx("input",{type:"checkbox",id:`${e.id}_${r.value}`,value:r.value,checked:Array.isArray(l)?l.includes(r.value):false,onChange:g=>{let x=Array.isArray(l)?[...l]:[];g.target.checked?u(e.id,[...x,r.value]):u(e.id,x.filter(V=>V!==r.value));},disabled:s,className:"ndpr-form-field__checkbox"}),jsx("label",{htmlFor:`${e.id}_${r.value}`,className:"ndpr-form-field__label",children:r.label})]},r.value))}),e.type==="scale"&&jsxs("div",{className:"ndpr-form-field",children:[jsx("div",{className:"ndpr-form-field__hint",style:{display:"flex",justifyContent:"space-between"},children:e.scaleLabels&&Object.entries(e.scaleLabels).map(([r,g])=>jsx("span",{style:{width:`${100/Object.keys(e.scaleLabels||{}).length}%`,textAlign:"center"},children:g},r))}),jsx("input",{type:"range",id:e.id,min:e.minValue||1,max:e.maxValue||5,value:typeof l=="number"?l:e.minValue||1,onChange:r=>u(e.id,parseInt(r.target.value,10)),disabled:s,className:"ndpr-form-field__range","aria-required":e.required||void 0,"aria-describedby":p,"aria-invalid":a?true:void 0}),jsxs("div",{className:"ndpr-form-field__hint",style:{textAlign:"center"},children:["Selected value: ",l||e.minValue||1]})]}),a&&jsx("p",{id:N,className:"ndpr-form-field__error",role:"alert",children:a})]},e.id)};return m?jsxs("div",{"data-ndpr-component":"dpia-questionnaire",className:`${t("ndpr-card","root")} ${A}`,children:[D&&jsxs("div",{className:t("ndpr-card__header","header"),style:{flexDirection:"column",alignItems:"stretch",gap:"var(--ndpr-space-2)"},children:[jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"var(--ndpr-font-size-sm)",color:"rgb(var(--ndpr-muted-foreground))"},children:[jsxs("span",{children:["Section ",o+1," of ",v.length]}),jsx("span",{children:c!==void 0?`${c}% Complete`:""})]}),jsx("div",{className:t("ndpr-progress","progressBar"),role:"progressbar","aria-valuenow":c!==void 0?c:Math.round((o+1)/v.length*100),"aria-valuemin":0,"aria-valuemax":100,"aria-label":"Questionnaire progress",children:jsx("div",{className:"ndpr-progress__bar",style:{width:`${c!==void 0?c:(o+1)/v.length*100}%`}})})]}),jsx("h2",{className:t("ndpr-card__title","title"),children:m.title}),m.description&&jsx("p",{className:t("ndpr-card__subtitle","sectionTitle"),children:m.description}),jsx("div",{className:t("ndpr-card__body","section"),children:m.questions.map(e=>T(e))}),jsxs("div",{className:t("ndpr-card__footer","navigation"),style:{justifyContent:"space-between"},children:[jsx("button",{type:"button",onClick:B,disabled:o===0||s,className:`${t("ndpr-button ndpr-button--secondary","prevButton")} ${_}`,children:w}),jsx("button",{type:"button",onClick:$,disabled:s,className:`${t("ndpr-button ndpr-button--primary","nextButton")} ${_}`,children:S?I:C})]})]}):jsx("div",{children:"No section found."})};export{R as a};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
'use strict';var o="Generated for guidance only. Not legal advice \u2014 verify with your DPO or counsel.",t="This document is generated by @tantainnovative/ndpr-toolkit for guidance purposes only. It is not legal advice and does not constitute a formal compliance opinion. NDPA 2023 section references reflect the gazetted text and may evolve as the Nigeria Data Protection Commission (NDPC) issues further regulations, directives, or guidance under Section 61 / Section 62. Verify the current position with your Data Protection Officer or qualified Nigerian privacy counsel before acting on this output.";function i(e="Important Notice"){return `${e}
|
|
2
|
+
${"=".repeat(e.length)}
|
|
3
|
+
${t}
|
|
4
|
+
`}exports.a=o;exports.b=t;exports.c=i;
|
package/dist/consent.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
'use strict';var
|
|
3
|
-
//# sourceMappingURL=consent.js.map
|
|
2
|
+
'use strict';var chunkSJDDNB6M_js=require('./chunk-SJDDNB6M.js'),chunkBRS52EDT_js=require('./chunk-BRS52EDT.js'),chunk732C2EVN_js=require('./chunk-732C2EVN.js'),chunk3IA3KDII_js=require('./chunk-3IA3KDII.js'),chunkP4LNLCSF_js=require('./chunk-P4LNLCSF.js');require('./chunk-L2VO3MEJ.js'),require('./chunk-7ZZO7GVB.js');var chunkB46SJB5V_js=require('./chunk-B46SJB5V.js'),chunkAME4HJR4_js=require('./chunk-AME4HJR4.js');require('./chunk-VWED6UTN.js');var chunkRFPLZDIO_js=require('./chunk-RFPLZDIO.js'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var v=react.createContext(null);function p(){let t=react.useContext(v);if(!t)throw new Error("Consent compound components must be wrapped in <Consent.Provider>. Example: <Consent.Provider options={...}><Consent.Banner /></Consent.Provider>");return t}var g=({options:t,adapter:n,version:s,onChange:r,children:c})=>{let C=chunkP4LNLCSF_js.a({options:t,adapter:n,version:s,onChange:r}),o=chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},C),{options:t});return jsxRuntime.jsx(v.Provider,{value:o,children:c})};var P=({classNames:t,unstyled:n})=>{let{options:s,settings:r}=p(),[c,C]=react.useState(()=>{let o={};return s.forEach(i=>{var a,_;o[i.id]=(_=(a=r==null?void 0:r.consents[i.id])!=null?a:i.defaultValue)!=null?_:false;}),o});return jsxRuntime.jsx("div",{className:chunkAME4HJR4_js.a("ndpr-consent-banner__options-list",t==null?void 0:t.root,n),"data-ndpr-component":"consent-option-list",children:s.map(o=>jsxRuntime.jsxs("div",{className:chunkAME4HJR4_js.a("ndpr-consent-banner__option",t==null?void 0:t.optionItem,n),children:[jsxRuntime.jsx("input",{id:`consent-${o.id}`,type:"checkbox",checked:c[o.id]||false,onChange:i=>C(a=>chunkRFPLZDIO_js.b(chunkRFPLZDIO_js.a({},a),{[o.id]:i.target.checked})),disabled:o.required,className:chunkAME4HJR4_js.a("ndpr-consent-banner__option-checkbox",t==null?void 0:t.optionCheckbox,n),"aria-label":o.label}),jsxRuntime.jsxs("div",{className:n?"":"ndpr-consent-banner__option-text",children:[jsxRuntime.jsxs("label",{htmlFor:`consent-${o.id}`,className:chunkAME4HJR4_js.a("ndpr-consent-banner__option-label",t==null?void 0:t.optionLabel,n),children:[o.label,o.required&&jsxRuntime.jsx("span",{className:n?"":"ndpr-consent-banner__required-marker",children:" *"})]}),jsxRuntime.jsx("p",{className:chunkAME4HJR4_js.a("ndpr-consent-banner__option-description",t==null?void 0:t.optionDescription,n),children:o.description})]})]},o.id))})};var R=({children:t,className:n,unstyled:s})=>{let{acceptAll:r}=p();return jsxRuntime.jsx("button",{onClick:r,className:chunkAME4HJR4_js.a("ndpr-consent-banner__button ndpr-consent-banner__button--primary",n,s),"data-ndpr-component":"consent-accept-button",children:t!=null?t:"Accept All"})};var S=({children:t,className:n,unstyled:s})=>{let{rejectAll:r}=p();return jsxRuntime.jsx("button",{onClick:r,className:chunkAME4HJR4_js.a("ndpr-consent-banner__button ndpr-consent-banner__button--secondary",n,s),"data-ndpr-component":"consent-reject-button",children:t!=null?t:"Reject All"})};var y=({children:t,className:n,unstyled:s,consents:r})=>{let{updateConsent:c,options:C}=p();return jsxRuntime.jsx("button",{onClick:()=>{if(r)c(r);else {let i={};C.forEach(a=>{i[a.id]=a.required||false;}),c(i);}},className:chunkAME4HJR4_js.a("ndpr-consent-banner__button ndpr-consent-banner__button--primary",n,s),"data-ndpr-component":"consent-save-button",children:t!=null?t:"Save Preferences"})};var I={Provider:g,OptionList:P,AcceptButton:R,RejectButton:S,SaveButton:y,Banner:chunk732C2EVN_js.a,Settings:chunkBRS52EDT_js.a,Storage:chunkSJDDNB6M_js.a};Object.defineProperty(exports,"ConsentStorage",{enumerable:true,get:function(){return chunkSJDDNB6M_js.a}});Object.defineProperty(exports,"ConsentManager",{enumerable:true,get:function(){return chunkBRS52EDT_js.a}});Object.defineProperty(exports,"ConsentBanner",{enumerable:true,get:function(){return chunk732C2EVN_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,"useConsent",{enumerable:true,get:function(){return chunkP4LNLCSF_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,"resolveClass",{enumerable:true,get:function(){return chunkAME4HJR4_js.a}});exports.Consent=I;exports.ConsentAcceptButton=R;exports.ConsentOptionList=P;exports.ConsentProvider=g;exports.ConsentRejectButton=S;exports.ConsentSaveButton=y;exports.useConsentCompound=p;
|
package/dist/consent.mjs
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {a}from'./chunk-
|
|
3
|
-
//# sourceMappingURL=consent.mjs.map
|
|
2
|
+
import {a}from'./chunk-XOH4WXOZ.mjs';export{a as ConsentStorage}from'./chunk-XOH4WXOZ.mjs';import {a as a$1}from'./chunk-U5RWJRGA.mjs';export{a as ConsentManager}from'./chunk-U5RWJRGA.mjs';import {a as a$2}from'./chunk-BFAX7JQA.mjs';export{a as ConsentBanner}from'./chunk-BFAX7JQA.mjs';export{c as appendAuditEntry,a as createAuditEntry,b as getAuditLog}from'./chunk-V7UFP6QU.mjs';import {a as a$3}from'./chunk-PCU6GKBE.mjs';export{a as useConsent}from'./chunk-PCU6GKBE.mjs';import'./chunk-YTU4FNM2.mjs';import'./chunk-UASG46LP.mjs';export{a as validateConsent,b as validateConsentOptions}from'./chunk-PJNKQPQP.mjs';import {a as a$5}from'./chunk-SFGW37LE.mjs';export{a as resolveClass}from'./chunk-SFGW37LE.mjs';import'./chunk-DBZSN4WP.mjs';import {b,a as a$4}from'./chunk-ZJYULEER.mjs';import {createContext,useContext,useState}from'react';import {jsx,jsxs}from'react/jsx-runtime';var v=createContext(null);function p(){let t=useContext(v);if(!t)throw new Error("Consent compound components must be wrapped in <Consent.Provider>. Example: <Consent.Provider options={...}><Consent.Banner /></Consent.Provider>");return t}var g=({options:t,adapter:n,version:s,onChange:r,children:c})=>{let C=a$3({options:t,adapter:n,version:s,onChange:r}),o=b(a$4({},C),{options:t});return jsx(v.Provider,{value:o,children:c})};var P=({classNames:t,unstyled:n})=>{let{options:s,settings:r}=p(),[c,C]=useState(()=>{let o={};return s.forEach(i=>{var a,_;o[i.id]=(_=(a=r==null?void 0:r.consents[i.id])!=null?a:i.defaultValue)!=null?_:false;}),o});return jsx("div",{className:a$5("ndpr-consent-banner__options-list",t==null?void 0:t.root,n),"data-ndpr-component":"consent-option-list",children:s.map(o=>jsxs("div",{className:a$5("ndpr-consent-banner__option",t==null?void 0:t.optionItem,n),children:[jsx("input",{id:`consent-${o.id}`,type:"checkbox",checked:c[o.id]||false,onChange:i=>C(a=>b(a$4({},a),{[o.id]:i.target.checked})),disabled:o.required,className:a$5("ndpr-consent-banner__option-checkbox",t==null?void 0:t.optionCheckbox,n),"aria-label":o.label}),jsxs("div",{className:n?"":"ndpr-consent-banner__option-text",children:[jsxs("label",{htmlFor:`consent-${o.id}`,className:a$5("ndpr-consent-banner__option-label",t==null?void 0:t.optionLabel,n),children:[o.label,o.required&&jsx("span",{className:n?"":"ndpr-consent-banner__required-marker",children:" *"})]}),jsx("p",{className:a$5("ndpr-consent-banner__option-description",t==null?void 0:t.optionDescription,n),children:o.description})]})]},o.id))})};var R=({children:t,className:n,unstyled:s})=>{let{acceptAll:r}=p();return jsx("button",{onClick:r,className:a$5("ndpr-consent-banner__button ndpr-consent-banner__button--primary",n,s),"data-ndpr-component":"consent-accept-button",children:t!=null?t:"Accept All"})};var S=({children:t,className:n,unstyled:s})=>{let{rejectAll:r}=p();return jsx("button",{onClick:r,className:a$5("ndpr-consent-banner__button ndpr-consent-banner__button--secondary",n,s),"data-ndpr-component":"consent-reject-button",children:t!=null?t:"Reject All"})};var y=({children:t,className:n,unstyled:s,consents:r})=>{let{updateConsent:c,options:C}=p();return jsx("button",{onClick:()=>{if(r)c(r);else {let i={};C.forEach(a=>{i[a.id]=a.required||false;}),c(i);}},className:a$5("ndpr-consent-banner__button ndpr-consent-banner__button--primary",n,s),"data-ndpr-component":"consent-save-button",children:t!=null?t:"Save Preferences"})};var I={Provider:g,OptionList:P,AcceptButton:R,RejectButton:S,SaveButton:y,Banner:a$2,Settings:a$1,Storage:a};export{I as Consent,R as ConsentAcceptButton,P as ConsentOptionList,g as ConsentProvider,S as ConsentRejectButton,y as ConsentSaveButton,p as useConsentCompound};
|
package/dist/core.d.mts
CHANGED
|
@@ -137,10 +137,51 @@ export declare interface BreachReport {
|
|
|
137
137
|
affectedSystems: string[];
|
|
138
138
|
/** Types of data involved in the breach */
|
|
139
139
|
dataTypes: string[];
|
|
140
|
-
/** Whether sensitive personal data is involved (NDPA Section
|
|
140
|
+
/** Whether sensitive personal data is involved (NDPA Section 30) */
|
|
141
141
|
involvesSensitiveData?: boolean;
|
|
142
142
|
/** Estimated number of data subjects affected */
|
|
143
143
|
estimatedAffectedSubjects?: number;
|
|
144
|
+
/**
|
|
145
|
+
* Approximate number of personal data RECORDS concerned (distinct from subject count).
|
|
146
|
+
* Required content under NDPA Section 40(1)(a) and Section 40(2).
|
|
147
|
+
*/
|
|
148
|
+
approximateRecordCount?: number;
|
|
149
|
+
/**
|
|
150
|
+
* Categories of data subjects affected (e.g. customers, employees, minors, patients).
|
|
151
|
+
* Required content under NDPA Section 40(1)(a) and Section 40(2).
|
|
152
|
+
*/
|
|
153
|
+
dataSubjectCategories?: string[];
|
|
154
|
+
/**
|
|
155
|
+
* Likely consequences of the breach for affected data subjects (e.g. identity theft,
|
|
156
|
+
* financial loss, reputational damage). Reported to the NDPC and, where applicable,
|
|
157
|
+
* communicated to data subjects under Section 40(3).
|
|
158
|
+
*/
|
|
159
|
+
likelyConsequences?: string;
|
|
160
|
+
/**
|
|
161
|
+
* Measures taken or proposed to mitigate adverse effects of the breach.
|
|
162
|
+
* Required content for Section 40(3) communications to data subjects.
|
|
163
|
+
*/
|
|
164
|
+
mitigationMeasures?: string;
|
|
165
|
+
/**
|
|
166
|
+
* Whether this is a phased / interim report submitted before full investigation
|
|
167
|
+
* is complete. The NDPC permits phased reporting where complete information is
|
|
168
|
+
* not available within 72 hours.
|
|
169
|
+
*/
|
|
170
|
+
isPhasedReport?: boolean;
|
|
171
|
+
/**
|
|
172
|
+
* ID of the prior phased report this report supplements, if any.
|
|
173
|
+
*/
|
|
174
|
+
supplementsReportId?: string;
|
|
175
|
+
/**
|
|
176
|
+
* Data Protection Officer contact details. The DPO is the named contact point
|
|
177
|
+
* for the NDPC per NDPA Section 32(3)(c). Required content in the regulatory
|
|
178
|
+
* report (Section 40(2)).
|
|
179
|
+
*/
|
|
180
|
+
dpoContact?: {
|
|
181
|
+
name: string;
|
|
182
|
+
email: string;
|
|
183
|
+
phone?: string;
|
|
184
|
+
};
|
|
144
185
|
/** Whether the breach is ongoing or contained */
|
|
145
186
|
status: 'ongoing' | 'contained' | 'resolved';
|
|
146
187
|
/** Initial actions taken to address the breach */
|
|
@@ -796,20 +837,25 @@ export declare interface DsrSubmissionValidationResult {
|
|
|
796
837
|
}
|
|
797
838
|
|
|
798
839
|
/**
|
|
799
|
-
* Data Subject Rights types aligned with NDPA 2023 Part
|
|
840
|
+
* Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
|
|
841
|
+
* and the related provisions in Part V (Section 27 — information to the data subject)
|
|
842
|
+
* and Part X (Section 46 — complaint to the Commission).
|
|
843
|
+
*
|
|
844
|
+
* Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
|
|
800
845
|
*/
|
|
801
846
|
/**
|
|
802
|
-
* Types of data subject requests per NDPA Part
|
|
803
|
-
* - 'information': Right to be informed (Section
|
|
804
|
-
* - 'access': Right of access (Section
|
|
805
|
-
* - 'rectification': Right to rectification (Section
|
|
806
|
-
* - 'erasure': Right to erasure (Section
|
|
807
|
-
* - 'restriction': Right to restrict processing (Section
|
|
808
|
-
* - 'portability': Right to data portability (Section
|
|
809
|
-
* - 'objection': Right to object (Section
|
|
810
|
-
* - 'automated_decision_making': Rights
|
|
847
|
+
* Types of data subject requests per NDPA Part VI
|
|
848
|
+
* - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
|
|
849
|
+
* - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
|
|
850
|
+
* - 'rectification': Right to rectification (Section 34(1)(c))
|
|
851
|
+
* - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
|
|
852
|
+
* - 'restriction': Right to restrict processing (Section 34(1)(e))
|
|
853
|
+
* - 'portability': Right to data portability (Section 38)
|
|
854
|
+
* - 'objection': Right to object (Section 36)
|
|
855
|
+
* - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
|
|
856
|
+
* - 'withdraw_consent': Right to withdraw consent (Section 35)
|
|
811
857
|
*/
|
|
812
|
-
export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
|
|
858
|
+
export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
|
|
813
859
|
|
|
814
860
|
export declare type EffortLevel = 'low' | 'medium' | 'high';
|
|
815
861
|
|
|
@@ -986,11 +1032,13 @@ declare type Industry = 'fintech' | 'healthcare' | 'ecommerce' | 'saas' | 'educa
|
|
|
986
1032
|
|
|
987
1033
|
/**
|
|
988
1034
|
* Returns whether NDPC approval is required for a given transfer mechanism.
|
|
989
|
-
*
|
|
990
|
-
*
|
|
1035
|
+
* Under NDPA Section 42(5), the Commission may approve binding corporate rules,
|
|
1036
|
+
* codes of conduct, certification mechanisms, or similar instruments. Standard
|
|
1037
|
+
* contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
|
|
1038
|
+
* and the Commission may approve them per Section 42(4).
|
|
991
1039
|
*
|
|
992
1040
|
* @param mechanism The transfer mechanism
|
|
993
|
-
* @returns Whether NDPC approval is required
|
|
1041
|
+
* @returns Whether NDPC approval is typically required
|
|
994
1042
|
*/
|
|
995
1043
|
export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
|
|
996
1044
|
|
|
@@ -1048,6 +1096,23 @@ export declare interface LawfulBasisValidationResult {
|
|
|
1048
1096
|
warnings: string[];
|
|
1049
1097
|
}
|
|
1050
1098
|
|
|
1099
|
+
/**
|
|
1100
|
+
* Full disclaimer suitable for PDF/DOCX footers and exported artifacts.
|
|
1101
|
+
*/
|
|
1102
|
+
export declare const LEGAL_DISCLAIMER_LONG: string;
|
|
1103
|
+
|
|
1104
|
+
/**
|
|
1105
|
+
* Short disclaimer suitable for component captions and dashboard footers.
|
|
1106
|
+
* One line, no markdown.
|
|
1107
|
+
*/
|
|
1108
|
+
export declare const LEGAL_DISCLAIMER_SHORT = "Generated for guidance only. Not legal advice \u2014 verify with your DPO or counsel.";
|
|
1109
|
+
|
|
1110
|
+
/**
|
|
1111
|
+
* Returns the long disclaimer wrapped with a leading heading suitable for
|
|
1112
|
+
* embedding at the foot of an exported document.
|
|
1113
|
+
*/
|
|
1114
|
+
export declare function legalDisclaimerBlock(heading?: string): string;
|
|
1115
|
+
|
|
1051
1116
|
/**
|
|
1052
1117
|
* Represents a Legitimate Interest Assessment (LIA)
|
|
1053
1118
|
* Required when the lawful basis is 'legitimate_interests'
|
|
@@ -1697,7 +1762,9 @@ export declare interface RequestType {
|
|
|
1697
1762
|
/** Description of what this request type entails */
|
|
1698
1763
|
description: string;
|
|
1699
1764
|
/**
|
|
1700
|
-
* NDPA section reference
|
|
1765
|
+
* NDPA 2023 section reference for this right
|
|
1766
|
+
* (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
|
|
1767
|
+
* Used for display purposes only — verify the exact subsection with counsel.
|
|
1701
1768
|
*/
|
|
1702
1769
|
ndpaSection?: string;
|
|
1703
1770
|
/**
|
|
@@ -1815,6 +1882,15 @@ export declare function sanitizeInput(input: string): string;
|
|
|
1815
1882
|
*/
|
|
1816
1883
|
export declare type SensitiveDataCondition = 'explicit_consent' | 'employment_law' | 'vital_interests_incapable' | 'nonprofit_legitimate' | 'publicly_available' | 'legal_claims' | 'substantial_public_interest' | 'health_purposes' | 'public_health' | 'archiving_research';
|
|
1817
1884
|
|
|
1885
|
+
export declare interface StorageAdapter<T = unknown> {
|
|
1886
|
+
/** Load persisted data. Called once on hook mount. */
|
|
1887
|
+
load(): T | null | Promise<T | null>;
|
|
1888
|
+
/** Persist data. Called on every state change. */
|
|
1889
|
+
save(data: T): void | Promise<void>;
|
|
1890
|
+
/** Clear persisted data. Called on reset. */
|
|
1891
|
+
remove(): void | Promise<void>;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1818
1894
|
/** Full context used to generate an adaptive privacy policy. */
|
|
1819
1895
|
export declare interface TemplateContext {
|
|
1820
1896
|
/** Organisation details, extended with industry and size. */
|
|
@@ -1894,8 +1970,11 @@ export declare interface TransferImpactAssessment {
|
|
|
1894
1970
|
}
|
|
1895
1971
|
|
|
1896
1972
|
/**
|
|
1897
|
-
* Cross-Border Data Transfer types aligned with NDPA 2023 Part
|
|
1898
|
-
* Personal data may only be transferred outside Nigeria under
|
|
1973
|
+
* Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
|
|
1974
|
+
* Personal data may only be transferred outside Nigeria under the bases listed in
|
|
1975
|
+
* Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
|
|
1976
|
+
*
|
|
1977
|
+
* Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
|
|
1899
1978
|
*/
|
|
1900
1979
|
/**
|
|
1901
1980
|
* Transfer mechanisms recognized under the NDPA
|
|
@@ -2006,7 +2085,7 @@ export declare interface ValidateDsrSubmissionOptions {
|
|
|
2006
2085
|
/**
|
|
2007
2086
|
* Allowed request types. When provided, the payload's `requestType`
|
|
2008
2087
|
* must be one of these — useful for locking the server to a specific
|
|
2009
|
-
* set of supported NDPA Part
|
|
2088
|
+
* set of supported NDPA Part VI §34-38 (plus §35, §36, §37) data-subject rights.
|
|
2010
2089
|
*/
|
|
2011
2090
|
allowedRequestTypes?: string[];
|
|
2012
2091
|
}
|
package/dist/core.d.ts
CHANGED
|
@@ -137,10 +137,51 @@ export declare interface BreachReport {
|
|
|
137
137
|
affectedSystems: string[];
|
|
138
138
|
/** Types of data involved in the breach */
|
|
139
139
|
dataTypes: string[];
|
|
140
|
-
/** Whether sensitive personal data is involved (NDPA Section
|
|
140
|
+
/** Whether sensitive personal data is involved (NDPA Section 30) */
|
|
141
141
|
involvesSensitiveData?: boolean;
|
|
142
142
|
/** Estimated number of data subjects affected */
|
|
143
143
|
estimatedAffectedSubjects?: number;
|
|
144
|
+
/**
|
|
145
|
+
* Approximate number of personal data RECORDS concerned (distinct from subject count).
|
|
146
|
+
* Required content under NDPA Section 40(1)(a) and Section 40(2).
|
|
147
|
+
*/
|
|
148
|
+
approximateRecordCount?: number;
|
|
149
|
+
/**
|
|
150
|
+
* Categories of data subjects affected (e.g. customers, employees, minors, patients).
|
|
151
|
+
* Required content under NDPA Section 40(1)(a) and Section 40(2).
|
|
152
|
+
*/
|
|
153
|
+
dataSubjectCategories?: string[];
|
|
154
|
+
/**
|
|
155
|
+
* Likely consequences of the breach for affected data subjects (e.g. identity theft,
|
|
156
|
+
* financial loss, reputational damage). Reported to the NDPC and, where applicable,
|
|
157
|
+
* communicated to data subjects under Section 40(3).
|
|
158
|
+
*/
|
|
159
|
+
likelyConsequences?: string;
|
|
160
|
+
/**
|
|
161
|
+
* Measures taken or proposed to mitigate adverse effects of the breach.
|
|
162
|
+
* Required content for Section 40(3) communications to data subjects.
|
|
163
|
+
*/
|
|
164
|
+
mitigationMeasures?: string;
|
|
165
|
+
/**
|
|
166
|
+
* Whether this is a phased / interim report submitted before full investigation
|
|
167
|
+
* is complete. The NDPC permits phased reporting where complete information is
|
|
168
|
+
* not available within 72 hours.
|
|
169
|
+
*/
|
|
170
|
+
isPhasedReport?: boolean;
|
|
171
|
+
/**
|
|
172
|
+
* ID of the prior phased report this report supplements, if any.
|
|
173
|
+
*/
|
|
174
|
+
supplementsReportId?: string;
|
|
175
|
+
/**
|
|
176
|
+
* Data Protection Officer contact details. The DPO is the named contact point
|
|
177
|
+
* for the NDPC per NDPA Section 32(3)(c). Required content in the regulatory
|
|
178
|
+
* report (Section 40(2)).
|
|
179
|
+
*/
|
|
180
|
+
dpoContact?: {
|
|
181
|
+
name: string;
|
|
182
|
+
email: string;
|
|
183
|
+
phone?: string;
|
|
184
|
+
};
|
|
144
185
|
/** Whether the breach is ongoing or contained */
|
|
145
186
|
status: 'ongoing' | 'contained' | 'resolved';
|
|
146
187
|
/** Initial actions taken to address the breach */
|
|
@@ -796,20 +837,25 @@ export declare interface DsrSubmissionValidationResult {
|
|
|
796
837
|
}
|
|
797
838
|
|
|
798
839
|
/**
|
|
799
|
-
* Data Subject Rights types aligned with NDPA 2023 Part
|
|
840
|
+
* Data Subject Rights types aligned with NDPA 2023 Part VI (Sections 34-38)
|
|
841
|
+
* and the related provisions in Part V (Section 27 — information to the data subject)
|
|
842
|
+
* and Part X (Section 46 — complaint to the Commission).
|
|
843
|
+
*
|
|
844
|
+
* Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
|
|
800
845
|
*/
|
|
801
846
|
/**
|
|
802
|
-
* Types of data subject requests per NDPA Part
|
|
803
|
-
* - 'information': Right to be informed (Section
|
|
804
|
-
* - 'access': Right of access (Section
|
|
805
|
-
* - 'rectification': Right to rectification (Section
|
|
806
|
-
* - 'erasure': Right to erasure (Section
|
|
807
|
-
* - 'restriction': Right to restrict processing (Section
|
|
808
|
-
* - 'portability': Right to data portability (Section
|
|
809
|
-
* - 'objection': Right to object (Section
|
|
810
|
-
* - 'automated_decision_making': Rights
|
|
847
|
+
* Types of data subject requests per NDPA Part VI
|
|
848
|
+
* - 'information': Right to be informed (Section 27 — provision of information; Section 34(1)(a))
|
|
849
|
+
* - 'access': Right of access / confirmation + data copy (Section 34(1)(a)–(b))
|
|
850
|
+
* - 'rectification': Right to rectification (Section 34(1)(c))
|
|
851
|
+
* - 'erasure': Right to erasure (Section 34(1)(d), Section 34(2))
|
|
852
|
+
* - 'restriction': Right to restrict processing (Section 34(1)(e))
|
|
853
|
+
* - 'portability': Right to data portability (Section 38)
|
|
854
|
+
* - 'objection': Right to object (Section 36)
|
|
855
|
+
* - 'automated_decision_making': Rights re. automated decisions / profiling (Section 37)
|
|
856
|
+
* - 'withdraw_consent': Right to withdraw consent (Section 35)
|
|
811
857
|
*/
|
|
812
|
-
export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making';
|
|
858
|
+
export declare type DSRType = 'information' | 'access' | 'rectification' | 'erasure' | 'restriction' | 'portability' | 'objection' | 'automated_decision_making' | 'withdraw_consent';
|
|
813
859
|
|
|
814
860
|
export declare type EffortLevel = 'low' | 'medium' | 'high';
|
|
815
861
|
|
|
@@ -986,11 +1032,13 @@ declare type Industry = 'fintech' | 'healthcare' | 'ecommerce' | 'saas' | 'educa
|
|
|
986
1032
|
|
|
987
1033
|
/**
|
|
988
1034
|
* Returns whether NDPC approval is required for a given transfer mechanism.
|
|
989
|
-
*
|
|
990
|
-
*
|
|
1035
|
+
* Under NDPA Section 42(5), the Commission may approve binding corporate rules,
|
|
1036
|
+
* codes of conduct, certification mechanisms, or similar instruments. Standard
|
|
1037
|
+
* contractual clauses are one of the appropriate safeguards under Section 41(1)(a)
|
|
1038
|
+
* and the Commission may approve them per Section 42(4).
|
|
991
1039
|
*
|
|
992
1040
|
* @param mechanism The transfer mechanism
|
|
993
|
-
* @returns Whether NDPC approval is required
|
|
1041
|
+
* @returns Whether NDPC approval is typically required
|
|
994
1042
|
*/
|
|
995
1043
|
export declare function isNDPCApprovalRequired(mechanism: TransferMechanism): boolean;
|
|
996
1044
|
|
|
@@ -1048,6 +1096,23 @@ export declare interface LawfulBasisValidationResult {
|
|
|
1048
1096
|
warnings: string[];
|
|
1049
1097
|
}
|
|
1050
1098
|
|
|
1099
|
+
/**
|
|
1100
|
+
* Full disclaimer suitable for PDF/DOCX footers and exported artifacts.
|
|
1101
|
+
*/
|
|
1102
|
+
export declare const LEGAL_DISCLAIMER_LONG: string;
|
|
1103
|
+
|
|
1104
|
+
/**
|
|
1105
|
+
* Short disclaimer suitable for component captions and dashboard footers.
|
|
1106
|
+
* One line, no markdown.
|
|
1107
|
+
*/
|
|
1108
|
+
export declare const LEGAL_DISCLAIMER_SHORT = "Generated for guidance only. Not legal advice \u2014 verify with your DPO or counsel.";
|
|
1109
|
+
|
|
1110
|
+
/**
|
|
1111
|
+
* Returns the long disclaimer wrapped with a leading heading suitable for
|
|
1112
|
+
* embedding at the foot of an exported document.
|
|
1113
|
+
*/
|
|
1114
|
+
export declare function legalDisclaimerBlock(heading?: string): string;
|
|
1115
|
+
|
|
1051
1116
|
/**
|
|
1052
1117
|
* Represents a Legitimate Interest Assessment (LIA)
|
|
1053
1118
|
* Required when the lawful basis is 'legitimate_interests'
|
|
@@ -1697,7 +1762,9 @@ export declare interface RequestType {
|
|
|
1697
1762
|
/** Description of what this request type entails */
|
|
1698
1763
|
description: string;
|
|
1699
1764
|
/**
|
|
1700
|
-
* NDPA section reference
|
|
1765
|
+
* NDPA 2023 section reference for this right
|
|
1766
|
+
* (e.g., "Section 34(1)(a)" for access, "Section 38" for portability).
|
|
1767
|
+
* Used for display purposes only — verify the exact subsection with counsel.
|
|
1701
1768
|
*/
|
|
1702
1769
|
ndpaSection?: string;
|
|
1703
1770
|
/**
|
|
@@ -1815,6 +1882,15 @@ export declare function sanitizeInput(input: string): string;
|
|
|
1815
1882
|
*/
|
|
1816
1883
|
export declare type SensitiveDataCondition = 'explicit_consent' | 'employment_law' | 'vital_interests_incapable' | 'nonprofit_legitimate' | 'publicly_available' | 'legal_claims' | 'substantial_public_interest' | 'health_purposes' | 'public_health' | 'archiving_research';
|
|
1817
1884
|
|
|
1885
|
+
export declare interface StorageAdapter<T = unknown> {
|
|
1886
|
+
/** Load persisted data. Called once on hook mount. */
|
|
1887
|
+
load(): T | null | Promise<T | null>;
|
|
1888
|
+
/** Persist data. Called on every state change. */
|
|
1889
|
+
save(data: T): void | Promise<void>;
|
|
1890
|
+
/** Clear persisted data. Called on reset. */
|
|
1891
|
+
remove(): void | Promise<void>;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1818
1894
|
/** Full context used to generate an adaptive privacy policy. */
|
|
1819
1895
|
export declare interface TemplateContext {
|
|
1820
1896
|
/** Organisation details, extended with industry and size. */
|
|
@@ -1894,8 +1970,11 @@ export declare interface TransferImpactAssessment {
|
|
|
1894
1970
|
}
|
|
1895
1971
|
|
|
1896
1972
|
/**
|
|
1897
|
-
* Cross-Border Data Transfer types aligned with NDPA 2023 Part
|
|
1898
|
-
* Personal data may only be transferred outside Nigeria under
|
|
1973
|
+
* Cross-Border Data Transfer types aligned with NDPA 2023 Part VIII (Sections 41-43).
|
|
1974
|
+
* Personal data may only be transferred outside Nigeria under the bases listed in
|
|
1975
|
+
* Section 41(1), where Section 42 defines adequacy and Section 43 lists derogations.
|
|
1976
|
+
*
|
|
1977
|
+
* Note: These are guidance labels — not legal advice. Verify with your DPO or counsel.
|
|
1899
1978
|
*/
|
|
1900
1979
|
/**
|
|
1901
1980
|
* Transfer mechanisms recognized under the NDPA
|
|
@@ -2006,7 +2085,7 @@ export declare interface ValidateDsrSubmissionOptions {
|
|
|
2006
2085
|
/**
|
|
2007
2086
|
* Allowed request types. When provided, the payload's `requestType`
|
|
2008
2087
|
* must be one of these — useful for locking the server to a specific
|
|
2009
|
-
* set of supported NDPA Part
|
|
2088
|
+
* set of supported NDPA Part VI §34-38 (plus §35, §36, §37) data-subject rights.
|
|
2010
2089
|
*/
|
|
2011
2090
|
allowedRequestTypes?: string[];
|
|
2012
2091
|
}
|
package/dist/core.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=core.js.map
|
|
1
|
+
'use strict';var chunkUAV7V4EM_js=require('./chunk-UAV7V4EM.js'),chunk4QXTB3L6_js=require('./chunk-4QXTB3L6.js'),chunk7IFSWCQP_js=require('./chunk-7IFSWCQP.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'),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');require('./chunk-RFPLZDIO.js');Object.defineProperty(exports,"NDPRProvider",{enumerable:true,get:function(){return chunkUAV7V4EM_js.a}});Object.defineProperty(exports,"useNDPRConfig",{enumerable:true,get:function(){return chunkUAV7V4EM_js.b}});Object.defineProperty(exports,"useNDPRLocale",{enumerable:true,get:function(){return chunkUAV7V4EM_js.c}});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,"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,"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,"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}});
|