@redacto.io/dpdpa-report-sdk-js 0.2.0 → 0.3.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/dist/dpdpa-report.d.mts +44 -5
- package/dist/dpdpa-report.d.ts +44 -5
- package/dist/dpdpa-report.global.js +287 -2
- package/dist/dpdpa-report.global.js.map +1 -1
- package/dist/dpdpa-report.js +532 -141
- package/dist/dpdpa-report.mjs +532 -141
- package/package.json +1 -1
package/dist/dpdpa-report.d.mts
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
type QuickInsightsStatus = "pending" | "complete" | "error";
|
|
2
|
+
type DpdpaApplicabilityLevel = "VERY_LIKELY" | "LIKELY" | "POSSIBLY" | "UNLIKELY";
|
|
3
|
+
type QuickInsightsConfidence = "HIGH" | "MEDIUM" | "LOW";
|
|
4
|
+
type AreaUnderReview = {
|
|
5
|
+
area: string;
|
|
6
|
+
dpdpa_references: string[];
|
|
7
|
+
redacto_product_hint: string;
|
|
8
|
+
why_this_is_being_checked: string;
|
|
9
|
+
};
|
|
10
|
+
type QuickInsights = {
|
|
11
|
+
type: string;
|
|
12
|
+
summary: string;
|
|
13
|
+
confidence: QuickInsightsConfidence | string;
|
|
14
|
+
full_report: {
|
|
15
|
+
status: string;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
generated_at: string;
|
|
19
|
+
educational_note: {
|
|
20
|
+
title: string;
|
|
21
|
+
message: string;
|
|
22
|
+
};
|
|
23
|
+
areas_under_review: AreaUnderReview[];
|
|
24
|
+
company_understanding: {
|
|
25
|
+
business_profile: string;
|
|
26
|
+
likely_user_relationship: string;
|
|
27
|
+
likely_digital_touchpoints: string[];
|
|
28
|
+
};
|
|
29
|
+
likely_data_to_validate: string[];
|
|
30
|
+
dpdpa_applicability_signal: {
|
|
31
|
+
level: DpdpaApplicabilityLevel | string;
|
|
32
|
+
reason: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
1
36
|
type BrandingConfig = {
|
|
2
37
|
/** URL or data URI for the brand logo. When omitted, defaults to the Redacto logo. */
|
|
3
38
|
logo?: string;
|
|
@@ -39,16 +74,20 @@ type InitOptions = {
|
|
|
39
74
|
branding?: BrandingConfig;
|
|
40
75
|
/** Polling cadence in ms. Defaults to 3000. */
|
|
41
76
|
pollIntervalMs?: number;
|
|
42
|
-
/** Hard timeout for the whole poll loop in ms. Defaults to
|
|
77
|
+
/** Hard timeout for the whole poll loop in ms. Defaults to 90000 (90s). */
|
|
43
78
|
pollTimeoutMs?: number;
|
|
44
79
|
onSubmit?: (lead: Omit<CapturedLead, "job_id">) => void;
|
|
45
80
|
onJobAccepted?: (job_id: string, lead: CapturedLead) => void;
|
|
46
|
-
|
|
47
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Fires once `quick_insights_status === "complete"`. The full DPDPA report
|
|
83
|
+
* continues to be generated in the background and is emailed to the
|
|
84
|
+
* `requested_by` (lead.email) address.
|
|
85
|
+
*/
|
|
86
|
+
onQuickInsightsReady?: (insights: QuickInsights, lead: CapturedLead) => void;
|
|
48
87
|
onError?: (error: FormError) => void;
|
|
49
88
|
};
|
|
50
89
|
|
|
51
|
-
declare const version = "0.
|
|
90
|
+
declare const version = "0.3.0";
|
|
52
91
|
declare function init(options: InitOptions): void;
|
|
53
92
|
declare function destroy(): void;
|
|
54
93
|
declare function getCapturedLead(): CapturedLead | null;
|
|
@@ -59,4 +98,4 @@ declare const RedactoDpdpaReport: {
|
|
|
59
98
|
version: string;
|
|
60
99
|
};
|
|
61
100
|
|
|
62
|
-
export { type BrandingConfig, type CapturedLead, type FormError, type InitOptions, RedactoDpdpaReport as default, destroy, getCapturedLead, init, version };
|
|
101
|
+
export { type AreaUnderReview, type BrandingConfig, type CapturedLead, type DpdpaApplicabilityLevel, type FormError, type InitOptions, type QuickInsights, type QuickInsightsConfidence, type QuickInsightsStatus, RedactoDpdpaReport as default, destroy, getCapturedLead, init, version };
|
package/dist/dpdpa-report.d.ts
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
type QuickInsightsStatus = "pending" | "complete" | "error";
|
|
2
|
+
type DpdpaApplicabilityLevel = "VERY_LIKELY" | "LIKELY" | "POSSIBLY" | "UNLIKELY";
|
|
3
|
+
type QuickInsightsConfidence = "HIGH" | "MEDIUM" | "LOW";
|
|
4
|
+
type AreaUnderReview = {
|
|
5
|
+
area: string;
|
|
6
|
+
dpdpa_references: string[];
|
|
7
|
+
redacto_product_hint: string;
|
|
8
|
+
why_this_is_being_checked: string;
|
|
9
|
+
};
|
|
10
|
+
type QuickInsights = {
|
|
11
|
+
type: string;
|
|
12
|
+
summary: string;
|
|
13
|
+
confidence: QuickInsightsConfidence | string;
|
|
14
|
+
full_report: {
|
|
15
|
+
status: string;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
generated_at: string;
|
|
19
|
+
educational_note: {
|
|
20
|
+
title: string;
|
|
21
|
+
message: string;
|
|
22
|
+
};
|
|
23
|
+
areas_under_review: AreaUnderReview[];
|
|
24
|
+
company_understanding: {
|
|
25
|
+
business_profile: string;
|
|
26
|
+
likely_user_relationship: string;
|
|
27
|
+
likely_digital_touchpoints: string[];
|
|
28
|
+
};
|
|
29
|
+
likely_data_to_validate: string[];
|
|
30
|
+
dpdpa_applicability_signal: {
|
|
31
|
+
level: DpdpaApplicabilityLevel | string;
|
|
32
|
+
reason: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
1
36
|
type BrandingConfig = {
|
|
2
37
|
/** URL or data URI for the brand logo. When omitted, defaults to the Redacto logo. */
|
|
3
38
|
logo?: string;
|
|
@@ -39,16 +74,20 @@ type InitOptions = {
|
|
|
39
74
|
branding?: BrandingConfig;
|
|
40
75
|
/** Polling cadence in ms. Defaults to 3000. */
|
|
41
76
|
pollIntervalMs?: number;
|
|
42
|
-
/** Hard timeout for the whole poll loop in ms. Defaults to
|
|
77
|
+
/** Hard timeout for the whole poll loop in ms. Defaults to 90000 (90s). */
|
|
43
78
|
pollTimeoutMs?: number;
|
|
44
79
|
onSubmit?: (lead: Omit<CapturedLead, "job_id">) => void;
|
|
45
80
|
onJobAccepted?: (job_id: string, lead: CapturedLead) => void;
|
|
46
|
-
|
|
47
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Fires once `quick_insights_status === "complete"`. The full DPDPA report
|
|
83
|
+
* continues to be generated in the background and is emailed to the
|
|
84
|
+
* `requested_by` (lead.email) address.
|
|
85
|
+
*/
|
|
86
|
+
onQuickInsightsReady?: (insights: QuickInsights, lead: CapturedLead) => void;
|
|
48
87
|
onError?: (error: FormError) => void;
|
|
49
88
|
};
|
|
50
89
|
|
|
51
|
-
declare const version = "0.
|
|
90
|
+
declare const version = "0.3.0";
|
|
52
91
|
declare function init(options: InitOptions): void;
|
|
53
92
|
declare function destroy(): void;
|
|
54
93
|
declare function getCapturedLead(): CapturedLead | null;
|
|
@@ -59,4 +98,4 @@ declare const RedactoDpdpaReport: {
|
|
|
59
98
|
version: string;
|
|
60
99
|
};
|
|
61
100
|
|
|
62
|
-
export { type BrandingConfig, type CapturedLead, type FormError, type InitOptions, RedactoDpdpaReport as default, destroy, getCapturedLead, init, version };
|
|
101
|
+
export { type AreaUnderReview, type BrandingConfig, type CapturedLead, type DpdpaApplicabilityLevel, type FormError, type InitOptions, type QuickInsights, type QuickInsightsConfidence, type QuickInsightsStatus, RedactoDpdpaReport as default, destroy, getCapturedLead, init, version };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var RedactoDpdpaReport=(()=>{var
|
|
1
|
+
"use strict";var RedactoDpdpaReport=(()=>{var k=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var Ee=(e,t)=>{for(var r in t)k(e,r,{get:t[r],enumerable:!0})},we=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of be(t))!ve.call(e,s)&&s!==r&&k(e,s,{get:()=>t[s],enumerable:!(i=xe(t,s))||i.enumerable});return e};var Se=e=>we(k({},"__esModule",{value:!0}),e);var je={};Ee(je,{default:()=>Be,destroy:()=>H,getCapturedLead:()=>he,init:()=>ge,version:()=>me});var A="https://salazar.redacto.tech",_={submit:"/webhook/dpdpa/generate",status:"/webhook/dpdpa/status"},F=3e3,O=9e4,B=3,j=15e3,R="redacto_dpdpa_lead",z="https://cdn.redacto.io/assets/redacto-logo.svg",u={name:"Redacto",primaryColor:"#4262ff",accentColor:"#a259ff",textColor:"#050038",borderColor:"#e5e5e5",backgroundColor:"#f7f7f7",borderRadius:"8px",fontFamily:"inherit"},D="#a6c03d",U="#f24e1e",q=2,Q=120,G=/^(?!-)[a-z0-9-]{1,63}(?<!-)(\.[a-z0-9-]{1,63})+$/i,Y=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,V=new Set(["gmail.com","googlemail.com","yahoo.com","yahoo.co.in","yahoo.co.uk","hotmail.com","outlook.com","live.com","icloud.com","me.com","aol.com","proton.me","protonmail.com","mail.com","gmx.com","zoho.com","rediffmail.com"]);function o(e,t,...r){let i=document.createElement(e);return t&&ke(i,t),X(i,r),i}function y(e,t,...r){let i=document.createElementNS("http://www.w3.org/2000/svg",e);if(t)for(let[s,a]of Object.entries(t))a==null||a===!1||(s==="style"&&typeof a=="object"?W(i,a):i.setAttribute(s,String(a)));return X(i,r),i}function ke(e,t){for(let[r,i]of Object.entries(t))if(!(i==null||i===!1))if(r==="style"&&typeof i=="object")W(e,i);else if(r==="className")e.className=i;else if(r==="dataset"&&typeof i=="object")Object.assign(e.dataset,i);else if(r.startsWith("on")&&typeof i=="function"){let s=r.slice(2).toLowerCase();e.addEventListener(s,i)}else r==="checked"||r==="disabled"||r==="readOnly"?e[r]=i:e.setAttribute(r,String(i))}var _e=new Set(["animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","fontWeight","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","lineHeight","opacity","order","orphans","scale","tabSize","widows","zIndex","zoom"]);function W(e,t){for(let[r,i]of Object.entries(t)){if(i==null)continue;let s=typeof i=="number"&&!_e.has(r)?`${i}px`:String(i);e.style[r]=s}}function X(e,t){for(let r of t)r==null||r===!1||(typeof r=="string"?e.appendChild(document.createTextNode(r)):e.appendChild(r))}function J(e){for(;e.firstChild;)e.removeChild(e.firstChild)}var x=class{constructor(t){this.listeners=new Set;this.state={...t}}getState(){return{...this.state}}setState(t){let r=this.state;this.state={...this.state,...t},this.listeners.forEach(i=>i(this.state,r))}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}destroy(){this.listeners.clear()}};var m=class extends Error{constructor(t,r){super(t),this.name="ApiError",this.status=r}};function K(e,t={}){let r=new AbortController,i=setTimeout(()=>r.abort(),j);return fetch(e,{...t,signal:r.signal}).finally(()=>clearTimeout(i))}function Z(e){return e instanceof DOMException&&e.name==="AbortError"?new m("Request timed out",void 0):new m(e instanceof Error?e.message:"Network error",void 0)}async function ee({baseUrl:e,body:t}){let r;try{r=await K(`${e}${_.submit}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}catch(s){throw Z(s)}let i;try{i=await r.json()}catch{throw new m(`Unexpected response (HTTP ${r.status})`,r.status)}if(!r.ok){let s=i&&"message"in i&&i.message?i.message:`Request failed (HTTP ${r.status})`;throw new m(s,r.status)}return i}async function te({baseUrl:e,jobId:t}){let r=`${e}${_.status}?job_id=${encodeURIComponent(t)}`,i;try{i=await K(r,{method:"GET"})}catch(a){throw Z(a)}let s;try{s=await i.json()}catch{throw new m(`Unexpected response (HTTP ${i.status})`,i.status)}if(!i.ok){let a=s&&"message"in s&&s.message?s.message:`Status check failed (HTTP ${i.status})`;throw new m(a,i.status)}return s}var re=()=>typeof window!="undefined"&&typeof window.localStorage!="undefined",b=e=>{if(re())try{window.localStorage.setItem(R,JSON.stringify(e))}catch(t){console.error("Failed to save lead:",t)}},Re=e=>{if(!e||typeof e!="object")return!1;let t=e;return typeof t.email=="string"&&typeof t.company_name=="string"&&typeof t.company_domain=="string"&&(t.job_id===null||typeof t.job_id=="string")&&typeof t.timestamp=="string"},ie=()=>{if(!re())return null;try{let e=window.localStorage.getItem(R);if(!e)return null;let t=JSON.parse(e);return Re(t)?t:null}catch(e){return console.error("Failed to load lead:",e),null}};var oe="redacto-dpdpa-form-styles";function Te(e){return`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
width: 100%;
|
|
@@ -422,5 +422,290 @@
|
|
|
422
422
|
from { transform: rotate(0deg); }
|
|
423
423
|
to { transform: rotate(360deg); }
|
|
424
424
|
}
|
|
425
|
-
`}function k(e,t){if(typeof document=="undefined"||e.querySelector(`#${te}`))return;let r=document.createElement("style");r.id=te,r.textContent=Se(t),e.appendChild(r)}var we=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function re(e,t){return!e||!we.test(e.trim())?t:e.trim()}function _(e){let t=e.replace("#","").trim(),r=t.length===3?t.split("").map(o=>o+o).join(""):t;return{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16)}}function Re(e,t){let{r,g:o,b:s}=_(e),i=a=>Math.max(0,Math.round(a*(1-t)));return`rgb(${i(r)}, ${i(o)}, ${i(s)})`}function Te(e,t){let{r,g:o,b:s}=_(e);return`rgba(${r}, ${o}, ${s}, ${t})`}function ke(e){let{r:t,g:r,b:o}=_(e),s=i=>{let a=i/255;return a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)};return .2126*s(t)+.7152*s(r)+.0722*s(o)}function _e(e){return ke(e)>.55?"#050038":"#ffffff"}function oe(e){var o;let t=re(e==null?void 0:e.primaryColor,c.primaryColor),r=re((o=e==null?void 0:e.accentColor)!=null?o:e==null?void 0:e.primaryColor,c.accentColor);return{logo:(e==null?void 0:e.logo)||O,name:(e==null?void 0:e.name)||c.name,primary:t,accent:r,primaryHover:Re(t,.08),primaryFocus:Te(t,.3),primaryText:_e(t),text:(e==null?void 0:e.textColor)||c.textColor,border:(e==null?void 0:e.borderColor)||c.borderColor,background:(e==null?void 0:e.backgroundColor)||c.backgroundColor,borderRadius:(e==null?void 0:e.borderRadius)||c.borderRadius,fontFamily:(e==null?void 0:e.fontFamily)||c.fontFamily,successColor:B,errorColor:j}}function L(e){return e.trim().toLowerCase().replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/.*$/,"")}function C(e,t){var o;let r=t.trim();switch(e){case"company_name":return r.length<U?"Please enter a company name":r.length>D?"Company name is too long":null;case"company_domain":{if(!r)return"Enter your company domain";let s=L(r);return z.test(s)?null:"Enter a valid domain like example.com"}case"email":{if(!r)return"Enter your work email";if(!G.test(r))return"Enter a valid email";let s=(o=r.split("@")[1])==null?void 0:o.toLowerCase();return s&&q.has(s)?"Please use your work email":null}}}function se(e){let t={};return Object.keys(e).forEach(r=>{let o=C(r,e[r]);o&&(t[r]=o)}),t}function b(e){let t=n("img",{src:e.logo,alt:`${e.name} logo`,className:"dpdpa-logo",onerror:o=>{let s=o.currentTarget;s.style.display="none";let i=s.nextElementSibling;i&&(i.style.display="inline-block")}}),r=n("span",{className:"dpdpa-wordmark",style:{display:"none"}},e.name);return n("div",{className:"dpdpa-header"},t,r)}function M(e,t){let r=n("input",{type:t.type,className:"dpdpa-input",placeholder:t.placeholder,value:t.value,autocomplete:t.autocomplete,"aria-label":t.label,onInput:a=>t.onInput(a.currentTarget.value),onBlur:()=>t.onBlur()}),o=n("div",{className:"dpdpa-field-error",role:"alert",style:{display:t.error?"block":"none"}},t.error||""),s=n("label",{className:"dpdpa-label"},t.label);return{row:n("div",{className:"dpdpa-field"},s,r,o),input:r,errorSlot:o}}function E(e){return n("div",{className:"dpdpa-footer"},"Powered by ",n("strong",null,e.name))}function I(e,t,r,o,s){let i=M(e,{field:"company_name",label:"Company name",type:"text",placeholder:"Acme Inc",value:t.company_name,error:r.company_name,autocomplete:"organization",onInput:h=>s.onInput("company_name",h),onBlur:()=>s.onBlur("company_name")}),a=M(e,{field:"company_domain",label:"Company domain",type:"text",placeholder:"acme.com",value:t.company_domain,error:r.company_domain,autocomplete:"url",onInput:h=>s.onInput("company_domain",h),onBlur:()=>s.onBlur("company_domain")}),l=M(e,{field:"email",label:"Work email",type:"email",placeholder:"you@acme.com",value:t.email,error:r.email,autocomplete:"email",onInput:h=>s.onInput("email",h),onBlur:()=>s.onBlur("email")}),d=n("div",{className:"dpdpa-general-error",role:"alert",style:{display:o?"block":"none"}},o||""),p=n("button",{type:"submit",className:"dpdpa-btn-primary"},"Get my free report"),m=n("form",{className:"dpdpa-form",novalidate:"true",onSubmit:h=>{h.preventDefault(),s.onSubmit()}},n("h2",{className:"dpdpa-heading"},"Get your free DPDPA compliance report"),n("p",{className:"dpdpa-subheading"},"We'll analyse your site and deliver a compliance assessment PDF."),d,i.row,a.row,l.row,p);return{root:n("div",{className:"dpdpa-card"},b(e),m,E(e)),fieldInputs:{company_name:i.input,company_domain:a.input,email:l.input},fieldErrors:{company_name:i.errorSlot,company_domain:a.errorSlot,email:l.errorSlot},submitBtn:p,generalError:d}}function ne(e,t){let r=I(e,t,{},null,{onInput:()=>{},onBlur:()=>{},onSubmit:()=>{}});return Object.values(r.fieldInputs).forEach(o=>{o.disabled=!0}),r.submitBtn.disabled=!0,r.submitBtn.textContent="",r.submitBtn.appendChild(n("span",{className:"dpdpa-spinner dpdpa-spinner-inline"})),r.submitBtn.appendChild(document.createTextNode(" Submitting\u2026")),r.root}function Le(){return n("span",{className:"dpdpa-dots","aria-hidden":"true"},n("span"),n("span"),n("span"))}function Ce(e){return n("div",{className:"dpdpa-step-icon dpdpa-step-icon-done",style:{backgroundColor:e.successColor}},f("svg",{width:12,height:12,viewBox:"0 0 24 24",fill:"none"},f("path",{d:"M5 12l5 5L20 7",stroke:"#ffffff","stroke-width":3,"stroke-linecap":"round","stroke-linejoin":"round"})))}function Me(e){return n("div",{className:"dpdpa-step-icon dpdpa-step-icon-active",style:{backgroundColor:e.primary}})}var Ie={pending:0,researching:0,analysis_complete:2},Ne=[{label:e=>`Researching ${e}`},{label:()=>"Analysing DPDPA compliance"},{label:()=>"Generating your report"}];function ie(e,t){let r=Math.min(100,Math.round(t.elapsedMs/t.pollTimeoutMs*100)),o=n("div",{className:"dpdpa-progress-fill",style:{width:`${r}%`}}),s=n("div",{className:"dpdpa-progress",role:"progressbar","aria-label":"Report generation progress","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(r)},o),i=Ie[t.subStatus],a=n("div",{className:"dpdpa-steps"});Ne.forEach((d,p)=>{if(p>i)return;let m=p===i,S=n("div",{className:`dpdpa-step ${m?"dpdpa-step-active":"dpdpa-step-done"}`},m?Me(e):Ce(e),n("span",{className:m?"dpdpa-step-label dpdpa-shimmer":"dpdpa-step-label"},d.label(t.companyName)));m&&S.appendChild(Le()),a.appendChild(S)});let l=n("div",{className:"dpdpa-polling"},a,n("p",{className:"dpdpa-polling-sub"},"This usually takes 60 to 120 seconds. Keep this tab open."),s);return n("div",{className:"dpdpa-card"},b(e),l,E(e))}function Fe(e){return n("div",{className:"dpdpa-check-circle",style:{backgroundColor:e.successColor}},f("svg",{width:28,height:28,viewBox:"0 0 24 24",fill:"none"},f("path",{d:"M5 12l5 5L20 7",stroke:"#ffffff","stroke-width":3,"stroke-linecap":"round","stroke-linejoin":"round"})))}function $e(e){let t=(e||"").trim();return t?!!(/^https?:\/\//i.test(t)||/^\/[^/]/.test(t)||t.startsWith("./")||t.startsWith("../")):!1}function ae(e,t){let r=$e(t.reportUrl)?t.reportUrl:"#",o=n("a",{href:r,target:"_blank",rel:"noopener noreferrer",className:"dpdpa-btn-primary dpdpa-btn-link"},"Download PDF"),s=n("a",{href:"#",className:"dpdpa-reset-link",onClick:a=>{a.preventDefault(),t.onReset()}},"Request another report"),i=n("div",{className:"dpdpa-success"},Fe(e),n("h3",{className:"dpdpa-success-title"},`Your DPDPA report for ${t.companyName} is ready`),n("p",{className:"dpdpa-success-sub"},"Click below to download your compliance assessment PDF."),o,s);return n("div",{className:"dpdpa-card"},b(e),i,E(e))}function le(e,t){let r=n("button",{type:"button",className:"dpdpa-btn-primary",onClick:()=>t.retryable?t.onRetry():t.onBack()},t.retryable?"Try again":"Edit details"),o=n("div",{className:"dpdpa-error-view"},n("h3",{className:"dpdpa-error-title"},"Something went wrong"),n("p",{className:"dpdpa-error-message"},t.message),r);return n("div",{className:"dpdpa-card"},b(e),o,E(e))}var de={company_name:"",company_domain:"",email:""},v=class{constructor(t){this.targetEl=null;this.hostEl=null;this.shadowRoot=null;this.idleRefs=null;this.pollTimer=null;this.pollStartedAt=0;this.pollHiddenSince=null;this.pollHiddenTotalMs=0;this.pollResumePending=!1;this.lastSubStatus=null;this.consecutiveErrors=0;this.destroyed=!1;this.unsubscribe=null;this.visibilityHandler=null;this.options=t,this.brand=oe(t.branding),this.fields={...de},this.store=new y({phase:"idle",subStatus:"pending",elapsedMs:0,jobId:null,reportUrl:null,errors:{},generalError:null,errorMessage:"",retryable:!0})}async init(){if(typeof this.options.target=="string"){let t=document.querySelector(this.options.target);if(!t)throw new Error(`DPDPA report form: target element not found for selector "${this.options.target}"`);this.targetEl=t}else this.targetEl=this.options.target;this.hostEl=document.createElement("div"),this.hostEl.setAttribute("data-redacto-dpdpa-report",""),this.hostEl.style.display="block",this.targetEl.appendChild(this.hostEl),this.shadowRoot=this.hostEl.attachShadow({mode:"open"}),k(this.shadowRoot,this.brand),this.unsubscribe=this.store.subscribe((t,r)=>{t.phase!==r.phase?this.render():t.phase==="polling"&&t.subStatus!==r.subStatus?this.render():t.phase==="polling"&&t.elapsedMs!==r.elapsedMs&&this.updateProgress()}),this.visibilityHandler=()=>this.handleVisibilityChange(),document.addEventListener("visibilitychange",this.visibilityHandler),this.render()}destroy(){var t;this.destroyed=!0,this.clearPolling(),(t=this.unsubscribe)==null||t.call(this),this.unsubscribe=null,this.visibilityHandler&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.store.destroy(),this.hostEl&&this.hostEl.parentNode&&this.hostEl.parentNode.removeChild(this.hostEl),this.hostEl=null,this.shadowRoot=null,this.targetEl=null,this.idleRefs=null}render(){if(!this.shadowRoot)return;X(this.shadowRoot),k(this.shadowRoot,this.brand),this.idleRefs=null;let t=this.store.getState(),r;switch(t.phase){case"idle":this.idleRefs=I(this.brand,this.fields,t.errors,t.generalError,{onInput:(o,s)=>this.handleInput(o,s),onBlur:o=>this.handleBlur(o),onSubmit:()=>this.handleSubmit()}),r=this.idleRefs.root;break;case"submitting":r=ne(this.brand,this.fields);break;case"polling":r=ie(this.brand,{companyName:this.fields.company_name,subStatus:t.subStatus,elapsedMs:t.elapsedMs,pollTimeoutMs:this.getPollTimeout()});break;case"complete":r=ae(this.brand,{companyName:this.fields.company_name,reportUrl:t.reportUrl||"#",onReset:()=>this.resetToIdle()});break;case"error":r=le(this.brand,{message:t.errorMessage,retryable:t.retryable,onRetry:()=>this.submit(),onBack:()=>{var o;return this.backToIdle((o=t.generalError)!=null?o:t.errorMessage)}});break}if(this.shadowRoot.appendChild(r),t.phase==="idle"&&this.idleRefs){let o=Object.keys(t.errors).find(s=>!!t.errors[s]);o&&this.idleRefs.fieldInputs[o].focus()}}updateProgress(){if(!this.shadowRoot)return;let t=this.shadowRoot.querySelector(".dpdpa-progress-fill"),r=this.shadowRoot.querySelector(".dpdpa-progress");if(!t)return;let o=Math.min(100,Math.round(this.store.getState().elapsedMs/this.getPollTimeout()*100));t.style.width=`${o}%`,r&&r.setAttribute("aria-valuenow",String(o))}handleInput(t,r){if(this.fields[t]=r,this.store.getState().errors[t]){let s={...this.store.getState().errors};delete s[t],this.store.setState({errors:s}),this.idleRefs&&this.clearFieldErrorSlot(t)}}handleBlur(t){let r=C(t,this.fields[t]),o={...this.store.getState().errors};r?o[t]=r:delete o[t],this.store.setState({errors:o}),this.updateFieldErrorSlot(t,r)}updateFieldErrorSlot(t,r){if(!this.idleRefs)return;let o=this.idleRefs.fieldErrors[t];r?(o.textContent=r,o.style.display="block"):(o.textContent="",o.style.display="none")}clearFieldErrorSlot(t){if(!this.idleRefs)return;let r=this.idleRefs.fieldErrors[t];r.textContent="",r.style.display="none"}handleSubmit(){let t={company_name:this.fields.company_name.trim(),company_domain:L(this.fields.company_domain),email:this.fields.email.trim()};this.fields=t;let r=se(t);if(Object.keys(r).length>0){this.store.setState({errors:r,generalError:null}),this.render(),this.emitError("One or more fields need your attention.","validation");return}this.store.setState({errors:{},generalError:null}),this.submit()}async submit(){var r,o,s,i;let t=this.makeLead(null);try{(o=(r=this.options).onSubmit)==null||o.call(r,{email:t.email,company_name:t.company_name,company_domain:t.company_domain,timestamp:t.timestamp})}catch(a){console.error("onSubmit handler threw:",a)}x(t),this.store.setState({phase:"submitting"});try{let a=await K({baseUrl:this.getBaseUrl(),body:{company_name:t.company_name,company_domain:t.company_domain}});if(this.destroyed)return;if(a.status==="error"){this.showError(a.message||"We couldn't accept that submission.",!1),this.emitError(a.message||"Submission rejected","submit");return}let l={...t,job_id:a.job_id};x(l);try{(i=(s=this.options).onJobAccepted)==null||i.call(s,a.job_id,l)}catch(d){console.error("onJobAccepted handler threw:",d)}this.startPolling(a.job_id)}catch(a){if(this.destroyed)return;let l=a,d=!l.status||l.status>=500;this.showError(l.message||"We couldn't reach our server. Please try again.",d),this.emitError(l.message||"Submit failed","submit",l.status)}}startPolling(t){this.clearPolling(),this.pollStartedAt=Date.now(),this.pollHiddenSince=null,this.pollHiddenTotalMs=0,this.lastSubStatus=null,this.consecutiveErrors=0,this.store.setState({phase:"polling",subStatus:"pending",elapsedMs:0,jobId:t}),this.schedulePoll()}schedulePoll(){var r;if(this.destroyed)return;if(typeof document!="undefined"&&document.hidden){this.pollHiddenSince===null&&(this.pollHiddenSince=Date.now()),this.pollResumePending=!0;return}let t=(r=this.options.pollIntervalMs)!=null?r:$;this.pollTimer=setTimeout(()=>this.pollTick(),t)}getActiveElapsed(){return Date.now()-this.pollStartedAt-this.pollHiddenTotalMs}async pollTick(){var o,s,i,a;if(this.destroyed)return;let t=this.store.getState().jobId;if(!t)return;let r=this.getActiveElapsed();if(r>=this.getPollTimeout()){this.showError("Report generation is taking longer than expected. Our team has been notified.",!1),this.emitError("Polling timed out","timeout");return}try{let l=await Q({baseUrl:this.getBaseUrl(),jobId:t});if(this.destroyed)return;if(this.consecutiveErrors=0,"status"in l&&l.status==="error"){this.showError(l.message||"Report generation failed.",!0),this.emitError(l.message||"Job errored","poll");return}if(l.status==="complete"&&"report_url"in l&&l.report_url){let p=this.makeLead(t);x(p),this.store.setState({phase:"complete",reportUrl:l.report_url});try{(s=(o=this.options).onComplete)==null||s.call(o,l.report_url,p)}catch(m){console.error("onComplete handler threw:",m)}return}let d=l.status;if(d!==this.lastSubStatus){this.lastSubStatus=d;try{(a=(i=this.options).onStatusChange)==null||a.call(i,d)}catch(p){console.error("onStatusChange handler threw:",p)}}this.store.setState({phase:"polling",subStatus:d,elapsedMs:r}),this.schedulePoll()}catch(l){if(this.destroyed)return;if(this.consecutiveErrors++,this.consecutiveErrors>=A){this.showError("We can't reach our server right now. Please try again.",!0),this.emitError(l instanceof Error?l.message:"Poll failed","poll");return}this.schedulePoll()}}clearPolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollResumePending=!1}handleVisibilityChange(){if(!this.destroyed){if(document.hidden){this.store.getState().phase==="polling"&&this.pollHiddenSince===null&&(this.pollHiddenSince=Date.now());return}this.pollHiddenSince!==null&&(this.pollHiddenTotalMs+=Date.now()-this.pollHiddenSince,this.pollHiddenSince=null),this.pollResumePending&&this.store.getState().phase==="polling"&&(this.pollResumePending=!1,this.pollTick())}}showError(t,r){this.store.setState({phase:"error",errorMessage:t,retryable:r})}resetToIdle(){this.fields={...de},this.lastSubStatus=null,this.store.setState({phase:"idle",errors:{},generalError:null,errorMessage:"",reportUrl:null,jobId:null,subStatus:"pending",elapsedMs:0})}backToIdle(t){this.store.setState({phase:"idle",errors:{},generalError:t,errorMessage:""})}emitError(t,r,o){var s,i;try{let a=Object.assign(new Error(t),{phase:r,status:o});(i=(s=this.options).onError)==null||i.call(s,a)}catch(a){console.error("onError handler threw:",a)}}makeLead(t){return{email:this.fields.email,company_name:this.fields.company_name,company_domain:this.fields.company_domain,job_id:t,timestamp:new Date().toISOString()}}getBaseUrl(){return(this.options.baseUrl||F).replace(/\/$/,"")}getPollTimeout(){var t;return(t=this.options.pollTimeoutMs)!=null?t:H}};var pe="0.1.0",g=null;function ce(e){N(),g=new v(e),g.init().catch(t=>{var r;try{(r=e.onError)==null||r.call(e,Object.assign(t instanceof Error?t:new Error(String(t)),{phase:"validation"}))}catch(o){console.error("onError handler threw:",o)}})}function N(){g&&(g.destroy(),g=null)}function ue(){return ee()}var He={init:ce,destroy:N,getCapturedLead:ue,version:pe},Ae=He;return xe(Pe);})();
|
|
425
|
+
|
|
426
|
+
/* Quick insights view */
|
|
427
|
+
|
|
428
|
+
.dpdpa-card-wide {
|
|
429
|
+
min-height: 0;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.dpdpa-qi {
|
|
433
|
+
display: flex;
|
|
434
|
+
flex-direction: column;
|
|
435
|
+
gap: 18px;
|
|
436
|
+
flex: 1;
|
|
437
|
+
animation: dpdpa-fade-in 0.35s ease-out both;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.dpdpa-qi-header {
|
|
441
|
+
display: flex;
|
|
442
|
+
flex-direction: column;
|
|
443
|
+
gap: 12px;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.dpdpa-qi-title {
|
|
447
|
+
margin: 0;
|
|
448
|
+
font-size: 18px;
|
|
449
|
+
font-weight: 700;
|
|
450
|
+
color: ${e.text};
|
|
451
|
+
line-height: 1.3;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.dpdpa-qi-subtitle {
|
|
455
|
+
margin: 0;
|
|
456
|
+
font-size: 14px;
|
|
457
|
+
color: ${e.text};
|
|
458
|
+
opacity: 0.85;
|
|
459
|
+
line-height: 1.55;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.dpdpa-applicability {
|
|
463
|
+
display: flex;
|
|
464
|
+
flex-direction: column;
|
|
465
|
+
gap: 4px;
|
|
466
|
+
padding: 12px 14px;
|
|
467
|
+
border-radius: ${e.borderRadius};
|
|
468
|
+
border: 1px solid ${e.border};
|
|
469
|
+
background: #ffffff;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.dpdpa-applicability-level {
|
|
473
|
+
font-size: 11px;
|
|
474
|
+
font-weight: 700;
|
|
475
|
+
letter-spacing: 0.6px;
|
|
476
|
+
text-transform: uppercase;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.dpdpa-applicability-reason {
|
|
480
|
+
font-size: 13px;
|
|
481
|
+
color: ${e.text};
|
|
482
|
+
opacity: 0.85;
|
|
483
|
+
line-height: 1.45;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.dpdpa-badge-strong { border-color: ${e.primary}66; background: ${e.primary}10; }
|
|
487
|
+
.dpdpa-badge-strong .dpdpa-applicability-level { color: ${e.primary}; }
|
|
488
|
+
|
|
489
|
+
.dpdpa-badge-warn { border-color: #f59e0b66; background: #f59e0b14; }
|
|
490
|
+
.dpdpa-badge-warn .dpdpa-applicability-level { color: #b45309; }
|
|
491
|
+
|
|
492
|
+
.dpdpa-badge-soft { border-color: #94a3b866; background: #94a3b814; }
|
|
493
|
+
.dpdpa-badge-soft .dpdpa-applicability-level { color: #475569; }
|
|
494
|
+
|
|
495
|
+
.dpdpa-badge-mute { border-color: ${e.border}; background: ${e.background}; }
|
|
496
|
+
.dpdpa-badge-mute .dpdpa-applicability-level { color: ${e.text}; opacity: 0.7; }
|
|
497
|
+
|
|
498
|
+
.dpdpa-badge-neutral { border-color: ${e.border}; background: ${e.background}; }
|
|
499
|
+
.dpdpa-badge-neutral .dpdpa-applicability-level { color: ${e.text}; }
|
|
500
|
+
|
|
501
|
+
.dpdpa-confidence-row {
|
|
502
|
+
display: flex;
|
|
503
|
+
align-items: center;
|
|
504
|
+
gap: 8px;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.dpdpa-meta-label {
|
|
508
|
+
font-size: 11px;
|
|
509
|
+
font-weight: 700;
|
|
510
|
+
letter-spacing: 0.5px;
|
|
511
|
+
text-transform: uppercase;
|
|
512
|
+
color: ${e.text};
|
|
513
|
+
opacity: 0.6;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
.dpdpa-meta-value {
|
|
517
|
+
font-size: 13px;
|
|
518
|
+
color: ${e.text};
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.dpdpa-chip {
|
|
522
|
+
display: inline-flex;
|
|
523
|
+
align-items: center;
|
|
524
|
+
padding: 3px 8px;
|
|
525
|
+
font-size: 11px;
|
|
526
|
+
font-weight: 600;
|
|
527
|
+
color: ${e.text};
|
|
528
|
+
background: ${e.background};
|
|
529
|
+
border: 1px solid ${e.border};
|
|
530
|
+
border-radius: 999px;
|
|
531
|
+
white-space: nowrap;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.dpdpa-chip-ref {
|
|
535
|
+
background: ${e.primary}12;
|
|
536
|
+
border-color: ${e.primary}33;
|
|
537
|
+
color: ${e.primary};
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.dpdpa-chip-data {
|
|
541
|
+
background: #ecfeff;
|
|
542
|
+
border-color: #67e8f933;
|
|
543
|
+
color: #0e7490;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.dpdpa-chip-touchpoint {
|
|
547
|
+
background: #f5f3ff;
|
|
548
|
+
border-color: #c4b5fd33;
|
|
549
|
+
color: #5b21b6;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
.dpdpa-chip-row {
|
|
553
|
+
display: flex;
|
|
554
|
+
flex-wrap: wrap;
|
|
555
|
+
gap: 6px;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.dpdpa-callout {
|
|
559
|
+
padding: 12px 14px;
|
|
560
|
+
background: ${e.primary}08;
|
|
561
|
+
border: 1px solid ${e.primary}22;
|
|
562
|
+
border-radius: ${e.borderRadius};
|
|
563
|
+
display: flex;
|
|
564
|
+
flex-direction: column;
|
|
565
|
+
gap: 4px;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.dpdpa-callout-title {
|
|
569
|
+
font-size: 12px;
|
|
570
|
+
font-weight: 700;
|
|
571
|
+
letter-spacing: 0.3px;
|
|
572
|
+
text-transform: uppercase;
|
|
573
|
+
color: ${e.primary};
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.dpdpa-callout-message {
|
|
577
|
+
margin: 0;
|
|
578
|
+
font-size: 13px;
|
|
579
|
+
color: ${e.text};
|
|
580
|
+
line-height: 1.5;
|
|
581
|
+
opacity: 0.85;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.dpdpa-section {
|
|
585
|
+
display: flex;
|
|
586
|
+
flex-direction: column;
|
|
587
|
+
gap: 10px;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.dpdpa-section-title {
|
|
591
|
+
margin: 0;
|
|
592
|
+
font-size: 13px;
|
|
593
|
+
font-weight: 700;
|
|
594
|
+
color: ${e.text};
|
|
595
|
+
letter-spacing: 0.2px;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
.dpdpa-area-list {
|
|
599
|
+
display: flex;
|
|
600
|
+
flex-direction: column;
|
|
601
|
+
gap: 10px;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.dpdpa-area-card {
|
|
605
|
+
padding: 12px 14px;
|
|
606
|
+
background: #ffffff;
|
|
607
|
+
border: 1px solid ${e.border};
|
|
608
|
+
border-radius: ${e.borderRadius};
|
|
609
|
+
display: flex;
|
|
610
|
+
flex-direction: column;
|
|
611
|
+
gap: 8px;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
.dpdpa-area-heading {
|
|
615
|
+
display: flex;
|
|
616
|
+
align-items: center;
|
|
617
|
+
justify-content: space-between;
|
|
618
|
+
gap: 10px;
|
|
619
|
+
flex-wrap: wrap;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
.dpdpa-area-name {
|
|
623
|
+
margin: 0;
|
|
624
|
+
font-size: 14px;
|
|
625
|
+
font-weight: 700;
|
|
626
|
+
color: ${e.text};
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
.dpdpa-product-hint {
|
|
630
|
+
font-size: 11px;
|
|
631
|
+
font-weight: 600;
|
|
632
|
+
color: ${e.primary};
|
|
633
|
+
background: ${e.primary}12;
|
|
634
|
+
padding: 3px 8px;
|
|
635
|
+
border-radius: 999px;
|
|
636
|
+
white-space: nowrap;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
.dpdpa-area-why {
|
|
640
|
+
margin: 0;
|
|
641
|
+
font-size: 13px;
|
|
642
|
+
color: ${e.text};
|
|
643
|
+
opacity: 0.8;
|
|
644
|
+
line-height: 1.5;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.dpdpa-cu-profile {
|
|
648
|
+
margin: 0;
|
|
649
|
+
font-size: 13px;
|
|
650
|
+
color: ${e.text};
|
|
651
|
+
opacity: 0.85;
|
|
652
|
+
line-height: 1.5;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.dpdpa-cu-meta {
|
|
656
|
+
display: flex;
|
|
657
|
+
align-items: center;
|
|
658
|
+
gap: 8px;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.dpdpa-email-banner {
|
|
662
|
+
display: flex;
|
|
663
|
+
align-items: flex-start;
|
|
664
|
+
gap: 12px;
|
|
665
|
+
padding: 14px 16px;
|
|
666
|
+
background: linear-gradient(135deg, ${e.primary}10, ${e.accent}10);
|
|
667
|
+
border: 1px solid ${e.primary}33;
|
|
668
|
+
border-radius: ${e.borderRadius};
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
.dpdpa-email-icon {
|
|
672
|
+
flex: none;
|
|
673
|
+
display: inline-flex;
|
|
674
|
+
align-items: center;
|
|
675
|
+
justify-content: center;
|
|
676
|
+
width: 32px;
|
|
677
|
+
height: 32px;
|
|
678
|
+
border-radius: 50%;
|
|
679
|
+
background: ${e.primary};
|
|
680
|
+
color: ${e.primaryText};
|
|
681
|
+
margin-top: 2px;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.dpdpa-email-text {
|
|
685
|
+
display: flex;
|
|
686
|
+
flex-direction: column;
|
|
687
|
+
gap: 2px;
|
|
688
|
+
min-width: 0;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.dpdpa-email-headline {
|
|
692
|
+
font-size: 14px;
|
|
693
|
+
font-weight: 700;
|
|
694
|
+
color: ${e.text};
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
.dpdpa-email-sub {
|
|
698
|
+
margin: 0;
|
|
699
|
+
font-size: 13px;
|
|
700
|
+
color: ${e.text};
|
|
701
|
+
opacity: 0.8;
|
|
702
|
+
line-height: 1.5;
|
|
703
|
+
word-break: break-word;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
@keyframes dpdpa-fade-in {
|
|
707
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
708
|
+
to { opacity: 1; transform: translateY(0); }
|
|
709
|
+
}
|
|
710
|
+
`}function T(e,t){if(typeof document=="undefined"||e.querySelector(`#${oe}`))return;let r=document.createElement("style");r.id=oe,r.textContent=Te(t),e.appendChild(r)}var Le=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function se(e,t){return!e||!Le.test(e.trim())?t:e.trim()}function L(e){let t=e.replace("#","").trim(),r=t.length===3?t.split("").map(i=>i+i).join(""):t;return{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16)}}function Ie(e,t){let{r,g:i,b:s}=L(e),a=n=>Math.max(0,Math.round(n*(1-t)));return`rgb(${a(r)}, ${a(i)}, ${a(s)})`}function $e(e,t){let{r,g:i,b:s}=L(e);return`rgba(${r}, ${i}, ${s}, ${t})`}function Ne(e){let{r:t,g:r,b:i}=L(e),s=a=>{let n=a/255;return n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)};return .2126*s(t)+.7152*s(r)+.0722*s(i)}function Me(e){return Ne(e)>.55?"#050038":"#ffffff"}function ae(e){var i;let t=se(e==null?void 0:e.primaryColor,u.primaryColor),r=se((i=e==null?void 0:e.accentColor)!=null?i:e==null?void 0:e.primaryColor,u.accentColor);return{logo:(e==null?void 0:e.logo)||z,name:(e==null?void 0:e.name)||u.name,primary:t,accent:r,primaryHover:Ie(t,.08),primaryFocus:$e(t,.3),primaryText:Me(t),text:(e==null?void 0:e.textColor)||u.textColor,border:(e==null?void 0:e.borderColor)||u.borderColor,background:(e==null?void 0:e.backgroundColor)||u.backgroundColor,borderRadius:(e==null?void 0:e.borderRadius)||u.borderRadius,fontFamily:(e==null?void 0:e.fontFamily)||u.fontFamily,successColor:D,errorColor:U}}function I(e){return e.trim().toLowerCase().replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/.*$/,"")}function $(e,t){var i;let r=t.trim();switch(e){case"company_name":return r.length<q?"Please enter a company name":r.length>Q?"Company name is too long":null;case"company_domain":{if(!r)return"Enter your company domain";let s=I(r);return G.test(s)?null:"Enter a valid domain like example.com"}case"email":{if(!r)return"Enter your work email";if(!Y.test(r))return"Enter a valid email";let s=(i=r.split("@")[1])==null?void 0:i.toLowerCase();return s&&V.has(s)?"Please use your work email":null}}}function ne(e){let t={};return Object.keys(e).forEach(r=>{let i=$(r,e[r]);i&&(t[r]=i)}),t}function E(e){let t=o("img",{src:e.logo,alt:`${e.name} logo`,className:"dpdpa-logo",onerror:i=>{let s=i.currentTarget;s.style.display="none";let a=s.nextElementSibling;a&&(a.style.display="inline-block")}}),r=o("span",{className:"dpdpa-wordmark",style:{display:"none"}},e.name);return o("div",{className:"dpdpa-header"},t,r)}function N(e,t){let r=o("input",{type:t.type,className:"dpdpa-input",placeholder:t.placeholder,value:t.value,autocomplete:t.autocomplete,"aria-label":t.label,onInput:n=>t.onInput(n.currentTarget.value),onBlur:()=>t.onBlur()}),i=o("div",{className:"dpdpa-field-error",role:"alert",style:{display:t.error?"block":"none"}},t.error||""),s=o("label",{className:"dpdpa-label"},t.label);return{row:o("div",{className:"dpdpa-field"},s,r,i),input:r,errorSlot:i}}function w(e){return o("div",{className:"dpdpa-footer"},"Powered by ",o("strong",null,e.name))}function C(e,t,r,i,s){let a=N(e,{field:"company_name",label:"Company name",type:"text",placeholder:"Acme Inc",value:t.company_name,error:r.company_name,autocomplete:"organization",onInput:c=>s.onInput("company_name",c),onBlur:()=>s.onBlur("company_name")}),n=N(e,{field:"company_domain",label:"Company domain",type:"text",placeholder:"acme.com",value:t.company_domain,error:r.company_domain,autocomplete:"url",onInput:c=>s.onInput("company_domain",c),onBlur:()=>s.onBlur("company_domain")}),l=N(e,{field:"email",label:"Work email",type:"email",placeholder:"you@acme.com",value:t.email,error:r.email,autocomplete:"email",onInput:c=>s.onInput("email",c),onBlur:()=>s.onBlur("email")}),p=o("div",{className:"dpdpa-general-error",role:"alert",style:{display:i?"block":"none"}},i||""),d=o("button",{type:"submit",className:"dpdpa-btn-primary"},"Get my free report"),h=o("form",{className:"dpdpa-form",novalidate:"true",onSubmit:c=>{c.preventDefault(),s.onSubmit()}},o("h2",{className:"dpdpa-heading"},"Get your free DPDPA compliance report"),o("p",{className:"dpdpa-subheading"},"We'll preview your DPDPA exposure here and email you the full report."),p,a.row,n.row,l.row,d);return{root:o("div",{className:"dpdpa-card"},E(e),h,w(e)),fieldInputs:{company_name:a.input,company_domain:n.input,email:l.input},fieldErrors:{company_name:a.errorSlot,company_domain:n.errorSlot,email:l.errorSlot},submitBtn:d,generalError:p}}function le(e,t){let r=C(e,t,{},null,{onInput:()=>{},onBlur:()=>{},onSubmit:()=>{}});return Object.values(r.fieldInputs).forEach(i=>{i.disabled=!0}),r.submitBtn.disabled=!0,r.submitBtn.textContent="",r.submitBtn.appendChild(o("span",{className:"dpdpa-spinner dpdpa-spinner-inline"})),r.submitBtn.appendChild(document.createTextNode(" Submitting\u2026")),r.root}function Ce(){return o("span",{className:"dpdpa-dots","aria-hidden":"true"},o("span"),o("span"),o("span"))}function He(e){return o("div",{className:"dpdpa-step-icon dpdpa-step-icon-active",style:{backgroundColor:e.primary}})}function pe(e,t){let r=Math.min(100,Math.round(t.elapsedMs/t.pollTimeoutMs*100)),i=o("div",{className:"dpdpa-progress-fill",style:{width:`${r}%`}}),s=o("div",{className:"dpdpa-progress",role:"progressbar","aria-label":"Quick insights progress","aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(r)},i),a=o("div",{className:"dpdpa-step dpdpa-step-active"},He(e),o("span",{className:"dpdpa-step-label dpdpa-shimmer"},`Scanning ${t.companyName}'s privacy footprint`),Ce()),n=o("div",{className:"dpdpa-polling"},o("div",{className:"dpdpa-steps"},a),o("p",{className:"dpdpa-polling-sub"},"Generating your preliminary DPDPA scan. This usually takes 10\u201320 seconds."),s);return o("div",{className:"dpdpa-card"},E(e),n,w(e))}function v(e,t){return o("span",{className:`dpdpa-chip${t?` dpdpa-chip-${t}`:""}`},e)}function Pe(e,t){let r=(e||"").toUpperCase(),i="dpdpa-badge-neutral";return r.includes("VERY_LIKELY")?i="dpdpa-badge-strong":r==="LIKELY"?i="dpdpa-badge-warn":r==="POSSIBLY"?i="dpdpa-badge-soft":r==="UNLIKELY"&&(i="dpdpa-badge-mute"),o("div",{className:`dpdpa-applicability ${i}`},o("span",{className:"dpdpa-applicability-level"},e.replace(/_/g," ")),o("span",{className:"dpdpa-applicability-reason"},t))}function M(e){return o("h4",{className:"dpdpa-section-title"},e)}function Ae(e){let t=o("div",{className:"dpdpa-chip-row"},...e.dpdpa_references.map(s=>v(s,"ref"))),r=e.redacto_product_hint?o("span",{className:"dpdpa-product-hint"},`Redacto ${e.redacto_product_hint}`):null,i=o("div",{className:"dpdpa-area-heading"},o("h5",{className:"dpdpa-area-name"},e.area),...r?[r]:[]);return o("div",{className:"dpdpa-area-card"},i,t,o("p",{className:"dpdpa-area-why"},e.why_this_is_being_checked))}function Fe(){return y("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none"},y("path",{d:"M4 6h16v12H4z",stroke:"currentColor","stroke-width":2,"stroke-linejoin":"round"}),y("path",{d:"M4 7l8 6 8-6",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}))}function de(e,t){let r=t.insights,i=o("h3",{className:"dpdpa-qi-title"},`Preliminary DPDPA scan for ${t.companyName}`),s=o("p",{className:"dpdpa-qi-subtitle"},r.summary),a=o("div",{className:"dpdpa-confidence-row"},o("span",{className:"dpdpa-meta-label"},"Confidence"),v(r.confidence)),n=Pe(r.dpdpa_applicability_signal.level,r.dpdpa_applicability_signal.reason),l=o("div",{className:"dpdpa-callout"},o("div",{className:"dpdpa-callout-title"},r.educational_note.title),o("p",{className:"dpdpa-callout-message"},r.educational_note.message)),p=o("section",{className:"dpdpa-section"},M("Areas under review"),o("div",{className:"dpdpa-area-list"},...r.areas_under_review.map(g=>Ae(g)))),d=r.company_understanding,h=o("section",{className:"dpdpa-section"},M("Company understanding"),o("p",{className:"dpdpa-cu-profile"},d.business_profile),o("div",{className:"dpdpa-cu-meta"},o("span",{className:"dpdpa-meta-label"},"Likely users"),o("span",{className:"dpdpa-meta-value"},d.likely_user_relationship)),o("div",{className:"dpdpa-chip-row"},...d.likely_digital_touchpoints.map(g=>v(g,"touchpoint")))),P=o("section",{className:"dpdpa-section"},M("Data likely to validate"),o("div",{className:"dpdpa-chip-row"},...r.likely_data_to_validate.map(g=>v(g,"data")))),c=o("div",{className:"dpdpa-email-banner"},o("span",{className:"dpdpa-email-icon"},Fe()),o("div",{className:"dpdpa-email-text"},o("strong",{className:"dpdpa-email-headline"},"Your full DPDPA report is on its way."),o("p",{className:"dpdpa-email-sub"},"We'll email it to ",o("strong",null,t.email)," once compliance validation finishes."))),fe=o("a",{href:"#",className:"dpdpa-reset-link",onClick:g=>{g.preventDefault(),t.onReset()}},"Run another scan"),ye=o("div",{className:"dpdpa-qi"},o("div",{className:"dpdpa-qi-header"},i,n),s,a,l,p,h,P,c,fe);return o("div",{className:"dpdpa-card dpdpa-card-wide"},E(e),ye,w(e))}function ce(e,t){let r=o("button",{type:"button",className:"dpdpa-btn-primary",onClick:()=>t.retryable?t.onRetry():t.onBack()},t.retryable?"Try again":"Edit details"),i=o("div",{className:"dpdpa-error-view"},o("h3",{className:"dpdpa-error-title"},"Something went wrong"),o("p",{className:"dpdpa-error-message"},t.message),r);return o("div",{className:"dpdpa-card"},E(e),i,w(e))}var ue={company_name:"",company_domain:"",email:""},S=class{constructor(t){this.targetEl=null;this.hostEl=null;this.shadowRoot=null;this.idleRefs=null;this.pollTimer=null;this.pollStartedAt=0;this.pollHiddenSince=null;this.pollHiddenTotalMs=0;this.pollResumePending=!1;this.consecutiveErrors=0;this.destroyed=!1;this.unsubscribe=null;this.visibilityHandler=null;this.options=t,this.brand=ae(t.branding),this.fields={...ue},this.store=new x({phase:"idle",subStatus:"pending",elapsedMs:0,jobId:null,quickInsights:null,errors:{},generalError:null,errorMessage:"",retryable:!0})}async init(){if(typeof this.options.target=="string"){let t=document.querySelector(this.options.target);if(!t)throw new Error(`DPDPA report form: target element not found for selector "${this.options.target}"`);this.targetEl=t}else this.targetEl=this.options.target;this.hostEl=document.createElement("div"),this.hostEl.setAttribute("data-redacto-dpdpa-report",""),this.hostEl.style.display="block",this.targetEl.appendChild(this.hostEl),this.shadowRoot=this.hostEl.attachShadow({mode:"open"}),T(this.shadowRoot,this.brand),this.unsubscribe=this.store.subscribe((t,r)=>{t.phase!==r.phase?this.render():t.phase==="polling"&&t.subStatus!==r.subStatus?this.render():t.phase==="polling"&&t.elapsedMs!==r.elapsedMs&&this.updateProgress()}),this.visibilityHandler=()=>this.handleVisibilityChange(),document.addEventListener("visibilitychange",this.visibilityHandler),this.render()}destroy(){var t;this.destroyed=!0,this.clearPolling(),(t=this.unsubscribe)==null||t.call(this),this.unsubscribe=null,this.visibilityHandler&&(document.removeEventListener("visibilitychange",this.visibilityHandler),this.visibilityHandler=null),this.store.destroy(),this.hostEl&&this.hostEl.parentNode&&this.hostEl.parentNode.removeChild(this.hostEl),this.hostEl=null,this.shadowRoot=null,this.targetEl=null,this.idleRefs=null}render(){if(!this.shadowRoot)return;J(this.shadowRoot),T(this.shadowRoot,this.brand),this.idleRefs=null;let t=this.store.getState(),r;switch(t.phase){case"idle":this.idleRefs=C(this.brand,this.fields,t.errors,t.generalError,{onInput:(i,s)=>this.handleInput(i,s),onBlur:i=>this.handleBlur(i),onSubmit:()=>this.handleSubmit()}),r=this.idleRefs.root;break;case"submitting":r=le(this.brand,this.fields);break;case"polling":r=pe(this.brand,{companyName:this.fields.company_name,subStatus:t.subStatus,elapsedMs:t.elapsedMs,pollTimeoutMs:this.getPollTimeout()});break;case"quick_insights":r=de(this.brand,{companyName:this.fields.company_name,email:this.fields.email,insights:t.quickInsights,onReset:()=>this.resetToIdle()});break;case"error":r=ce(this.brand,{message:t.errorMessage,retryable:t.retryable,onRetry:()=>this.retry(),onBack:()=>{var i;return this.backToIdle((i=t.generalError)!=null?i:t.errorMessage)}});break}if(this.shadowRoot.appendChild(r),t.phase==="idle"&&this.idleRefs){let i=Object.keys(t.errors).find(s=>!!t.errors[s]);i&&this.idleRefs.fieldInputs[i].focus()}}updateProgress(){if(!this.shadowRoot)return;let t=this.shadowRoot.querySelector(".dpdpa-progress-fill"),r=this.shadowRoot.querySelector(".dpdpa-progress");if(!t)return;let i=Math.min(100,Math.round(this.store.getState().elapsedMs/this.getPollTimeout()*100));t.style.width=`${i}%`,r&&r.setAttribute("aria-valuenow",String(i))}handleInput(t,r){if(this.fields[t]=r,this.store.getState().errors[t]){let s={...this.store.getState().errors};delete s[t],this.store.setState({errors:s}),this.idleRefs&&this.clearFieldErrorSlot(t)}}handleBlur(t){let r=$(t,this.fields[t]),i={...this.store.getState().errors};r?i[t]=r:delete i[t],this.store.setState({errors:i}),this.updateFieldErrorSlot(t,r)}updateFieldErrorSlot(t,r){if(!this.idleRefs)return;let i=this.idleRefs.fieldErrors[t];r?(i.textContent=r,i.style.display="block"):(i.textContent="",i.style.display="none")}clearFieldErrorSlot(t){if(!this.idleRefs)return;let r=this.idleRefs.fieldErrors[t];r.textContent="",r.style.display="none"}handleSubmit(){let t={company_name:this.fields.company_name.trim(),company_domain:I(this.fields.company_domain),email:this.fields.email.trim()};this.fields=t;let r=ne(t);if(Object.keys(r).length>0){this.store.setState({errors:r,generalError:null}),this.render(),this.emitError("One or more fields need your attention.","validation");return}this.store.setState({errors:{},generalError:null}),this.submit()}async submit(){var r,i,s,a;let t=this.makeLead(null);try{(i=(r=this.options).onSubmit)==null||i.call(r,{email:t.email,company_name:t.company_name,company_domain:t.company_domain,timestamp:t.timestamp})}catch(n){console.error("onSubmit handler threw:",n)}b(t),this.store.setState({phase:"submitting"});try{let n=await ee({baseUrl:this.getBaseUrl(),body:{company_name:t.company_name,company_domain:t.company_domain,requested_by:t.email}});if(this.destroyed)return;if(n.status==="error"){this.showError(n.message||"We couldn't accept that submission.",!1),this.emitError(n.message||"Submission rejected","submit");return}let l={...t,job_id:n.job_id};b(l);try{(a=(s=this.options).onJobAccepted)==null||a.call(s,n.job_id,l)}catch(p){console.error("onJobAccepted handler threw:",p)}this.startPolling(n.job_id)}catch(n){if(this.destroyed)return;let l=n,p=!l.status||l.status>=500;this.showError(l.message||"We couldn't reach our server. Please try again.",p),this.emitError(l.message||"Submit failed","submit",l.status)}}startPolling(t){this.clearPolling(),this.pollStartedAt=Date.now(),this.pollHiddenSince=null,this.pollHiddenTotalMs=0,this.consecutiveErrors=0,this.store.setState({phase:"polling",subStatus:"pending",elapsedMs:0,jobId:t}),this.schedulePoll()}schedulePoll(){var r;if(this.destroyed)return;if(typeof document!="undefined"&&document.hidden){this.pollHiddenSince===null&&(this.pollHiddenSince=Date.now()),this.pollResumePending=!0;return}let t=(r=this.options.pollIntervalMs)!=null?r:F;this.pollTimer=setTimeout(()=>this.pollTick(),t)}getActiveElapsed(){let t=this.pollHiddenSince!==null?Date.now()-this.pollHiddenSince:0;return Date.now()-this.pollStartedAt-this.pollHiddenTotalMs-t}async pollTick(){var i,s;if(this.destroyed)return;let t=this.store.getState().jobId;if(!t)return;let r=this.getActiveElapsed();if(r>=this.getPollTimeout()){this.showError("Quick insights are taking longer than expected. Please try again.",!0),this.emitError("Polling timed out","timeout");return}try{let a=await te({baseUrl:this.getBaseUrl(),jobId:t});if(this.destroyed)return;if(this.consecutiveErrors=0,"status"in a&&a.status==="error"){let p=a;this.showError(p.message||"Report generation failed.",!0),this.emitError(p.message||"Job errored","poll");return}let n=a;if(n.quick_insights_status==="complete"){let p=n.quick_insights;if(!p){this.showError("Quick insights are marked complete but the payload is missing. Please try again.",!0),this.emitError("Quick insights complete without payload","poll");return}let d=this.makeLead(t);b(d),this.store.setState({phase:"quick_insights",quickInsights:p});try{(s=(i=this.options).onQuickInsightsReady)==null||s.call(i,p,d)}catch(h){console.error("onQuickInsightsReady handler threw:",h)}return}if(n.quick_insights_status==="error"){this.showError("We couldn't generate quick insights. Please try again.",!0),this.emitError("Quick insights errored","poll");return}let l=(n.status==="complete"?"analysis_complete":n.status)||"pending";this.store.setState({phase:"polling",subStatus:l,elapsedMs:r}),this.schedulePoll()}catch(a){if(this.destroyed)return;if(this.consecutiveErrors++,this.consecutiveErrors>=B){this.showError("We can't reach our server right now. Please try again.",!0),this.emitError(a instanceof Error?a.message:"Poll failed","poll");return}this.schedulePoll()}}clearPolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollResumePending=!1}handleVisibilityChange(){if(!this.destroyed){if(document.hidden){this.store.getState().phase==="polling"&&(this.pollHiddenSince===null&&(this.pollHiddenSince=Date.now()),this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollResumePending=!0);return}this.pollHiddenSince!==null&&(this.pollHiddenTotalMs+=Date.now()-this.pollHiddenSince,this.pollHiddenSince=null),this.pollResumePending&&this.store.getState().phase==="polling"&&(this.pollResumePending=!1,this.pollTick())}}showError(t,r){this.store.setState({phase:"error",errorMessage:t,retryable:r})}retry(){let t=this.store.getState().jobId;t?this.startPolling(t):this.submit()}resetToIdle(){this.fields={...ue},this.store.setState({phase:"idle",errors:{},generalError:null,errorMessage:"",quickInsights:null,jobId:null,subStatus:"pending",elapsedMs:0})}backToIdle(t){this.store.setState({phase:"idle",errors:{},generalError:t,errorMessage:""})}emitError(t,r,i){var s,a;try{let n=Object.assign(new Error(t),{phase:r,status:i});(a=(s=this.options).onError)==null||a.call(s,n)}catch(n){console.error("onError handler threw:",n)}}makeLead(t){return{email:this.fields.email,company_name:this.fields.company_name,company_domain:this.fields.company_domain,job_id:t,timestamp:new Date().toISOString()}}getBaseUrl(){return(this.options.baseUrl||A).replace(/\/$/,"")}getPollTimeout(){var t;return(t=this.options.pollTimeoutMs)!=null?t:O}};var me="0.3.0",f=null;function ge(e){H(),f=new S(e),f.init().catch(t=>{var r;try{(r=e.onError)==null||r.call(e,Object.assign(t instanceof Error?t:new Error(String(t)),{phase:"validation"}))}catch(i){console.error("onError handler threw:",i)}})}function H(){f&&(f.destroy(),f=null)}function he(){return ie()}var Oe={init:ge,destroy:H,getCapturedLead:he,version:me},Be=Oe;return Se(je);})();
|
|
426
711
|
//# sourceMappingURL=dpdpa-report.global.js.map
|