UNPKG

@anushase/json-form-builder

Version:

A dynamic JSON form builder with multi-language support, validation, and responsive design

3 lines (2 loc) 37.5 kB
var e=function(){return e=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},e.apply(this,arguments)};function t(e,t,n,a){return new(n||(n=Promise))((function(r,i){function o(e){try{d(a.next(e))}catch(e){i(e)}}function l(e){try{d(a.throw(e))}catch(e){i(e)}}function d(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,l)}d((a=a.apply(e,t||[])).next())}))}function n(e,t){var n,a,r,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=l(0),o.throw=l(1),o.return=l(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(l){return function(d){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,l[0]&&(i=0)),i;)try{if(n=1,a&&(r=2&l[0]?a.return:l[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,l[1])).done)return r;switch(a=0,r&&(l=[2&l[0],r.value]),l[0]){case 0:case 1:r=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,a=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(r=i.trys,(r=r.length>0&&r[r.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!r||l[1]>r[0]&&l[1]<r[3])){i.label=l[1];break}if(6===l[0]&&i.label<r[1]){i.label=r[1],r=l;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(l);break}r[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],a=0}finally{n=r=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,d])}}}function a(e,t,n){if(n||2===arguments.length)for(var a,r=0,i=t.length;r<i;r++)!a&&r in t||(a||(a=Array.prototype.slice.call(t,0,r)),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}function r(t){for(var n=e({},t),a=0,r=Object.entries(t);a<r.length;a++){var i=r[a],o=i[0],l=i[1];n[l]||(n[l]=o)}return n}"function"==typeof SuppressedError&&SuppressedError;var i=function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","svg"),n=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("viewBox","0 0 22.634 17"),t.setAttribute("width","22.634"),t.setAttribute("height","17"),e?(n.setAttribute("id","visibility_off_FILL0_wght400_GRAD0_opsz48"),n.setAttribute("transform","translate(-40 863)"),n.setAttribute("d","M55.15-853.529l-1.132-1.132a2.552,2.552,0,0,0-.694-3.035,2.748,2.748,0,0,0-2.958-.617l-1.132-1.132a3.109,3.109,0,0,1,.977-.412,4.758,4.758,0,0,1,1.106-.129,4.218,4.218,0,0,1,3.1,1.273,4.218,4.218,0,0,1,1.273,3.1,4.5,4.5,0,0,1-.141,1.119A3.4,3.4,0,0,1,55.15-853.529Zm3.318,3.318-1.029-1.029a12.058,12.058,0,0,0,2.2-2.07,8.264,8.264,0,0,0,1.376-2.3,10.267,10.267,0,0,0-3.858-4.514,10.1,10.1,0,0,0-5.581-1.659,12.367,12.367,0,0,0-2.212.206,8.219,8.219,0,0,0-1.775.489L46.4-862.3a11.666,11.666,0,0,1,2.3-.72,12.727,12.727,0,0,1,2.739-.309,11.611,11.611,0,0,1,6.726,2.1,12.154,12.154,0,0,1,4.463,5.62,12.707,12.707,0,0,1-1.723,3.009A12.422,12.422,0,0,1,58.467-850.211Zm1.492,5.813-4.321-4.244a9.993,9.993,0,0,1-2.032.553,13.6,13.6,0,0,1-2.289.193,11.793,11.793,0,0,1-6.816-2.1,12.286,12.286,0,0,1-4.5-5.62,11.673,11.673,0,0,1,1.428-2.611,14.62,14.62,0,0,1,2.225-2.43l-3.241-3.241L41.492-865l19.471,19.471ZM44.707-859.573a9.469,9.469,0,0,0-1.839,1.826,8.465,8.465,0,0,0-1.273,2.135,10.3,10.3,0,0,0,3.948,4.514,10.991,10.991,0,0,0,5.98,1.659,13.487,13.487,0,0,0,1.672-.1,4,4,0,0,0,1.235-.309L52.783-851.5a2.693,2.693,0,0,1-.694.193,5.015,5.015,0,0,1-.772.064,4.253,4.253,0,0,1-3.086-1.26,4.185,4.185,0,0,1-1.286-3.112,4.686,4.686,0,0,1,.064-.772,3.15,3.15,0,0,1,.193-.694ZM52.552-855.921ZM49.568-854.429Z")):(n.setAttribute("id","visibility_FILL0_wght400_GRAD0_opsz48"),n.setAttribute("transform","translate(-40 800)"),n.setAttribute("d","M51.32-787.911a4.21,4.21,0,0,0,3.1-1.276,4.225,4.225,0,0,0,1.273-3.1,4.21,4.21,0,0,0-1.276-3.1,4.225,4.225,0,0,0-3.1-1.273,4.21,4.21,0,0,0-3.1,1.276,4.225,4.225,0,0,0-1.273,3.1,4.21,4.21,0,0,0,1.276,3.1A4.225,4.225,0,0,0,51.32-787.911Zm-.009-1.492a2.764,2.764,0,0,1-2.039-.842,2.794,2.794,0,0,1-.836-2.045,2.764,2.764,0,0,1,.842-2.039,2.794,2.794,0,0,1,2.045-.836,2.764,2.764,0,0,1,2.039.842,2.794,2.794,0,0,1,.836,2.045,2.764,2.764,0,0,1-.842,2.039A2.794,2.794,0,0,1,51.311-789.4Zm.006,4.836a11.528,11.528,0,0,1-6.79-2.135A13,13,0,0,1,40-792.284a13.006,13.006,0,0,1,4.527-5.582A11.529,11.529,0,0,1,51.317-800a11.529,11.529,0,0,1,6.79,2.135,13.006,13.006,0,0,1,4.527,5.582,13,13,0,0,1-4.527,5.581A11.528,11.528,0,0,1,51.317-784.568ZM51.317-792.284Zm0,6.173A10.351,10.351,0,0,0,57.04-787.8a10.932,10.932,0,0,0,3.974-4.488,10.943,10.943,0,0,0-3.97-4.488,10.33,10.33,0,0,0-5.723-1.685,10.351,10.351,0,0,0-5.727,1.685,11.116,11.116,0,0,0-4,4.488,11.127,11.127,0,0,0,4,4.488A10.33,10.33,0,0,0,51.313-786.111Z")),t.appendChild(n),t},o=function(e){var t=document.createElement("span");t.className="info-container";var n,a,r,i=document.createElement("span");i.className="info-icon",i.appendChild((n=document.createElementNS("http://www.w3.org/2000/svg","svg"),a=document.createElementNS("http://www.w3.org/2000/svg","g"),r=document.createElementNS("http://www.w3.org/2000/svg","path"),n.setAttribute("viewBox","0 0 18.5 18.5"),n.setAttribute("width","18.5"),n.setAttribute("height","18.5"),a.setAttribute("id","info_FILL0_wght400_GRAD0_opsz48"),a.setAttribute("transform","translate(0.25 0.25)"),r.setAttribute("id","info_FILL0_wght400_GRAD0_opsz48-2"),r.setAttribute("data-name","info_FILL0_wght400_GRAD0_opsz48"),r.setAttribute("transform","translate(-80 880)"),r.setAttribute("fill","#333"),r.setAttribute("stroke","#333"),r.setAttribute("stroke-width","0.5"),r.setAttribute("d","M88.393-866.5h1.35v-5.4h-1.35ZM89-873.565a.731.731,0,0,0,.529-.207.685.685,0,0,0,.214-.513.752.752,0,0,0-.213-.545.707.707,0,0,0-.529-.22.708.708,0,0,0-.529.22.751.751,0,0,0-.214.545.686.686,0,0,0,.213.513A.729.729,0,0,0,89-873.565ZM89.006-862a8.712,8.712,0,0,1-3.5-.709,9.145,9.145,0,0,1-2.863-1.935,9.14,9.14,0,0,1-1.935-2.865,8.728,8.728,0,0,1-.709-3.5,8.728,8.728,0,0,1,.709-3.5,9,9,0,0,1,1.935-2.854,9.237,9.237,0,0,1,2.865-1.924,8.728,8.728,0,0,1,3.5-.709,8.728,8.728,0,0,1,3.5.709,9.1,9.1,0,0,1,2.854,1.924,9.089,9.089,0,0,1,1.924,2.858,8.749,8.749,0,0,1,.709,3.5,8.712,8.712,0,0,1-.709,3.5,9.192,9.192,0,0,1-1.924,2.859,9.087,9.087,0,0,1-2.857,1.935A8.707,8.707,0,0,1,89.006-862Zm.005-1.35a7.348,7.348,0,0,0,5.411-2.239,7.4,7.4,0,0,0,2.228-5.422,7.374,7.374,0,0,0-2.223-5.411A7.376,7.376,0,0,0,89-878.65a7.4,7.4,0,0,0-5.411,2.223A7.357,7.357,0,0,0,81.35-871a7.372,7.372,0,0,0,2.239,5.411A7.385,7.385,0,0,0,89.011-863.35ZM89-871Z"),a.appendChild(r),n.appendChild(a),n));var o=document.createElement("div");o.className="info-detail",o.setAttribute("aria-hidden","true");var l=document.createElement("span");l.className="info-detail-arrow",l.innerHTML='<svg class="fill-[#FFFFFF] stroke-[#BCBCBC]" width="10" height="5" viewBox="0 0 30 10" preserveAspectRatio="none" style="display: block;"><polygon points="0,0 30,0 15,10"></polygon></svg>';var d=function(){o.classList.remove("active"),o.setAttribute("aria-hidden","true")};return i.addEventListener("click",(function(e){e.stopPropagation();var t=o.classList.contains("active");document.querySelectorAll(".info-detail.active").forEach((function(e){e.classList.remove("active"),e.setAttribute("aria-hidden","true")})),t||(o.classList.add("active"),o.setAttribute("aria-hidden","false"))})),document.addEventListener("click",(function(e){!document.contains(e.target)&&o.classList.contains("active")&&d()})),document.addEventListener("keydown",(function(e){"Escape"===e.key&&o.classList.contains("active")&&d()})),o.append(e,l),i.appendChild(o),t.appendChild(i),t},l=function(e){e.preventDefault()},d=function(e){e.classList.add("disabled"),e.disabled=!0,e.addEventListener("keypress",l),e.addEventListener("keydown",l),e.addEventListener("cut",l),e.addEventListener("paste",l),e.addEventListener("click",l)},c=function(e,t,n,a,r){if(void 0===n&&(n=!1),a||(a=e.languageMap[e.currentLanguage]||e.currentLanguage),r||(r=e.languageMap[e.defaultLanguage]||e.defaultLanguage),!t||void 0===e.languageMap[a])return"";for(var i=0,o=[a,e.languageMap[a],r,e.languageMap[r]].filter((function(e){return"string"==typeof e}));i<o.length;i++){var l=o[i];if(l in t)return t[l]}return n?"":Object.values(t)[0]||""},s=function(e,t,n){var a=e.currentLanguage,r=e.defaultLanguage,i=n||t.label,o=c(e,i,!1,a,r);return t.required&&(o+='<span class="required">*</span>'),o},u=function(e){e.container.querySelectorAll("input, select").forEach((function(e){e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}))},p=function(t,n,a,r){var i,l,d,p=n||t.languageMap[n];if(t.currentLanguage=p,t.isRTL=t.rtlLanguages.includes(p),t.container.dir=t.isRTL?"rtl":"ltr",t.container.style.direction=t.isRTL?"rtl":"ltr",t.isSubmitting=!1,r&&(t.additionalSchema=r),!1!==(null===(i=t.recaptcha)||void 0===i?void 0:i.enabled)&&(null===(l=t.recaptcha)||void 0===l?void 0:l.siteKey)&&window.grecaptcha){var f=document.getElementById("recaptcha-container");if(f){var m=f.getAttribute("data-widget-id");if(m)try{window.grecaptcha.reset(Number(m));var v=document.createElement("div");v.id="recaptcha-container",v.className="recaptcha-container",null===(d=f.parentNode)||void 0===d||d.replaceChild(v,f);var h=window.grecaptcha.render(v,{sitekey:t.recaptcha.siteKey,callback:function(e){t.formData.recaptchaToken=e},"expired-callback":function(){delete t.formData.recaptchaToken}});v.setAttribute("data-widget-id",h.toString())}catch(e){console.error("Failed to update reCAPTCHA language:",e)}}}a&&(t.submitLabel=a),function(t){var n=t.currentLanguage,a=t.defaultLanguage;t.schema.forEach((function(r){var i,l,d,u=s(t,r);if("simpleType"===r.type){var p=null===(i=t.container.querySelector('.form-field-group input[data-field-id="'.concat(r.id,'"]')))||void 0===i?void 0:i.closest(".form-field-group"),f=null==p?void 0:p.querySelector("label");if(f&&(f.innerHTML=u,r.info)){var m=o(c(t,r.info));f.appendChild(m)}t.container.querySelectorAll('input[data-field-id="'.concat(r.id,'"]')).forEach((function(e){var i=e.dataset.lang||n;e.placeholder=c(t,r.placeholder,!1,i,a)}))}else{var v=t.container.querySelector('label[for="'.concat(r.id,'"]'));v&&(v.innerHTML=u,r.info)&&(m=o(c(t,r.info)),v.appendChild(m));var h=t.container.querySelector("input#".concat(r.id));if(h&&(h.placeholder=c(t,r.placeholder,!1,n,a)),"password"===r.controlType){var g="".concat(r.id,"_confirm"),b={},w={};t.additionalSchema&&t.additionalSchema[g]?(b=t.additionalSchema[g].label,w=t.additionalSchema[g].placeholder):(Object.keys(r.label||{}).forEach((function(e){var n=t.languageMap[e]||e;b[n]="Confirm ".concat(r.label[e])})),Object.keys(r.placeholder||{}).forEach((function(e){var n=t.languageMap[e]||e;r.placeholder&&(w[n]="Confirm ".concat(r.placeholder[e]))})));var y=t.container.querySelector('label[for="'.concat(r.id,'_confirm"]'));y&&(y.innerHTML=s(e(e({},t),{schema:[e(e({},r),{label:b})]}),e(e({},r),{label:b}),b));var E=t.container.querySelector("input#".concat(r.id,"_confirm"));E&&(E.placeholder=c(t,w)||"")}}if("dropdown"===r.controlType){var C=t.container.querySelector("select#".concat(r.id));if(C){var x=C.value;C.innerHTML="";var L=document.createElement("option");L.value="",L.textContent=c(t,r.placeholder,!1,n,a)||"Select an Option",L.disabled=!0,L.selected=!0,L.hidden=!0,C.appendChild(L),Object.entries(t.allowedValues[r.id]||{}).forEach((function(e){var r=e[0],i=e[1],o=document.createElement("option");o.value=r,o.textContent=c(t,i,!1,n,a),o.selected=r===x,C.appendChild(o)}))}}var A=t.container.querySelector('.form-field[data-field-id="'.concat(r.id,'"] .error-container'));t.lastErrors||(t.lastErrors={});var k=null;if(r.required){var S=t.container.querySelector('input[data-field-id="'.concat(r.id,'"]'));if(S&&!S.value.trim())k="required";else if(Array.isArray(r.validators)&&S)for(var T=0;T<r.validators.length;T++)if(!(q=new RegExp((null===(l=r.validators[T])||void 0===l?void 0:l.regex)||"")).test(S.value)){k=T;break}}if(t.lastErrors[r.id]=k,A&&null!=k){var M="";if("required"===k){var _=(null===(d=t.fallbackErrors)||void 0===d?void 0:d.required)||{};M=c(t,_)||"Invalid value"}else if("number"==typeof k&&Array.isArray(r.validators)){var q;(q=r.validators[k])&&q.error&&(M=c(t,q.error)||"Invalid value")}A.textContent=M}else A&&(A.textContent="")}));var r=t.container.querySelector('button[type="submit"]');r&&(r.textContent=t.submitLabel)}(t),u(t)},f=function(e,t,n,a){var r;void 0===n&&(n=""),void 0===a&&(a="");var i=(null===(r=e.fallbackErrors)||void 0===r?void 0:r.required)||{},o=c(e,i,!0,n,a)||"This field is required";return g(t,o),{lastError:"required",isValid:!1}},m=function(e,t,n,a,r,i,o){void 0===i&&(i=""),void 0===o&&(o="");var l=function(e,t){return 3===e.length?e:t[e]||e};i||(i=e.languageMap[e.currentLanguage]||e.currentLanguage),o||(o=e.languageMap[e.defaultLanguage]||e.defaultLanguage);for(var d=l(i,e.languageMap),s=r?n.filter((function(t){return!t.langCode||l(t.langCode,e.languageMap)===d})):n,u=0;u<s.length;u++){var p=s[u],f=new RegExp(p.regex||p.validator);if(f&&!f.test(a)){var m=c(e,p.error,!0,i,o)||"Invalid input";return g(t,m),{lastError:u,isValid:!1}}}return{lastError:null,isValid:!0}},v=function(e,i,o){var l,d,c,s,f,m,v=document.getElementById(i)||document.querySelector("#".concat(i));if(!v)throw new Error('Container with id "'.concat(i,'" not found'));var h,g={schema:e.schema,allowedValues:e.allowedValues||{},mandatoryLanguages:e.language.mandatory||["eng"],optionalLanguages:e.language.optional||[],container:v,formData:{},formElements:{},submitLabel:o.submitButton.label,submitAction:o.submitButton.action,currentLanguage:(null===(l=o.language)||void 0===l?void 0:l.currentLanguage)||"eng",defaultLanguage:(null===(d=o.language)||void 0===d?void 0:d.defaultLanguage)||"eng",showLanguageSwitcher:(null===(c=o.language)||void 0===c?void 0:c.showLanguageSwitcher)||!1,languageSwitcherPosition:(null===(s=o.language)||void 0===s?void 0:s.languageSwitcherPosition)||"top",availableLanguages:(null===(f=o.language)||void 0===f?void 0:f.availableLanguages)||a(a([],e.language.mandatory||["eng"],!0),e.language.optional||[],!0),rtlLanguages:(null===(m=o.language)||void 0===m?void 0:m.rtlLanguages)||["ara","ar","he","fa","ur"],isRTL:!1,recaptcha:o.recaptcha,fallbackErrors:e.errors||{},lastErrors:{},languageMap:r(e.language.langCodeMap||{}),additionalSchema:o.additionalSchema||{},isSubmitting:!1};h=g.currentLanguage,g.isRTL=g.rtlLanguages.includes(h),g.container.setAttribute("dir",g.isRTL?"rtl":"ltr"),g.container.style.direction=g.isRTL?"rtl":"ltr";var E=function(e){var t,n,a,r,i=document.createElement("form");if(i.className="form",e.showLanguageSwitcher){var o=function(e){var t=document.createElement("div");t.className="language-switcher";var n=document.createElement("label");n.textContent="Language: ";var a=document.createElement("select");return e.availableLanguages.forEach((function(t){var n=document.createElement("option");n.value=t,n.textContent=t.toUpperCase(),n.selected=t===e.currentLanguage,a.appendChild(n)})),a.addEventListener("change",(function(t){var n=t.target;p(e,n.value)})),t.appendChild(n),t.appendChild(a),t}(e);i.appendChild(o)}var l=w(e);(Object.entries(l).forEach((function(t){t[0];var n=t[1],a=document.createElement("div");a.className="form-group",a.style.display="flex",a.style.flexDirection="row",n.forEach((function(t){var n=b(e,t);a.appendChild(n)})),i.appendChild(a)})),!1!==(null===(t=e.recaptcha)||void 0===t?void 0:t.enabled)&&(null===(n=e.recaptcha)||void 0===n?void 0:n.siteKey))&&((d=document.createElement("div")).id="recaptcha-container",d.className="recaptcha-container",i.appendChild(d));var d,c=document.createElement("button");if(c.type="submit",c.className="form-button",c.textContent=e.submitLabel,i.appendChild(c),i.addEventListener("submit",(function(t){t.preventDefault(),C(e)})),e.container.innerHTML="",e.container.appendChild(i),!1!==(null===(a=e.recaptcha)||void 0===a?void 0:a.enabled)&&(null===(r=e.recaptcha)||void 0===r?void 0:r.siteKey))if((d=document.getElementById("recaptcha-container"))&&window.grecaptcha&&"function"==typeof window.grecaptcha.render)try{var s=window.grecaptcha.render(d,{sitekey:e.recaptcha.siteKey,callback:function(t){e.formData.recaptchaToken=t},"expired-callback":function(){delete e.formData.recaptchaToken}});d.setAttribute("data-widget-id",s.toString())}catch(t){console.error("Failed to initialize reCAPTCHA:",t),e.recaptcha.enabled=!1}else console.warn("reCAPTCHA not available or not properly initialized"),e.recaptcha.enabled=!1},C=function(e){var t,n;if(!e.isSubmitting){var a=e.container.querySelector("form");if(a){var r=a.querySelector('button[type="submit"]');if(r){r.innerHTML="",r.appendChild(function(){var e=document.createElement("div");e.className="flex justify-center items-center h-full";var t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.classList.add("mr-2","h-8","w-8","animate-spin","fill-secondary","text-primary","rtl:ml-2","dark:text-gray-600"),t.setAttribute("viewBox","0 0 100 101"),t.setAttribute("fill","none"),t.setAttribute("aria-hidden","true");var n=document.createElementNS("http://www.w3.org/2000/svg","path");n.setAttribute("d","M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z"),n.setAttribute("fill","currentColor");var a=document.createElementNS("http://www.w3.org/2000/svg","path");return a.setAttribute("d","M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z"),a.setAttribute("fill","currentFill"),t.appendChild(n),t.appendChild(a),e.appendChild(t),e}()),e.isSubmitting=!0;var i=!0;if(u(e),!1!==(null===(t=e.recaptcha)||void 0===t?void 0:t.enabled)&&(null===(n=e.recaptcha)||void 0===n?void 0:n.siteKey)){var o=document.getElementById("recaptcha-container");if(o&&window.grecaptcha&&"function"==typeof window.grecaptcha.getResponse){var l=o.getAttribute("data-widget-id");if(l)try{if(!window.grecaptcha.getResponse(Number(l))){i=!1;var d=document.createElement("div");d.className="error-message",d.textContent="Please complete the reCAPTCHA",o.appendChild(d)}}catch(e){console.error("Failed to validate reCAPTCHA:",e),i=!1}}}if(i){a.querySelectorAll("input").forEach((function(t){var n=t,a=n.dataset.fieldId,r=n.dataset.lang;if(a&&r){var i=e.languageMap[r];i&&3===i.length&&(e.formData[a]||(e.formData[a]={}),n.value&&(e.formData[a][i]=n.value))}else n.id&&n.value&&(e.formData[n.id]=n.value)}));var c=y(e);"function"==typeof e.submitAction?e.submitAction(c):(e.isSubmitting=!1,r.innerHTML=e.submitLabel,console.log("Form data:",c))}else e.isSubmitting=!1,r.innerHTML=e.submitLabel,a.reportValidity()}}}};return Object.freeze({render:function(){return t(void 0,void 0,void 0,(function(){return n(this,(function(e){switch(e.label){case 0:return(a=document.createElement("style")).textContent="\n .form-group {\n display: flex;\n flex-wrap: wrap;\n gap: 1rem;\n margin-bottom: 0rem;\n }\n\n .form-field {\n flex: 1;\n min-width: 250px;\n margin-bottom: 0.5rem;\n }\n\n .form-field label,\n .form-field-group label {\n font-size: 14px;\n line-height: 16px;\n font-weight: 600;\n }\n \n .form-field .input_box::placeholder,\n .form-field .input_box::-moz-placeholder,\n .form-field .input_box:-ms-input-placeholder,\n .form-field .input_box::-webkit-input-placeholder,\n .form-field input[type=\"date\"]::-webkit-datetime-edit-text,\n .form-field select option:first-child {\n color: #a0a8ac;\n font: 500 14px/21px Inter,sans-serif;\n }\n\n .form-field .input_box.error {\n border-color: #fe6b6b;\n }\n\n .form-field .input_box.error:focus-visible,\n .form-field .input_box.error:focus,\n .form-field .input_box.error:focus-within {\n border-color: #fe6b6b !important;\n }\n\n .form-field-group {\n flex: 1;\n min-width: 250px;\n margin-bottom: 0.5rem;\n }\n\n .input_box {\n width: 100%;\n padding: 0.75rem;\n border: 1px solid #ccc;\n border-radius: 4px;\n font-size: 0.9rem;\n }\n\n .language-switcher label {\n display: flex;\n align-items: center;\n font-size: 0.9rem;\n }\n\n .recaptcha-container {\n margin: 1rem 0;\n display: flex;\n justify-content: center;\n }\n \n .password-container {\n position: relative;\n }\n\n .password-eye-icon {\n position: absolute;\n right: 0.75rem; /* Position from the right edge of the input */\n transform: translateY(120%); /* Adjust for perfect vertical centering */\n cursor: pointer;\n color: #6B7280; /* A neutral gray color */\n font-size: 1.25rem; /* Adjust icon size */\n line-height: 1; /* Ensure icon doesn't affect line height */\n user-select: none;\n }\n\n .checkbox-container {\n display: flex; /* Use flexbox to align checkbox and label */\n gap: 1rem; /* Space between checkbox and label (Tailwind gap-2) */\n align-items: center; /* Vertically center the checkbox and label */\n }\n\n .checkbox-container input[type=\"checkbox\"] {\n width: 1.25rem; /* Tailwind w-5 */\n height: 1.25rem; /* Tailwind h-5 */\n border: 1px solid #d1d5db; /* Tailwind border-gray-300 */\n border-radius: 2px; /* Tailwind rounded */\n cursor: pointer;\n flex-shrink: 0; /* Prevent checkbox from shrinking */\n }\n\n .checkbox-container label {\n font-size: 14px; /* Tailwind text-base */\n font-weight: 500; /* Tailwind font-medium */\n line-height: 1; /* Tailwind leading-relaxed */\n color: #1f2937; /* Tailwind text-gray-900 */\n cursor: pointer;\n user-select: none; /* Prevent text selection when clicking label */\n }\n\n /* Info Icon Styling */\n .info-container {\n position: relative; /* Allows info-detail to be positioned relative to this */\n display: inline-block; /* So it doesn't take full width */\n vertical-align: middle; /* Align with text */\n margin-left: 5px;\n }\n\n .info-icon {\n cursor: pointer;\n font-weight: bold;\n display: inline-flex; /* For centering the 'i' */\n align-items: center;\n justify-content: center;\n vertical-align: text-top;\n height: 1rem;\n width: 1rem;\n }\n\n\n /* Info Detail Box Styling */\n .info-detail {\n font-size: 12px;\n line-height: 16px;\n font-weight: 400;\n display: none; /* Hidden by default */\n position: absolute;\n top: 100%; /* Position below the icon */\n left: 50%; /* Center horizontally relative to icon */\n transform: translate(10%, -60%); /* Adjust to true center */\n min-width: 250px;\n max-width: 350px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 8px;\n padding: 8px 12px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000; /* Ensure it's above other content */\n opacity: 0; /* For fade in/out effect */\n visibility: hidden; /* For proper hiding without taking up space */\n transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out;\n }\n\n .info-detail-arrow {\n position: absolute;\n left: 0px;\n transform-origin: 0px 0px;\n transform: translateY(50%) rotate(90deg) translateX(-50%);\n top: 50%;\n }\n \n @media screen and (max-width: 640px) {\n .info-detail {\n transform: translate(-40%, 5%); /* Adjust for smaller screens */\n }\n\n .info-detail-arrow {\n transform-origin: center 0px;\n transform: rotate(180deg);\n left: 94px;\n top: 0px;\n }\n }\n\n .info-detail.active {\n display: block; /* Show when active */\n opacity: 1;\n visibility: visible;\n }\n ",document.head.appendChild(a),function(){var e=document.createElement("style");e.textContent='\n [dir="rtl"] .form-group {\n flex-direction: row-reverse;\n }\n\n [dir="rtl"] .form-field-group {\n flex-direction: column-reverse;\n }\n\n [dir="rtl"] .language-switcher {\n justify-content: flex-start;\n }\n\n [dir="rtl"] .required {\n margin-left: 0;\n margin-right: 4px;\n }\n\n [dir="rtl"] .error-message {\n text-align: right;\n }\n\n [dir="rtl"] .form-field label {\n text-align: right;\n }\n\n [dir="rtl"] .input_box {\n text-align: right;\n }\n\n [dir="rtl"] .form-button {\n margin-right: auto;\n margin-left: 0;\n }\n\n @media (max-width: 768px) {\n [dir="rtl"] .form-group {\n flex-direction: column;\n }\n }\n\n [dir="rtl"] .password-eye-icon {\n left: 0.75rem;\n right: unset;\n }\n\n [dir="rtl"] .checkbox-container {\n flex-direction: row-reverse; /* Align checkbox and label in RTL */\n }\n ',document.head.appendChild(e)}(),g.showLanguageSwitcher&&function(){var e=document.createElement("style");e.textContent="\n .language-switcher {\n display: flex;\n gap: 0.5rem;\n margin: 1rem 0;\n justify-content: flex-end;\n }\n\n .language-switcher select {\n padding: 0.5rem;\n border: 1px solid #ccc;\n border-radius: 4px;\n font-size: 0.9rem;\n }\n\n .language-switcher label {\n display: flex;\n align-items: center;\n font-size: 0.9rem;\n }\n ",document.head.appendChild(e)}(),[4,t(void 0,void 0,void 0,(function(){var e,t;return n(this,(function(n){switch(n.label){case 0:return!1!==(null===(e=g.recaptcha)||void 0===e?void 0:e.enabled)&&(null===(t=g.recaptcha)||void 0===t?void 0:t.siteKey)?[4,new Promise((function(e){var t;if(window.grecaptcha)e(!0);else if(document.querySelector('script[src*="recaptcha/api.js"]')){var n=function(){window.grecaptcha&&"function"==typeof window.grecaptcha.render?e(!0):setTimeout(n,100)};n()}else{var a=document.createElement("script");a.src="https://www.google.com/recaptcha/api.js?hl=".concat((null===(t=g.recaptcha)||void 0===t?void 0:t.language)||g.currentLanguage),a.async=!0,a.defer=!0,a.onload=function(){var t=function(){window.grecaptcha&&"function"==typeof window.grecaptcha.render?e(!0):setTimeout(t,100)};t()},a.onerror=function(){console.error("Failed to load reCAPTCHA script"),e(!1)},document.head.appendChild(a)}}))]:[3,2];case 1:n.sent()||(console.error("Failed to initialize reCAPTCHA"),g.recaptcha.enabled=!1),n.label=2;case 2:return[2]}}))}))];case 1:return e.sent(),E(g),[2]}var a}))}))},getFormData:function(){return y(g)},updateLanguage:function(e,t,n){return p(g,e,t,n)}})},h=function(){var e=document.createElement("div");return e.className="error-message",e},g=function(e,t,n){if(e.innerHTML="",t){var a=document.createElement("img");a.src="/images/error_icon.svg",a.className="error-icon",a.onload=function(){a.alt="error-icon",a.style.display="inline"},a.onerror=function(){a.style.display="none"},a.style.display="none";var r=document.createElement("span");r.textContent=t,r.className="error-text",e.appendChild(a),e.appendChild(r)}},b=function(e,t){var n=t.type||"string";switch(t.controlType){case"textbox":return"simpleType"===n?function(e,t){var n,a=document.createElement("div");a.className="form-field-group ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var r=document.createElement("label");if(r.innerHTML=s(e,t),t.info){var i=o(c(e,t.info));r.appendChild(i)}a.appendChild(r),e.formData[t.id]||(e.formData[t.id]={});var l=Object.keys(t.label||{}),d=function(e,t){return 3===e.length?e:t[e]||e},u=(e.mandatoryLanguages||[]).map((function(t){return d(t,e.languageMap)}));return l.forEach((function(n){var r=d(n,e.languageMap),i=document.createElement("div");i.className="form-field lang-".concat(n);var o=document.createElement("input");o.className="input_box",o.type="text",o.id="".concat(t.id,"_").concat(n),o.name="".concat(t.id,"_").concat(n),o.dataset.lang=n,o.dataset.fieldId=t.id,o.placeholder=c(e,t.placeholder,!1,r,e.defaultLanguage);var l=h();i.appendChild(o),i.appendChild(l),a.appendChild(i);var s=function(){var a=!0,i=null,c=o.value.trim(),s=r,p=d(e.languageMap[e.defaultLanguage]||e.defaultLanguage,e.languageMap);if(l.innerHTML="",u.includes(s)&&t.required&&!c)i=(v=f(e,l)).lastError,a=v.isValid;else if(c&&a&&Array.isArray(t.validators)){var v;i=(v=m(e,l,t.validators,c,!0,s,p)).lastError,a=v.isValid}e.formData[t.id][r]=o.value,e.lastErrors=e.lastErrors||{},e.lastErrors["".concat(t.id,"_").concat(n)]=i,o.setCustomValidity(a?"":"Invalid input"),o.classList.toggle("error",!a)};o.addEventListener("input",s),o.addEventListener("change",s)})),a}(e,t):function(e,t){var n,a=document.createElement("div");a.className="form-field ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var r=document.createElement("label");if(r.innerHTML=s(e,t),r.htmlFor=t.id,t.info){var i=o(c(e,t.info));r.appendChild(i)}a.appendChild(r);var l=document.createElement("input");l.className="input_box",l.type="text",l.id=t.id,l.name=t.id,l.required=Boolean(t.required),l.dataset.fieldId=t.id,l.value=e.allowedValues[t.id]||"",l.placeholder=c(e,t.placeholder),t.disabled&&d(l);var u=h();return l.addEventListener("input",(function(){var n=!0,a=null;g(u,"");var r=l.value.trim();if(t.required&&!r)a=(i=f(e,u)).lastError,n=i.isValid;else if(r&&Array.isArray(t.validators)){var i;a=(i=m(e,u,t.validators,r,!1)).lastError,n=i.isValid}e.lastErrors=e.lastErrors||{},e.lastErrors[t.id]=a,l.setCustomValidity(n?"":"Invalid input"),l.classList.toggle("error",!n)})),l.addEventListener("change",(function(n){var a=n.target;e.formData[t.id]=a.value,l.dispatchEvent(new Event("input"))})),a.appendChild(l),a.appendChild(u),a}(e,t);case"password":return function(e,t){var n,a=document.createElement("div");a.className="form-field password-container ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var r=document.createElement("label");if(r.innerHTML=s(e,t),r.htmlFor=t.id,t.info){var l=o(c(e,t.info));r.appendChild(l)}a.appendChild(r);var d=document.createElement("input");d.className="input_box password-input",d.type="password",d.id=t.id,d.name=t.id,d.required=Boolean(t.required),d.dataset.fieldId=t.id,d.placeholder=c(e,t.placeholder);var u=document.createElement("span");u.id="".concat(t.id,"_eye"),u.className="password-eye-icon";var p=i(!1);u.appendChild(p),u.addEventListener("click",(function(){u.innerHTML="","password"===d.type?(d.type="text",u.appendChild(i(!0))):(d.type="password",u.appendChild(i(!1)))}));var v=h();d.addEventListener("input",(function(){var n=!0,a=null;g(v,"");var r=d.value.trim();if(t.required&&!r)a=(i=f(e,v)).lastError,n=i.isValid;else if(r&&Array.isArray(t.validators)){var i;a=(i=m(e,v,t.validators,r,!1)).lastError,n=i.isValid}e.lastErrors=e.lastErrors||{},e.lastErrors[t.id]=a,d.setCustomValidity(n?"":"Invalid input"),d.classList.toggle("error",!n),S()})),d.addEventListener("change",(function(n){var a=n.target;e.formData[t.id]=a.value,d.dispatchEvent(new Event("input"))})),a.appendChild(d),a.appendChild(u),a.appendChild(v);var b="".concat(t.id,"_confirm"),w=document.createElement("div");w.className="form-field password-container";var y={},E={};e.additionalSchema&&e.additionalSchema[b]?(y=e.additionalSchema[b].label,E=e.additionalSchema[b].placeholder):(Object.keys(t.label).forEach((function(e){y[e]="Confirm ".concat(t.label[e])})),Object.keys(t.placeholder||{}).forEach((function(e){void 0!==t.placeholder&&(E[e]="Confirm ".concat(t.placeholder[e]))})));var C=document.createElement("label");C.htmlFor=b,C.innerHTML=s(e,t,y),w.appendChild(C);var x=document.createElement("input");x.className="input_box",x.type="password",x.id=b,x.name=b,x.required=Boolean(t.required),x.placeholder=c(e,E);var L=document.createElement("span");L.id="".concat(t.id,"_confirm_eye"),L.className="password-eye-icon";var A=i(!1);L.appendChild(A),L.addEventListener("click",(function(){L.innerHTML="","password"===x.type?(x.type="text",L.appendChild(i(!0))):(x.type="password",L.appendChild(i(!1)))}));var k=h(),S=function(){var t;if(g(k,""),x.value!==d.value){var n=(null===(t=e.fallbackErrors)||void 0===t?void 0:t.passwordMismatch)||{},a=c(e,n,!0)||"Passwords do not match";g(k,a),x.setCustomValidity(a),x.classList.add("error")}else x.setCustomValidity(""),x.classList.remove("error")};x.addEventListener("input",S),x.addEventListener("change",(function(n){var a=n.target;e.formData["".concat(t.id,"_confirm")]=a.value,x.dispatchEvent(new Event("input"))})),w.appendChild(x),w.appendChild(L),w.appendChild(k);var T=document.createElement("div");return T.className="form-field-group",T.appendChild(a),T.appendChild(w),T}(e,t);case"date":return function(e,t){var n,a=document.createElement("div");a.className="form-field ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var r=document.createElement("label");if(r.innerHTML=s(e,t),r.htmlFor=t.id,t.info){var i=o(c(e,t.info));r.appendChild(i)}a.appendChild(r);var l=document.createElement("input");l.className="input_box",l.type="date",l.id=t.id,l.name=t.id,l.required=Boolean(t.required),l.dataset.fieldId=t.id,l.placeholder=c(e,t.placeholder);var d=h();return l.addEventListener("input",(function(){var n=!0,a=null;if(g(d,""),t.required&&!l.value){var r=f(e,d);a=r.lastError,n=r.isValid}e.lastErrors=e.lastErrors||{},e.lastErrors[t.id]=a,l.setCustomValidity(n?"":"Invalid input"),l.classList.toggle("error",!n)})),l.addEventListener("change",(function(n){var a=n.target;e.formData[t.id]=a.value,l.dispatchEvent(new Event("input"))})),a.appendChild(l),a.appendChild(d),a}(e,t);case"dropdown":return function(e,t){var n,a=document.createElement("div");a.className="form-field ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var r=document.createElement("label");if(r.innerHTML=s(e,t),r.htmlFor=t.id,t.info){var i=o(c(e,t.info));r.appendChild(i)}a.appendChild(r);var l=document.createElement("select");l.className="input_box select-input",l.id=t.id,l.name=t.id,l.required=Boolean(t.required),l.dataset.fieldId=t.id;var d=document.createElement("option");d.className="select-placeholder",d.value="",d.textContent=c(e,t.placeholder)||"Select an Option",d.disabled=!0,d.selected=!0,d.hidden=!0,l.appendChild(d),Object.entries(e.allowedValues[t.id]||{}).forEach((function(t){var n=t[0],a=t[1],r=document.createElement("option");r.value=n,r.textContent=c(e,a),l.appendChild(r)}));var u=h(),p=function(){var n=!0,a=null;if(g(u,""),t.required&&!l.value){var r=f(e,u);a=r.lastError,n=r.isValid}e.lastErrors=e.lastErrors||{},e.lastErrors[t.id]=a,l.setCustomValidity(n?"":"Invalid input"),l.classList.toggle("error",!n)};return l.addEventListener("change",(function(n){var a=n.target;e.formData[t.id]=a.value,l.style.color=a.value?"black":"",p()})),l.addEventListener("input",p),a.appendChild(l),a.appendChild(u),a}(e,t);case"checkbox":return function(e,t){var n,a,r=document.createElement("div");r.className="form-field checkbox-container ".concat((null===(n=t.cssClasses)||void 0===n?void 0:n.join(" "))||"");var i=document.createElement("label");i.htmlFor=t.id,i.innerHTML=s(e,t);var o=document.createElement("input");o.type="checkbox",o.id=t.id,o.className="checkbox-input",o.name=t.id,o.required=Boolean(t.required),o.dataset.fieldId=t.id,o.checked=Boolean((null===(a=e.allowedValues)||void 0===a?void 0:a[t.id])||!1),t.disabled&&d(o);var l=h();r.appendChild(o),r.appendChild(i),o.addEventListener("change",(function(){var n=!0,a=null;if(g(l,""),t.required&&!this.checked){var r=f(e,l);a=r.lastError,n=r.isValid}e.lastErrors=e.lastErrors||{},e.lastErrors[t.id]=a,o.setCustomValidity(n?"":"Invalid input"),o.classList.toggle("error",!n)}));var c=document.createElement("div");return c.className="form-field-group",c.appendChild(r),c.appendChild(l),c}(e,t);default:throw new Error("Unsupported control type: ".concat(t.controlType))}},w=function(e){return e.schema.reduce((function(e,t){var n=t.alignmentGroup||"solo_".concat(t.id);return e[n]=e[n]||[],e[n].push(t),e}),{})},y=function(t){return e({},t.formData)};export{v as JsonFormBuilder}; //# sourceMappingURL=JsonFormBuilder.esm.js.map