@syndew/oluso-sdk 0.0.0-stage → 0.1.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.
@@ -0,0 +1,448 @@
1
+ "use strict";var Oluso=(()=>{var W=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var ke=Object.prototype.hasOwnProperty;var Se=(r,e)=>{for(var t in e)W(r,t,{get:e[t],enumerable:!0})},Te=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ee(e))!ke.call(r,a)&&a!==t&&W(r,a,{get:()=>e[a],enumerable:!(s=je(e,a))||s.enumerable});return r};var Le=r=>Te(W({},"__esModule",{value:!0}),r);var Be={};Se(Be,{close:()=>R,destroy:()=>fe,init:()=>ye,mount:()=>Z,open:()=>$});var P=class{constructor(e){this.listeners=new Map;if(!e.serverUrl)throw new Error("serverUrl is required");this.config={...e,serverUrl:e.serverUrl.replace(/\/$/,"")},this.fetchFn=e.fetch||globalThis.fetch.bind(globalThis)}async getJourney(e){return await this.request(`/api/public/journeys/${encodeURIComponent(e)}`)}async submit(e,t,s){try{let a=await this.request(`/api/public/journeys/${encodeURIComponent(e)}/submit`,{method:"POST",body:{data:t,metadata:{...s?.metadata,referrer:typeof document<"u"?document.referrer:void 0,userAgent:typeof navigator<"u"?navigator.userAgent:void 0},honeypot:s?.honeypot}});return this.emit({type:"submission:success",slug:e,data:a}),a}catch(a){throw this.emit({type:"submission:error",slug:e,error:a instanceof Error?a:new Error(String(a))}),a}}async startJourney(e,t){let s=await this.request(`/api/public/journeys/${encodeURIComponent(e)}/start`,{method:"POST",body:{data:t}});return this.emit({type:"journey:started",slug:s.slug,sessionId:s.sessionId,data:s}),s}async startAuthJourney(e,t,s){let a=await this.request(`/api/public/journeys/${encodeURIComponent(e)}/start`,{method:"POST",body:{data:s,clientId:t.clientId,codeChallenge:t.codeChallenge,codeChallengeMethod:"S256",scope:t.scope}});return this.emit({type:"journey:started",slug:a.slug,sessionId:a.sessionId,data:a}),a}async submitStep(e,t,s){let a=await this.request(`/api/public/journeys/sessions/${encodeURIComponent(e)}/step`,{method:"POST",body:{data:t,action:s}});return this.emit({type:a.completed?"journey:completed":a.success?"journey:step":"journey:error",slug:a.slug,sessionId:e,data:a}),a}async submitStepForm(e,t,s){s&&t.set("__journey_action",s);let a=await this.request(`/api/public/journeys/sessions/${encodeURIComponent(e)}/step`,{method:"POST",body:t});return this.emit({type:a.completed?"journey:completed":a.success?"journey:step":"journey:error",slug:a.slug,sessionId:e,data:a}),a}get serverUrl(){return this.config.serverUrl}async getSession(e){return this.request(`/api/public/journeys/sessions/${encodeURIComponent(e)}`)}getJourneyUrl(e,t){let s=new URLSearchParams;return this.config.tenant&&s.set("tenant",this.config.tenant),t?.redirectUri&&s.set("redirect_uri",t.redirectUri),t?.state&&s.set("state",t.state),`${this.config.serverUrl}/journey/start/${encodeURIComponent(e)}?${s}`}getEmbedUrl(e,t){let s=new URLSearchParams({embed:"true"});return this.config.tenant&&s.set("tenant",this.config.tenant),t?.theme&&s.set("theme",t.theme),t?.hideHeader&&s.set("hideHeader","true"),`${this.config.serverUrl}/journey/start/${encodeURIComponent(e)}?${s}`}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>{this.listeners.get(e)?.delete(t)}}off(e,t){this.listeners.get(e)?.delete(t)}emit(e){this.listeners.get(e.type)?.forEach(t=>t(e)),this.listeners.get("*")?.forEach(t=>t(e))}async request(e,t){let s=`${this.config.serverUrl}${e}`,a=t?.method||"GET",c=typeof FormData<"u"&&t?.body instanceof FormData,y={};this.config.tenant&&(y["X-Tenant-ID"]=this.config.tenant),c||(y["Content-Type"]="application/json"),this.config.apiKey&&(y["X-API-Key"]=this.config.apiKey),this.config.headers&&Object.assign(y,await this.config.headers({method:a,url:s}));let f=await this.fetchFn(s,{method:a,headers:y,body:t?.body===void 0?void 0:c?t.body:JSON.stringify(t.body),credentials:"include"});if(!f.ok){let b=await f.json().catch(()=>({message:f.statusText}));throw new V(b.message||`Request failed: ${f.status}`,f.status,b.code,b.errors)}return f.json()}},V=class extends Error{constructor(t,s,a,c){super(t);this.status=s;this.code=a;this.fieldErrors=c;this.name="OlusoError"}};var Me={eq:"eq",equals:"eq","==":"eq","=":"eq",ne:"ne",neq:"ne",notequals:"ne","!=":"ne",gt:"gt",">":"gt",greaterthan:"gt",gte:"gte",">=":"gte",greaterthanorequals:"gte",lt:"lt","<":"lt",lessthan:"lt",lte:"lte","<=":"lte",lessthanorequals:"lte",contains:"contains",notcontains:"not_contains","!contains":"not_contains",startswith:"starts_with",endswith:"ends_with",exists:"exists",notnull:"exists",isset:"exists",notexists:"not_exists",null:"not_exists",isnotset:"not_exists",empty:"empty",notempty:"not_empty",in:"in",notin:"not_in","!in":"not_in",regex:"regex",matches:"regex",true:"true",false:"false"};function Ae(r){if(r)return Me[r.trim().toLowerCase().replace(/_/g,"")]}var H=(r,e)=>r.localeCompare(e,void 0,{sensitivity:"accent"})===0;function F(r,e){if(e===void 0)return;let t=Number(r),s=Number(e);if(r.trim()!==""&&e.trim()!==""&&!Number.isNaN(t)&&!Number.isNaN(s))return t===s?0:t<s?-1:1;let a=Date.parse(r),c=Date.parse(e);return!Number.isNaN(a)&&!Number.isNaN(c)?a===c?0:a<c?-1:1:r.localeCompare(e,void 0,{sensitivity:"accent"})}function Y(r,e,t){let s=r.toLowerCase(),a=(t??"").toLowerCase();switch(e){case"eq":return H(r,t??"");case"ne":return!H(r,t??"");case"gt":{let c=F(r,t);return c!==void 0&&c>0}case"gte":{let c=F(r,t);return c!==void 0&&c>=0}case"lt":{let c=F(r,t);return c!==void 0&&c<0}case"lte":{let c=F(r,t);return c!==void 0&&c<=0}case"contains":return s.includes(a);case"not_contains":return!s.includes(a);case"starts_with":return s.startsWith(a);case"ends_with":return s.endsWith(a);case"regex":if(!t)return!1;try{return new RegExp(t,"i").test(r)}catch{return!1}default:return!1}}function te(r){if(!r||!r.trim())return[];let e=r.trim();if(e.startsWith("["))try{let t=JSON.parse(e);if(Array.isArray(t))return t.map(String)}catch{return[]}return e.split(",").map(t=>t.trim()).filter(Boolean)}var ne=r=>r.toLowerCase()!=="false"&&r!=="0";function re(r,e){let t=Ae(r.operator),s=e.filter(c=>c!==""),a=()=>s.flatMap(c=>c.split(",").map(y=>y.trim()).filter(Boolean));switch(t){case"exists":case"not_empty":return s.length>0;case"not_exists":case"empty":return s.length===0;case"ne":return!s.some(c=>Y(c,"eq",r.value));case"not_contains":return!s.some(c=>Y(c,"contains",r.value));case"in":{let c=te(r.value);return a().some(y=>c.some(f=>H(y,f)))}case"not_in":{let c=te(r.value);return!a().some(y=>c.some(f=>H(y,f)))}case"true":return s.some(ne);case"false":return!s.some(ne);case void 0:return!1;default:return s.some(c=>Y(c,t,r.value))}}var Je=`
2
+ .oluso-journey {
3
+ --oluso-accent: #4f46e5;
4
+ --oluso-accent-contrast: #ffffff;
5
+ --oluso-fg: #111827;
6
+ --oluso-muted: #6b7280;
7
+ --oluso-bg: #ffffff;
8
+ --oluso-field-bg: #ffffff;
9
+ --oluso-border: #d1d5db;
10
+ --oluso-danger: #b91c1c;
11
+ --oluso-danger-bg: #fef2f2;
12
+ --oluso-notice-bg: #eff6ff;
13
+ --oluso-notice: #1d4ed8;
14
+ --oluso-radius: 8px;
15
+ --oluso-gap: 14px;
16
+ --oluso-font: inherit;
17
+ font-family: var(--oluso-font);
18
+ color: var(--oluso-fg);
19
+ font-size: 15px;
20
+ line-height: 1.5;
21
+ }
22
+ .oluso-journey[data-theme="dark"] {
23
+ --oluso-fg: #f3f4f6;
24
+ --oluso-muted: #9ca3af;
25
+ --oluso-bg: #111827;
26
+ --oluso-field-bg: #1f2937;
27
+ --oluso-border: #374151;
28
+ --oluso-danger: #fca5a5;
29
+ --oluso-danger-bg: rgba(185, 28, 28, 0.15);
30
+ --oluso-notice-bg: rgba(59, 130, 246, 0.15);
31
+ --oluso-notice: #93c5fd;
32
+ }
33
+ @media (prefers-color-scheme: dark) {
34
+ .oluso-journey[data-theme="auto"] {
35
+ --oluso-fg: #f3f4f6;
36
+ --oluso-muted: #9ca3af;
37
+ --oluso-bg: #111827;
38
+ --oluso-field-bg: #1f2937;
39
+ --oluso-border: #374151;
40
+ --oluso-danger: #fca5a5;
41
+ --oluso-danger-bg: rgba(185, 28, 28, 0.15);
42
+ --oluso-notice-bg: rgba(59, 130, 246, 0.15);
43
+ --oluso-notice: #93c5fd;
44
+ }
45
+ }
46
+ .oluso-journey *, .oluso-journey *::before, .oluso-journey *::after { box-sizing: border-box; }
47
+ .oluso-journey__form { display: flex; flex-direction: column; gap: var(--oluso-gap); margin: 0; }
48
+ .oluso-journey__title { font-size: 1.25em; font-weight: 600; margin: 0; }
49
+ .oluso-journey__description { color: var(--oluso-muted); margin: 0; white-space: pre-line; }
50
+ .oluso-journey__alert { border-radius: var(--oluso-radius); padding: 10px 12px; margin: 0; }
51
+ .oluso-journey__alert--error { background: var(--oluso-danger-bg); color: var(--oluso-danger); }
52
+ .oluso-journey__alert--notice { background: var(--oluso-notice-bg); color: var(--oluso-notice); }
53
+ .oluso-journey__group { display: flex; flex-direction: column; gap: var(--oluso-gap); border: 0; margin: 0; padding: 0; }
54
+ .oluso-journey__field { display: flex; flex-direction: column; gap: 6px; }
55
+ .oluso-journey__field[hidden] { display: none; }
56
+ .oluso-journey__label { font-weight: 500; }
57
+ .oluso-journey__required { color: var(--oluso-danger); margin-left: 2px; }
58
+ .oluso-journey__input, .oluso-journey__select, .oluso-journey__textarea {
59
+ width: 100%; font: inherit; color: var(--oluso-fg); background: var(--oluso-field-bg);
60
+ border: 1px solid var(--oluso-border); border-radius: var(--oluso-radius); padding: 9px 11px; min-height: 40px;
61
+ }
62
+ .oluso-journey__input:focus, .oluso-journey__select:focus, .oluso-journey__textarea:focus {
63
+ outline: 2px solid var(--oluso-accent); outline-offset: 1px; border-color: transparent;
64
+ }
65
+ .oluso-journey__input[aria-invalid="true"], .oluso-journey__select[aria-invalid="true"], .oluso-journey__textarea[aria-invalid="true"] {
66
+ border-color: var(--oluso-danger);
67
+ }
68
+ .oluso-journey__input--otp { letter-spacing: 0.4em; font-variant-numeric: tabular-nums; text-align: center; font-size: 1.2em; }
69
+ .oluso-journey__phone { display: flex; gap: 8px; }
70
+ .oluso-journey__phone .oluso-journey__select { width: auto; max-width: 45%; }
71
+ .oluso-journey__choices { display: flex; flex-direction: column; gap: 8px; }
72
+ .oluso-journey__choice { display: flex; gap: 10px; align-items: flex-start; cursor: pointer; }
73
+ .oluso-journey__choice input { margin-top: 3px; accent-color: var(--oluso-accent); }
74
+ .oluso-journey__choice-description { display: block; color: var(--oluso-muted); font-size: 0.9em; }
75
+ .oluso-journey__help, .oluso-journey__hint { color: var(--oluso-muted); font-size: 0.875em; margin: 0; }
76
+ .oluso-journey__error { color: var(--oluso-danger); font-size: 0.875em; margin: 0; }
77
+ .oluso-journey__content { margin: 0; white-space: pre-line; }
78
+ .oluso-journey__actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
79
+ .oluso-journey__button {
80
+ font: inherit; font-weight: 500; border-radius: var(--oluso-radius); padding: 9px 16px; min-height: 40px; cursor: pointer;
81
+ border: 1px solid var(--oluso-border); background: var(--oluso-field-bg); color: var(--oluso-fg);
82
+ }
83
+ .oluso-journey__button--primary { background: var(--oluso-accent); color: var(--oluso-accent-contrast); border-color: var(--oluso-accent); }
84
+ .oluso-journey__button--primary:only-child, .oluso-journey__actions--stacked .oluso-journey__button--primary { flex: 1 1 auto; }
85
+ .oluso-journey__button--link { background: none; border: 0; color: var(--oluso-accent); padding: 4px 0; min-height: 0; }
86
+ .oluso-journey__button--cancel { background: none; }
87
+ .oluso-journey__button:disabled { opacity: 0.6; cursor: progress; }
88
+ .oluso-journey__enter { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
89
+ .oluso-journey__action-line { display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; margin: 0; }
90
+ .oluso-journey__links { display: flex; flex-wrap: wrap; gap: 12px; font-size: 0.9em; }
91
+ .oluso-journey__links a { color: var(--oluso-accent); }
92
+ .oluso-journey__qr { display: flex; flex-direction: column; align-items: center; gap: 8px; }
93
+ .oluso-journey__qr img { width: 180px; height: 180px; background: #fff; padding: 8px; border-radius: var(--oluso-radius); }
94
+ .oluso-journey__code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; word-break: break-all; }
95
+ .oluso-journey__codes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 0; padding: 0; list-style: none; }
96
+ .oluso-journey__codes li { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; padding: 6px 8px; border: 1px solid var(--oluso-border); border-radius: 6px; text-align: center; }
97
+ .oluso-journey__status { color: var(--oluso-muted); text-align: center; padding: 16px 0; }
98
+ .oluso-journey__done { text-align: center; padding: 8px 0; }
99
+ `,se=!1;function ae(){if(se||typeof document>"u")return;let r=document.createElement("style");r.setAttribute("data-oluso-journey",""),r.textContent=Je,document.head.appendChild(r),se=!0}function U(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=e+"=".repeat((4-e.length%4)%4),s=atob(t),a=new Uint8Array(s.length);for(let c=0;c<s.length;c++)a[c]=s.charCodeAt(c);return a.buffer}function T(r){if(!r)return null;let e=new Uint8Array(r),t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ie(r){if(Array.isArray(r))return r.map(e=>({type:e.type??"public-key",id:U(String(e.id)),transports:e.transports}))}function qe(r){return{...r,challenge:U(String(r.challenge)),allowCredentials:ie(r.allowCredentials)}}function Re(r){let e=r.user??{};return{...r,challenge:U(String(r.challenge)),user:{...e,id:U(String(e.id))},excludeCredentials:ie(r.excludeCredentials)}}async function le(r){let e=await navigator.credentials.get({publicKey:qe(r)});if(!e)throw new Error("No passkey was chosen");let t=e.response;return JSON.stringify({id:e.id,rawId:T(e.rawId),type:e.type,response:{clientDataJSON:T(t.clientDataJSON),authenticatorData:T(t.authenticatorData),signature:T(t.signature),userHandle:T(t.userHandle)},authenticatorAttachment:e.authenticatorAttachment??null})}async function ue(r){let e=await navigator.credentials.create({publicKey:Re(r)});if(!e)throw new Error("No passkey was created");let t=e.response;return JSON.stringify({id:e.id,rawId:T(e.rawId),type:e.type,response:{clientDataJSON:T(t.clientDataJSON),attestationObject:T(t.attestationObject),transports:typeof t.getTransports=="function"?t.getTransports():void 0},authenticatorAttachment:e.authenticatorAttachment??null})}var Oe={loading:"Loading\u2026",completed:"All done. Thank you.",failed:"Something went wrong. Please try again.",expired:"This session has expired. Please start again.",restart:"Start again",takePhoto:"Take a photo",copy:"Copy",copied:"Copied",passkey:"Use your passkey",retry:"Try again",waiting:"Waiting\u2026",unavailable:"This step can\u2019t be shown here."};function d(r,e,t){let s=document.createElement(r);return e&&(s.className=e),t!==void 0&&(s.textContent=t),s}var Pe=0;function ce(r,e){let t={...Oe,...e.labels},s=e.client,a=`oluso-j${++Pe}`,c,y=!1,f=[];e.unstyled||ae();let b=d("div","oluso-journey");b.setAttribute("data-theme",e.theme??"auto"),r.appendChild(b);let C=()=>{f.forEach(o=>window.clearInterval(o)),f=[]},I=o=>{b.replaceChildren(d("p","oluso-journey__status",o))},E=o=>{let u=o instanceof Error?o:new Error(String(o));return e.onError?.(u,c),u},he=()=>!!(e.slug||e.start),D=async()=>{C(),I(t.loading);try{let o=e.start?await e.start():e.slug?await s.startJourney(e.slug,e.data):e.session;if(!o)throw new Error("mountJourney needs a slug, a session or a start function");await z(o)}catch(o){K(E(o).message)}},z=async o=>{if(!y){if(C(),c=o,e.onStep?.(o),o.completed){if(o.redirectUrl){await e.onComplete?.(o),ee(o.redirectUrl,o);return}if(e.showCompletion!==!1){let u=d("div","oluso-journey__done");u.appendChild(d("p","oluso-journey__content",o.message||t.completed)),b.replaceChildren(u)}else b.replaceChildren();await e.onComplete?.(o);return}if(o.status!=="in_progress"){let u=o.status==="expired"?t.expired:o.errorDescription||t.failed;E(new Error(u)),K(u);return}if(o.redirectUrl){ee(o.redirectUrl,o);return}o.step?.form?be(o.step.form):o.step?.html?we(o.step.html):K(t.unavailable)}},ee=(o,u)=>{e.onRedirect?e.onRedirect(o,u):window.location.assign(o)},K=o=>{let u=d("div","oluso-journey__form");if(u.appendChild(d("p","oluso-journey__alert oluso-journey__alert--error",o)),he()){let i=d("button","oluso-journey__button oluso-journey__button--primary",t.restart);i.type="button",i.addEventListener("click",()=>{D()});let g=d("div","oluso-journey__actions");g.appendChild(i),u.appendChild(g)}b.replaceChildren(u)},O=async(o,u)=>{if(!c)return;let i=await s.submitStepForm(c.sessionId,o,u);await z(i)},J=(o,u)=>{o.setAttribute("aria-busy",String(u)),o.querySelectorAll("button").forEach(i=>i.disabled=u)},B=async(o,u,i)=>{let g=u?.postsFields===!1?new FormData:new FormData(o);if(u?.name&&g.append(u.name,u.value??""),u?.values)for(let[_,l]of Object.entries(u.values))g.append(_,l);if(i)for(let[_,l]of Object.entries(i))g.set(_,l);J(o,!0);try{await O(g)}catch(_){J(o,!1);let l=E(_).message,n=o.querySelector("[data-oluso-request-error]");n||(n=d("p","oluso-journey__alert oluso-journey__alert--error"),n.setAttribute("data-oluso-request-error",""),n.setAttribute("role","alert"),o.prepend(n)),n.textContent=l}},be=o=>{let u=d("form","oluso-journey__form");if(o.title&&u.appendChild(d("h2","oluso-journey__title",o.title)),o.description&&u.appendChild(d("p","oluso-journey__description",o.description)),o.error){let l=d("p","oluso-journey__alert oluso-journey__alert--error",o.error);l.setAttribute("role","alert"),u.appendChild(l)}if(o.notice){let l=d("p","oluso-journey__alert oluso-journey__alert--notice",o.notice);l.setAttribute("role","status"),u.appendChild(l)}let i=[];for(let l of o.fields){let n=_e(l);n&&(u.appendChild(n),(l.showWhen||l.showWhenAll?.length)&&i.push({field:l,wrapper:n}))}if(o.widget){let l=ve(o.widget,u);l&&u.appendChild(l)}if(o.links.length>0){let l=d("div","oluso-journey__links");for(let n of o.links){let m=d("a",void 0,n.label);m.href=n.url,m.target="_blank",m.rel="noopener noreferrer",l.appendChild(m)}u.appendChild(l)}if(o.actions.length>0){let l=d("div","oluso-journey__actions"),n=o.actions.findIndex(p=>p.kind==="primary");if(n>=0){let p=d("button","oluso-journey__enter");p.type="submit",p.tabIndex=-1,p.setAttribute("aria-hidden","true"),p.dataset.olusoAction=String(n),u.prepend(p)}let m=[];o.actions.forEach((p,h)=>{let v=d("button",`oluso-journey__button oluso-journey__button--${p.kind}`,p.label);if(v.type="submit",v.formNoValidate=p.skipValidation||p.postsFields===!1,v.dataset.olusoAction=String(h),p.description){let x=d("p","oluso-journey__action-line");x.appendChild(d("span","oluso-journey__help",p.description)),x.appendChild(v),m.push(x)}else l.appendChild(v)}),l.childElementCount>0&&u.appendChild(l),m.forEach(p=>u.appendChild(p))}let g=()=>{for(let{field:l,wrapper:n}of i){let p=[...l.showWhen?[l.showWhen]:[],...l.showWhenAll??[]].every(h=>re(h,Fe(u.elements.namedItem(h.field))));n.hidden=!p,n.querySelectorAll("input, select, textarea").forEach(h=>{h.disabled=!p||h.dataset.olusoReadonly==="true"})}};u.addEventListener("input",l=>{g();let m=l.target.closest(".oluso-journey__field");m?.querySelectorAll('[aria-invalid="true"]').forEach(p=>p.removeAttribute("aria-invalid")),m?.querySelector(".oluso-journey__error")?.remove()}),u.addEventListener("change",g),g(),u.addEventListener("submit",l=>{l.preventDefault();let n=l.submitter,m=n?.dataset.olusoAction,p=m!==void 0?o.actions[Number(m)]:o.actions.find(h=>h.kind==="primary");if(p?.confirm&&n&&n.dataset.olusoConfirming!=="true"){n.dataset.olusoConfirming="true",n.textContent=p.confirm,n.setAttribute("aria-live","polite");return}B(u,p)}),b.replaceChildren(u),(u.querySelector("[autofocus]")??u.querySelector("input:not([type=hidden]):not([disabled]), select, textarea"))?.focus({preventScroll:!0})},_e=o=>{let u=`${a}-${o.name}`;if(o.type==="hidden"){let n=d("input");return n.type="hidden",n.name=o.name,n.value=o.value??"",n}let i=d("div","oluso-journey__field");if(o.group&&(i.dataset.group=o.group),o.type==="content")return o.label&&i.appendChild(d("p","oluso-journey__label",o.label)),i.appendChild(d("p","oluso-journey__content",o.value??"")),i;let g=()=>{if(!o.label)return;let n=d("label","oluso-journey__label",o.label);if(n.htmlFor=u,o.required){let m=d("span","oluso-journey__required","*");m.setAttribute("aria-hidden","true"),n.appendChild(m)}i.appendChild(n)},_=[],l=n=>{n.id=u,n.name=o.name,n.required=o.required,o.readOnly&&(n instanceof HTMLSelectElement?n.disabled=!0:n.readOnly=!0,n.dataset.olusoReadonly=String(n instanceof HTMLSelectElement)),o.autofocus&&(n.autofocus=!0),o.autocomplete&&n.setAttribute("autocomplete",o.autocomplete),o.error&&n.setAttribute("aria-invalid","true")};switch(o.type){case"textarea":{g();let n=d("textarea","oluso-journey__textarea");l(n),n.value=o.value??"",o.placeholder&&(n.placeholder=o.placeholder),o.rows&&(n.rows=o.rows),o.minLength&&(n.minLength=o.minLength),o.maxLength&&(n.maxLength=o.maxLength),i.appendChild(n);break}case"select":{g();let n=d("select","oluso-journey__select");l(n);let m=d("option",void 0,o.placeholder??"");m.value="",n.appendChild(m);for(let p of o.options??[]){let h=d("option",void 0,p.label);h.value=p.value,h.disabled=p.disabled,h.selected=p.value===o.value,n.appendChild(h)}i.appendChild(n);break}case"radio":{let n=d("fieldset","oluso-journey__group");if(o.label){let p=d("legend","oluso-journey__label",o.label);o.required&&p.appendChild(d("span","oluso-journey__required","*")),n.appendChild(p)}let m=d("div","oluso-journey__choices");(o.options??[]).forEach((p,h)=>{let v=d("label","oluso-journey__choice"),x=d("input");x.type="radio",x.name=o.name,x.value=p.value,x.id=`${u}-${h}`,x.required=o.required,x.disabled=p.disabled||o.readOnly,x.checked=p.value===o.value;let w=d("span",void 0,p.label);p.description&&w.appendChild(d("span","oluso-journey__choice-description",p.description)),v.append(x,w),m.appendChild(v)}),n.appendChild(m),i.appendChild(n);break}case"checkbox":{o.placeholder&&g();let n=d("label","oluso-journey__choice"),m=d("input");m.type="checkbox",m.value="true",l(m),m.checked=o.value==="true",o.readOnly&&(m.setAttribute("aria-readonly","true"),m.addEventListener("click",h=>h.preventDefault()));let p=d("span",void 0,o.placeholder??o.label??"");!o.placeholder&&o.required&&p.appendChild(d("span","oluso-journey__required","*")),n.append(m,p),i.appendChild(n);break}case"file":{g();let n=d("input","oluso-journey__input");if(n.type="file",l(n),n.readOnly=!1,n.disabled=o.readOnly,o.accept&&(n.accept=o.accept),n.multiple=(o.maxFiles??1)>1,n.required=o.required&&!o.capture,i.appendChild(n),o.capture&&!o.readOnly){let m=d("label","oluso-journey__hint",t.takePhoto);m.htmlFor=`${u}-camera`;let p=d("input","oluso-journey__input");p.type="file",p.id=`${u}-camera`,p.name=o.name,p.accept="image/*",p.setAttribute("capture",o.capture),i.append(m,p)}break}case"tel":{if(g(),o.countries&&o.countries.length>0){let n=d("div","oluso-journey__phone"),m=d("select","oluso-journey__select");m.name=`${o.name}__country`,m.setAttribute("aria-label",o.label??o.name),m.disabled=o.readOnly;for(let h of o.countries){let v=d("option",void 0,`${h.flag?h.flag+" ":""}${h.name} (${h.dialCode})`);v.value=h.code,v.selected=h.code===o.country,m.appendChild(v)}let p=d("input","oluso-journey__input");p.type="tel",p.inputMode="tel",l(p),p.value=o.value??"",o.placeholder&&(p.placeholder=o.placeholder),n.append(m,p),i.appendChild(n)}else{let n=oe(o,"tel");l(n),i.appendChild(n)}break}case"otp":{g();let n=d("input","oluso-journey__input oluso-journey__input--otp");n.type="text",n.inputMode="numeric",l(n),n.setAttribute("autocomplete",o.autocomplete??"one-time-code"),o.maxLength&&(n.maxLength=o.maxLength,n.minLength=o.minLength??o.maxLength),n.pattern=o.pattern??"[0-9]*",n.value=o.value??"",i.appendChild(n);break}default:{g();let m=oe(o,["text","email","password","number","date","url","tel"].includes(o.type)?o.type:"text");l(m),i.appendChild(m)}}if(o.description){let n=d("p","oluso-journey__help",o.description);n.id=`${u}-help`,_.push(n.id),i.appendChild(n)}if(o.hint){let n=d("p","oluso-journey__hint",o.hint);n.id=`${u}-hint`,_.push(n.id),i.appendChild(n)}if(o.error){let n=d("p","oluso-journey__error",o.error);n.id=`${u}-error`,_.push(n.id),i.appendChild(n)}return _.length>0&&Array.from(i.querySelectorAll("[id]")).find(n=>n.id===u)?.setAttribute("aria-describedby",_.join(" ")),i},oe=(o,u)=>{let i=d("input","oluso-journey__input");return i.type=u,i.value=o.value??"",o.placeholder&&(i.placeholder=o.placeholder),o.pattern&&(i.pattern=o.pattern),o.patternError&&(i.title=o.patternError,i.addEventListener("invalid",()=>{i.validity.patternMismatch&&i.setCustomValidity(o.patternError)}),i.addEventListener("input",()=>i.setCustomValidity(""))),o.minLength&&(i.minLength=o.minLength),o.maxLength&&(i.maxLength=o.maxLength),o.min&&(i.min=o.min),o.max&&(i.max=o.max),u==="number"&&(i.step="any"),i},ve=(o,u)=>{let i=o.data??{},g=d("div","oluso-journey__widget"),_=l=>{if(!o.resultField)return;let n=Array.from(u.querySelectorAll("input[type=hidden]")).find(m=>m.name===o.resultField)??null;n||(n=d("input"),n.type="hidden",n.name=o.resultField,u.appendChild(n)),n.value=l};switch(o.type){case"webauthn_get":case"webauthn_create":{let l=d("button","oluso-journey__button oluso-journey__button--primary",o.submit?.label??t.passkey);l.type="button";let n=async()=>{l.disabled=!0;try{let m=await xe(i),p=m.publicKey,h=m.extra,v=o.type==="webauthn_get"?await le(p):await ue(p);_(v);let x=i.credentialName;if(x?.field){let w=JSON.parse(v).authenticatorAttachment,S=w==="platform"?x.platform:w==="cross-platform"?x.crossPlatform:x.other;(h??(h={}))[x.field]=S??""}await B(u,o.submit,h)}catch(m){l.disabled=!1,l.textContent=t.retry,e.onError?.(m instanceof Error?m:new Error(String(m)),c)}};return l.addEventListener("click",()=>{n()}),g.appendChild(l),typeof PublicKeyCredential<"u"&&queueMicrotask(()=>{n()}),g}case"verification_connect":{let l=i.options??{},n=typeof i.referenceOption=="string"?l[i.referenceOption]:void 0,m=typeof i.referenceField=="string"?i.referenceField:"reference_id",p=async w=>{let S=new FormData;w&&S.set(m,n==null?"":String(n)),J(u,!0);try{await O(S,"callback")}catch(Ce){J(u,!1),E(Ce)}},h=async()=>{await He(String(i.scriptUrl));let w=window[typeof i.global=="string"?i.global:"Connect"];if(!w)throw new Error("The verification widget could not be loaded");let S=new w({...l,onSuccess:()=>{p(!0)},onError:()=>{p(!1)},onClose:()=>{}});return S.setup?.(),S.open(),S},v,x=()=>{if(v){v.then(w=>w.open());return}v=h(),v.catch(w=>{v=void 0,E(w)})};if(o.submit){let w=d("button",`oluso-journey__button oluso-journey__button--${o.submit.kind}`,o.submit.label);w.type="button",w.addEventListener("click",x),g.appendChild(w)}return x(),g}case"captcha":{let l=d("div","oluso-journey__captcha");return g.appendChild(l),Ne(l,i,n=>{_(n),o.submit&&B(u,o.submit)}).catch(n=>e.onError?.(n instanceof Error?n:new Error(String(n)),c)),g}case"qr":{let l=d("div","oluso-journey__qr");if(typeof i.image=="string"){let n=d("img");n.src=i.image,n.alt="",l.appendChild(n)}return typeof i.secret=="string"?(typeof i.secretLabel=="string"&&l.appendChild(d("span","oluso-journey__help",i.secretLabel)),l.appendChild(d("code","oluso-journey__code",i.secret))):typeof i.value=="string"&&typeof i.image!="string"&&l.appendChild(d("code","oluso-journey__code",i.value)),g.appendChild(l),g}case"codes":{let l=Array.isArray(i.codes)?i.codes.map(String):[],n=d("ul","oluso-journey__codes");l.forEach(p=>n.appendChild(d("li",void 0,p)));let m=d("button","oluso-journey__button",t.copy);return m.type="button",m.addEventListener("click",()=>{navigator.clipboard?.writeText(l.join(`
100
+ `)).then(()=>m.textContent=t.copied)}),g.append(n,m),g}case"poll":{let l=Math.max(2,Number(i.intervalSeconds)||5),n=Number(i.maxSeconds)>0?Date.now()+Number(i.maxSeconds)*1e3:1/0,m=c?.currentStep;return f.push(window.setInterval(()=>{if(Date.now()>n){C();return}!c||document.hidden||s.getSession(c.sessionId).then(async p=>{(p.status!=="in_progress"||p.currentStep!==m)&&(C(),await O(new FormData,"init"))}).catch(()=>{})},l*1e3)),null}default:return null}},xe=async o=>{if(o.publicKey)return{publicKey:o.publicKey,extra:void 0};let u=String(o.optionsUrl),i=/^https?:/i.test(u)?u:`${s.serverUrl}${u.startsWith("/")?"":"/"}${u}`,g=String(o.optionsMethod??"POST").toUpperCase(),_=await fetch(i,{method:g,headers:{"Content-Type":"application/json"},body:g==="GET"?void 0:JSON.stringify(o.optionsBody??{}),credentials:"include"});if(!_.ok)throw new Error(t.failed);let l=await _.json(),n={};return typeof o.idProperty=="string"&&typeof o.idField=="string"&&l[o.idProperty]!=null&&(n[o.idField]=String(l[o.idProperty])),{publicKey:l.options??l,extra:n}},we=o=>{let u=d("div","oluso-journey__html");u.innerHTML=o,u.querySelectorAll("script").forEach(i=>i.remove()),u.addEventListener("submit",i=>{let g=i.target;i.preventDefault();let _=i.submitter,l=new FormData(g);_?.name&&l.append(_.name,_.value),l.delete("__RequestVerificationToken"),J(g,!0),O(l).catch(n=>{J(g,!1),E(n)})}),b.replaceChildren(u)};return e.session?z(e.session):D(),{get session(){return c},restart:D,destroy(){y=!0,C(),b.remove()}}}function Fe(r){return r?(r instanceof RadioNodeList?Array.from(r):[r]).flatMap(t=>{let s=t;return s.disabled?[]:s.type==="checkbox"||s.type==="radio"?s.checked?[s.value]:[]:s instanceof HTMLSelectElement&&s.multiple?Array.from(s.selectedOptions).map(a=>a.value):[s.value]}):[]}var G=new Map;function He(r){let e=G.get(r);return e||(e=new Promise((t,s)=>{let a=document.createElement("script");a.src=r,a.async=!0,a.onload=()=>t(),a.onerror=()=>{G.delete(r),s(new Error("A script the step needs could not be loaded"))},document.head.appendChild(a)}),G.set(r,e)),e}var Ue={recaptcha:{src:"https://www.google.com/recaptcha/api.js?render=explicit&onload=",global:"grecaptcha"},hcaptcha:{src:"https://js.hcaptcha.com/1/api.js?render=explicit&onload=",global:"hcaptcha"},turnstile:{src:"https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit&onload=",global:"turnstile"}};async function Ne(r,e,t){let s=String(e.provider??"recaptcha").toLowerCase(),a=Ue[s];if(!a)throw new Error(`Captcha provider '${s}' isn't supported`);let c=window;if(!c[a.global]){let b=`__olusoCaptcha${Date.now()}`;await new Promise((C,I)=>{c[b]=()=>C();let E=document.createElement("script");E.src=a.src+b+(e.language?`&hl=${encodeURIComponent(String(e.language))}`:""),E.async=!0,E.onerror=()=>I(new Error("The captcha could not be loaded")),document.head.appendChild(E)})}let y=c[a.global],f=String(e.siteKey??"");if(s==="recaptcha"&&e.version==="v3"&&y.execute){y.ready?.(()=>{y.execute(f,{action:String(e.action??"submit")}).then(t)});return}y.render(r,{sitekey:f,theme:e.theme,size:e.size,action:e.action,callback:b=>t(b)})}var $e=`
101
+ .oluso-modal-overlay {
102
+ position: fixed;
103
+ inset: 0;
104
+ background: rgba(0, 0, 0, 0.6);
105
+ backdrop-filter: blur(4px);
106
+ -webkit-backdrop-filter: blur(4px);
107
+ z-index: 99999;
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ padding: 24px;
112
+ opacity: 0;
113
+ visibility: hidden;
114
+ transition: opacity 0.25s ease, visibility 0.25s ease;
115
+ }
116
+
117
+ .oluso-modal-overlay.oluso-active {
118
+ opacity: 1;
119
+ visibility: visible;
120
+ }
121
+
122
+ .oluso-modal {
123
+ width: 100%;
124
+ max-width: 420px;
125
+ border-radius: 16px;
126
+ position: relative;
127
+ transform: translateY(16px) scale(0.96);
128
+ transition: transform 0.25s ease;
129
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.2);
130
+ overflow: hidden;
131
+ }
132
+
133
+ .oluso-modal-overlay.oluso-active .oluso-modal {
134
+ transform: translateY(0) scale(1);
135
+ }
136
+
137
+ /* Dark theme (default) */
138
+ .oluso-modal--dark {
139
+ background: #1c1c2e;
140
+ border: 1px solid rgba(255, 255, 255, 0.08);
141
+ color: #f5f5f5;
142
+ }
143
+
144
+ .oluso-modal--dark .oluso-modal__input,
145
+ .oluso-modal--dark .oluso-modal__textarea,
146
+ .oluso-modal--dark .oluso-modal__select {
147
+ background: rgba(255, 255, 255, 0.05);
148
+ border: 1px solid rgba(255, 255, 255, 0.12);
149
+ color: #f5f5f5;
150
+ }
151
+
152
+ .oluso-modal--dark .oluso-modal__input::placeholder,
153
+ .oluso-modal--dark .oluso-modal__textarea::placeholder {
154
+ color: rgba(255, 255, 255, 0.35);
155
+ }
156
+
157
+ .oluso-modal--dark .oluso-modal__label {
158
+ color: rgba(255, 255, 255, 0.85);
159
+ }
160
+
161
+ .oluso-modal--dark .oluso-modal__desc {
162
+ color: rgba(255, 255, 255, 0.55);
163
+ }
164
+
165
+ .oluso-modal--dark .oluso-modal__close {
166
+ background: rgba(255, 255, 255, 0.06);
167
+ color: rgba(255, 255, 255, 0.6);
168
+ }
169
+
170
+ .oluso-modal--dark .oluso-modal__close:hover {
171
+ background: rgba(255, 255, 255, 0.12);
172
+ color: #fff;
173
+ }
174
+
175
+ .oluso-modal--dark .oluso-modal__footer {
176
+ color: rgba(255, 255, 255, 0.4);
177
+ }
178
+
179
+ /* Light theme */
180
+ .oluso-modal--light {
181
+ background: #ffffff;
182
+ border: 1px solid rgba(0, 0, 0, 0.08);
183
+ color: #1a1a2e;
184
+ }
185
+
186
+ .oluso-modal--light .oluso-modal__input,
187
+ .oluso-modal--light .oluso-modal__textarea,
188
+ .oluso-modal--light .oluso-modal__select {
189
+ background: #f8f8fa;
190
+ border: 1px solid rgba(0, 0, 0, 0.1);
191
+ color: #1a1a2e;
192
+ }
193
+
194
+ .oluso-modal--light .oluso-modal__input::placeholder,
195
+ .oluso-modal--light .oluso-modal__textarea::placeholder {
196
+ color: rgba(0, 0, 0, 0.35);
197
+ }
198
+
199
+ .oluso-modal--light .oluso-modal__label {
200
+ color: #1a1a2e;
201
+ }
202
+
203
+ .oluso-modal--light .oluso-modal__desc {
204
+ color: rgba(0, 0, 0, 0.55);
205
+ }
206
+
207
+ .oluso-modal--light .oluso-modal__close {
208
+ background: rgba(0, 0, 0, 0.04);
209
+ color: rgba(0, 0, 0, 0.5);
210
+ }
211
+
212
+ .oluso-modal--light .oluso-modal__close:hover {
213
+ background: rgba(0, 0, 0, 0.08);
214
+ color: #1a1a2e;
215
+ }
216
+
217
+ .oluso-modal--light .oluso-modal__footer {
218
+ color: rgba(0, 0, 0, 0.4);
219
+ }
220
+
221
+ /* Shared component styles */
222
+ .oluso-modal__body {
223
+ padding: 36px 28px 28px;
224
+ }
225
+
226
+ .oluso-modal__close {
227
+ position: absolute;
228
+ top: 12px;
229
+ right: 12px;
230
+ width: 32px;
231
+ height: 32px;
232
+ border: none;
233
+ border-radius: 50%;
234
+ font-size: 1.25rem;
235
+ cursor: pointer;
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ transition: background 0.15s, color 0.15s;
240
+ line-height: 1;
241
+ padding: 0;
242
+ }
243
+
244
+ .oluso-modal__title {
245
+ font-size: 1.375rem;
246
+ font-weight: 700;
247
+ margin: 0 0 6px;
248
+ line-height: 1.3;
249
+ }
250
+
251
+ .oluso-modal__desc {
252
+ margin: 0 0 24px;
253
+ font-size: 0.9rem;
254
+ line-height: 1.5;
255
+ }
256
+
257
+ .oluso-modal__field {
258
+ margin-bottom: 16px;
259
+ }
260
+
261
+ .oluso-modal__label {
262
+ display: block;
263
+ font-size: 0.8125rem;
264
+ font-weight: 500;
265
+ margin-bottom: 6px;
266
+ }
267
+
268
+ .oluso-modal__label-optional {
269
+ opacity: 0.5;
270
+ font-weight: 400;
271
+ }
272
+
273
+ .oluso-modal__input,
274
+ .oluso-modal__textarea,
275
+ .oluso-modal__select {
276
+ width: 100%;
277
+ padding: 10px 14px;
278
+ border-radius: 8px;
279
+ font-size: 0.9375rem;
280
+ font-family: inherit;
281
+ transition: border-color 0.15s, box-shadow 0.15s;
282
+ box-sizing: border-box;
283
+ }
284
+
285
+ .oluso-modal__input:focus,
286
+ .oluso-modal__textarea:focus,
287
+ .oluso-modal__select:focus {
288
+ outline: none;
289
+ border-color: var(--oluso-accent, #6366f1);
290
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--oluso-accent, #6366f1) 15%, transparent);
291
+ }
292
+
293
+ .oluso-modal__textarea {
294
+ resize: vertical;
295
+ min-height: 72px;
296
+ }
297
+
298
+ .oluso-modal__error {
299
+ font-size: 0.8125rem;
300
+ color: #ef4444;
301
+ margin-top: 4px;
302
+ }
303
+
304
+ .oluso-modal__submit {
305
+ width: 100%;
306
+ padding: 12px 20px;
307
+ border: none;
308
+ border-radius: 10px;
309
+ font-size: 0.9375rem;
310
+ font-weight: 600;
311
+ cursor: pointer;
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ gap: 8px;
316
+ margin-top: 20px;
317
+ background: var(--oluso-accent, #6366f1);
318
+ color: #fff;
319
+ transition: opacity 0.15s, transform 0.1s;
320
+ }
321
+
322
+ .oluso-modal__submit:hover:not(:disabled) {
323
+ opacity: 0.9;
324
+ }
325
+
326
+ .oluso-modal__submit:active:not(:disabled) {
327
+ transform: scale(0.98);
328
+ }
329
+
330
+ .oluso-modal__submit:disabled {
331
+ opacity: 0.6;
332
+ cursor: not-allowed;
333
+ }
334
+
335
+ .oluso-modal__spinner {
336
+ width: 18px;
337
+ height: 18px;
338
+ border: 2px solid rgba(255, 255, 255, 0.3);
339
+ border-top-color: #fff;
340
+ border-radius: 50%;
341
+ animation: oluso-spin 0.6s linear infinite;
342
+ }
343
+
344
+ @keyframes oluso-spin {
345
+ to { transform: rotate(360deg); }
346
+ }
347
+
348
+ .oluso-modal__footer {
349
+ text-align: center;
350
+ margin-top: 16px;
351
+ font-size: 0.8125rem;
352
+ }
353
+
354
+ .oluso-modal__footer a {
355
+ color: var(--oluso-accent, #6366f1);
356
+ text-decoration: none;
357
+ font-weight: 500;
358
+ }
359
+
360
+ .oluso-modal__footer a:hover {
361
+ text-decoration: underline;
362
+ }
363
+
364
+ /* Success state */
365
+ .oluso-modal__success {
366
+ text-align: center;
367
+ padding: 40px 28px 32px;
368
+ }
369
+
370
+ .oluso-modal__success-icon {
371
+ width: 56px;
372
+ height: 56px;
373
+ background: var(--oluso-accent, #6366f1);
374
+ border-radius: 50%;
375
+ display: flex;
376
+ align-items: center;
377
+ justify-content: center;
378
+ margin: 0 auto 20px;
379
+ }
380
+
381
+ .oluso-modal__success-icon svg {
382
+ width: 28px;
383
+ height: 28px;
384
+ stroke: #fff;
385
+ fill: none;
386
+ stroke-width: 2.5;
387
+ stroke-linecap: round;
388
+ stroke-linejoin: round;
389
+ }
390
+
391
+ .oluso-modal__success h2 {
392
+ font-size: 1.375rem;
393
+ font-weight: 700;
394
+ margin: 0 0 8px;
395
+ }
396
+
397
+ .oluso-modal__success p {
398
+ font-size: 0.9rem;
399
+ opacity: 0.7;
400
+ margin: 0 0 24px;
401
+ line-height: 1.5;
402
+ }
403
+
404
+ .oluso-modal__success-cta {
405
+ display: inline-block;
406
+ padding: 12px 24px;
407
+ background: var(--oluso-accent, #6366f1);
408
+ color: #fff;
409
+ border-radius: 10px;
410
+ text-decoration: none;
411
+ font-weight: 600;
412
+ font-size: 0.9375rem;
413
+ transition: opacity 0.15s;
414
+ }
415
+
416
+ .oluso-modal__success-cta:hover {
417
+ opacity: 0.9;
418
+ }
419
+
420
+ /* Trigger button (auto-rendered) */
421
+ .oluso-modal .oluso-journey, .oluso-inline .oluso-journey { --oluso-accent: inherit; }
422
+ .oluso-modal--dark .oluso-journey { --oluso-bg: transparent; }
423
+ .oluso-inline__success { text-align: center; padding: 16px 0; }
424
+ .oluso-trigger-btn {
425
+ display: inline-flex;
426
+ align-items: center;
427
+ gap: 8px;
428
+ padding: 12px 24px;
429
+ border: none;
430
+ border-radius: 10px;
431
+ font-size: 0.9375rem;
432
+ font-weight: 600;
433
+ cursor: pointer;
434
+ background: var(--oluso-accent, #6366f1);
435
+ color: #fff;
436
+ transition: opacity 0.15s, transform 0.1s;
437
+ font-family: inherit;
438
+ }
439
+
440
+ .oluso-trigger-btn:hover {
441
+ opacity: 0.9;
442
+ }
443
+
444
+ .oluso-trigger-btn:active {
445
+ transform: scale(0.97);
446
+ }
447
+ `,k=null,q=new Map,j=null,X=null,M=null,N=new Map,L=null;function Q(){L||(L=document.createElement("style"),L.id="oluso-embed-styles",L.textContent=$e,document.head.appendChild(L))}function pe(r){return r.theme==="light"?"light":r.theme==="dark"?"dark":r.theme==="auto"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":"dark"}function me(r){let e;if(typeof r=="string"){let t=q.get(r);if(t)e=t;else if(k)e={...k,journey:r};else throw new Error(`[Oluso] Journey "${r}" not registered. Call Oluso.init() first.`)}else if(r&&r.journey)e={...k,...r};else{let t=q.values().next().value;if(t)e=t;else throw new Error("[Oluso] Not initialized. Call Oluso.init() first.")}return e}function Ie(r){return new P({serverUrl:r.serverUrl,tenant:r.tenant})}function A(r,e,t){let s=document.createElement(r);return s.className=e,s.textContent=t,s}function De(r){let e=pe(r),t=document.createElement("div");t.className="oluso-modal-overlay",t.id="oluso-modal-overlay",t.style.setProperty("--oluso-accent",r.accentColor||"#6366f1");let s=document.createElement("div");s.className=`oluso-modal oluso-modal--${e}`,s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true");let a=document.createElement("button");a.className="oluso-modal__close",a.setAttribute("aria-label","Close"),a.textContent="\xD7",a.addEventListener("click",()=>R());let c=document.createElement("div");c.className="oluso-modal__body",c.setAttribute("data-oluso-form",""),r.title&&c.appendChild(A("h2","oluso-modal__title",r.title)),r.description&&c.appendChild(A("p","oluso-modal__desc",r.description));let y=document.createElement("div");y.setAttribute("data-oluso-journey-host",""),c.appendChild(y);let f=document.createElement("div");return f.className="oluso-modal__success",f.setAttribute("data-oluso-success",""),f.style.display="none",s.append(a,c,f),t.appendChild(s),t.addEventListener("click",b=>{b.target===t&&R()}),document.body.appendChild(t),t}function ze(r,e,t){let s=r.querySelector("[data-oluso-form]"),a=r.querySelector("[data-oluso-success]"),c=document.createElement("div");c.className="oluso-modal__success-icon",c.innerHTML='<svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>',a.replaceChildren(c),e.successTitle&&a.appendChild(A("h2","",e.successTitle));let y=e.successMessage||t;if(y&&a.appendChild(A("p","",y)),e.successCta){let f=A("a","oluso-modal__success-cta",e.successCta.text);f.href=e.successCta.url,a.appendChild(f)}s.style.display="none",a.style.display=""}function ge(r,e,t){return ce(r,{client:Ie(e),slug:e.journey,theme:pe(e),showCompletion:!1,onComplete:s=>{t(s.message),e.onSuccess?.(s)},onError:s=>e.onError?.(s)})}function Z(r,e){let t=typeof r=="string"?document.querySelector(r):r;if(!t){console.error(`[Oluso] Element ${String(r)} not found.`);return}let s;try{s=me(e)}catch(c){console.error(c.message);return}Q(),N.get(t)?.destroy(),t.classList.add("oluso-inline"),t.style.setProperty("--oluso-accent",s.accentColor||"#6366f1");let a=document.createElement("div");t.replaceChildren(a),N.set(t,ge(a,s,c=>{let y=document.createElement("div");y.className="oluso-inline__success",s.successTitle&&y.appendChild(A("h3","",s.successTitle));let f=s.successMessage||c;f&&y.appendChild(A("p","",f)),t.replaceChildren(y)}))}function $(r){let e;try{e=me(r)}catch(s){console.error(s.message);return}Q(),j&&X!==e.journey&&(M?.destroy(),M=null,j.remove(),j=null),j||(j=De(e),X=e.journey);let t=j;if(!M){let s=t.querySelector("[data-oluso-journey-host]");M=ge(s,e,a=>ze(t,e,a))}requestAnimationFrame(()=>{t.classList.add("oluso-active"),document.body.style.overflow="hidden"})}function R(){if(!j)return;j.classList.remove("oluso-active"),document.body.style.overflow="";let r=j;setTimeout(()=>{M?.destroy(),M=null;let e=r.querySelector("[data-oluso-form]"),t=r.querySelector("[data-oluso-success]");e&&(e.style.display=""),t&&(t.style.display="none")},300)}function ye(r){if(k={serverUrl:r.serverUrl,tenant:r.tenant},"journeys"in r&&r.journeys)for(let[e,t]of Object.entries(r.journeys))q.set(e,{...r,...t,journey:e,serverUrl:r.serverUrl,tenant:r.tenant});else"journey"in r&&r.journey&&q.set(r.journey,r)}function fe(){M?.destroy(),M=null,N.forEach(r=>r.destroy()),N.clear(),j&&(j.remove(),j=null),L&&(L.remove(),L=null),q.clear(),k=null,X=null}function de(){document.querySelectorAll("[data-oluso-inline]").forEach(e=>{let t=e.dataset.olusoServer,s=e.dataset.olusoTenant,a=e.dataset.olusoJourney;if(!t||!s||!a){console.warn("[Oluso] Missing required data attributes (data-oluso-server, data-oluso-tenant, data-oluso-journey) on inline element.");return}k||(k={serverUrl:t,tenant:s}),Z(e,{serverUrl:t,tenant:s,journey:a,successTitle:e.dataset.olusoSuccessTitle,successMessage:e.dataset.olusoSuccessMessage,theme:e.dataset.olusoTheme||"auto",accentColor:e.dataset.olusoAccent})}),document.querySelectorAll("[data-oluso-trigger]").forEach(e=>{let t=e.dataset.olusoServer,s=e.dataset.olusoTenant,a=e.dataset.olusoJourney;if(!t||!s||!a){console.warn("[Oluso] Missing required data attributes (data-oluso-server, data-oluso-tenant, data-oluso-journey) on trigger element.");return}let c={serverUrl:t,tenant:s,journey:a,buttonText:e.dataset.olusoButtonText||e.dataset.olusoSubmitText||"Submit",title:e.dataset.olusoTitle,description:e.dataset.olusoDescription,successTitle:e.dataset.olusoSuccessTitle,successMessage:e.dataset.olusoSuccessMessage,theme:e.dataset.olusoTheme||"dark",accentColor:e.dataset.olusoAccent};if(k||(k={serverUrl:t,tenant:s}),q.set(a,c),e.dataset.olusoRenderButton!=="false"&&e.children.length===0){Q();let f=e.dataset.olusoButtonText||"Join Waitlist",b=c.accentColor||"#6366f1",C=document.createElement("button");C.className="oluso-trigger-btn",C.style.setProperty("--oluso-accent",b),C.textContent=f,C.addEventListener("click",()=>$(a)),e.appendChild(C)}else e.addEventListener("click",()=>$(a))}),document.addEventListener("keydown",e=>{e.key==="Escape"&&R()})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",de):de();var Ke={init:ye,open:$,close:R,destroy:fe,mount:Z};window.Oluso=Ke;return Le(Be);})();
448
+ //# sourceMappingURL=embed.global.js.map