@forms.expert/sdk 0.2.1 → 0.2.2

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.
@@ -1,4 +1,4 @@
1
- "use strict";var E=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var I=(t,e)=>{for(var o in e)E(t,o,{get:e[o],enumerable:!0})},O=(t,e,o,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of U(e))!M.call(t,i)&&i!==o&&E(t,i,{get:()=>e[i],enumerable:!(c=z(e,i))||c.enumerable});return t};var B=t=>O(E({},"__esModule",{value:!0}),t);var J={};I(J,{FormWidget:()=>S,autoInit:()=>T,errorsToRecord:()=>F,generateFormStyles:()=>w,renderField:()=>N,renderForm:()=>v,renderSuccess:()=>k});module.exports=B(J);var R={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:"#1f2937",borderRadius:"md",fontSize:"md",buttonStyle:"filled",labelPosition:"top"};function H(t){switch(t){case"none":return"0";case"sm":return"0.125rem";case"md":return"0.375rem";case"lg":return"0.5rem";default:return"0.375rem"}}function V(t){switch(t){case"none":return"0";case"small":return"4px";case"medium":return"8px";case"large":return"12px";case"full":return"9999px";default:return"8px"}}function q(t){switch(t){case"sm":return"0.875rem";case"md":return"1rem";case"lg":return"1.125rem";default:return"1rem"}}function W(t){switch(t){case"small":return"0.75rem";case"large":return"1rem";default:return"0.875rem"}}function D(t){switch(t){case"compact":return"0.5rem";case"relaxed":return"1.5rem";case"spacious":return"2rem";default:return"1rem"}}function K(t){switch(t){case"none":return"0";case"compact":return"1rem";case"relaxed":return"2.5rem";case"spacious":return"3.5rem";default:return"1.5rem"}}function j(t){switch(t){case"compact":return"0.125rem";case"relaxed":return"0.75rem";default:return"0.25rem"}}function _(t){switch(t){case"narrow":return"28rem";case"wide":return"48rem";case"full":return"100%";default:return"36rem"}}function G(t){switch(t){case"left":return"flex-start";case"right":return"flex-end";default:return"center"}}function w(t=R){let e={...R,...t},o=H(e.borderRadius),c=V(e.buttonRadius),i=q(e.fontSize),u=W(e.placeholderFontSize),m=D(e.fieldSpacing),a=K(e.formPadding),n=j(e.labelSpacing),s=_(e.formWidth),p=e.primaryColor,r=e.buttonColor,l=e.fontFamily||"system-ui, -apple-system, sans-serif",d=G(e.buttonAlign),C={small:{px:"0.75rem",py:"0.375rem",fs:"0.875rem"},medium:{px:"1.25rem",py:"0.625rem",fs:"1rem"},large:{px:"1.75rem",py:"0.875rem",fs:"1.125rem"}}[e.buttonSize||"medium"],L=e.buttonPaddingX!=null?`${e.buttonPaddingX}px`:C.px,P=e.buttonPaddingY!=null?`${e.buttonPaddingY}px`:C.py,A=e.buttonGradient||(e.buttonStyle==="filled"?p:"transparent");return`
1
+ "use strict";var C=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var M=(t,e)=>{for(var s in e)C(t,s,{get:e[s],enumerable:!0})},I=(t,e,s,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of z(e))!U.call(t,i)&&i!==s&&C(t,i,{get:()=>e[i],enumerable:!(d=A(e,i))||d.enumerable});return t};var O=t=>I(C({},"__esModule",{value:!0}),t);var X={};M(X,{FormWidget:()=>y,autoInit:()=>$,errorsToRecord:()=>k,generateFormStyles:()=>E,renderField:()=>R,renderForm:()=>w,renderSuccess:()=>v});module.exports=O(X);var T={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:"#1f2937",borderRadius:"md",fontSize:"md",buttonStyle:"filled",labelPosition:"top"};function B(t){switch(t){case"none":return"0";case"sm":return"0.125rem";case"md":return"0.375rem";case"lg":return"0.5rem";default:return"0.375rem"}}function H(t){switch(t){case"none":return"0";case"small":return"4px";case"medium":return"8px";case"large":return"12px";case"full":return"9999px";default:return"8px"}}function V(t){switch(t){case"sm":return"0.875rem";case"md":return"1rem";case"lg":return"1.125rem";default:return"1rem"}}function q(t){switch(t){case"small":return"0.75rem";case"large":return"1rem";default:return"0.875rem"}}function W(t){switch(t){case"compact":return"0.5rem";case"relaxed":return"1.5rem";case"spacious":return"2rem";default:return"1rem"}}function D(t){switch(t){case"none":return"0";case"compact":return"1rem";case"relaxed":return"2.5rem";case"spacious":return"3.5rem";default:return"1.5rem"}}function K(t){switch(t){case"compact":return"0.125rem";case"relaxed":return"0.75rem";default:return"0.25rem"}}function j(t){switch(t){case"narrow":return"28rem";case"wide":return"48rem";case"full":return"100%";default:return"36rem"}}function _(t){switch(t){case"left":return"flex-start";case"right":return"flex-end";default:return"center"}}function E(t=T){let e={...T,...t},s=B(e.borderRadius),d=H(e.buttonRadius),i=V(e.fontSize),c=q(e.placeholderFontSize),o=W(e.fieldSpacing),n=D(e.formPadding),m=K(e.labelSpacing),l=j(e.formWidth),a=e.primaryColor,r=e.buttonColor,p=e.fontFamily||"system-ui, -apple-system, sans-serif",u=_(e.buttonAlign),S={small:{px:"0.75rem",py:"0.375rem",fs:"0.875rem"},medium:{px:"1.25rem",py:"0.625rem",fs:"1rem"},large:{px:"1.75rem",py:"0.875rem",fs:"1.125rem"}}[e.buttonSize||"medium"],N=e.buttonPaddingX!=null?`${e.buttonPaddingX}px`:S.px,L=e.buttonPaddingY!=null?`${e.buttonPaddingY}px`:S.py,P=e.buttonGradient||(e.buttonStyle==="filled"?a:"transparent");return`
2
2
  .forms-expert-wrapper {
3
3
  ${e.backgroundImageUrl?`background-image: url(${e.backgroundImageUrl}); background-size: cover; background-position: center;`:""}
4
4
  ${e.backgroundImageUrl?"":`background-color: ${e.backgroundColor};`}
@@ -13,14 +13,14 @@
13
13
  }
14
14
 
15
15
  .forms-expert {
16
- font-family: ${l};
16
+ font-family: ${p};
17
17
  font-size: ${i};
18
18
  color: ${e.textColor};
19
19
  background-color: ${e.transparentBackground?"transparent":e.backgroundColor};
20
- padding: ${a};
21
- border-radius: ${o};
20
+ padding: ${n};
21
+ border-radius: ${s};
22
22
  box-sizing: border-box;
23
- max-width: ${s};
23
+ max-width: ${l};
24
24
  width: 100%;
25
25
  margin: 0 auto;
26
26
  position: relative;
@@ -44,12 +44,12 @@
44
44
  width: 100%;
45
45
  max-height: 200px;
46
46
  object-fit: cover;
47
- border-radius: ${o} ${o} 0 0;
47
+ border-radius: ${s} ${s} 0 0;
48
48
  margin-bottom: 1rem;
49
49
  }
50
50
 
51
51
  .forms-expert-group {
52
- margin-bottom: ${m};
52
+ margin-bottom: ${o};
53
53
  ${e.labelPosition==="left"||e.fieldLayout==="inline"?"display: flex; align-items: flex-start; gap: 1rem;":""}
54
54
  }
55
55
 
@@ -57,7 +57,7 @@
57
57
  display: block;
58
58
  font-weight: 500;
59
59
  color: ${e.textColor};
60
- ${e.labelPosition==="left"||e.fieldLayout==="inline"?"width: 33%; flex-shrink: 0; padding-top: 0.5rem; margin-bottom: 0;":`margin-bottom: ${n};`}
60
+ ${e.labelPosition==="left"||e.fieldLayout==="inline"?"width: 33%; flex-shrink: 0; padding-top: 0.5rem; margin-bottom: 0;":`margin-bottom: ${m};`}
61
61
  }
