@forms.expert/sdk 0.2.13 → 0.4.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.
@@ -1,4 +1,4 @@
1
- var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:"#1f2937",borderRadius:"md",fontSize:"md",buttonStyle:"filled",labelPosition:"top"};function A(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 U(t){switch(t){case"none":return"0";case"small":return"0.25rem";case"medium":return"0.375rem";case"large":return"0.75rem";case"full":return"9999px";default:return"0.375rem"}}function M(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 I(t){switch(t){case"sm":return"0.875rem";case"md":return"1rem";case"lg":return"1.125rem";default:return"1rem"}}function B(t){switch(t){case"small":return"0.75rem";case"large":return"1rem";default:return"0.875rem"}}function O(t){switch(t){case"compact":return"0.5rem";case"relaxed":return"1.5rem";case"spacious":return"2rem";default:return"1rem"}}function H(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 V(t){switch(t){case"compact":return"0.125rem";case"relaxed":return"0.75rem";default:return"0.25rem"}}function q(t){switch(t){case"narrow":return"28rem";case"wide":return"48rem";case"full":return"100%";default:return"36rem"}}function W(t){switch(t){case"left":return"flex-start";case"right":return"flex-end";default:return"center"}}function F(t=k){let e={...k,...t},l=A(e.borderRadius),s=U(e.fieldBorderRadius),m=M(e.buttonRadius),c=I(e.fontSize),o=B(e.placeholderFontSize),n=O(e.fieldSpacing),d=H(e.formPadding),i=V(e.labelSpacing),a=q(e.formWidth),r=e.primaryColor,p=e.buttonColor,u=e.fontFamily?e.fontFamily.includes(",")?e.fontFamily:`${e.fontFamily}, sans-serif`:"inherit",L=W(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"],S=e.buttonPaddingX!=null?`${e.buttonPaddingX}px`:C.px,z=e.buttonPaddingY!=null?`${e.buttonPaddingY}px`:C.py,v=e.buttonFontSize!=null?`${e.buttonFontSize}px`:C.fs,P=e.buttonGradient||(e.buttonStyle==="filled"?r:"transparent");return`
1
+ var T={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:"#1f2937",borderRadius:"md",fontSize:"md",buttonStyle:"filled",labelPosition:"top"};function M(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 U(t){switch(t){case"none":return"0";case"small":return"0.25rem";case"medium":return"0.375rem";case"large":return"0.75rem";case"full":return"9999px";default:return"0.375rem"}}function B(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 O(t){switch(t){case"sm":return"0.875rem";case"md":return"1rem";case"lg":return"1.125rem";default:return"1rem"}}function H(t){switch(t){case"small":return"0.75rem";case"large":return"1rem";default:return"0.875rem"}}function V(t){switch(t){case"compact":return"0.5rem";case"relaxed":return"1.5rem";case"spacious":return"2rem";default:return"1rem"}}function W(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 q(t){switch(t){case"compact":return"0.125rem";case"relaxed":return"0.75rem";default:return"0.25rem"}}function D(t){switch(t){case"narrow":return"28rem";case"wide":return"48rem";case"full":return"100%";default:return"36rem"}}function K(t){switch(t){case"left":return"flex-start";case"right":return"flex-end";default:return"center"}}function L(t=T){let e={...T,...t},a=M(e.borderRadius),i=U(e.fieldBorderRadius),l=B(e.buttonRadius),m=O(e.fontSize),s=H(e.placeholderFontSize),n=V(e.fieldSpacing),d=W(e.formPadding),p=q(e.labelSpacing),o=D(e.formWidth),r=e.primaryColor,u=e.buttonColor,c=e.fontFamily?e.fontFamily.includes(",")?e.fontFamily:`${e.fontFamily}, sans-serif`:"inherit",h=K(e.buttonAlign),f={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"],x=e.buttonPaddingX!=null?`${e.buttonPaddingX}px`:f.px,C=e.buttonPaddingY!=null?`${e.buttonPaddingY}px`:f.py,w=e.buttonFontSize!=null?`${e.buttonFontSize}px`:f.fs,F=e.buttonGradient||(e.buttonStyle==="filled"?r:"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 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
13
13
  }
14
14
 
15
15
  .forms-expert {
16
- font-family: ${u};
17
- font-size: ${c};
16
+ font-family: ${c};
17
+ font-size: ${m};
18
18
  color: ${e.textColor};
19
19
  background-color: ${e.transparentBackground?"transparent":e.backgroundColor};
20
20
  padding: ${d};
21
- border-radius: ${l};
21
+ border-radius: ${a};
22
22
  box-sizing: border-box;
23
- max-width: ${a};
23
+ max-width: ${o};
24
24
  width: 100%;
25
25
  margin: 0 auto;
26
26
  position: relative;
@@ -44,7 +44,7 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
44
44
  width: 100%;
45
45
  max-height: 200px;
46
46
  object-fit: cover;
47
- border-radius: ${l} ${l} 0 0;
47
+ border-radius: ${a} ${a} 0 0;
48
48
  margin-bottom: 1rem;
49
49
  }
50
50
 
@@ -57,7 +57,7 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
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: ${i};`}
60
+ ${e.labelPosition==="left"||e.fieldLayout==="inline"?"width: 33%; flex-shrink: 0; padding-top: 0.5rem; margin-bottom: 0;":`margin-bottom: ${p};`}
61
61
  }
62
62
 
63
63
  .forms-expert-required {
@@ -76,17 +76,18 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
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":s};
80
- font-size: ${c};
79
+ border-radius: ${e.fieldBorderStyle==="bottom"?"0":i};
80
+ font-size: ${m};
81
81
  font-family: inherit;
82
- background-color: ${e.theme==="dark"?"#374151":"#ffffff"};
82
+ background-color: ${e.inputBackgroundColor||(e.theme==="dark"?"#374151":"#ffffff")};
83
83
  color: ${e.textColor};
84
84
  transition: border-color 0.15s, box-shadow 0.15s;
85
85
  }
86
86
 
87
87
  .forms-expert-input::placeholder,
88
88
  .forms-expert-textarea::placeholder {
89
- font-size: ${o};
89
+ font-size: ${s};${e.placeholderColor?`
90
+ color: ${e.placeholderColor};`:""}
90
91
  }
91
92
 
92
93
  .forms-expert-input:focus,
@@ -132,9 +133,9 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
132
133
  padding: 0.5rem 0.75rem;
133
134
  border: ${e.fieldBorderStyle==="bottom"?"none":`1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}`};
134
135
  ${e.fieldBorderStyle==="bottom"?`border-bottom: 1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"};`:""}
135
- border-radius: ${e.fieldBorderStyle==="bottom"?"0":s};
136
- font-size: ${c};
137
- background-color: ${e.theme==="dark"?"#374151":"#ffffff"};
136
+ border-radius: ${e.fieldBorderStyle==="bottom"?"0":i};
137
+ font-size: ${m};
138
+ background-color: ${e.inputBackgroundColor||(e.theme==="dark"?"#374151":"#ffffff")};
138
139
  cursor: pointer;
139
140
  }
140
141
 
@@ -146,7 +147,7 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
146
147
 
147
148
  .forms-expert-button-wrapper {
148
149
  display: flex;
149
- justify-content: ${L};
150
+ justify-content: ${h};
150
151
  margin-top: 1rem;
151
152
  gap: 0.5rem;
152
153
  flex-wrap: wrap;
@@ -154,11 +155,11 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
154
155
 
155
156
  .forms-expert-button {
156
157
  ${e.buttonFullWidth?"width: 100%;":e.buttonAlign?"":"width: 100%;"}
157
- padding: ${z} ${S};
158
+ padding: ${C} ${x};
158
159
  font-weight: 500;
159
- font-size: ${v};
160
+ font-size: ${w};
160
161
  font-family: inherit;
161
- border-radius: ${m};
162
+ border-radius: ${l};
162
163
  cursor: pointer;
163
164
  transition: opacity 0.2s, transform 0.1s;
164
165
  max-width: 100%;
@@ -168,7 +169,7 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
168
169
  white-space: nowrap;
169
170
  overflow: hidden;
170
171
  text-overflow: ellipsis;
171
- ${e.buttonStyle==="filled"?`background: ${P}; color: ${p||"white"}; border: none;`:`background: transparent; color: ${r}; border: 2px solid ${r};`}
172
+ ${e.buttonStyle==="filled"?`background: ${F}; color: ${u||"white"}; border: none;`:`background: transparent; color: ${r}; border: 2px solid ${r};`}
172
173
  }
173
174
 
174
175
  .forms-expert-button:hover {
@@ -254,9 +255,9 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
254
255
  justify-content: center;
255
256
  padding: 0.625rem 1.25rem;
256
257
  font-weight: 500;
257
- font-size: ${c};
258
+ font-size: ${m};
258
259
  font-family: inherit;
259
- border-radius: ${m};
260
+ border-radius: ${l};
260
261
  cursor: pointer;
261
262
  transition: opacity 0.2s;
262
263
  text-decoration: none;
@@ -289,7 +290,7 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
289
290
  .forms-expert-scale { display: flex; gap: 0.25rem; flex-wrap: wrap; }
290
291
  .forms-expert-scale-labels { display: flex; justify-content: space-between; font-size: 0.75rem; color: ${e.theme==="dark"?"#9ca3af":"#6b7280"}; margin-top: 0.25rem; }
291
292
  .forms-expert-scale-btn {
292
- min-width: 2.25rem; height: 2.25rem; border-radius: ${l}; cursor: pointer;
293
+ min-width: 2.25rem; height: 2.25rem; border-radius: ${a}; cursor: pointer;
293
294
  border: 1px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"};
294
295
  background: ${e.theme==="dark"?"#374151":"#ffffff"}; color: ${e.textColor};
295
296
  font-size: 0.875rem; transition: all 0.15s;
@@ -313,34 +314,34 @@ var k={theme:"light",primaryColor:"#3b82f6",backgroundColor:"#ffffff",textColor:
313
314
  /* Image choice */
314
315
  .forms-expert-image-choice { display: flex; flex-wrap: wrap; gap: 0.5rem; }
315
316
  .forms-expert-image-choice-item {
316
- border: 2px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}; border-radius: ${l};
317
+ border: 2px solid ${e.theme==="dark"?"#4b5563":"#d1d5db"}; border-radius: ${a};
317
318
  padding: 0.5rem; cursor: pointer; text-align: center; transition: border-color 0.15s;
318
319
  }
319
320
  .forms-expert-image-choice-item.active { border-color: ${e.primaryColor}; }
320
- .forms-expert-image-choice-item img { max-width: 80px; max-height: 80px; object-fit: cover; border-radius: ${l}; }
321
+ .forms-expert-image-choice-item img { max-width: 80px; max-height: 80px; object-fit: cover; border-radius: ${a}; }
321
322
 
322
323
  /* Responsive button scaling */
323
324
  @media (max-width: 480px) {
324
325
  .forms-expert-button,
325
326
  .forms-expert-secondary-btn {
326
- padding-left: max(0.5rem, min(${S}, 3vw));
327
- padding-right: max(0.5rem, min(${S}, 3vw));
328
- font-size: max(0.75rem, min(${v}, 3.5vw));
327
+ padding-left: max(0.5rem, min(${x}, 3vw));
328
+ padding-right: max(0.5rem, min(${x}, 3vw));
329
+ font-size: max(0.75rem, min(${w}, 3.5vw));
329
330
  }
330
331
  }
331
332
 
332
333
  ${e.customCss||""}
333
- `.trim()}function b(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}function D(t){switch(t){case"small":return"18px";case"large":return"30px";case"extra-large":return"36px";default:return"24px"}}function K(t){switch(t){case"small":return"14px";case"large":return"18px";default:return"16px"}}function g(t,e){return e?`${t} ${e}`:t}function j(t,e,l,s){let m=document.createElement("div");if(t.type==="heading"){m.className="forms-expert-group";let n=document.createElement("h3");if(n.className="forms-expert-heading",n.style.fontSize=D(s?.headingSize),n.textContent=t.label||"",m.appendChild(n),t.content){let d=document.createElement("p");d.className="forms-expert-heading-subtitle",d.textContent=t.content,m.appendChild(d)}return m}if(t.type==="divider"){let n=document.createElement("hr");return n.className="forms-expert-divider",n}if(t.type==="paragraph"){m.className="forms-expert-group";let n=t.paragraphFontSize?`${t.paragraphFontSize}px`:K(s?.paragraphSize);if(t.label){let d=document.createElement("p");d.className="forms-expert-paragraph-label",d.style.fontSize=n,d.textContent=t.label,m.appendChild(d)}if(t.content){let d=document.createElement("div");d.className="forms-expert-paragraph",d.style.fontSize=n,d.innerHTML=t.content,m.appendChild(d)}return m}if(t.type==="hidden"){let n=document.createElement("input");return n.type="hidden",n.name=t.name,n.value=String(t.defaultValue??e??""),m.appendChild(n),m.style.display="none",m}if(t.type==="checkbox"||t.type==="toggle"||t.type==="consent"){m.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 d=document.createElement("label");d.htmlFor=n.id;let i=t.type==="consent"?t.consentText||t.label||t.name:t.label||t.name;if(d.innerHTML=`${b(i)}${t.required?'<span class="forms-expert-required">*</span>':""}`,m.appendChild(n),m.appendChild(d),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",m.appendChild(a)}if(l){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=l,m.appendChild(a)}return m}if(m.className="forms-expert-group",t.label){let n=document.createElement("label");n.className=`forms-expert-label${s?.labelClassName?" "+s.labelClassName:""}`,n.htmlFor=`mira-field-${t.name}`,n.innerHTML=`${b(t.label)}${t.required?'<span class="forms-expert-required">*</span>':""}`,m.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=g("forms-expert-textarea",s?.fieldClassName),o.value=String(e||""),t.maxLength&&(o.maxLength=t.maxLength);break;case"select":case"dropdown":{o=document.createElement("select"),o.className=g("forms-expert-select",s?.fieldClassName);let n=document.createElement("option");n.value="",n.textContent=t.placeholder||"Select an option...",o.appendChild(n),(t.options||[]).forEach(i=>{let a=document.createElement("option");a.value=i,a.textContent=i,e===i&&(a.selected=!0),o.appendChild(a)});break}case"radio":{let n=document.createElement("div");if(n.className="forms-expert-radio-group",(t.options||[]).forEach(i=>{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=i,r.checked=e===i,a.appendChild(r),a.appendChild(document.createTextNode(` ${i}`)),n.appendChild(a)}),c.appendChild(n),l){let i=document.createElement("div");i.className="forms-expert-error-message",i.textContent=l,c.appendChild(i)}return m.appendChild(c),m}case"multiselect":{let n=document.createElement("div");n.className="forms-expert-multiselect-group";let d=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=d.includes(a),r.appendChild(p),r.appendChild(document.createTextNode(` ${a}`)),n.appendChild(r)}),c.appendChild(n),l){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=l,c.appendChild(a)}return m.appendChild(c),m}case"rating":{let n=document.createElement("div");n.className="forms-expert-rating";let d=t.ratingMax||5,i=e||0;for(let a=1;a<=d;a++){let r=document.createElement("button");r.type="button",r.className=`forms-expert-rating-star ${a<=i?"active":""}`,r.textContent="\u2605",r.dataset.value=String(a),n.appendChild(r)}if(c.appendChild(n),l){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=l,c.appendChild(a)}return m.appendChild(c),m}case"scale":case"opinionScale":{let n=document.createElement("div");n.className="forms-expert-scale";let d=t.min??(t.type==="opinionScale"?0:1),i=t.max??(t.type==="opinionScale"?10:5),a=e;for(let r=d;r<=i;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>${b(t.lowLabel||"")}</span><span>${b(t.highLabel||"")}</span>`,c.appendChild(r)}if(l){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=l,c.appendChild(r)}return m.appendChild(c),m}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=g("forms-expert-input",s?.fieldClassName),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=g("forms-expert-input",s?.fieldClassName),o.value=String(e||"");break;case"url":o=document.createElement("input"),o.type="url",o.className=g("forms-expert-input",s?.fieldClassName),o.value=String(e||"");break;case"password":o=document.createElement("input"),o.type="password",o.className=g("forms-expert-input",s?.fieldClassName),o.value=String(e||"");break;case"time":o=document.createElement("input"),o.type="time",o.className=g("forms-expert-input",s?.fieldClassName),o.value=String(e||"");break;case"datetime":o=document.createElement("input"),o.type="datetime-local",o.className=g("forms-expert-input",s?.fieldClassName),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 d=e||{},i=document.createElement("input");i.type="date",i.className=g("forms-expert-input",s?.fieldClassName),i.name=`${t.name}.start`,i.value=d.start||"";let a=document.createElement("input");if(a.type="date",a.className=g("forms-expert-input",s?.fieldClassName),a.name=`${t.name}.end`,a.value=d.end||"",n.appendChild(i),n.appendChild(a),c.appendChild(n),l){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=l,c.appendChild(r)}return m.appendChild(c),m}case"address":{let n=document.createElement("div");n.className="forms-expert-address";let d=t.addressFields||["street","city","state","zip","country"],i=e||{},a={street:"Street",street2:"Street Line 2",city:"City",state:"State",zip:"ZIP",country:"Country"};if(d.forEach(r=>{let p=document.createElement("input");p.type="text",p.className=g("forms-expert-input",s?.fieldClassName),p.name=`${t.name}.${r}`,p.placeholder=a[r]||r,p.value=i[r]||"",n.appendChild(p)}),c.appendChild(n),l){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=l,c.appendChild(r)}return m.appendChild(c),m}case"name":{let n=document.createElement("div");n.className="forms-expert-name";let d=t.nameFields||["first","last"],i=e||{},a={prefix:"Prefix",first:"First Name",middle:"Middle",last:"Last Name",suffix:"Suffix"};if(d.forEach(r=>{let p=document.createElement("input");p.type="text",p.className=g("forms-expert-input",s?.fieldClassName),p.name=`${t.name}.${r}`,p.placeholder=a[r]||r,p.value=i[r]||"",n.appendChild(p)}),c.appendChild(n),l){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=l,c.appendChild(r)}return m.appendChild(c),m}case"imageChoice":{let n=document.createElement("div");n.className="forms-expert-image-choice";let d=t.options||[],i=e;if(d.forEach(a=>{let r=document.createElement("button");if(r.type="button",r.className=`forms-expert-image-choice-item ${i===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),l){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=l,c.appendChild(a)}return m.appendChild(c),m}case"ranking":{let n=document.createElement("div");n.className="forms-expert-ranking";let d=t.options||[];if((e||[...d]).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),l){let a=document.createElement("div");a.className="forms-expert-error-message",a.textContent=l,c.appendChild(a)}return m.appendChild(c),m}case"location":{let n=document.createElement("div");n.className="forms-expert-location";let d=e||{},i=document.createElement("input");i.type="text",i.className=g("forms-expert-input",s?.fieldClassName),i.name=`${t.name}.address`,i.placeholder="Address",i.value=d.address||"",n.appendChild(i);let a=document.createElement("div");a.className="forms-expert-location-coords";let r=document.createElement("input");r.type="number",r.className=g("forms-expert-input",s?.fieldClassName),r.name=`${t.name}.lat`,r.placeholder="Latitude",r.step="any",r.value=d.lat!==void 0?String(d.lat):"";let p=document.createElement("input");if(p.type="number",p.className=g("forms-expert-input",s?.fieldClassName),p.name=`${t.name}.lng`,p.placeholder="Longitude",p.step="any",p.value=d.lng!==void 0?String(d.lng):"",a.appendChild(r),a.appendChild(p),n.appendChild(a),c.appendChild(n),l){let u=document.createElement("div");u.className="forms-expert-error-message",u.textContent=l,c.appendChild(u)}return m.appendChild(c),m}default:o=document.createElement("input"),o.type=t.type==="email"?"email":t.type==="number"?"number":t.type==="date"?"date":"text",o.className=g("forms-expert-input",s?.fieldClassName),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),l&&o.classList.add("forms-expert-error"),c.appendChild(o),l){let n=document.createElement("div");n.className="forms-expert-error-message",n.textContent=l,c.appendChild(n)}return m.appendChild(c),m}function $(t,e={},l={},s={}){let m=document.createElement("form");if(m.className="forms-expert",s.hideRequiredAsterisk){let r=document.createElement("style");r.textContent=".forms-expert .forms-expert-required { display: none; }",m.appendChild(r)}if(s.showFormName!==!1&&s.formName){let r=document.createElement("h1");r.className="forms-expert-title",r.textContent=s.formName,r.style.fontSize=s.formNameFontSize!=null?`${s.formNameFontSize}px`:"1.5rem";let p={normal:"400",medium:"500",semibold:"600",bold:"700"};r.style.fontWeight=p[s.formNameFontWeight||"bold"]||"700",r.style.marginBottom="0.5rem",m.appendChild(r)}let c=t.styling;if(t.fields.forEach(r=>{let p=j(r,e[r.name],l[r.name],c);m.appendChild(p)}),s.honeypot){let r=document.createElement("input");r.type="text",r.name="_hp",r.className="forms-expert-honeypot",r.tabIndex=-1,r.autocomplete="off",m.appendChild(r)}let o=document.createElement("input");o.type="hidden",o.name="pageUrl",o.value=typeof window<"u"?window.location.href:"",m.appendChild(o);let n=document.createElement("div");n.className="forms-expert-button-wrapper";let d=document.createElement("button");d.type="submit",d.className=g("forms-expert-button",s.buttonClassName),d.disabled=s.isLoading||!1,s.isLoading?d.innerHTML=`
334
+ `.trim()}function E(t){let e=document.createElement("div");return e.textContent=t,e.innerHTML}function j(t){switch(t){case"small":return"18px";case"large":return"30px";case"extra-large":return"36px";default:return"24px"}}function _(t){switch(t){case"small":return"14px";case"large":return"18px";default:return"16px"}}function b(t,e){return e?`${t} ${e}`:t}function G(t){switch(t){case"1/4":return"25%";case"1/3":return"33.333%";case"1/2":return"50%";case"2/3":return"66.666%";case"3/4":return"75%";case"full":return"100%";default:return}}function $(t,e,a,i){let l=document.createElement("div");if(t.type==="heading"){l.className="forms-expert-group";let n=document.createElement("h3");if(n.className="forms-expert-heading",n.style.fontSize=j(i?.headingSize),n.textContent=t.label||"",l.appendChild(n),t.content){let d=document.createElement("p");d.className="forms-expert-heading-subtitle",d.textContent=t.content,l.appendChild(d)}return l}if(t.type==="divider"){let n=document.createElement("hr");return n.className="forms-expert-divider",n}if(t.type==="paragraph"){l.className="forms-expert-group";let n=t.paragraphFontSize?`${t.paragraphFontSize}px`:_(i?.paragraphSize);if(t.label){let d=document.createElement("p");d.className="forms-expert-paragraph-label",d.style.fontSize=n,d.textContent=t.label,l.appendChild(d)}if(t.content){let d=document.createElement("div");d.className="forms-expert-paragraph",d.style.fontSize=n,d.innerHTML=t.content,l.appendChild(d)}return l}if(t.type==="hidden"){let n=document.createElement("input");return n.type="hidden",n.name=t.name,n.value=String(t.defaultValue??e??""),l.appendChild(n),l.style.display="none",l}if(t.type==="checkbox"||t.type==="toggle"||t.type==="consent"){l.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 d=document.createElement("label");d.htmlFor=n.id;let p=t.type==="consent"?t.consentText||t.label||t.name:t.label||t.name;if(d.innerHTML=`${E(p)}${t.required?'<span class="forms-expert-required">*</span>':""}`,l.appendChild(n),l.appendChild(d),t.type==="consent"&&t.consentUrl){let o=document.createElement("a");o.href=t.consentUrl,o.target="_blank",o.rel="noopener noreferrer",o.textContent="View policy",o.className="forms-expert-consent-link",l.appendChild(o)}if(a){let o=document.createElement("div");o.className="forms-expert-error-message",o.textContent=a,l.appendChild(o)}return l}if(l.className="forms-expert-group",t.label){let n=document.createElement("label");n.className=`forms-expert-label${i?.labelClassName?" "+i.labelClassName:""}`,n.htmlFor=`mira-field-${t.name}`,n.innerHTML=`${E(t.label)}${t.required?'<span class="forms-expert-required">*</span>':""}`,l.appendChild(n)}let m=document.createElement("div");m.className="forms-expert-input-wrapper";let s;switch(t.type){case"textarea":case"richText":s=document.createElement("textarea"),s.className=b("forms-expert-textarea",i?.fieldClassName),s.value=String(e||""),t.maxLength&&(s.maxLength=t.maxLength);break;case"select":case"dropdown":{s=document.createElement("select"),s.className=b("forms-expert-select",i?.fieldClassName);let n=document.createElement("option");n.value="",n.textContent=t.placeholder||"Select an option...",s.appendChild(n),(t.options||[]).forEach(p=>{let o=document.createElement("option");o.value=p,o.textContent=p,e===p&&(o.selected=!0),s.appendChild(o)});break}case"radio":{let n=document.createElement("div");if(n.className="forms-expert-radio-group",(t.options||[]).forEach(p=>{let o=document.createElement("label");o.className="forms-expert-radio-item";let r=document.createElement("input");r.type="radio",r.name=t.name,r.value=p,r.checked=e===p,o.appendChild(r),o.appendChild(document.createTextNode(` ${p}`)),n.appendChild(o)}),m.appendChild(n),a){let p=document.createElement("div");p.className="forms-expert-error-message",p.textContent=a,m.appendChild(p)}return l.appendChild(m),l}case"multiselect":{let n=document.createElement("div");n.className="forms-expert-multiselect-group";let d=e||[];if((t.options||[]).forEach(o=>{let r=document.createElement("label");r.className="forms-expert-checkbox-item";let u=document.createElement("input");u.type="checkbox",u.name=t.name,u.value=o,u.checked=d.includes(o),r.appendChild(u),r.appendChild(document.createTextNode(` ${o}`)),n.appendChild(r)}),m.appendChild(n),a){let o=document.createElement("div");o.className="forms-expert-error-message",o.textContent=a,m.appendChild(o)}return l.appendChild(m),l}case"rating":{let n=document.createElement("div");n.className="forms-expert-rating";let d=t.ratingMax||5,p=e||0;for(let o=1;o<=d;o++){let r=document.createElement("button");r.type="button",r.className=`forms-expert-rating-star ${o<=p?"active":""}`,r.textContent="\u2605",r.dataset.value=String(o),n.appendChild(r)}if(m.appendChild(n),a){let o=document.createElement("div");o.className="forms-expert-error-message",o.textContent=a,m.appendChild(o)}return l.appendChild(m),l}case"scale":case"opinionScale":{let n=document.createElement("div");n.className="forms-expert-scale";let d=t.min??(t.type==="opinionScale"?0:1),p=t.max??(t.type==="opinionScale"?10:5),o=e;for(let r=d;r<=p;r++){let u=document.createElement("button");u.type="button",u.className=`forms-expert-scale-btn ${o===r?"active":""}`,u.textContent=String(r),u.dataset.value=String(r),n.appendChild(u)}if(m.appendChild(n),t.lowLabel||t.highLabel){let r=document.createElement("div");r.className="forms-expert-scale-labels",r.innerHTML=`<span>${E(t.lowLabel||"")}</span><span>${E(t.highLabel||"")}</span>`,m.appendChild(r)}if(a){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=a,m.appendChild(r)}return l.appendChild(m),l}case"slider":{s=document.createElement("input"),s.type="range",s.className="forms-expert-slider",s.min=String(t.min??0),s.max=String(t.max??100),s.step=String(t.step??1),s.value=String(e??t.min??0);break}case"file":s=document.createElement("input"),s.type="file",s.className="forms-expert-file",t.allowedMimeTypes?.length&&(s.accept=t.allowedMimeTypes.join(",")),t.multiple&&(s.multiple=!0);break;case"currency":{s=document.createElement("input"),s.type="number",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e??""),t.min!==void 0&&(s.min=String(t.min)),t.max!==void 0&&(s.max=String(t.max)),s.step=String(t.step||.01);break}case"phone":s=document.createElement("input"),s.type="tel",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||"");break;case"url":s=document.createElement("input"),s.type="url",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||"");break;case"password":s=document.createElement("input"),s.type="password",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||"");break;case"time":s=document.createElement("input"),s.type="time",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||"");break;case"datetime":s=document.createElement("input"),s.type="datetime-local",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||"");break;case"colorPicker":s=document.createElement("input"),s.type="color",s.className="forms-expert-color",s.value=String(e||"#000000");break;case"dateRange":{let n=document.createElement("div");n.className="forms-expert-date-range";let d=e||{},p=document.createElement("input");p.type="date",p.className=b("forms-expert-input",i?.fieldClassName),p.name=`${t.name}.start`,p.value=d.start||"";let o=document.createElement("input");if(o.type="date",o.className=b("forms-expert-input",i?.fieldClassName),o.name=`${t.name}.end`,o.value=d.end||"",n.appendChild(p),n.appendChild(o),m.appendChild(n),a){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=a,m.appendChild(r)}return l.appendChild(m),l}case"address":{let n=document.createElement("div");n.className="forms-expert-address";let d=t.addressFields||["street","city","state","zip","country"],p=e||{},o={street:"Street",street2:"Street Line 2",city:"City",state:"State",zip:"ZIP",country:"Country"};if(d.forEach(r=>{let u=document.createElement("input");u.type="text",u.className=b("forms-expert-input",i?.fieldClassName),u.name=`${t.name}.${r}`,u.placeholder=o[r]||r,u.value=p[r]||"",n.appendChild(u)}),m.appendChild(n),a){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=a,m.appendChild(r)}return l.appendChild(m),l}case"name":{let n=document.createElement("div");n.className="forms-expert-name";let d=t.nameFields||["first","last"],p=e||{},o={prefix:"Prefix",first:"First Name",middle:"Middle",last:"Last Name",suffix:"Suffix"};if(d.forEach(r=>{let u=document.createElement("input");u.type="text",u.className=b("forms-expert-input",i?.fieldClassName),u.name=`${t.name}.${r}`,u.placeholder=o[r]||r,u.value=p[r]||"",n.appendChild(u)}),m.appendChild(n),a){let r=document.createElement("div");r.className="forms-expert-error-message",r.textContent=a,m.appendChild(r)}return l.appendChild(m),l}case"imageChoice":{let n=document.createElement("div");n.className="forms-expert-image-choice";let d=t.options||[],p=e;if(d.forEach(o=>{let r=document.createElement("button");if(r.type="button",r.className=`forms-expert-image-choice-item ${p===o.value?"active":""}`,r.dataset.value=o.value,o.imageUrl){let c=document.createElement("img");c.src=o.imageUrl,c.alt=o.label,r.appendChild(c)}let u=document.createElement("span");u.textContent=o.label,r.appendChild(u),n.appendChild(r)}),m.appendChild(n),a){let o=document.createElement("div");o.className="forms-expert-error-message",o.textContent=a,m.appendChild(o)}return l.appendChild(m),l}case"ranking":{let n=document.createElement("div");n.className="forms-expert-ranking";let d=t.options||[];if((e||[...d]).forEach((o,r)=>{let u=document.createElement("div");u.className="forms-expert-ranking-item",u.textContent=`${r+1}. ${o}`,u.dataset.value=o,n.appendChild(u)}),m.appendChild(n),a){let o=document.createElement("div");o.className="forms-expert-error-message",o.textContent=a,m.appendChild(o)}return l.appendChild(m),l}case"location":{let n=document.createElement("div");n.className="forms-expert-location";let d=e||{},p=document.createElement("input");p.type="text",p.className=b("forms-expert-input",i?.fieldClassName),p.name=`${t.name}.address`,p.placeholder="Address",p.value=d.address||"",n.appendChild(p);let o=document.createElement("div");o.className="forms-expert-location-coords";let r=document.createElement("input");r.type="number",r.className=b("forms-expert-input",i?.fieldClassName),r.name=`${t.name}.lat`,r.placeholder="Latitude",r.step="any",r.value=d.lat!==void 0?String(d.lat):"";let u=document.createElement("input");if(u.type="number",u.className=b("forms-expert-input",i?.fieldClassName),u.name=`${t.name}.lng`,u.placeholder="Longitude",u.step="any",u.value=d.lng!==void 0?String(d.lng):"",o.appendChild(r),o.appendChild(u),n.appendChild(o),m.appendChild(n),a){let c=document.createElement("div");c.className="forms-expert-error-message",c.textContent=a,m.appendChild(c)}return l.appendChild(m),l}default:s=document.createElement("input"),s.type=t.type==="email"?"email":t.type==="number"?"number":t.type==="date"?"date":"text",s.className=b("forms-expert-input",i?.fieldClassName),s.value=String(e||""),t.type==="number"&&(t.min!==void 0&&(s.min=String(t.min)),t.max!==void 0&&(s.max=String(t.max)),t.step!==void 0&&(s.step=String(t.step)));break}if(s.id=`mira-field-${t.name}`,s.name=t.name,t.placeholder&&"placeholder"in s&&(s.placeholder=t.placeholder),t.required&&(s.required=!0),a&&s.classList.add("forms-expert-error"),m.appendChild(s),a){let n=document.createElement("div");n.className="forms-expert-error-message",n.textContent=a,m.appendChild(n)}return l.appendChild(m),l}function P(t,e={},a={},i={}){let l=document.createElement("form");if(l.className="forms-expert",i.hideRequiredAsterisk){let c=document.createElement("style");c.textContent=".forms-expert .forms-expert-required { display: none; }",l.appendChild(c)}if(i.showFormName!==!1&&i.formName){let c=document.createElement("h1");c.className="forms-expert-title",c.textContent=i.formName,c.style.fontSize=i.formNameFontSize!=null?`${i.formNameFontSize}px`:"1.5rem";let h={normal:"400",medium:"500",semibold:"600",bold:"700"};c.style.fontWeight=h[i.formNameFontWeight||"bold"]||"700",c.style.marginBottom="0.5rem",l.appendChild(c)}let m=t.styling,s=t.fields,n=0;for(;n<s.length;){let c=s[n];if(c.row!=null){let h=[c],g=n+1;for(;g<s.length&&s[g].row===c.row;)h.push(s[g]),g++;if(h.length>1){let f=document.createElement("div");f.style.display="flex",f.style.gap="0.75rem",f.style.flexWrap="wrap",h.forEach(x=>{let C=document.createElement("div"),w=G(x.width);w?C.style.flex=`0 0 calc(${w} - 0.75rem)`:C.style.flex="1 1 0",C.style.minWidth="120px";let F=$(x,e[x.name],a[x.name],m);C.appendChild(F),f.appendChild(C)}),l.appendChild(f)}else{let f=$(c,e[c.name],a[c.name],m);l.appendChild(f)}n=g}else{let h=$(c,e[c.name],a[c.name],m);l.appendChild(h),n++}}if(i.honeypot){let c=document.createElement("input");c.type="text",c.name="_hp",c.className="forms-expert-honeypot",c.tabIndex=-1,c.autocomplete="off",l.appendChild(c)}let d=document.createElement("input");d.type="hidden",d.name="pageUrl",d.value=typeof window<"u"?window.location.href:"",l.appendChild(d);let p=document.createElement("div");p.className="forms-expert-button-wrapper";let o=document.createElement("button");if(o.type="submit",o.className=b("forms-expert-button",i.buttonClassName),o.disabled=i.isLoading||!1,i.isLoading)o.innerHTML=`
334
335
  <span class="forms-expert-button-loading">
335
336
  <span class="forms-expert-spinner"></span>
336
337
  Submitting...
337
338
  </span>
338
- `:d.textContent=s.submitText||"Submit";let i=s.secondaryButton,a=()=>{if(!i?.enabled)return null;let r=document.createElement("a");r.className="forms-expert-secondary-btn",r.href=i.href||"#",r.textContent=i.text||"Learn More",i.openInNewTab&&(r.target="_blank",r.rel="noopener noreferrer");let p=c?.primaryColor||"#3b82f6",u=i.color||p;return i.style==="filled"?(r.style.background=u,r.style.color=i.textColor||"#ffffff",r.style.border="none"):i.style==="outlined"?(r.style.background="transparent",r.style.color=i.textColor||u,r.style.border=`2px solid ${u}`):i.style==="link"?(r.style.background="transparent",r.style.color=i.textColor||u,r.style.border="none",r.style.textDecoration="underline"):(r.style.background="transparent",r.style.color=i.textColor||u,r.style.border="none"),i.marginTop!=null&&(r.style.marginTop=`${i.marginTop}px`),i.marginBottom!=null&&(r.style.marginBottom=`${i.marginBottom}px`),i.fontSize!=null&&(r.style.fontSize=`${i.fontSize}px`),r};if(i?.enabled&&i.position==="left"){let r=a();r&&n.appendChild(r)}if(n.appendChild(d),i?.enabled&&i.position!=="left"&&i.position!=="below"){let r=a();r&&(r.style.marginLeft="auto",n.appendChild(r))}if(m.appendChild(n),i?.enabled&&i.position==="below"){let r=document.createElement("div");r.className="forms-expert-secondary-below";let p=i.align||s.buttonAlign||"left";r.style.justifyContent=p==="center"?"center":p==="right"?"flex-end":"flex-start",i.marginTop!=null&&(r.style.marginTop=`${i.marginTop}px`),i.marginBottom!=null&&(r.style.marginBottom=`${i.marginBottom}px`);let u=a();u&&(u.style.marginTop="0",u.style.marginBottom="0",r.appendChild(u)),m.appendChild(r)}if(s.showBranding!==!1){let r=s.brandingText||"Powered by Forms Expert",p=s.brandingUrl||"https://mira.io",u=document.createElement("div");u.className="forms-expert-branding",u.innerHTML=`<a href="${p}" target="_blank" rel="noopener">${r}</a>`,m.appendChild(u)}return m}function N(t){let e=document.createElement("div");return e.className="forms-expert-success",e.innerHTML=`
339
+ `;else{let c=m?.buttonIcon,h=m?.buttonIconPosition||"left";if(c){o.style.display="inline-flex",o.style.alignItems="center",o.style.gap="0.5rem";let g=document.createElement("span");g.style.display="inline-flex",g.style.flexShrink="0",g.innerHTML=c;let f=document.createElement("span");f.textContent=i.submitText||"Submit",h==="right"?(o.appendChild(f),o.appendChild(g)):(o.appendChild(g),o.appendChild(f))}else o.textContent=i.submitText||"Submit"}let r=i.secondaryButton,u=()=>{if(!r?.enabled)return null;let c=document.createElement("a");if(c.className="forms-expert-secondary-btn",c.href=r.href||"#",c.style.display="inline-flex",c.style.alignItems="center",c.style.gap="0.5rem",r.icon){let f=document.createElement("span");f.style.display="inline-flex",f.style.flexShrink="0",f.innerHTML=r.icon;let x=document.createElement("span");x.textContent=r.text||"Learn More",r.iconPosition==="right"?(c.appendChild(x),c.appendChild(f)):(c.appendChild(f),c.appendChild(x))}else c.textContent=r.text||"Learn More";r.openInNewTab&&(c.target="_blank",c.rel="noopener noreferrer");let h=m?.primaryColor||"#3b82f6",g=r.color||h;return r.style==="filled"?(c.style.background=g,c.style.color=r.textColor||"#ffffff",c.style.border="none"):r.style==="outlined"?(c.style.background="transparent",c.style.color=r.textColor||g,c.style.border=`2px solid ${g}`):r.style==="link"?(c.style.background="transparent",c.style.color=r.textColor||g,c.style.border="none",c.style.textDecoration="underline"):(c.style.background="transparent",c.style.color=r.textColor||g,c.style.border="none"),r.marginTop!=null&&(c.style.marginTop=`${r.marginTop}px`),r.marginBottom!=null&&(c.style.marginBottom=`${r.marginBottom}px`),r.fontSize!=null&&(c.style.fontSize=`${r.fontSize}px`),c};if(r?.enabled&&r.position==="left"){let c=u();c&&p.appendChild(c)}if(p.appendChild(o),r?.enabled&&r.position!=="left"&&r.position!=="below"){let c=u();c&&(c.style.marginLeft="auto",p.appendChild(c))}if(l.appendChild(p),r?.enabled&&r.position==="below"){let c=document.createElement("div");c.className="forms-expert-secondary-below";let h=r.align||i.buttonAlign||"left";c.style.justifyContent=h==="center"?"center":h==="right"?"flex-end":"flex-start",r.marginTop!=null&&(c.style.marginTop=`${r.marginTop}px`),r.marginBottom!=null&&(c.style.marginBottom=`${r.marginBottom}px`);let g=u();g&&(g.style.marginTop="0",g.style.marginBottom="0",c.appendChild(g)),l.appendChild(c)}if(i.showBranding!==!1){let c=i.brandingText||"Powered by Forms Expert",h=i.brandingUrl||"https://mira.io",g=document.createElement("div");g.className="forms-expert-branding",g.innerHTML=`<a href="${h}" target="_blank" rel="noopener">${c}</a>`,l.appendChild(g)}return l}function z(t){let e=document.createElement("div");return e.className="forms-expert-success",e.innerHTML=`
339
340
  <svg class="forms-expert-success-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
340
341
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
341
342
  </svg>
342
- <div class="forms-expert-success-message">${b(t)}</div>
343
- `,e}function R(t){return t.reduce((e,l)=>({...e,[l.field]:l.message}),{})}var f=class extends Error{constructor(l,s,m,c){super(l);this.code=s;this.statusCode=m;this.retryAfter=c;this.name="FormsError"}},h=class extends Error{constructor(l){super("Validation failed");this.errors=l;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 l=e.includes("?")?"&":"?";return`${this.baseUrl}${e}${l}token=${encodeURIComponent(this.apiKey)}`}async request(e,l,s){let m=this.buildUrl(l),c=await fetch(m,{method:e,headers:{"Content-Type":"application/json"},body:s?JSON.stringify(s):void 0}),o=await c.json();if(!c.ok)throw new f(o.message||"Request failed",o.code||"UNKNOWN_ERROR",c.status,o.retryAfter);return o}async isActive(e,l){let s=l?`?lang=${encodeURIComponent(l)}`:"";return this.request("GET",`/f/${this.resourceId}/${e}/is-active${s}`)}async validate(e,l){return this.request("POST",`/f/${this.resourceId}/${e}/validate`,{data:l})}async submit(e,l,s){let m=this.buildUrl(`/f/${this.resourceId}/${e}`);return Object.values(l).some(o=>o instanceof File||o instanceof FileList&&o.length>0)||s?.onProgress?this.submitWithFormData(m,l,s):this.request("POST",`/f/${this.resourceId}/${e}`,{data:l,pageUrl:s?.pageUrl||(typeof window<"u"?window.location.href:void 0),captchaToken:s?.captchaToken})}submitWithFormData(e,l,s){return new Promise((m,c)=>{let o=new FormData;for(let[i,a]of Object.entries(l))a instanceof File?o.append(i,a):a instanceof FileList?Array.from(a).forEach(r=>o.append(i,r)):a!=null&&o.append(`data[${i}]`,String(a));let n=s?.pageUrl||(typeof window<"u"?window.location.href:"");n&&o.append("pageUrl",n),s?.captchaToken&&o.append("captchaToken",s.captchaToken);let d=new XMLHttpRequest;s?.onProgress&&d.upload.addEventListener("progress",i=>{i.lengthComputable&&s.onProgress({loaded:i.loaded,total:i.total,percentage:Math.round(i.loaded/i.total*100)})}),d.addEventListener("load",()=>{try{let i=JSON.parse(d.responseText);d.status>=200&&d.status<300?m(i):c(new f(i.message||"Submission failed",i.code||"UNKNOWN_ERROR",d.status,i.retryAfter))}catch{c(new f("Invalid response","PARSE_ERROR",d.status))}}),d.addEventListener("error",()=>{c(new f("Network error","NETWORK_ERROR",0))}),d.addEventListener("abort",()=>{c(new f("Request aborted","ABORTED",0))}),d.open("POST",e),d.send(o)})}async trackView(e){let l=this.buildUrl(`/f/${this.resourceId}/${e}/view`);await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}"}).catch(()=>{})}getResourceId(){return this.resourceId}getBaseUrl(){return this.baseUrl}};var w=class{constructor(e,l,s={}){this.config=null;this.apiClient=e,this.slug=l,this.options=s}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,l){this.options.onSubmitStart?.();try{if(this.config?.mode==="schema"){let m=await this.validate(e);if(!m.valid)throw this.options.onValidationError?.(m.errors),new h(m.errors)}let s=await this.apiClient.submit(this.slug,e,l);return this.options.onSubmitSuccess?.(s),s}catch(s){throw s instanceof f&&this.options.onSubmitError?.(s),s}}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,l){return this.apiClient.isActive(e,l)}async validate(e,l){return this.apiClient.validate(e,l)}async submit(e,l,s){return this.apiClient.submit(e,l,s)}form(e,l){return new w(this.apiClient,e,l)}async trackView(e){return this.apiClient.trackView(e)}async submitWithRetry(e,l,s){let m=s?.maxRetries??3,c=null;for(let o=0;o<m;o++)try{return await this.submit(e,l,s)}catch(n){if(c=n,n instanceof f){if(["VALIDATION_ERROR","CAPTCHA_REQUIRED","ORIGIN_NOT_ALLOWED"].includes(n.code))throw n;if(n.code.includes("RATE_LIMIT")){let d=n.retryAfter||Math.pow(2,o)*1e3;await new Promise(i=>setTimeout(i,d));continue}}await new Promise(d=>setTimeout(d,Math.pow(2,o)*1e3))}throw c}};var E=class{constructor(e,l){this.config=null;this.values={};this.errors={};this.isLoading=!1;this.isSubmitted=!1;this.styleEl=null;this.sdk=new y(e),this.options=l;let s=l.target;if(typeof s=="string"){let m=document.querySelector(s);if(!m)throw new Error(`Element not found: ${s}`);this.container=m}else this.container=s}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=F(e),document.head.appendChild(this.styleEl),this.injectGoogleFont(e?.fontFamily)}injectGoogleFont(e){if(!e)return;let l=["Inter","Roboto","Open Sans","Lato","Poppins","Montserrat","Nunito","Source Sans Pro","Raleway","Ubuntu","Playfair Display","Merriweather"],s=e.split(",")[0]?.trim();if(!s||!l.includes(s))return;let m=`forms-expert-font-${this.options.slug}`;if(document.getElementById(m))return;let c=document.createElement("link");c.id=m,c.rel="stylesheet",c.href=`https://fonts.googleapis.com/css2?family=${s.replace(/ /g,"+")}:wght@400;500;600;700&display=swap`,document.head.appendChild(c)}render(){if(!this.config?.schema)return;if(this.isSubmitted){this.container.innerHTML="";let m=this.config.settings?.successMessage||"Form submitted successfully!";this.container.appendChild(N(m));return}let e={...this.config.schema.styling,...this.config.styling},l={...this.config.schema,styling:e},s=$(l,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,buttonClassName:e.buttonClassName,formNameFontSize:e.formNameFontSize,formNameFontWeight:e.formNameFontWeight});s.addEventListener("input",m=>{let c=m.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()))}),s.addEventListener("submit",m=>{m.preventDefault(),this.handleSubmit()}),this.container.innerHTML="",this.container.appendChild(s)}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 l=this.options.redirectUrl||this.config.settings?.redirectUrl;l&&setTimeout(()=>{window.location.href=l},1500),this.options.resetOnSuccess&&setTimeout(()=>{this.reset()},3e3)}catch(e){this.isLoading=!1,e instanceof h?(this.errors=R(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=`
343
+ <div class="forms-expert-success-message">${E(t)}</div>
344
+ `,e}function I(t){return t.reduce((e,a)=>({...e,[a.field]:a.message}),{})}var y=class extends Error{constructor(a,i,l,m){super(a);this.code=i;this.statusCode=l;this.retryAfter=m;this.name="FormsError"}},S=class extends Error{constructor(a){super("Validation failed");this.errors=a;this.name="FormValidationError"}};var v=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 a=e.includes("?")?"&":"?";return`${this.baseUrl}${e}${a}token=${encodeURIComponent(this.apiKey)}`}async request(e,a,i){let l=this.buildUrl(a),m=await fetch(l,{method:e,headers:{"Content-Type":"application/json"},body:i?JSON.stringify(i):void 0}),s=await m.json();if(!m.ok)throw new y(s.message||"Request failed",s.code||"UNKNOWN_ERROR",m.status,s.retryAfter);return s}async isActive(e,a){let i=a?`?lang=${encodeURIComponent(a)}`:"";return this.request("GET",`/f/${this.resourceId}/${e}/is-active${i}`)}async validate(e,a){return this.request("POST",`/f/${this.resourceId}/${e}/validate`,{data:a})}async submit(e,a,i){let l=this.buildUrl(`/f/${this.resourceId}/${e}`);return Object.values(a).some(s=>s instanceof File||s instanceof FileList&&s.length>0)||i?.onProgress?this.submitWithFormData(l,a,i):this.request("POST",`/f/${this.resourceId}/${e}`,{data:a,pageUrl:i?.pageUrl||(typeof window<"u"?window.location.href:void 0),captchaToken:i?.captchaToken})}submitWithFormData(e,a,i){return new Promise((l,m)=>{let s=new FormData;for(let[p,o]of Object.entries(a))o instanceof File?s.append(p,o):o instanceof FileList?Array.from(o).forEach(r=>s.append(p,r)):o!=null&&s.append(`data[${p}]`,String(o));let n=i?.pageUrl||(typeof window<"u"?window.location.href:"");n&&s.append("pageUrl",n),i?.captchaToken&&s.append("captchaToken",i.captchaToken);let d=new XMLHttpRequest;i?.onProgress&&d.upload.addEventListener("progress",p=>{p.lengthComputable&&i.onProgress({loaded:p.loaded,total:p.total,percentage:Math.round(p.loaded/p.total*100)})}),d.addEventListener("load",()=>{try{let p=JSON.parse(d.responseText);d.status>=200&&d.status<300?l(p):m(new y(p.message||"Submission failed",p.code||"UNKNOWN_ERROR",d.status,p.retryAfter))}catch{m(new y("Invalid response","PARSE_ERROR",d.status))}}),d.addEventListener("error",()=>{m(new y("Network error","NETWORK_ERROR",0))}),d.addEventListener("abort",()=>{m(new y("Request aborted","ABORTED",0))}),d.open("POST",e),d.send(s)})}async trackView(e){let a=this.buildUrl(`/f/${this.resourceId}/${e}/view`);await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:"{}"}).catch(()=>{})}getResourceId(){return this.resourceId}getBaseUrl(){return this.baseUrl}};var N=class{constructor(e,a,i={}){this.config=null;this.apiClient=e,this.slug=a,this.options=i}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,a){this.options.onSubmitStart?.();try{if(this.config?.mode==="schema"){let l=await this.validate(e);if(!l.valid)throw this.options.onValidationError?.(l.errors),new S(l.errors)}let i=await this.apiClient.submit(this.slug,e,a);return this.options.onSubmitSuccess?.(i),i}catch(i){throw i instanceof y&&this.options.onSubmitError?.(i),i}}getSuccessMessage(){return this.config?.settings?.successMessage||"Form submitted successfully!"}getRedirectUrl(){return this.config?.settings?.redirectUrl}},k=class{constructor(e){this.apiClient=new v(e)}async isActive(e,a){return this.apiClient.isActive(e,a)}async validate(e,a){return this.apiClient.validate(e,a)}async submit(e,a,i){return this.apiClient.submit(e,a,i)}form(e,a){return new N(this.apiClient,e,a)}async trackView(e){return this.apiClient.trackView(e)}async submitWithRetry(e,a,i){let l=i?.maxRetries??3,m=null;for(let s=0;s<l;s++)try{return await this.submit(e,a,i)}catch(n){if(m=n,n instanceof y){if(["VALIDATION_ERROR","CAPTCHA_REQUIRED","ORIGIN_NOT_ALLOWED"].includes(n.code))throw n;if(n.code.includes("RATE_LIMIT")){let d=n.retryAfter||Math.pow(2,s)*1e3;await new Promise(p=>setTimeout(p,d));continue}}await new Promise(d=>setTimeout(d,Math.pow(2,s)*1e3))}throw m}};var R=class{constructor(e,a){this.config=null;this.values={};this.errors={};this.isLoading=!1;this.isSubmitted=!1;this.styleEl=null;this.sdk=new k(e),this.options=a;let i=a.target;if(typeof i=="string"){let l=document.querySelector(i);if(!l)throw new Error(`Element not found: ${i}`);this.container=l}else this.container=i}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=L(e),document.head.appendChild(this.styleEl),this.injectGoogleFont(e?.fontFamily)}injectGoogleFont(e){if(!e)return;let a=["Inter","Roboto","Open Sans","Lato","Poppins","Montserrat","Nunito","Source Sans Pro","Raleway","Ubuntu","Playfair Display","Merriweather"],i=e.split(",")[0]?.trim();if(!i||!a.includes(i))return;let l=`forms-expert-font-${this.options.slug}`;if(document.getElementById(l))return;let m=document.createElement("link");m.id=l,m.rel="stylesheet",m.href=`https://fonts.googleapis.com/css2?family=${i.replace(/ /g,"+")}:wght@400;500;600;700&display=swap`,document.head.appendChild(m)}render(){if(!this.config?.schema)return;if(this.isSubmitted){this.container.innerHTML="";let l=this.config.settings?.successMessage||"Form submitted successfully!";this.container.appendChild(z(l));return}let e={...this.config.schema.styling,...this.config.styling},a={...this.config.schema,styling:e},i=P(a,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,buttonClassName:e.buttonClassName,formNameFontSize:e.formNameFontSize,formNameFontWeight:e.formNameFontWeight});i.addEventListener("input",l=>{let m=l.target;m.name&&m.name!=="_hp"&&m.name!=="pageUrl"&&(m.type==="checkbox"?this.values[m.name]=m.checked:m.type==="file"?this.values[m.name]=m.multiple?m.files:m.files?.[0]:this.values[m.name]=m.value,this.errors[m.name]&&(delete this.errors[m.name],this.render()))}),i.addEventListener("submit",l=>{l.preventDefault(),this.handleSubmit()}),this.container.innerHTML="",this.container.appendChild(i)}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 a=this.options.redirectUrl||this.config.settings?.redirectUrl;a&&setTimeout(()=>{window.location.href=a},1500),this.options.resetOnSuccess&&setTimeout(()=>{this.reset()},3e3)}catch(e){this.isLoading=!1,e instanceof S?(this.errors=I(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=`
344
345
  <div class="forms-expert" style="display: flex; align-items: center; justify-content: center; padding: 2rem;">
345
346
  <svg width="24" height="24" viewBox="0 0 24 24" style="animation: fe-spin 1s linear infinite; color: #9ca3af;">
346
347
  <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="3" fill="none" stroke-dasharray="31.4 31.4" stroke-linecap="round"/>
@@ -351,5 +352,5 @@ ${e.customCss||""}
351
352
  <div class="forms-expert" style="text-align: center; padding: 2rem; color: #ef4444;">
352
353
  <p>${e}</p>
353
354
  </div>
354
- `}destroy(){this.container.innerHTML="",this.styleEl?.remove(),this.styleEl=null}};function T(){document.querySelectorAll("[data-forms-expert]").forEach(e=>{let l=e.getAttribute("data-api-key"),s=e.getAttribute("data-resource-id"),m=e.getAttribute("data-forms-expert"),c=e.getAttribute("data-base-url")||void 0;if(!l||!s||!m){console.error("Forms Expert: Missing required attributes",{apiKey:!!l,resourceId:!!s,slug:!!m});return}new E({apiKey:l,resourceId:s,baseUrl:c},{target:e,slug:m,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());export{E as FormWidget,T as autoInit,R as errorsToRecord,F as generateFormStyles,j as renderField,$ as renderForm,N as renderSuccess};
355
+ `}destroy(){this.container.innerHTML="",this.styleEl?.remove(),this.styleEl=null}};function A(){document.querySelectorAll("[data-forms-expert]").forEach(e=>{let a=e.getAttribute("data-api-key"),i=e.getAttribute("data-resource-id"),l=e.getAttribute("data-forms-expert"),m=e.getAttribute("data-base-url")||void 0;if(!a||!i||!l){console.error("Forms Expert: Missing required attributes",{apiKey:!!a,resourceId:!!i,slug:!!l});return}new R({apiKey:a,resourceId:i,baseUrl:m},{target:e,slug:l,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",A):A());export{R as FormWidget,A as autoInit,I as errorsToRecord,L as generateFormStyles,$ as renderField,P as renderForm,z as renderSuccess};
355
356
  //# sourceMappingURL=index.js.map