62
62
 
63
63
  .forms-expert-required {
@@ -76,7 +76,7 @@
76
76
  padding: 0.5rem 0.75rem;
77
77
  border: ${e.fieldBorderStyle==="bottom"?"none":`1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}`};
78
78
  ${e.fieldBorderStyle==="bottom"?`border-bottom: 1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"};`:""}
79
- border-radius: ${e.fieldBorderStyle==="bottom"?"0":o};
79
+ border-radius: ${e.fieldBorderStyle==="bottom"?"0":s};
80
80
  font-size: ${i};
81
81
  font-family: inherit;
82
82
  background-color: ${e.theme==="dark"?"#374151":"#ffffff"};
@@ -86,7 +86,7 @@
86
86
 
87
87
  .forms-expert-input::placeholder,
88
88
  .forms-expert-textarea::placeholder {
89
- font-size: ${u};
89
+ font-size: ${c};
90
90
  }
91
91
 
92
92
  .forms-expert-input:focus,
@@ -112,7 +112,7 @@
112
112
  display: flex;
113
113
  align-items: center;
114
114
  gap: 0.5rem;
115
- margin-bottom: ${m};
115
+ margin-bottom: ${o};
116
116
  }
117
117
 
118
118
  .forms-expert-checkbox {
@@ -131,7 +131,7 @@
131
131
  padding: 0.5rem 0.75rem;
132
132
  border: ${e.fieldBorderStyle==="bottom"?"none":`1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}`};
133
133
  ${e.fieldBorderStyle==="bottom"?`border-bottom: 1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"};`:""}
134
- border-radius: ${e.fieldBorderStyle==="bottom"?"0":o};
134
+ border-radius: ${e.fieldBorderStyle==="bottom"?"0":s};
135
135
  font-size: ${i};
136
136
  background-color: ${e.theme==="dark"?"#374151":"#ffffff"};
137
137
  cursor: pointer;
@@ -145,7 +145,7 @@
145
145
 
146
146
  .forms-expert-button-wrapper {
147
147
  display: flex;
148
- justify-content: ${d};
148
+ justify-content: ${u};
149
149
  margin-top: 1rem;
150
150
  gap: 0.5rem;
151
151
  flex-wrap: wrap;
@@ -153,14 +153,14 @@
153
153
 
154
154
  .forms-expert-button {
155
155
  ${e.buttonFullWidth?"width: 100%;":e.buttonAlign?"":"width: 100%;"}
156
- padding: ${P} ${L};
156
+ padding: ${L} ${N};
157
157
  font-weight: 500;
158
- font-size: ${C.fs};
158
+ font-size: ${S.fs};
159
159
  font-family: inherit;
160
- border-radius: ${c};
160
+ border-radius: ${d};
161
161
  cursor: pointer;
162
162
  transition: opacity 0.2s, transform 0.1s;
163
- ${e.buttonStyle==="filled"?`background: ${A}; color: ${r||"white"}; border: none;`:`background: transparent; color: ${p}; border: 2px solid ${p};`}
163
+ ${e.buttonStyle==="filled"?`background: ${P}; color: ${r||"white"}; border: none;`:`background: transparent; color: ${a}; border: 2px solid ${a};`}
164
164
  }
165
165
 
166
166
  .forms-expert-button:hover {
@@ -247,7 +247,7 @@
247
247
  font-weight: 500;
248
248
  font-size: ${i};
249
249
  font-family: inherit;
250
- border-radius: ${c};
250
+ border-radius: ${d};
251
251
  cursor: pointer;
252
252
  transition: opacity 0.2s;
253
253
  text-decoration: none;
@@ -272,7 +272,7 @@
272
272
  .forms-expert-scale { display: flex; gap: 0.25rem; flex-wrap: wrap; }
273
273
  .forms-expert-scale-labels { display: flex; justify-content: space-between; font-size: 0.75rem; color: ${e.theme==="dark"?"#9ca3af":"#6b7280"}; margin-top: 0.25rem; }
274
274
  .forms-expert-scale-btn {
275
- min-width: 2.25rem; height: 2.25rem; border-radius: ${o}; cursor: pointer;
275
+ min-width: 2.25rem; height: 2.25rem; border-radius: ${s}; cursor: pointer;
276
276
  border: 1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"};
277
277
  background: ${e.theme==="dark"?"#374151":"#ffffff"}; color: ${e.textColor};
278
278
  font-size: 0.875rem; transition: all 0.15s;
@@ -296,24 +296,24 @@
296
296
  /* Image choice */
297
297
  .forms-expert-image-choice { display: flex; flex-wrap: wrap; gap: 0.5rem; }
298
298
  .forms-expert-image-choice-item {
299
- border: 2px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}; border-radius: ${o};
299
+ border: 2px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}; border-radius: ${s};
300
300
  padding: 0.5rem; cursor: pointer; text-align: center; transition: border-color 0.15s;
301
301
  }
302
302
  .forms-expert-image-choice-item.active { border-color: ${e.primaryColor}; }
303
- .forms-expert-image-choice-item img { max-width: 80px; max-height: 80px; object-fit: cover; border-radius: ${o}; }
303
+ .forms-expert-image-choice-item img { max-width: 80px; max-height: 80px; object-fit: cover; border-radius: ${s}; }
304
304
 
305
305
  ${e.customCss||""}
306
- `.trim()}function b(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}function Y(t){switch(t){case"small":return"18px";case"large":return"30px";case"extra-large":return"36px";default:return"24px"}}function X(t){switch(t){case"small":return"14px";case"large":return"18px";default:return"16px"}}function N(t,e,o,c){let i=document.createElement("div");if(t.type==="heading"){i.className="forms-expert-group";let n=document.createElement("h3");if(n.className="forms-expert-heading",n.style.fontSize=Y(c?.headingSize),n.textContent=t.label||"",i.appendChild(n),t.content){let s=document.createElement("p");s.className="forms-expert-heading-subtitle",s.textContent=t.content,i.appendChild(s)}return i}if(t.type==="divider"){let n=document.createElement("hr");return n.className="forms-expert-divider",n}if(t.type==="paragraph"){i.className="forms-expert-group";let n=t.paragraphFontSize?`${t.paragraphFontSize}px`:X(c?.paragraphSize);if(t.label){let s=document.createElement("p");s.className="forms-expert-paragraph-label",s.style.fontSize=n,s.textContent=t.label,i.appendChild(s)}if(t.content){let s=document.createElement("div");s.className="forms-expert-paragraph",s.style.fontSize=n,s.innerHTML=t.content,i.appendChild(s)}return i}if(t.type==="hidden"){let n=document.createElement("input");return n.type="hidden",n.name=t.name,n.value=String(t.defaultValue??e??""),i.appendChild(n),i.style.display="none",i}if(t.type==="checkbox"||t.type==="toggle"||t.type==="consent"){i.className="forms-expert-checkbox-group";let n=document.createElement("input");n.type="checkbox",n.id=`mira-field-${t.name}`,n.name=t.name,n.className="forms-expert-checkbox",n.checked=!!e,t.required&&(n.required=!0);let s=document.createElement("label");s.htmlFor=n.id;let p=t.type==="consent"?t.consentText||t.label||t.name:t.label||t.name;if(s.innerHTML=`${b(p)}${t.required?'<span class="forms-expert-required">*</span>':""}`,i.appendChild(n),i.appendChild(s),t.type==="consent"&&t.consentUrl){let r=document.createElement("a");r.href=t.consentUrl,r.target="_blank",r.rel="noopener noreferrer",r.textContent="View policy",r.className="forms-expert-consent-link",i.appendChild(r)}if(o){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=o,i.appendChild(r)}return i}i.className="forms-expert-group";let u=document.createElement("label");u.className="forms-expert-label",u.htmlFor=`mira-field-${t.name}`,u.innerHTML=`${b(t.label||t.name)}${t.required?'<span class="forms-expert-required">*</span>':""}`,i.appendChild(u);let m=document.createElement("div");m.className="forms-expert-input-wrapper";let a;switch(t.type){case"textarea":case"richText":a=document.createElement("textarea"),a.className="forms-expert-textarea",a.value=String(e||""),t.maxLength&&(a.maxLength=t.maxLength);break;case"select":case"dropdown":{a=document.createElement("select"),a.className="forms-expert-select";let n=document.createElement("option");n.value="",n.textContent=t.placeholder||"Select an option...",a.appendChild(n),(t.options||[]).forEach(p=>{let r=document.createElement("option");r.value=p,r.textContent=p,e===p&&(r.selected=!0),a.appendChild(r)});break}case"radio":{let n=document.createElement("div");if(n.className="forms-expert-radio-group",(t.options||[]).forEach(p=>{let r=document.createElement("label");r.className="forms-expert-radio-item";let l=document.createElement("input");l.type="radio",l.name=t.name,l.value=p,l.checked=e===p,r.appendChild(l),r.appendChild(document.createTextNode(` ${p}`)),n.appendChild(r)}),m.appendChild(n),o){let p=document.createElement("div");p.className="forms-expert-error-message",p.textContent=o,m.appendChild(p)}return i.appendChild(m),i}case"multiselect":{let n=document.createElement("div");n.className="forms-expert-multiselect-group";let s=e||[];if((t.options||[]).forEach(r=>{let l=document.createElement("label");l.className="forms-expert-checkbox-item";let d=document.createElement("input");d.type="checkbox",d.name=t.name,d.value=r,d.checked=s.includes(r),l.appendChild(d),l.appendChild(document.createTextNode(` ${r}`)),n.appendChild(l)}),m.appendChild(n),o){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=o,m.appendChild(r)}return i.appendChild(m),i}case"rating":{let n=document.createElement("div");n.className="forms-expert-rating";let s=t.ratingMax||5,p=e||0;for(let r=1;r<=s;r++){let l=document.createElement("button");l.type="button",l.className=`forms-expert-rating-star ${r<=p?"active":""}`,l.textContent="\u2605",l.dataset.value=String(r),n.appendChild(l)}if(m.appendChild(n),o){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=o,m.appendChild(r)}return i.appendChild(m),i}case"scale":case"opinionScale":{let n=document.createElement("div");n.className="forms-expert-scale";let s=t.min??(t.type==="opinionScale"?0:1),p=t.max??(t.type==="opinionScale"?10:5),r=e;for(let l=s;l<=p;l++){let d=document.createElement("button");d.type="button",d.className=`forms-expert-scale-btn ${r===l?"active":""}`,d.textContent=String(l),d.dataset.value=String(l),n.appendChild(d)}if(m.appendChild(n),t.lowLabel||t.highLabel){let l=document.createElement("div");l.className="forms-expert-scale-labels",l.innerHTML=`<span>${b(t.lowLabel||"")}</span><span>${b(t.highLabel||"")}</span>`,m.appendChild(l)}if(o){let l=document.createElement("div");l.className="forms-expert-error-message",l.textContent=o,m.appendChild(l)}return i.appendChild(m),i}case"slider":{a=document.createElement("input"),a.type="range",a.className="forms-expert-slider",a.min=String(t.min??0),a.max=String(t.max??100),a.step=String(t.step??1),a.value=String(e??t.min??0);break}case"file":a=document.createElement("input"),a.type="file",a.className="forms-expert-file",t.allowedMimeTypes?.length&&(a.accept=t.allowedMimeTypes.join(",")),t.multiple&&(a.multiple=!0);break;case"currency":{a=document.createElement("input"),a.type="number",a.className="forms-expert-input",a.value=String(e??""),t.min!==void 0&&(a.min=String(t.min)),t.max!==void 0&&(a.max=String(t.max)),a.step=String(t.step||.01);break}case"phone":a=document.createElement("input"),a.type="tel",a.className="forms-expert-input",a.value=String(e||"");break;case"url":a=document.createElement("input"),a.type="url",a.className="forms-expert-input",a.value=String(e||"");break;case"password":a=document.createElement("input"),a.type="password",a.className="forms-expert-input",a.value=String(e||"");break;case"time":a=document.createElement("input"),a.type="time",a.className="forms-expert-input",a.value=String(e||"");break;case"datetime":a=document.createElement("input"),a.type="datetime-local",a.className="forms-expert-input",a.value=String(e||"");break;case"colorPicker":a=document.createElement("input"),a.type="color",a.className="forms-expert-color",a.value=String(e||"#000000");break;case"dateRange":{let n=document.createElement("div");n.className="forms-expert-date-range";let s=e||{},p=document.createElement("input");p.type="date",p.className="forms-expert-input",p.name=`${t.name}.start`,p.value=s.start||"";let r=document.createElement("input");if(r.type="date",r.className="forms-expert-input",r.name=`${t.name}.end`,r.value=s.end||"",n.appendChild(p),n.appendChild(r),m.appendChild(n),o){let l=document.createElement("div");l.className="forms-expert-error-message",l.textContent=o,m.appendChild(l)}return i.appendChild(m),i}case"address":{let n=document.createElement("div");n.className="forms-expert-address";let s=t.addressFields||["street","city","state","zip","country"],p=e||{},r={street:"Street",street2:"Street Line 2",city:"City",state:"State",zip:"ZIP",country:"Country"};if(s.forEach(l=>{let d=document.createElement("input");d.type="text",d.className="forms-expert-input",d.name=`${t.name}.${l}`,d.placeholder=r[l]||l,d.value=p[l]||"",n.appendChild(d)}),m.appendChild(n),o){let l=document.createElement("div");l.className="forms-expert-error-message",l.textContent=o,m.appendChild(l)}return i.appendChild(m),i}case"name":{let n=document.createElement("div");n.className="forms-expert-name";let s=t.nameFields||["first","last"],p=e||{},r={prefix:"Prefix",first:"First Name",middle:"Middle",last:"Last Name",suffix:"Suffix"};if(s.forEach(l=>{let d=document.createElement("input");d.type="text",d.className="forms-expert-input",d.name=`${t.name}.${l}`,d.placeholder=r[l]||l,d.value=p[l]||"",n.appendChild(d)}),m.appendChild(n),o){let l=document.createElement("div");l.className="forms-expert-error-message",l.textContent=o,m.appendChild(l)}return i.appendChild(m),i}case"imageChoice":{let n=document.createElement("div");n.className="forms-expert-image-choice";let s=t.options||[],p=e;if(s.forEach(r=>{let l=document.createElement("button");if(l.type="button",l.className=`forms-expert-image-choice-item ${p===r.value?"active":""}`,l.dataset.value=r.value,r.imageUrl){let f=document.createElement("img");f.src=r.imageUrl,f.alt=r.label,l.appendChild(f)}let d=document.createElement("span");d.textContent=r.label,l.appendChild(d),n.appendChild(l)}),m.appendChild(n),o){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=o,m.appendChild(r)}return i.appendChild(m),i}case"ranking":{let n=document.createElement("div");n.className="forms-expert-ranking";let s=t.options||[];if((e||[...s]).forEach((r,l)=>{let d=document.createElement("div");d.className="forms-expert-ranking-item",d.textContent=`${l+1}. ${r}`,d.dataset.value=r,n.appendChild(d)}),m.appendChild(n),o){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=o,m.appendChild(r)}return i.appendChild(m),i}case"location":{let n=document.createElement("div");n.className="forms-expert-location";let s=e||{},p=document.createElement("input");p.type="text",p.className="forms-expert-input",p.name=`${t.name}.address`,p.placeholder="Address",p.value=s.address||"",n.appendChild(p);let r=document.createElement("div");r.className="forms-expert-location-coords";let l=document.createElement("input");l.type="number",l.className="forms-expert-input",l.name=`${t.name}.lat`,l.placeholder="Latitude",l.step="any",l.value=s.lat!==void 0?String(s.lat):"";let d=document.createElement("input");if(d.type="number",d.className="forms-expert-input",d.name=`${t.name}.lng`,d.placeholder="Longitude",d.step="any",d.value=s.lng!==void 0?String(s.lng):"",r.appendChild(l),r.appendChild(d),n.appendChild(r),m.appendChild(n),o){let f=document.createElement("div");f.className="forms-expert-error-message",f.textContent=o,m.appendChild(f)}return i.appendChild(m),i}default:a=document.createElement("input"),a.type=t.type==="email"?"email":t.type==="number"?"number":t.type==="date"?"date":"text",a.className="forms-expert-input",a.value=String(e||""),t.type==="number"&&(t.min!==void 0&&(a.min=String(t.min)),t.max!==void 0&&(a.max=String(t.max)),t.step!==void 0&&(a.step=String(t.step)));break}if(a.id=`mira-field-${t.name}`,a.name=t.name,t.placeholder&&"placeholder"in a&&(a.placeholder=t.placeholder),t.required&&(a.required=!0),o&&a.classList.add("forms-expert-error"),m.appendChild(a),o){let n=document.createElement("div");n.className="forms-expert-error-message",n.textContent=o,m.appendChild(n)}return i.appendChild(m),i}function v(t,e={},o={},c={}){let i=document.createElement("form");if(i.className="forms-expert",c.hideRequiredAsterisk){let r=document.createElement("style");r.textContent=".forms-expert .forms-expert-required { display: none; }",i.appendChild(r)}if(c.showFormName!==!1&&c.formName){let r=document.createElement("h1");r.className="forms-expert-title",r.textContent=c.formName,r.style.fontSize="1.5rem",r.style.fontWeight="700",r.style.marginBottom="0.5rem",i.appendChild(r)}let u=t.styling;if(t.fields.forEach(r=>{let l=N(r,e[r.name],o[r.name],u);i.appendChild(l)}),c.honeypot){let r=document.createElement("input");r.type="text",r.name="_hp",r.className="forms-expert-honeypot",r.tabIndex=-1,r.autocomplete="off",i.appendChild(r)}let m=document.createElement("input");m.type="hidden",m.name="pageUrl",m.value=typeof window<"u"?window.location.href:"",i.appendChild(m);let a=document.createElement("div");a.className="forms-expert-button-wrapper";let n=document.createElement("button");n.type="submit",n.className="forms-expert-button",n.disabled=c.isLoading||!1,c.isLoading?n.innerHTML=`
306
+ `.trim()}function h(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}function G(t){switch(t){case"small":return"18px";case"large":return"30px";case"extra-large":return"36px";default:return"24px"}}function Y(t){switch(t){case"small":return"14px";case"large":return"18px";default:return"16px"}}function R(t,e,s,d){let i=document.createElement("div");if(t.type==="heading"){i.className="forms-expert-group";let n=document.createElement("h3");if(n.className="forms-expert-heading",n.style.fontSize=G(d?.headingSize),n.textContent=t.label||"",i.appendChild(n),t.content){let m=document.createElement("p");m.className="forms-expert-heading-subtitle",m.textContent=t.content,i.appendChild(m)}return i}if(t.type==="divider"){let n=document.createElement("hr");return n.className="forms-expert-divider",n}if(t.type==="paragraph"){i.className="forms-expert-group";let n=t.paragraphFontSize?`${t.paragraphFontSize}px`:Y(d?.paragraphSize);if(t.label){let m=document.createElement("p");m.className="forms-expert-paragraph-label",m.style.fontSize=n,m.textContent=t.label,i.appendChild(m)}if(t.content){let m=document.createElement("div");m.className="forms-expert-paragraph",m.style.fontSize=n,m.innerHTML=t.content,i.appendChild(m)}return i}if(t.type==="hidden"){let n=document.createElement("input");return n.type="hidden",n.name=t.name,n.value=String(t.defaultValue??e??""),i.appendChild(n),i.style.display="none",i}if(t.type==="checkbox"||t.type==="toggle"||t.type==="consent"){i.className="forms-expert-checkbox-group";let n=document.createElement("input");n.type="checkbox",n.id=`mira-field-${t.name}`,n.name=t.name,n.className="forms-expert-checkbox",n.checked=!!e,t.required&&(n.required=!0);let m=document.createElement("label");m.htmlFor=n.id;let l=t.type==="consent"?t.consentText||t.label||t.name:t.label||t.name;if(m.innerHTML=`${h(l)}${t.required?'<span class="forms-expert-required">*</span>':""}`,i.appendChild(n),i.appendChild(m),t.type==="consent"&&t.consentUrl){let a=document.createElement("a");a.href=t.consentUrl,a.target="_blank",a.rel="noopener noreferrer",a.textContent="View policy",a.className="forms-expert-consent-link",i.appendChild(a)}if(s){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=s,i.appendChild(a)}return i}if(i.className="forms-expert-group",t.label){let n=document.createElement("label");n.className="forms-expert-label",n.htmlFor=`mira-field-${t.name}`,n.innerHTML=`${h(t.label)}${t.required?'<span class="forms-expert-required">*</span>':""}`,i.appendChild(n)}let c=document.createElement("div");c.className="forms-expert-input-wrapper";let o;switch(t.type){case"textarea":case"richText":o=document.createElement("textarea"),o.className="forms-expert-textarea",o.value=String(e||""),t.maxLength&&(o.maxLength=t.maxLength);break;case"select":case"dropdown":{o=document.createElement("select"),o.className="forms-expert-select";let n=document.createElement("option");n.value="",n.textContent=t.placeholder||"Select an option...",o.appendChild(n),(t.options||[]).forEach(l=>{let a=document.createElement("option");a.value=l,a.textContent=l,e===l&&(a.selected=!0),o.appendChild(a)});break}case"radio":{let n=document.createElement("div");if(n.className="forms-expert-radio-group",(t.options||[]).forEach(l=>{let a=document.createElement("label");a.className="forms-expert-radio-item";let r=document.createElement("input");r.type="radio",r.name=t.name,r.value=l,r.checked=e===l,a.appendChild(r),a.appendChild(document.createTextNode(` ${l}`)),n.appendChild(a)}),c.appendChild(n),s){let l=document.createElement("div");l.className="forms-expert-error-message",l.textContent=s,c.appendChild(l)}return i.appendChild(c),i}case"multiselect":{let n=document.createElement("div");n.className="forms-expert-multiselect-group";let m=e||[];if((t.options||[]).forEach(a=>{let r=document.createElement("label");r.className="forms-expert-checkbox-item";let p=document.createElement("input");p.type="checkbox",p.name=t.name,p.value=a,p.checked=m.includes(a),r.appendChild(p),r.appendChild(document.createTextNode(` ${a}`)),n.appendChild(r)}),c.appendChild(n),s){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=s,c.appendChild(a)}return i.appendChild(c),i}case"rating":{let n=document.createElement("div");n.className="forms-expert-rating";let m=t.ratingMax||5,l=e||0;for(let a=1;a<=m;a++){let r=document.createElement("button");r.type="button",r.className=`forms-expert-rating-star ${a<=l?"active":""}`,r.textContent="\u2605",r.dataset.value=String(a),n.appendChild(r)}if(c.appendChild(n),s){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=s,c.appendChild(a)}return i.appendChild(c),i}case"scale":case"opinionScale":{let n=document.createElement("div");n.className="forms-expert-scale";let m=t.min??(t.type==="opinionScale"?0:1),l=t.max??(t.type==="opinionScale"?10:5),a=e;for(let r=m;r<=l;r++){let p=document.createElement("button");p.type="button",p.className=`forms-expert-scale-btn ${a===r?"active":""}`,p.textContent=String(r),p.dataset.value=String(r),n.appendChild(p)}if(c.appendChild(n),t.lowLabel||t.highLabel){let r=document.createElement("div");r.className="forms-expert-scale-labels",r.innerHTML=`<span>${h(t.lowLabel||"")}</span><span>${h(t.highLabel||"")}</span>`,c.appendChild(r)}if(s){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=s,c.appendChild(r)}return i.appendChild(c),i}case"slider":{o=document.createElement("input"),o.type="range",o.className="forms-expert-slider",o.min=String(t.min??0),o.max=String(t.max??100),o.step=String(t.step??1),o.value=String(e??t.min??0);break}case"file":o=document.createElement("input"),o.type="file",o.className="forms-expert-file",t.allowedMimeTypes?.length&&(o.accept=t.allowedMimeTypes.join(",")),t.multiple&&(o.multiple=!0);break;case"currency":{o=document.createElement("input"),o.type="number",o.className="forms-expert-input",o.value=String(e??""),t.min!==void 0&&(o.min=String(t.min)),t.max!==void 0&&(o.max=String(t.max)),o.step=String(t.step||.01);break}case"phone":o=document.createElement("input"),o.type="tel",o.className="forms-expert-input",o.value=String(e||"");break;case"url":o=document.createElement("input"),o.type="url",o.className="forms-expert-input",o.value=String(e||"");break;case"password":o=document.createElement("input"),o.type="password",o.className="forms-expert-input",o.value=String(e||"");break;case"time":o=document.createElement("input"),o.type="time",o.className="forms-expert-input",o.value=String(e||"");break;case"datetime":o=document.createElement("input"),o.type="datetime-local",o.className="forms-expert-input",o.value=String(e||"");break;case"colorPicker":o=document.createElement("input"),o.type="color",o.className="forms-expert-color",o.value=String(e||"#000000");break;case"dateRange":{let n=document.createElement("div");n.className="forms-expert-date-range";let m=e||{},l=document.createElement("input");l.type="date",l.className="forms-expert-input",l.name=`${t.name}.start`,l.value=m.start||"";let a=document.createElement("input");if(a.type="date",a.className="forms-expert-input",a.name=`${t.name}.end`,a.value=m.end||"",n.appendChild(l),n.appendChild(a),c.appendChild(n),s){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=s,c.appendChild(r)}return i.appendChild(c),i}case"address":{let n=document.createElement("div");n.className="forms-expert-address";let m=t.addressFields||["street","city","state","zip","country"],l=e||{},a={street:"Street",street2:"Street Line 2",city:"City",state:"State",zip:"ZIP",country:"Country"};if(m.forEach(r=>{let p=document.createElement("input");p.type="text",p.className="forms-expert-input",p.name=`${t.name}.${r}`,p.placeholder=a[r]||r,p.value=l[r]||"",n.appendChild(p)}),c.appendChild(n),s){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=s,c.appendChild(r)}return i.appendChild(c),i}case"name":{let n=document.createElement("div");n.className="forms-expert-name";let m=t.nameFields||["first","last"],l=e||{},a={prefix:"Prefix",first:"First Name",middle:"Middle",last:"Last Name",suffix:"Suffix"};if(m.forEach(r=>{let p=document.createElement("input");p.type="text",p.className="forms-expert-input",p.name=`${t.name}.${r}`,p.placeholder=a[r]||r,p.value=l[r]||"",n.appendChild(p)}),c.appendChild(n),s){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=s,c.appendChild(r)}return i.appendChild(c),i}case"imageChoice":{let n=document.createElement("div");n.className="forms-expert-image-choice";let m=t.options||[],l=e;if(m.forEach(a=>{let r=document.createElement("button");if(r.type="button",r.className=`forms-expert-image-choice-item ${l===a.value?"active":""}`,r.dataset.value=a.value,a.imageUrl){let u=document.createElement("img");u.src=a.imageUrl,u.alt=a.label,r.appendChild(u)}let p=document.createElement("span");p.textContent=a.label,r.appendChild(p),n.appendChild(r)}),c.appendChild(n),s){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=s,c.appendChild(a)}return i.appendChild(c),i}case"ranking":{let n=document.createElement("div");n.className="forms-expert-ranking";let m=t.options||[];if((e||[...m]).forEach((a,r)=>{let p=document.createElement("div");p.className="forms-expert-ranking-item",p.textContent=`${r+1}. ${a}`,p.dataset.value=a,n.appendChild(p)}),c.appendChild(n),s){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=s,c.appendChild(a)}return i.appendChild(c),i}case"location":{let n=document.createElement("div");n.className="forms-expert-location";let m=e||{},l=document.createElement("input");l.type="text",l.className="forms-expert-input",l.name=`${t.name}.address`,l.placeholder="Address",l.value=m.address||"",n.appendChild(l);let a=document.createElement("div");a.className="forms-expert-location-coords";let r=document.createElement("input");r.type="number",r.className="forms-expert-input",r.name=`${t.name}.lat`,r.placeholder="Latitude",r.step="any",r.value=m.lat!==void 0?String(m.lat):"";let p=document.createElement("input");if(p.type="number",p.className="forms-expert-input",p.name=`${t.name}.lng`,p.placeholder="Longitude",p.step="any",p.value=m.lng!==void 0?String(m.lng):"",a.appendChild(r),a.appendChild(p),n.appendChild(a),c.appendChild(n),s){let u=document.createElement("div");u.className="forms-expert-error-message",u.textContent=s,c.appendChild(u)}return i.appendChild(c),i}default:o=document.createElement("input"),o.type=t.type==="email"?"email":t.type==="number"?"number":t.type==="date"?"date":"text",o.className="forms-expert-input",o.value=String(e||""),t.type==="number"&&(t.min!==void 0&&(o.min=String(t.min)),t.max!==void 0&&(o.max=String(t.max)),t.step!==void 0&&(o.step=String(t.step)));break}if(o.id=`mira-field-${t.name}`,o.name=t.name,t.placeholder&&"placeholder"in o&&(o.placeholder=t.placeholder),t.required&&(o.required=!0),s&&o.classList.add("forms-expert-error"),c.appendChild(o),s){let n=document.createElement("div");n.className="forms-expert-error-message",n.textContent=s,c.appendChild(n)}return i.appendChild(c),i}function w(t,e={},s={},d={}){let i=document.createElement("form");if(i.className="forms-expert",d.hideRequiredAsterisk){let r=document.createElement("style");r.textContent=".forms-expert .forms-expert-required { display: none; }",i.appendChild(r)}if(d.showFormName!==!1&&d.formName){let r=document.createElement("h1");r.className="forms-expert-title",r.textContent=d.formName,r.style.fontSize="1.5rem",r.style.fontWeight="700",r.style.marginBottom="0.5rem",i.appendChild(r)}let c=t.styling;if(t.fields.forEach(r=>{let p=R(r,e[r.name],s[r.name],c);i.appendChild(p)}),d.honeypot){let r=document.createElement("input");r.type="text",r.name="_hp",r.className="forms-expert-honeypot",r.tabIndex=-1,r.autocomplete="off",i.appendChild(r)}let o=document.createElement("input");o.type="hidden",o.name="pageUrl",o.value=typeof window<"u"?window.location.href:"",i.appendChild(o);let n=document.createElement("div");n.className="forms-expert-button-wrapper";let m=document.createElement("button");m.type="submit",m.className="forms-expert-button",m.disabled=d.isLoading||!1,d.isLoading?m.innerHTML=`
307
307
  <span class="forms-expert-button-loading">
308
308
  <span class="forms-expert-spinner"></span>
309
309
  Submitting...
310
310
  </span>
311
- `:n.textContent=c.submitText||"Submit";let s=c.secondaryButton,p=()=>{if(!s?.enabled)return null;let r=document.createElement("a");r.className="forms-expert-secondary-btn",r.href=s.href||"#",r.textContent=s.text||"Learn More",s.openInNewTab&&(r.target="_blank",r.rel="noopener noreferrer");let l=u?.primaryColor||"#3b82f6",d=s.color||l;return s.style==="filled"?(r.style.background=d,r.style.color=s.textColor||"#ffffff",r.style.border="none"):s.style==="outlined"?(r.style.background="transparent",r.style.color=s.textColor||d,r.style.border=`2px solid ${d}`):s.style==="link"?(r.style.background="transparent",r.style.color=s.textColor||d,r.style.border="none",r.style.textDecoration="underline"):(r.style.background="transparent",r.style.color=s.textColor||d,r.style.border="none"),s.marginTop!=null&&(r.style.marginTop=`${s.marginTop}px`),s.marginBottom!=null&&(r.style.marginBottom=`${s.marginBottom}px`),r};if(s?.enabled&&s.position==="left"){let r=p();r&&a.appendChild(r)}if(a.appendChild(n),s?.enabled&&s.position!=="left"&&s.position!=="below"){let r=p();r&&(r.style.marginLeft="auto",a.appendChild(r))}if(i.appendChild(a),s?.enabled&&s.position==="below"){let r=document.createElement("div");r.className="forms-expert-secondary-below";let l=s.align||c.buttonAlign||"left";r.style.justifyContent=l==="center"?"center":l==="right"?"flex-end":"flex-start",s.marginTop!=null&&(r.style.marginTop=`${s.marginTop}px`),s.marginBottom!=null&&(r.style.marginBottom=`${s.marginBottom}px`);let d=p();d&&(d.style.marginTop="0",d.style.marginBottom="0",r.appendChild(d)),i.appendChild(r)}if(c.showBranding!==!1){let r=c.brandingText||"Powered by Forms Expert",l=c.brandingUrl||"https://mira.io",d=document.createElement("div");d.className="forms-expert-branding",d.innerHTML=`<a href="${l}" target="_blank" rel="noopener">${r}</a>`,i.appendChild(d)}return i}function k(t){let e=document.createElement("div");return e.className="forms-expert-success",e.innerHTML=`
311
+ `:m.textContent=d.submitText||"Submit";let l=d.secondaryButton,a=()=>{if(!l?.enabled)return null;let r=document.createElement("a");r.className="forms-expert-secondary-btn",r.href=l.href||"#",r.textContent=l.text||"Learn More",l.openInNewTab&&(r.target="_blank",r.rel="noopener noreferrer");let p=c?.primaryColor||"#3b82f6",u=l.color||p;return l.style==="filled"?(r.style.background=u,r.style.color=l.textColor||"#ffffff",r.style.border="none"):l.style==="outlined"?(r.style.background="transparent",r.style.color=l.textColor||u,r.style.border=`2px solid ${u}`):l.style==="link"?(r.style.background="transparent",r.style.color=l.textColor||u,r.style.border="none",r.style.textDecoration="underline"):(r.style.background="transparent",r.style.color=l.textColor||u,r.style.border="none"),l.marginTop!=null&&(r.style.marginTop=`${l.marginTop}px`),l.marginBottom!=null&&(r.style.marginBottom=`${l.marginBottom}px`),r};if(l?.enabled&&l.position==="left"){let r=a();r&&n.appendChild(r)}if(n.appendChild(m),l?.enabled&&l.position!=="left"&&l.position!=="below"){let r=a();r&&(r.style.marginLeft="auto",n.appendChild(r))}if(i.appendChild(n),l?.enabled&&l.position==="below"){let r=document.createElement("div");r.className="forms-expert-secondary-below";let p=l.align||d.buttonAlign||"left";r.style.justifyContent=p==="center"?"center":p==="right"?"flex-end":"flex-start",l.marginTop!=null&&(r.style.marginTop=`${l.marginTop}px`),l.marginBottom!=null&&(r.style.marginBottom=`${l.marginBottom}px`);let u=a();u&&(u.style.marginTop="0",u.style.marginBottom="0",r.appendChild(u)),i.appendChild(r)}if(d.showBranding!==!1){let r=d.brandingText||"Powered by Forms Expert",p=d.brandingUrl||"https://mira.io",u=document.createElement("div");u.className="forms-expert-branding",u.innerHTML=`<a href="${p}" target="_blank" rel="noopener">${r}</a>`,i.appendChild(u)}return i}function v(t){let e=document.createElement("div");return e.className="forms-expert-success",e.innerHTML=`
312
312
  <svg class="forms-expert-success-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
313
313
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
314
314
  </svg>
315
- <div class="forms-expert-success-message">${b(t)}</div>
316
- `,e}function F(t){return t.reduce((e,o)=>({...e,[o.field]:o.message}),{})}var g=class extends Error{constructor(o,c,i,u){super(o);this.code=c;this.statusCode=i;this.retryAfter=u;this.name="FormsError"}},h=class extends Error{constructor(o){super("Validation failed");this.errors=o;this.name="FormValidationError"}};var x=class{constructor(e){this.apiKey=e.apiKey,this.resourceId=e.resourceId,this.baseUrl=(e.baseUrl||"https://api.forms.expert/api/v1").replace(/\/$/,"")}buildUrl(e){let o=e.includes("?")?"&":"?";return`${this.baseUrl}${e}${o}token=${encodeURIComponent(this.apiKey)}`}async request(e,o,c){let i=this.buildUrl(o),u=await fetch(i,{method:e,headers:{"Content-Type":"application/json"},body:c?JSON.stringify(c):void 0}),m=await u.json();if(!u.ok)throw new g(m.message||"Request failed",m.code||"UNKNOWN_ERROR",u.status,m.retryAfter);return m}async isActive(e,o){let c=o?`?lang=${encodeURIComponent(o)}`:"";return this.request("GET",`/f/${this.resourceId}/${e}/is-active${c}`)}async validate(e,o){return this.request("POST",`/f/${this.resourceId}/${e}/validate`,{data:o})}async submit(e,o,c){let i=this.buildUrl(`/f/${this.resourceId}/${e}`);return Object.values(o).some(m=>m instanceof File||m instanceof FileList&&m.length>0)||c?.onProgress?this.submitWithFormData(i,o,c):this.request("POST",`/f/${this.resourceId}/${e}`,{data:o,pageUrl:c?.pageUrl||(typeof window<"u"?window.location.href:void 0),captchaToken:c?.captchaToken})}submitWithFormData(e,o,c){return new Promise((i,u)=>{let m=new FormData;for(let[s,p]of Object.entries(o))p instanceof File?m.append(s,p):p instanceof FileList?Array.from(p).forEach(r=>m.append(s,r)):p!=null&&m.append(`data[${s}]`,String(p));let a=c?.pageUrl||(typeof window<"u"?window.location.href:"");a&&m.append("pageUrl",a),c?.captchaToken&&m.append("captchaToken",c.captchaToken);let n=new XMLHttpRequest;c?.onProgress&&n.upload.addEventListener("progress",s=>{s.lengthComputable&&c.onProgress({loaded:s.loaded,total:s.total,percentage:Math.round(s.loaded/s.total*100)})}),n.addEventListener("load",()=>{try{let s=JSON.parse(n.responseText);n.status>=200&&n.status<300?i(s):u(new g(s.message||"Submission failed",s.code||"UNKNOWN_ERROR",n.status,s.retryAfter))}catch{u(new g("Invalid response","PARSE_ERROR",n.status))}}),n.addEventListener("error",()=>{u(new g("Network error","NETWORK_ERROR",0))}),n.addEventListener("abort",()=>{u(new g("Request aborted","ABORTED",0))}),n.open("POST",e),n.send(m)})}async trackView(e){let o=this.buildUrl(`/f/${this.resourceId}/${e}/view`);await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"}}).catch(()=>{})}getResourceId(){return this.resourceId}getBaseUrl(){return this.baseUrl}};var $=class{constructor(e,o,c={}){this.config=null;this.apiClient=e,this.slug=o,this.options=c}async initialize(e){return this.config=await this.apiClient.isActive(this.slug,e),this.options.trackViews&&this.apiClient.trackView(this.slug),this.config}getConfig(){return this.config}isActive(){return this.config?.active??!1}requiresCaptcha(){return this.config?.settings?.captcha?.enabled??!1}getCaptchaProvider(){return this.config?.settings?.captcha?.provider}getSchema(){return this.config?.schema}async validate(e){return this.apiClient.validate(this.slug,e)}async submit(e,o){this.options.onSubmitStart?.();try{if(this.config?.mode==="schema"){let i=await this.validate(e);if(!i.valid)throw this.options.onValidationError?.(i.errors),new h(i.errors)}let c=await this.apiClient.submit(this.slug,e,o);return this.options.onSubmitSuccess?.(c),c}catch(c){throw c instanceof g&&this.options.onSubmitError?.(c),c}}getSuccessMessage(){return this.config?.settings?.successMessage||"Form submitted successfully!"}getRedirectUrl(){return this.config?.settings?.redirectUrl}},y=class{constructor(e){this.apiClient=new x(e)}async isActive(e,o){return this.apiClient.isActive(e,o)}async validate(e,o){return this.apiClient.validate(e,o)}async submit(e,o,c){return this.apiClient.submit(e,o,c)}form(e,o){return new $(this.apiClient,e,o)}async trackView(e){return this.apiClient.trackView(e)}async submitWithRetry(e,o,c){let i=c?.maxRetries??3,u=null;for(let m=0;m<i;m++)try{return await this.submit(e,o,c)}catch(a){if(u=a,a instanceof g){if(["VALIDATION_ERROR","CAPTCHA_REQUIRED","ORIGIN_NOT_ALLOWED"].includes(a.code))throw a;if(a.code.includes("RATE_LIMIT")){let n=a.retryAfter||Math.pow(2,m)*1e3;await new Promise(s=>setTimeout(s,n));continue}}await new Promise(n=>setTimeout(n,Math.pow(2,m)*1e3))}throw u}};var S=class{constructor(e,o){this.config=null;this.values={};this.errors={};this.isLoading=!1;this.isSubmitted=!1;this.styleEl=null;this.sdk=new y(e),this.options=o;let c=o.target;if(typeof c=="string"){let i=document.querySelector(c);if(!i)throw new Error(`Element not found: ${c}`);this.container=i}else this.container=c}async init(){try{if(this.renderLoading(),this.config=await this.sdk.isActive(this.options.slug,this.options.lang),!this.config.active){this.renderError("This form is not available");return}this.options.trackViews&&this.sdk.trackView(this.options.slug),this.injectStyles(),this.render()}catch(e){this.renderError("Failed to load form"),this.options.onError?.(e)}}injectStyles(){if(this.styleEl)return;this.styleEl=document.createElement("style"),this.styleEl.id=`forms-expert-styles-${this.options.slug}`;let e={...this.config?.schema?.styling,...this.config?.styling};this.styleEl.textContent=w(e),document.head.appendChild(this.styleEl)}render(){if(!this.config?.schema)return;if(this.isSubmitted){this.container.innerHTML="";let i=this.config.settings?.successMessage||"Form submitted successfully!";this.container.appendChild(k(i));return}let e={...this.config.schema.styling,...this.config.styling},o={...this.config.schema,styling:e},c=v(o,this.values,this.errors,{honeypot:this.config.settings?.honeypot,showBranding:this.config.branding?.enabled!==!1,brandingText:this.config.branding?.text,brandingUrl:this.config.branding?.url,submitText:e.buttonText||this.options.submitText,isLoading:this.isLoading,hideRequiredAsterisk:e.hideRequiredAsterisk,formName:this.config.hostedConfig?.pageTitle||this.config.name,showFormName:this.config.settings?.showFormName,secondaryButton:e.secondaryButton,buttonAlign:e.buttonAlign});c.addEventListener("input",i=>{let u=i.target;u.name&&u.name!=="_hp"&&u.name!=="pageUrl"&&(u.type==="checkbox"?this.values[u.name]=u.checked:u.type==="file"?this.values[u.name]=u.multiple?u.files:u.files?.[0]:this.values[u.name]=u.value,this.errors[u.name]&&(delete this.errors[u.name],this.render()))}),c.addEventListener("submit",i=>{i.preventDefault(),this.handleSubmit()}),this.container.innerHTML="",this.container.appendChild(c)}async handleSubmit(){if(!(this.isLoading||!this.config)){this.isLoading=!0,this.errors={},this.render();try{let e=await this.sdk.submit(this.options.slug,this.values);this.isLoading=!1,this.isSubmitted=!0,this.render(),this.options.onSuccess?.(e);let o=this.options.redirectUrl||this.config.settings?.redirectUrl;o&&setTimeout(()=>{window.location.href=o},1500),this.options.resetOnSuccess&&setTimeout(()=>{this.reset()},3e3)}catch(e){this.isLoading=!1,e instanceof h?(this.errors=F(e.errors),this.options.onValidationError?.(e.errors)):this.options.onError?.(e),this.render()}}}reset(){this.values={},this.errors={},this.isLoading=!1,this.isSubmitted=!1,this.render()}renderLoading(){this.container.innerHTML=`
315
+ <div class="forms-expert-success-message">${h(t)}</div>
316
+ `,e}function k(t){return t.reduce((e,s)=>({...e,[s.field]:s.message}),{})}var g=class extends Error{constructor(s,d,i,c){super(s);this.code=d;this.statusCode=i;this.retryAfter=c;this.name="FormsError"}},f=class extends Error{constructor(s){super("Validation failed");this.errors=s;this.name="FormValidationError"}};var b=class{constructor(e){this.apiKey=e.apiKey,this.resourceId=e.resourceId,this.baseUrl=(e.baseUrl||"https://api.forms.expert/api/v1").replace(/\/$/,"")}buildUrl(e){let s=e.includes("?")?"&":"?";return`${this.baseUrl}${e}${s}token=${encodeURIComponent(this.apiKey)}`}async request(e,s,d){let i=this.buildUrl(s),c=await fetch(i,{method:e,headers:{"Content-Type":"application/json"},body:d?JSON.stringify(d):void 0}),o=await c.json();if(!c.ok)throw new g(o.message||"Request failed",o.code||"UNKNOWN_ERROR",c.status,o.retryAfter);return o}async isActive(e,s){let d=s?`?lang=${encodeURIComponent(s)}`:"";return this.request("GET",`/f/${this.resourceId}/${e}/is-active${d}`)}async validate(e,s){return this.request("POST",`/f/${this.resourceId}/${e}/validate`,{data:s})}async submit(e,s,d){let i=this.buildUrl(`/f/${this.resourceId}/${e}`);return Object.values(s).some(o=>o instanceof File||o instanceof FileList&&o.length>0)||d?.onProgress?this.submitWithFormData(i,s,d):this.request("POST",`/f/${this.resourceId}/${e}`,{data:s,pageUrl:d?.pageUrl||(typeof window<"u"?window.location.href:void 0),captchaToken:d?.captchaToken})}submitWithFormData(e,s,d){return new Promise((i,c)=>{let o=new FormData;for(let[l,a]of Object.entries(s))a instanceof File?o.append(l,a):a instanceof FileList?Array.from(a).forEach(r=>o.append(l,r)):a!=null&&o.append(`data[${l}]`,String(a));let n=d?.pageUrl||(typeof window<"u"?window.location.href:"");n&&o.append("pageUrl",n),d?.captchaToken&&o.append("captchaToken",d.captchaToken);let m=new XMLHttpRequest;d?.onProgress&&m.upload.addEventListener("progress",l=>{l.lengthComputable&&d.onProgress({loaded:l.loaded,total:l.total,percentage:Math.round(l.loaded/l.total*100)})}),m.addEventListener("load",()=>{try{let l=JSON.parse(m.responseText);m.status>=200&&m.status<300?i(l):c(new g(l.message||"Submission failed",l.code||"UNKNOWN_ERROR",m.status,l.retryAfter))}catch{c(new g("Invalid response","PARSE_ERROR",m.status))}}),m.addEventListener("error",()=>{c(new g("Network error","NETWORK_ERROR",0))}),m.addEventListener("abort",()=>{c(new g("Request aborted","ABORTED",0))}),m.open("POST",e),m.send(o)})}async trackView(e){let s=this.buildUrl(`/f/${this.resourceId}/${e}/view`);await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"}}).catch(()=>{})}getResourceId(){return this.resourceId}getBaseUrl(){return this.baseUrl}};var F=class{constructor(e,s,d={}){this.config=null;this.apiClient=e,this.slug=s,this.options=d}async initialize(e){return this.config=await this.apiClient.isActive(this.slug,e),this.options.trackViews&&this.apiClient.trackView(this.slug),this.config}getConfig(){return this.config}isActive(){return this.config?.active??!1}requiresCaptcha(){return this.config?.settings?.captcha?.enabled??!1}getCaptchaProvider(){return this.config?.settings?.captcha?.provider}getSchema(){return this.config?.schema}async validate(e){return this.apiClient.validate(this.slug,e)}async submit(e,s){this.options.onSubmitStart?.();try{if(this.config?.mode==="schema"){let i=await this.validate(e);if(!i.valid)throw this.options.onValidationError?.(i.errors),new f(i.errors)}let d=await this.apiClient.submit(this.slug,e,s);return this.options.onSubmitSuccess?.(d),d}catch(d){throw d instanceof g&&this.options.onSubmitError?.(d),d}}getSuccessMessage(){return this.config?.settings?.successMessage||"Form submitted successfully!"}getRedirectUrl(){return this.config?.settings?.redirectUrl}},x=class{constructor(e){this.apiClient=new b(e)}async isActive(e,s){return this.apiClient.isActive(e,s)}async validate(e,s){return this.apiClient.validate(e,s)}async submit(e,s,d){return this.apiClient.submit(e,s,d)}form(e,s){return new F(this.apiClient,e,s)}async trackView(e){return this.apiClient.trackView(e)}async submitWithRetry(e,s,d){let i=d?.maxRetries??3,c=null;for(let o=0;o<i;o++)try{return await this.submit(e,s,d)}catch(n){if(c=n,n instanceof g){if(["VALIDATION_ERROR","CAPTCHA_REQUIRED","ORIGIN_NOT_ALLOWED"].includes(n.code))throw n;if(n.code.includes("RATE_LIMIT")){let m=n.retryAfter||Math.pow(2,o)*1e3;await new Promise(l=>setTimeout(l,m));continue}}await new Promise(m=>setTimeout(m,Math.pow(2,o)*1e3))}throw c}};var y=class{constructor(e,s){this.config=null;this.values={};this.errors={};this.isLoading=!1;this.isSubmitted=!1;this.styleEl=null;this.sdk=new x(e),this.options=s;let d=s.target;if(typeof d=="string"){let i=document.querySelector(d);if(!i)throw new Error(`Element not found: ${d}`);this.container=i}else this.container=d}async init(){try{if(this.renderLoading(),this.config=await this.sdk.isActive(this.options.slug,this.options.lang),!this.config.active){this.renderError("This form is not available");return}this.options.trackViews&&this.sdk.trackView(this.options.slug),this.injectStyles(),this.render()}catch(e){this.renderError("Failed to load form"),this.options.onError?.(e)}}injectStyles(){if(this.styleEl)return;this.styleEl=document.createElement("style"),this.styleEl.id=`forms-expert-styles-${this.options.slug}`;let e={...this.config?.schema?.styling,...this.config?.styling};this.styleEl.textContent=E(e),document.head.appendChild(this.styleEl)}render(){if(!this.config?.schema)return;if(this.isSubmitted){this.container.innerHTML="";let i=this.config.settings?.successMessage||"Form submitted successfully!";this.container.appendChild(v(i));return}let e={...this.config.schema.styling,...this.config.styling},s={...this.config.schema,styling:e},d=w(s,this.values,this.errors,{honeypot:this.config.settings?.honeypot,showBranding:this.config.branding?.enabled!==!1,brandingText:this.config.branding?.text,brandingUrl:this.config.branding?.url,submitText:e.buttonText||this.options.submitText,isLoading:this.isLoading,hideRequiredAsterisk:e.hideRequiredAsterisk,formName:this.config.hostedConfig?.pageTitle||this.config.name,showFormName:this.config.settings?.showFormName,secondaryButton:e.secondaryButton,buttonAlign:e.buttonAlign});d.addEventListener("input",i=>{let c=i.target;c.name&&c.name!=="_hp"&&c.name!=="pageUrl"&&(c.type==="checkbox"?this.values[c.name]=c.checked:c.type==="file"?this.values[c.name]=c.multiple?c.files:c.files?.[0]:this.values[c.name]=c.value,this.errors[c.name]&&(delete this.errors[c.name],this.render()))}),d.addEventListener("submit",i=>{i.preventDefault(),this.handleSubmit()}),this.container.innerHTML="",this.container.appendChild(d)}async handleSubmit(){if(!(this.isLoading||!this.config)){this.isLoading=!0,this.errors={},this.render();try{let e=await this.sdk.submit(this.options.slug,this.values);this.isLoading=!1,this.isSubmitted=!0,this.render(),this.options.onSuccess?.(e);let s=this.options.redirectUrl||this.config.settings?.redirectUrl;s&&setTimeout(()=>{window.location.href=s},1500),this.options.resetOnSuccess&&setTimeout(()=>{this.reset()},3e3)}catch(e){this.isLoading=!1,e instanceof f?(this.errors=k(e.errors),this.options.onValidationError?.(e.errors)):this.options.onError?.(e),this.render()}}}reset(){this.values={},this.errors={},this.isLoading=!1,this.isSubmitted=!1,this.render()}renderLoading(){this.container.innerHTML=`
317
317
  <div class="forms-expert" style="display: flex; align-items: center; justify-content: center; padding: 2rem;">
318
318
  <svg width="24" height="24" viewBox="0 0 24 24" style="animation: fe-spin 1s linear infinite; color: #9ca3af;">
319
319
  <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="3" fill="none" stroke-dasharray="31.4 31.4" stroke-linecap="round"/>
@@ -324,5 +324,5 @@ ${e.customCss||""}
324
324
  <div class="forms-expert" style="text-align: center; padding: 2rem; color: #ef4444;">
325
325
  <p>${e}</p>
326
326
  </div>
327
- `}destroy(){this.container.innerHTML="",this.styleEl?.remove(),this.styleEl=null}};function T(){document.querySelectorAll("[data-forms-expert]").forEach(e=>{let o=e.getAttribute("data-api-key"),c=e.getAttribute("data-resource-id"),i=e.getAttribute("data-forms-expert"),u=e.getAttribute("data-base-url")||void 0;if(!o||!c||!i){console.error("Forms Expert: Missing required attributes",{apiKey:!!o,resourceId:!!c,slug:!!i});return}new S({apiKey:o,resourceId:c,baseUrl:u},{target:e,slug:i,trackViews:e.getAttribute("data-track-views")==="true",submitText:e.getAttribute("data-submit-text")||void 0,resetOnSuccess:e.getAttribute("data-reset")==="true",lang:e.getAttribute("data-lang")||void 0}).init()})}typeof window<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",T):T());0&&(module.exports={FormWidget,autoInit,errorsToRecord,generateFormStyles,renderField,renderForm,renderSuccess});
327
+ `}destroy(){this.container.innerHTML="",this.styleEl?.remove(),this.styleEl=null}};function $(){document.querySelectorAll("[data-forms-expert]").forEach(e=>{let s=e.getAttribute("data-api-key"),d=e.getAttribute("data-resource-id"),i=e.getAttribute("data-forms-expert"),c=e.getAttribute("data-base-url")||void 0;if(!s||!d||!i){console.error("Forms Expert: Missing required attributes",{apiKey:!!s,resourceId:!!d,slug:!!i});return}new y({apiKey:s,resourceId:d,baseUrl:c},{target:e,slug:i,trackViews:e.getAttribute("data-track-views")==="true",submitText:e.getAttribute("data-submit-text")||void 0,resetOnSuccess:e.getAttribute("data-reset")==="true",lang:e.getAttribute("data-lang")||void 0}).init()})}typeof window<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$):$());0&&(module.exports={FormWidget,autoInit,errorsToRecord,generateFormStyles,renderField,renderForm,renderSuccess});
328
328
  //# sourceMappingURL=index.cjs.map